pi-kot 0.1.21 → 0.1.23

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 (348) hide show
  1. package/bin/pi-kot.mjs +148 -0
  2. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  5. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  11. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  17. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  20. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  23. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  26. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  29. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  32. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  35. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  44. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  47. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  50. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  53. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  55. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  58. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  61. package/dist/client/assets/index-CE_Na97I.js +75 -0
  62. package/dist/client/assets/index-CE_Na97I.js.map +1 -0
  63. package/dist/client/assets/index-QP95zkpd.css +1 -0
  64. package/dist/client/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  65. package/dist/client/assets/vendor-codemirror-CD3uCqRj.js +48 -0
  66. package/dist/client/assets/vendor-codemirror-CD3uCqRj.js.map +1 -0
  67. package/dist/client/assets/vendor-icons-W8thHNMl.js +2 -0
  68. package/dist/client/assets/vendor-icons-W8thHNMl.js.map +1 -0
  69. package/dist/client/assets/vendor-katex-4z5K3dyr.js +260 -0
  70. package/dist/client/assets/vendor-katex-4z5K3dyr.js.map +1 -0
  71. package/dist/client/assets/vendor-katex-CYlHEDRF.css +1 -0
  72. package/dist/client/assets/vendor-markdown-BSzxNR_7.js +35 -0
  73. package/dist/client/assets/vendor-markdown-BSzxNR_7.js.map +1 -0
  74. package/dist/client/assets/vendor-prism-CQGp13s2.js +4 -0
  75. package/dist/client/assets/vendor-prism-CQGp13s2.js.map +1 -0
  76. package/dist/client/assets/vendor-xterm-BrP-ENHg.css +1 -0
  77. package/dist/client/assets/vendor-xterm-DXwh06H3.js +36 -0
  78. package/dist/client/assets/vendor-xterm-DXwh06H3.js.map +1 -0
  79. package/dist/client/index.html +23 -0
  80. package/dist/server/ask-user-question/envelope.d.ts +11 -0
  81. package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
  82. package/dist/server/ask-user-question/envelope.js +41 -0
  83. package/dist/server/ask-user-question/envelope.js.map +1 -0
  84. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts +26 -0
  85. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts.map +1 -0
  86. package/dist/server/ask-user-question/plan-mode-question-tool.js +273 -0
  87. package/dist/server/ask-user-question/plan-mode-question-tool.js.map +1 -0
  88. package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
  89. package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  90. package/dist/server/ask-user-question/prompt-strings.js +18 -0
  91. package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
  92. package/dist/server/ask-user-question/registry.d.ts +39 -0
  93. package/dist/server/ask-user-question/registry.d.ts.map +1 -0
  94. package/dist/server/ask-user-question/registry.js +124 -0
  95. package/dist/server/ask-user-question/registry.js.map +1 -0
  96. package/dist/server/ask-user-question/tool.d.ts +4 -0
  97. package/dist/server/ask-user-question/tool.d.ts.map +1 -0
  98. package/dist/server/ask-user-question/tool.js +68 -0
  99. package/dist/server/ask-user-question/tool.js.map +1 -0
  100. package/dist/server/ask-user-question/types.d.ts +50 -0
  101. package/dist/server/ask-user-question/types.d.ts.map +1 -0
  102. package/dist/server/ask-user-question/types.js +7 -0
  103. package/dist/server/ask-user-question/types.js.map +1 -0
  104. package/dist/server/ask-user-question/validate.d.ts +3 -0
  105. package/dist/server/ask-user-question/validate.d.ts.map +1 -0
  106. package/dist/server/ask-user-question/validate.js +67 -0
  107. package/dist/server/ask-user-question/validate.js.map +1 -0
  108. package/dist/server/clone-provider.d.ts +55 -0
  109. package/dist/server/clone-provider.d.ts.map +1 -0
  110. package/dist/server/clone-provider.js +172 -0
  111. package/dist/server/clone-provider.js.map +1 -0
  112. package/dist/server/compaction-cards.d.ts +62 -0
  113. package/dist/server/compaction-cards.d.ts.map +1 -0
  114. package/dist/server/compaction-cards.js +180 -0
  115. package/dist/server/compaction-cards.js.map +1 -0
  116. package/dist/server/compaction-continuation.d.ts +112 -0
  117. package/dist/server/compaction-continuation.d.ts.map +1 -0
  118. package/dist/server/compaction-continuation.js +65 -0
  119. package/dist/server/compaction-continuation.js.map +1 -0
  120. package/dist/server/config-store.d.ts +97 -0
  121. package/dist/server/config-store.d.ts.map +1 -0
  122. package/dist/server/config-store.js +351 -0
  123. package/dist/server/config-store.js.map +1 -0
  124. package/dist/server/config.d.ts +24 -0
  125. package/dist/server/config.d.ts.map +1 -0
  126. package/dist/server/config.js +67 -0
  127. package/dist/server/config.js.map +1 -0
  128. package/dist/server/event-stream.d.ts +28 -0
  129. package/dist/server/event-stream.d.ts.map +1 -0
  130. package/dist/server/event-stream.js +153 -0
  131. package/dist/server/event-stream.js.map +1 -0
  132. package/dist/server/extension-manager.d.ts +116 -0
  133. package/dist/server/extension-manager.d.ts.map +1 -0
  134. package/dist/server/extension-manager.js +586 -0
  135. package/dist/server/extension-manager.js.map +1 -0
  136. package/dist/server/extension-scanner.d.ts +26 -0
  137. package/dist/server/extension-scanner.d.ts.map +1 -0
  138. package/dist/server/extension-scanner.js +107 -0
  139. package/dist/server/extension-scanner.js.map +1 -0
  140. package/dist/server/extension-ui-bridge.d.ts +35 -0
  141. package/dist/server/extension-ui-bridge.d.ts.map +1 -0
  142. package/dist/server/extension-ui-bridge.js +228 -0
  143. package/dist/server/extension-ui-bridge.js.map +1 -0
  144. package/dist/server/file-manager.d.ts +79 -0
  145. package/dist/server/file-manager.d.ts.map +1 -0
  146. package/dist/server/file-manager.js +535 -0
  147. package/dist/server/file-manager.js.map +1 -0
  148. package/dist/server/file-searcher.d.ts +29 -0
  149. package/dist/server/file-searcher.d.ts.map +1 -0
  150. package/dist/server/file-searcher.js +318 -0
  151. package/dist/server/file-searcher.js.map +1 -0
  152. package/dist/server/git-operations.d.ts +346 -0
  153. package/dist/server/git-operations.d.ts.map +1 -0
  154. package/dist/server/git-operations.js +884 -0
  155. package/dist/server/git-operations.js.map +1 -0
  156. package/dist/server/hunk-stager.d.ts +56 -0
  157. package/dist/server/hunk-stager.d.ts.map +1 -0
  158. package/dist/server/hunk-stager.js +137 -0
  159. package/dist/server/hunk-stager.js.map +1 -0
  160. package/dist/server/index.d.ts +21 -0
  161. package/dist/server/index.d.ts.map +1 -0
  162. package/dist/server/index.js +262 -0
  163. package/dist/server/index.js.map +1 -0
  164. package/dist/server/mcp/config.d.ts +23 -0
  165. package/dist/server/mcp/config.d.ts.map +1 -0
  166. package/dist/server/mcp/config.js +139 -0
  167. package/dist/server/mcp/config.js.map +1 -0
  168. package/dist/server/mcp/manager.d.ts +40 -0
  169. package/dist/server/mcp/manager.d.ts.map +1 -0
  170. package/dist/server/mcp/manager.js +435 -0
  171. package/dist/server/mcp/manager.js.map +1 -0
  172. package/dist/server/mcp/stdio-trust.d.ts +5 -0
  173. package/dist/server/mcp/stdio-trust.d.ts.map +1 -0
  174. package/dist/server/mcp/stdio-trust.js +78 -0
  175. package/dist/server/mcp/stdio-trust.js.map +1 -0
  176. package/dist/server/mcp/tool-bridge.d.ts +33 -0
  177. package/dist/server/mcp/tool-bridge.d.ts.map +1 -0
  178. package/dist/server/mcp/tool-bridge.js +138 -0
  179. package/dist/server/mcp/tool-bridge.js.map +1 -0
  180. package/dist/server/orchestration/config.d.ts +5 -0
  181. package/dist/server/orchestration/config.d.ts.map +1 -0
  182. package/dist/server/orchestration/config.js +35 -0
  183. package/dist/server/orchestration/config.js.map +1 -0
  184. package/dist/server/orchestration/event-bridge.d.ts +32 -0
  185. package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
  186. package/dist/server/orchestration/event-bridge.js +110 -0
  187. package/dist/server/orchestration/event-bridge.js.map +1 -0
  188. package/dist/server/orchestration/inbox.d.ts +9 -0
  189. package/dist/server/orchestration/inbox.d.ts.map +1 -0
  190. package/dist/server/orchestration/inbox.js +186 -0
  191. package/dist/server/orchestration/inbox.js.map +1 -0
  192. package/dist/server/orchestration/init.d.ts +2 -0
  193. package/dist/server/orchestration/init.d.ts.map +1 -0
  194. package/dist/server/orchestration/init.js +22 -0
  195. package/dist/server/orchestration/init.js.map +1 -0
  196. package/dist/server/orchestration/store.d.ts +33 -0
  197. package/dist/server/orchestration/store.d.ts.map +1 -0
  198. package/dist/server/orchestration/store.js +331 -0
  199. package/dist/server/orchestration/store.js.map +1 -0
  200. package/dist/server/orchestration/tools.d.ts +15 -0
  201. package/dist/server/orchestration/tools.d.ts.map +1 -0
  202. package/dist/server/orchestration/tools.js +621 -0
  203. package/dist/server/orchestration/tools.js.map +1 -0
  204. package/dist/server/orchestration/types.d.ts +68 -0
  205. package/dist/server/orchestration/types.d.ts.map +1 -0
  206. package/dist/server/orchestration/types.js +43 -0
  207. package/dist/server/orchestration/types.js.map +1 -0
  208. package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
  209. package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  210. package/dist/server/orchestration/worker-lifecycle.js +45 -0
  211. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  212. package/dist/server/path-refs.d.ts +5 -0
  213. package/dist/server/path-refs.d.ts.map +1 -0
  214. package/dist/server/path-refs.js +249 -0
  215. package/dist/server/path-refs.js.map +1 -0
  216. package/dist/server/routes/_schemas.d.ts +16 -0
  217. package/dist/server/routes/_schemas.d.ts.map +1 -0
  218. package/dist/server/routes/_schemas.js +12 -0
  219. package/dist/server/routes/_schemas.js.map +1 -0
  220. package/dist/server/routes/ask-user-question.d.ts +3 -0
  221. package/dist/server/routes/ask-user-question.d.ts.map +1 -0
  222. package/dist/server/routes/ask-user-question.js +105 -0
  223. package/dist/server/routes/ask-user-question.js.map +1 -0
  224. package/dist/server/routes/auth.d.ts +8 -0
  225. package/dist/server/routes/auth.d.ts.map +1 -0
  226. package/dist/server/routes/auth.js +225 -0
  227. package/dist/server/routes/auth.js.map +1 -0
  228. package/dist/server/routes/config.d.ts +3 -0
  229. package/dist/server/routes/config.d.ts.map +1 -0
  230. package/dist/server/routes/config.js +602 -0
  231. package/dist/server/routes/config.js.map +1 -0
  232. package/dist/server/routes/control.d.ts +3 -0
  233. package/dist/server/routes/control.d.ts.map +1 -0
  234. package/dist/server/routes/control.js +365 -0
  235. package/dist/server/routes/control.js.map +1 -0
  236. package/dist/server/routes/exec.d.ts +3 -0
  237. package/dist/server/routes/exec.d.ts.map +1 -0
  238. package/dist/server/routes/exec.js +426 -0
  239. package/dist/server/routes/exec.js.map +1 -0
  240. package/dist/server/routes/extension-commands.d.ts +22 -0
  241. package/dist/server/routes/extension-commands.d.ts.map +1 -0
  242. package/dist/server/routes/extension-commands.js +178 -0
  243. package/dist/server/routes/extension-commands.js.map +1 -0
  244. package/dist/server/routes/extensions.d.ts +8 -0
  245. package/dist/server/routes/extensions.d.ts.map +1 -0
  246. package/dist/server/routes/extensions.js +414 -0
  247. package/dist/server/routes/extensions.js.map +1 -0
  248. package/dist/server/routes/files.d.ts +3 -0
  249. package/dist/server/routes/files.d.ts.map +1 -0
  250. package/dist/server/routes/files.js +835 -0
  251. package/dist/server/routes/files.js.map +1 -0
  252. package/dist/server/routes/git.d.ts +3 -0
  253. package/dist/server/routes/git.d.ts.map +1 -0
  254. package/dist/server/routes/git.js +1058 -0
  255. package/dist/server/routes/git.js.map +1 -0
  256. package/dist/server/routes/mcp.d.ts +3 -0
  257. package/dist/server/routes/mcp.d.ts.map +1 -0
  258. package/dist/server/routes/mcp.js +403 -0
  259. package/dist/server/routes/mcp.js.map +1 -0
  260. package/dist/server/routes/orchestration.d.ts +3 -0
  261. package/dist/server/routes/orchestration.d.ts.map +1 -0
  262. package/dist/server/routes/orchestration.js +251 -0
  263. package/dist/server/routes/orchestration.js.map +1 -0
  264. package/dist/server/routes/projects.d.ts +3 -0
  265. package/dist/server/routes/projects.d.ts.map +1 -0
  266. package/dist/server/routes/projects.js +421 -0
  267. package/dist/server/routes/projects.js.map +1 -0
  268. package/dist/server/routes/prompt.d.ts +3 -0
  269. package/dist/server/routes/prompt.d.ts.map +1 -0
  270. package/dist/server/routes/prompt.js +311 -0
  271. package/dist/server/routes/prompt.js.map +1 -0
  272. package/dist/server/routes/session-extensions.d.ts +11 -0
  273. package/dist/server/routes/session-extensions.d.ts.map +1 -0
  274. package/dist/server/routes/session-extensions.js +171 -0
  275. package/dist/server/routes/session-extensions.js.map +1 -0
  276. package/dist/server/routes/sessions.d.ts +3 -0
  277. package/dist/server/routes/sessions.d.ts.map +1 -0
  278. package/dist/server/routes/sessions.js +706 -0
  279. package/dist/server/routes/sessions.js.map +1 -0
  280. package/dist/server/routes/skills.d.ts +14 -0
  281. package/dist/server/routes/skills.d.ts.map +1 -0
  282. package/dist/server/routes/skills.js +448 -0
  283. package/dist/server/routes/skills.js.map +1 -0
  284. package/dist/server/routes/stream.d.ts +3 -0
  285. package/dist/server/routes/stream.d.ts.map +1 -0
  286. package/dist/server/routes/stream.js +112 -0
  287. package/dist/server/routes/stream.js.map +1 -0
  288. package/dist/server/routes/terminal.d.ts +28 -0
  289. package/dist/server/routes/terminal.d.ts.map +1 -0
  290. package/dist/server/routes/terminal.js +211 -0
  291. package/dist/server/routes/terminal.js.map +1 -0
  292. package/dist/server/routes/tunnel.d.ts +13 -0
  293. package/dist/server/routes/tunnel.d.ts.map +1 -0
  294. package/dist/server/routes/tunnel.js +231 -0
  295. package/dist/server/routes/tunnel.js.map +1 -0
  296. package/dist/server/session-alerts.d.ts +28 -0
  297. package/dist/server/session-alerts.d.ts.map +1 -0
  298. package/dist/server/session-alerts.js +38 -0
  299. package/dist/server/session-alerts.js.map +1 -0
  300. package/dist/server/session-store.d.ts +164 -0
  301. package/dist/server/session-store.d.ts.map +1 -0
  302. package/dist/server/session-store.js +754 -0
  303. package/dist/server/session-store.js.map +1 -0
  304. package/dist/server/skill-policy.d.ts +47 -0
  305. package/dist/server/skill-policy.d.ts.map +1 -0
  306. package/dist/server/skill-policy.js +178 -0
  307. package/dist/server/skill-policy.js.map +1 -0
  308. package/dist/server/terminal-provider.d.ts +54 -0
  309. package/dist/server/terminal-provider.d.ts.map +1 -0
  310. package/dist/server/terminal-provider.js +220 -0
  311. package/dist/server/terminal-provider.js.map +1 -0
  312. package/dist/server/tool-policy.d.ts +39 -0
  313. package/dist/server/tool-policy.d.ts.map +1 -0
  314. package/dist/server/tool-policy.js +121 -0
  315. package/dist/server/tool-policy.js.map +1 -0
  316. package/dist/server/tunnel/executable-search.d.ts +43 -0
  317. package/dist/server/tunnel/executable-search.d.ts.map +1 -0
  318. package/dist/server/tunnel/executable-search.js +148 -0
  319. package/dist/server/tunnel/executable-search.js.map +1 -0
  320. package/dist/server/tunnel/install-help.d.ts +19 -0
  321. package/dist/server/tunnel/install-help.d.ts.map +1 -0
  322. package/dist/server/tunnel/install-help.js +47 -0
  323. package/dist/server/tunnel/install-help.js.map +1 -0
  324. package/dist/server/tunnel/providers/ngrok.d.ts +31 -0
  325. package/dist/server/tunnel/providers/ngrok.d.ts.map +1 -0
  326. package/dist/server/tunnel/providers/ngrok.js +461 -0
  327. package/dist/server/tunnel/providers/ngrok.js.map +1 -0
  328. package/dist/server/tunnel/registry.d.ts +13 -0
  329. package/dist/server/tunnel/registry.d.ts.map +1 -0
  330. package/dist/server/tunnel/registry.js +56 -0
  331. package/dist/server/tunnel/registry.js.map +1 -0
  332. package/dist/server/tunnel/service.d.ts +13 -0
  333. package/dist/server/tunnel/service.d.ts.map +1 -0
  334. package/dist/server/tunnel/service.js +156 -0
  335. package/dist/server/tunnel/service.js.map +1 -0
  336. package/dist/server/tunnel/types.d.ts +163 -0
  337. package/dist/server/tunnel/types.d.ts.map +1 -0
  338. package/dist/server/tunnel/types.js +214 -0
  339. package/dist/server/tunnel/types.js.map +1 -0
  340. package/dist/server/ui-settings-store.d.ts +25 -0
  341. package/dist/server/ui-settings-store.d.ts.map +1 -0
  342. package/dist/server/ui-settings-store.js +91 -0
  343. package/dist/server/ui-settings-store.js.map +1 -0
  344. package/dist/server/workspace-store.d.ts +25 -0
  345. package/dist/server/workspace-store.d.ts.map +1 -0
  346. package/dist/server/workspace-store.js +157 -0
  347. package/dist/server/workspace-store.js.map +1 -0
  348. package/package.json +5 -3
@@ -0,0 +1,318 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { readFile, readdir, stat } from "node:fs/promises";
3
+ import { join, relative, resolve } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { MAX_READ_BYTES, SEARCH_SKIP_DIRS } from "./file-manager.js";
6
+ const execFileAsync = promisify(execFile);
7
+ let cachedRipgrepAvailable;
8
+ export async function ripgrepAvailable() {
9
+ if (cachedRipgrepAvailable !== undefined)
10
+ return cachedRipgrepAvailable;
11
+ try {
12
+ await execFileAsync("rg", ["--version"], { timeout: 2_000 });
13
+ cachedRipgrepAvailable = true;
14
+ }
15
+ catch {
16
+ cachedRipgrepAvailable = false;
17
+ }
18
+ return cachedRipgrepAvailable;
19
+ }
20
+ export function _resetRipgrepCache() {
21
+ cachedRipgrepAvailable = undefined;
22
+ }
23
+ export class SearchEngineUnavailableError extends Error {
24
+ constructor(msg) {
25
+ super(msg);
26
+ this.name = "SearchEngineUnavailableError";
27
+ }
28
+ }
29
+ export async function searchFiles(projectPath, opts) {
30
+ if (await ripgrepAvailable()) {
31
+ return searchWithRipgrep(projectPath, opts);
32
+ }
33
+ if (opts.regex) {
34
+ throw new SearchEngineUnavailableError("regex search requires ripgrep, which isn't installed on this host");
35
+ }
36
+ return searchInProcess(projectPath, opts);
37
+ }
38
+ async function searchWithRipgrep(projectPath, opts) {
39
+ const args = [
40
+ "--json",
41
+ "--no-heading",
42
+ "--max-filesize",
43
+ "5M",
44
+ "--max-count",
45
+ String(Math.max(1, Math.min(opts.limit, 1000))),
46
+ ];
47
+ if (!opts.regex)
48
+ args.push("--fixed-strings");
49
+ if (!opts.caseSensitive)
50
+ args.push("-i");
51
+ if (opts.includeGitignored) {
52
+ args.push("-uu");
53
+ }
54
+ if (opts.include !== undefined && opts.include.length > 0) {
55
+ args.push("--glob", opts.include);
56
+ }
57
+ if (opts.exclude !== undefined && opts.exclude.length > 0) {
58
+ args.push("--glob", `!${opts.exclude}`);
59
+ }
60
+ args.push("--", opts.query, ".");
61
+ return new Promise((resolveFn) => {
62
+ const matches = [];
63
+ let truncated = false;
64
+ const child = spawn("rg", args, { cwd: projectPath });
65
+ const timer = setTimeout(() => {
66
+ truncated = true;
67
+ child.kill("SIGTERM");
68
+ }, opts.timeoutMs);
69
+ let buf = "";
70
+ let currentFile;
71
+ const finish = () => {
72
+ clearTimeout(timer);
73
+ resolveFn({ engine: "ripgrep", matches, truncated });
74
+ };
75
+ child.stdout.setEncoding("utf8");
76
+ child.stdout.on("data", (chunk) => {
77
+ buf += chunk;
78
+ let nl = buf.indexOf("\n");
79
+ while (nl !== -1) {
80
+ const line = buf.slice(0, nl);
81
+ buf = buf.slice(nl + 1);
82
+ if (line.length > 0)
83
+ handleEvent(line);
84
+ nl = buf.indexOf("\n");
85
+ }
86
+ });
87
+ child.on("error", () => finish());
88
+ child.on("close", () => finish());
89
+ const handleEvent = (jsonLine) => {
90
+ let event;
91
+ try {
92
+ event = JSON.parse(jsonLine);
93
+ }
94
+ catch {
95
+ return;
96
+ }
97
+ if (event.type === "begin") {
98
+ const data = event.data;
99
+ currentFile = data?.path?.text;
100
+ }
101
+ else if (event.type === "match") {
102
+ if (matches.length >= opts.limit) {
103
+ truncated = true;
104
+ child.kill("SIGTERM");
105
+ return;
106
+ }
107
+ const data = event.data;
108
+ if (data === undefined || currentFile === undefined)
109
+ return;
110
+ const lineText = data.lines?.text ?? "";
111
+ const lineNumber = data.line_number ?? 0;
112
+ const sub = data.submatches?.[0];
113
+ const start = sub?.start ?? 0;
114
+ const matchText = sub?.match?.text ?? "";
115
+ matches.push({
116
+ path: currentFile,
117
+ line: lineNumber,
118
+ column: start + 1,
119
+ length: matchText.length,
120
+ lineSnippet: stripTrailingNewline(lineText),
121
+ });
122
+ }
123
+ };
124
+ });
125
+ }
126
+ async function searchInProcess(projectPath, opts) {
127
+ const matches = [];
128
+ let truncated = false;
129
+ const deadline = Date.now() + opts.timeoutMs;
130
+ const re = opts.regex ? safeRegex(opts.query, opts.caseSensitive) : undefined;
131
+ if (opts.regex && re === undefined) {
132
+ return { engine: "node", matches: [], truncated: false };
133
+ }
134
+ const includeMatch = opts.include !== undefined ? globToRegExp(opts.include) : undefined;
135
+ const excludeMatch = opts.exclude !== undefined ? globToRegExp(opts.exclude) : undefined;
136
+ const root = resolve(projectPath);
137
+ const stack = [root];
138
+ const filesToScan = [];
139
+ while (stack.length > 0 && Date.now() < deadline) {
140
+ const dir = stack.pop();
141
+ if (dir === undefined)
142
+ break;
143
+ const depth = relative(root, dir)
144
+ .split(/[\\/]/)
145
+ .filter((p) => p.length > 0).length;
146
+ if (depth > 6)
147
+ continue;
148
+ let entries;
149
+ try {
150
+ entries = await readdir(dir, { withFileTypes: true });
151
+ }
152
+ catch {
153
+ continue;
154
+ }
155
+ for (const ent of entries) {
156
+ const full = join(dir, ent.name);
157
+ if (ent.isDirectory()) {
158
+ if (SEARCH_SKIP_DIRS.has(ent.name))
159
+ continue;
160
+ if (ent.name.startsWith(".") && ent.name !== ".")
161
+ continue;
162
+ stack.push(full);
163
+ }
164
+ else if (ent.isFile()) {
165
+ const rel = relative(root, full);
166
+ if (includeMatch !== undefined && !includeMatch.test(rel))
167
+ continue;
168
+ if (excludeMatch !== undefined && excludeMatch.test(rel))
169
+ continue;
170
+ filesToScan.push(rel);
171
+ }
172
+ }
173
+ }
174
+ if (Date.now() >= deadline)
175
+ truncated = true;
176
+ const CONCURRENCY = 16;
177
+ let cursor = 0;
178
+ const worker = async () => {
179
+ while (cursor < filesToScan.length) {
180
+ if (Date.now() >= deadline) {
181
+ truncated = true;
182
+ return;
183
+ }
184
+ if (matches.length >= opts.limit) {
185
+ truncated = true;
186
+ return;
187
+ }
188
+ const i = cursor++;
189
+ const rel = filesToScan[i];
190
+ if (rel === undefined)
191
+ continue;
192
+ const full = join(root, rel);
193
+ let st;
194
+ try {
195
+ st = await stat(full);
196
+ }
197
+ catch {
198
+ continue;
199
+ }
200
+ if (!st.isFile() || st.size > MAX_READ_BYTES)
201
+ continue;
202
+ let content;
203
+ try {
204
+ const buf = await readFile(full);
205
+ if (looksBinary(buf))
206
+ continue;
207
+ content = buf.toString("utf8");
208
+ }
209
+ catch {
210
+ continue;
211
+ }
212
+ scanText(content, rel, opts, re, matches, opts.limit);
213
+ }
214
+ };
215
+ const workers = [];
216
+ for (let w = 0; w < Math.min(CONCURRENCY, filesToScan.length); w++) {
217
+ workers.push(worker());
218
+ }
219
+ await Promise.all(workers);
220
+ if (matches.length >= opts.limit)
221
+ truncated = true;
222
+ return { engine: "node", matches, truncated };
223
+ }
224
+ function scanText(content, rel, opts, re, out, limit) {
225
+ const lines = content.split("\n");
226
+ const cmpQuery = opts.caseSensitive ? opts.query : opts.query.toLowerCase();
227
+ for (let i = 0; i < lines.length; i++) {
228
+ if (out.length >= limit)
229
+ return;
230
+ const line = lines[i] ?? "";
231
+ if (re !== undefined) {
232
+ re.lastIndex = 0;
233
+ let m;
234
+ while ((m = re.exec(line)) !== null) {
235
+ out.push({
236
+ path: rel,
237
+ line: i + 1,
238
+ column: m.index + 1,
239
+ length: m[0].length,
240
+ lineSnippet: line,
241
+ });
242
+ if (out.length >= limit)
243
+ return;
244
+ if (m.index === re.lastIndex)
245
+ re.lastIndex += 1;
246
+ }
247
+ }
248
+ else {
249
+ const haystack = opts.caseSensitive ? line : line.toLowerCase();
250
+ let from = 0;
251
+ while (from <= haystack.length) {
252
+ const idx = haystack.indexOf(cmpQuery, from);
253
+ if (idx === -1)
254
+ break;
255
+ out.push({
256
+ path: rel,
257
+ line: i + 1,
258
+ column: idx + 1,
259
+ length: opts.query.length,
260
+ lineSnippet: line,
261
+ });
262
+ if (out.length >= limit)
263
+ return;
264
+ from = idx + Math.max(1, opts.query.length);
265
+ }
266
+ }
267
+ }
268
+ }
269
+ function looksBinary(buf) {
270
+ const probe = buf.subarray(0, Math.min(4096, buf.length));
271
+ for (let i = 0; i < probe.length; i++) {
272
+ if (probe[i] === 0)
273
+ return true;
274
+ }
275
+ return false;
276
+ }
277
+ function safeRegex(pattern, caseSensitive) {
278
+ try {
279
+ return new RegExp(pattern, caseSensitive ? "g" : "gi");
280
+ }
281
+ catch {
282
+ return undefined;
283
+ }
284
+ }
285
+ function stripTrailingNewline(s) {
286
+ if (s.endsWith("\r\n"))
287
+ return s.slice(0, -2);
288
+ if (s.endsWith("\n"))
289
+ return s.slice(0, -1);
290
+ return s;
291
+ }
292
+ function globToRegExp(glob) {
293
+ let out = "^";
294
+ for (let i = 0; i < glob.length; i++) {
295
+ const c = glob[i] ?? "";
296
+ if (c === "*") {
297
+ if (glob[i + 1] === "*") {
298
+ out += ".*";
299
+ i++;
300
+ }
301
+ else {
302
+ out += "[^/]*";
303
+ }
304
+ }
305
+ else if (c === "?") {
306
+ out += "[^/]";
307
+ }
308
+ else if (".+^$()[]{}|\\".includes(c)) {
309
+ out += "\\" + c;
310
+ }
311
+ else {
312
+ out += c;
313
+ }
314
+ }
315
+ out += "$";
316
+ return new RegExp(out);
317
+ }
318
+ //# sourceMappingURL=file-searcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-searcher.js","sourceRoot":"","sources":["../src/file-searcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ export declare class GitNotInstalledError extends Error {
2
+ constructor();
3
+ }
4
+ export type GitCommandErrorCode = "git_failed" | "git_auth_required";
5
+ export declare class GitCommandError extends Error {
6
+ readonly exitCode: number | null;
7
+ /** Stable route error code for user-actionable git failures. */
8
+ readonly errorCode: GitCommandErrorCode;
9
+ /** Sanitized first line of stderr — safe to surface to the user. */
10
+ readonly userMessage: string;
11
+ constructor(exitCode: number | null, userMessage: string, fullMessage: string, errorCode?: GitCommandErrorCode);
12
+ }
13
+ /**
14
+ * Status flag combinations exposed to the client. We map git's
15
+ * porcelain v1 two-character XY codes into a coarser bucket so the
16
+ * UI can render badges without a full git literacy quiz.
17
+ */
18
+ export type FileStatusKind = "modified" | "added" | "deleted" | "renamed" | "copied" | "untracked" | "ignored" | "conflicted" | "unknown";
19
+ export interface FileStatusEntry {
20
+ /** Path relative to the project root. */
21
+ path: string;
22
+ /** True when the change is in the index (XY's first char != ' ' or '?'). */
23
+ staged: boolean;
24
+ /** True when the working-tree differs from the index (XY's second char != ' '). */
25
+ unstaged: boolean;
26
+ /** Coarse classification driven by the dominant XY char. */
27
+ kind: FileStatusKind;
28
+ /** Two-char porcelain code, returned verbatim for advanced UI. */
29
+ code: string;
30
+ /** For renames/copies, the original path (porcelain "<orig> -> <new>"). */
31
+ originalPath?: string;
32
+ }
33
+ export interface StatusResult {
34
+ isGitRepo: boolean;
35
+ branch: string | undefined;
36
+ files: FileStatusEntry[];
37
+ }
38
+ export interface LogEntry {
39
+ hash: string;
40
+ message: string;
41
+ author: string;
42
+ date: string;
43
+ /** Parent commit hashes — empty for the root commit, two for merges. */
44
+ parents: string[];
45
+ /**
46
+ * Ref decorations git would print with `%D` — branch tips, tags, and
47
+ * the magic "HEAD -> main" indicator that tells you which ref is
48
+ * currently checked out. The renderer uses these to badge the
49
+ * commit row with branch / tag pills.
50
+ */
51
+ refs: string[];
52
+ }
53
+ export interface CommitFileEntry {
54
+ path: string;
55
+ /**
56
+ * Git change type: A(dded), M(odified), D(eleted), R(enamed),
57
+ * C(opied), T(ype changed), U(nmerged), X(unknown).
58
+ */
59
+ changeType: "A" | "M" | "D" | "R" | "C" | "T" | "U" | "X";
60
+ }
61
+ /**
62
+ * List files changed in a specific commit.
63
+ * Uses `git diff-tree --no-commit-id -r --name-status <hash>`
64
+ * which works for root commits (diffs against empty tree) and
65
+ * normal commits. For merge commits it shows a combined diff
66
+ * (files that differ from both parents).
67
+ */
68
+ export declare function getCommitFiles(cwd: string, hash: string): Promise<CommitFileEntry[]>;
69
+ /**
70
+ * Get the unified diff for a single file as it was changed in a specific commit.
71
+ * Uses `git diff-tree --no-commit-id -p -r <hash> -- <path>`.
72
+ * Works for root commits and merge commits (combined diff).
73
+ */
74
+ export declare function getCommitFileDiff(cwd: string, hash: string, path: string): Promise<string>;
75
+ export interface BranchEntry {
76
+ name: string;
77
+ current: boolean;
78
+ remote: boolean;
79
+ }
80
+ export interface BranchesResult {
81
+ isGitRepo: boolean;
82
+ current: string | undefined;
83
+ branches: BranchEntry[];
84
+ }
85
+ export interface WorktreeEntry {
86
+ path: string;
87
+ head: string | undefined;
88
+ branch: string | undefined;
89
+ bare: boolean;
90
+ detached: boolean;
91
+ current: boolean;
92
+ }
93
+ export interface WorktreesResult {
94
+ isGitRepo: boolean;
95
+ worktrees: WorktreeEntry[];
96
+ }
97
+ /**
98
+ * Permissive runner for callers that need a custom maxBuffer or
99
+ * non-typed-error semantics. Returns the raw stdout/stderr/exitCode
100
+ * tuple WITHOUT mapping non-zero exit codes to GitCommandError —
101
+ * callers handle exit codes themselves. Inherits the same env
102
+ * scrubbing as `runGit`.
103
+ *
104
+ * Currently used by `turn-diff-builder.ts` which wants `git diff` to
105
+ * succeed even when the path is untracked (exit 0 with empty output)
106
+ * and accepts a 16 MB diff buffer.
107
+ */
108
+ export declare function runGitRaw(cwd: string, args: string[], opts?: {
109
+ maxBuffer?: number;
110
+ }): Promise<{
111
+ stdout: string;
112
+ stderr: string;
113
+ }>;
114
+ /**
115
+ * Initialize a fresh git repo at `cwd` with `main` as the initial
116
+ * branch. `git init -b main` requires git ≥ 2.28; below that the
117
+ * `--initial-branch` flag is unrecognized and we fall back to a
118
+ * plain `git init` — caller can still rename to main on the first
119
+ * commit if desired. Idempotent: if `cwd` is already a repo, this
120
+ * resolves without changing anything (git's own `init` is a no-op
121
+ * on an existing repo).
122
+ */
123
+ export declare function initRepo(cwd: string): Promise<void>;
124
+ /**
125
+ * True iff `cwd` is inside a git working tree. Cheap probe used by
126
+ * every public function so "not a repo" can return the empty default
127
+ * rather than throw. Exported so route helpers (e.g. for the diff
128
+ * endpoints' `isGitRepo` flag) don't have to re-implement it.
129
+ */
130
+ export declare function isGitRepo(cwd: string): Promise<boolean>;
131
+ export declare function getStatus(cwd: string): Promise<StatusResult>;
132
+ /**
133
+ * Diff variants share the same shape (raw unified text + a
134
+ * "isGitRepo" flag the route can use to decide between 200 empty and
135
+ * 200 with content). Empty repo / non-repo → empty string.
136
+ */
137
+ /**
138
+ * Diff result that includes the `isGitRepo` flag the route returns
139
+ * verbatim. Wrapping the flag here means a single `isGitRepo` probe
140
+ * inside the runner — the route doesn't need to call `isGitRepo`
141
+ * a second time after the runner returned an empty diff.
142
+ */
143
+ export interface DiffResult {
144
+ isGitRepo: boolean;
145
+ diff: string;
146
+ }
147
+ export declare function getDiff(cwd: string): Promise<DiffResult>;
148
+ export declare function getStagedDiff(cwd: string): Promise<DiffResult>;
149
+ export declare function getFileDiff(cwd: string, path: string, staged: boolean): Promise<DiffResult>;
150
+ export interface LogResult {
151
+ isGitRepo: boolean;
152
+ commits: LogEntry[];
153
+ }
154
+ export declare function getLog(cwd: string, limit?: number): Promise<LogResult>;
155
+ export interface RemoteEntry {
156
+ name: string;
157
+ /** Fetch URL (the more meaningful of the two for users). */
158
+ fetchUrl: string;
159
+ /** Push URL — usually identical to fetch, but git allows configuring them
160
+ * separately (e.g. read-only mirror + write-through fork). Surfaced
161
+ * alongside fetch so the UI can flag the divergence when present. */
162
+ pushUrl: string;
163
+ /** True when this repo has local URL-scoped SSL verification disabled for the remote URL. */
164
+ insecureTls: boolean;
165
+ }
166
+ /**
167
+ * `git remote -v` output is two lines per remote (one (fetch), one (push)),
168
+ * tab-delimited:
169
+ *
170
+ * origin\thttps://github.com/foo/bar.git (fetch)
171
+ * origin\thttps://github.com/foo/bar.git (push)
172
+ *
173
+ * We parse both forms into a single entry per remote so the UI doesn't
174
+ * render duplicates. Empty array for non-git or no-remotes-configured.
175
+ */
176
+ export interface RemotesResult {
177
+ isGitRepo: boolean;
178
+ remotes: RemoteEntry[];
179
+ }
180
+ export declare function getRemotes(cwd: string): Promise<RemotesResult>;
181
+ /**
182
+ * Add a remote. Same name validator as branch creation reused via
183
+ * `assertRemoteName`. The URL is passed verbatim to git as a
184
+ * positional arg; `execFile` (no shell) means there's no command-
185
+ * injection surface even if the URL contains spaces or shell
186
+ * metachars. Common shapes: `https://github.com/foo/bar.git`,
187
+ * `git@github.com:foo/bar.git`, `file:///abs/path`.
188
+ */
189
+ export declare function addRemote(cwd: string, name: string, url: string, opts?: {
190
+ insecureTls?: boolean;
191
+ }): Promise<void>;
192
+ export declare function setRemoteInsecureTls(cwd: string, name: string, enabled: boolean): Promise<void>;
193
+ /**
194
+ * Remove a remote. Idempotent at the route layer — git emits
195
+ * "fatal: No such remote" if the name is unknown, which surfaces as
196
+ * the existing 400 git_failed; the route layer can choose to map
197
+ * that to 404 if needed.
198
+ */
199
+ export declare function removeRemote(cwd: string, name: string): Promise<void>;
200
+ export declare function getWorktrees(cwd: string): Promise<WorktreesResult>;
201
+ export declare function getBranches(cwd: string): Promise<BranchesResult>;
202
+ export declare function stagePaths(cwd: string, paths: string[]): Promise<void>;
203
+ export declare function unstagePaths(cwd: string, paths: string[]): Promise<void>;
204
+ /**
205
+ * Discard local changes for the given files: restores both the
206
+ * index AND the working tree to HEAD via `git restore --staged
207
+ * --worktree --source=HEAD -- <paths>`. The user-visible "Revert"
208
+ * action.
209
+ *
210
+ * For untracked files, `git restore` errors with "pathspec did
211
+ * not match any file(s) known to git". The route surfaces this
212
+ * via `GitCommandError` so the UI can display "untracked files
213
+ * can't be reverted; delete them via the file browser instead."
214
+ *
215
+ * Destructive — the caller is expected to gate this behind a
216
+ * confirmation in the UI (the click-twice-to-confirm pattern in
217
+ * GitPanel).
218
+ */
219
+ export declare function revertPaths(cwd: string, paths: string[]): Promise<void>;
220
+ /**
221
+ * Commit the currently-staged changes. Empty / whitespace-only
222
+ * messages are rejected at the route layer; this just runs the
223
+ * command. `--no-verify` is NOT used — we want pre-commit hooks to
224
+ * fire so the user's lint/test/format checks gate browser commits
225
+ * the same way they gate terminal commits.
226
+ */
227
+ export declare function commit(cwd: string, message: string): Promise<{
228
+ hash: string;
229
+ }>;
230
+ /**
231
+ * Restrict branch names to the same character set git itself accepts in
232
+ * common usage — letters, digits, dot, dash, underscore, slash. Reject
233
+ * anything else (spaces, control chars, leading dash that could be
234
+ * mistaken for a flag, dot-only segments, double slashes, etc.) with a
235
+ * single error code so the route can return a stable 400.
236
+ */
237
+ export declare class InvalidBranchNameError extends Error {
238
+ constructor(name: string);
239
+ }
240
+ /**
241
+ * Switch the working tree to `branch`. Refuses on a dirty tree (git's
242
+ * default) — the caller is expected to surface the resulting
243
+ * `GitCommandError` to the user, who can stash or revert first.
244
+ *
245
+ * No `--` separator: `git checkout -- <name>` interprets <name> as a
246
+ * pathspec and ALWAYS fails with "did not match any file(s) known to
247
+ * git". The branch-name validator (assertBranchName) already rejects
248
+ * leading dashes, so flag injection isn't a concern here.
249
+ */
250
+ export declare function checkoutBranch(cwd: string, branch: string): Promise<void>;
251
+ export interface CreateBranchOptions {
252
+ /** Branch / commit to base the new branch on. Defaults to current HEAD. */
253
+ startPoint?: string;
254
+ /** When true, also switch the working tree to the new branch. */
255
+ checkout?: boolean;
256
+ }
257
+ /**
258
+ * Create a new local branch. `startPoint` defaults to HEAD; pass
259
+ * `origin/main` (etc.) to branch off a tracking ref. When `checkout`
260
+ * is true, uses `git checkout -b` to create + switch in one step.
261
+ */
262
+ export declare function createBranch(cwd: string, name: string, opts?: CreateBranchOptions): Promise<void>;
263
+ export interface DeleteBranchOptions {
264
+ /** Force-delete via `-D` even when the branch isn't merged. */
265
+ force?: boolean;
266
+ }
267
+ /**
268
+ * Delete a local branch. Default uses `-d` (refuses to delete an
269
+ * unmerged branch); `force: true` switches to `-D`. Refuses to delete
270
+ * the currently-checked-out branch (git's default behavior surfaces a
271
+ * `GitCommandError`).
272
+ */
273
+ export declare function deleteBranch(cwd: string, name: string, opts?: DeleteBranchOptions): Promise<void>;
274
+ export interface PushOptions {
275
+ remote?: string;
276
+ branch?: string;
277
+ /**
278
+ * When true, adds `--set-upstream` so the push records the
279
+ * remote/branch as the tracking ref. Required on first push of a
280
+ * new branch — without this the user gets the default
281
+ * "fatal: The current branch has no upstream branch" error.
282
+ */
283
+ setUpstream?: boolean;
284
+ }
285
+ export interface FetchOptions {
286
+ remote?: string;
287
+ /** Add `--prune` so deleted upstream branches are removed locally too. */
288
+ prune?: boolean;
289
+ }
290
+ /**
291
+ * `git fetch [<remote>]` — never touches the working tree, so safe to
292
+ * call regardless of dirty state. Returns the captured output (mostly
293
+ * stderr — git's "Fetching origin\nFrom github.com:foo/bar..." text).
294
+ */
295
+ export declare function fetch(cwd: string, opts?: FetchOptions): Promise<{
296
+ stdout: string;
297
+ }>;
298
+ export interface PullOptions {
299
+ remote?: string;
300
+ branch?: string;
301
+ /**
302
+ * `--rebase` rebases local commits on top of the fetched ref instead
303
+ * of merging. Mirrors `git pull --rebase` semantics; the user can
304
+ * switch in the UI per-pull.
305
+ */
306
+ rebase?: boolean;
307
+ }
308
+ /**
309
+ * `git pull [<remote> [<branch>]]` — fetches AND merges (or rebases).
310
+ * Conflicts are NOT resolved by us — the underlying GitCommandError's
311
+ * stderr is surfaced verbatim (e.g. "CONFLICT (content): Merge
312
+ * conflict in foo.ts") so the user can drop to the integrated
313
+ * terminal to fix.
314
+ *
315
+ * Argument grammar: the second positional is a branch ONLY when the
316
+ * first positional is also given. `git pull <name>` is interpreted
317
+ * as a remote, not a branch — so when the caller passes only `branch`
318
+ * we default `remote` to `"origin"` rather than producing a
319
+ * misleading "remote not found" error.
320
+ */
321
+ export declare function pull(cwd: string, opts?: PullOptions): Promise<{
322
+ stdout: string;
323
+ }>;
324
+ export declare function push(cwd: string, opts?: PushOptions): Promise<{
325
+ stdout: string;
326
+ }>;
327
+ /**
328
+ * Create a linked working tree at `worktreePath` pinned to `commitHash`.
329
+ * `git worktree add` does NOT require a clean working tree in the primary
330
+ * checkout — you can be mid-edit and still create a worktree to try an
331
+ * old commit. Returns the resolved absolute path so the UI can display
332
+ * it.
333
+ *
334
+ * `worktreePath` is resolved against `cwd` — the caller's route should
335
+ * use something like `.git-worktrees/<short-hash>/` relative to the
336
+ * project root.
337
+ */
338
+ export declare function addWorktree(cwd: string, worktreePath: string, commitHash: string): Promise<void>;
339
+ /**
340
+ * Remove a linked working tree. Git refuses if the worktree has
341
+ * uncommitted changes (non-zero exit) — the route layer surfaces the
342
+ * `GitCommandError` message so the user knows to commit or stash
343
+ * before removing.
344
+ */
345
+ export declare function removeWorktree(cwd: string, worktreePath: string): Promise<void>;
346
+ //# sourceMappingURL=git-operations.d.ts.map