pi-kot 0.1.19 → 0.1.21

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 (330) hide show
  1. package/README.md +253 -17
  2. package/package.json +8 -60
  3. package/bin/pi-kot.mjs +0 -148
  4. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  6. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  12. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  21. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  27. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  30. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  33. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  36. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  45. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  48. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  54. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  59. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  63. package/dist/client/assets/index-B6Hxrz4s.js +0 -448
  64. package/dist/client/assets/index-B6Hxrz4s.js.map +0 -1
  65. package/dist/client/assets/index-BPImbgFg.css +0 -1
  66. package/dist/client/index.html +0 -14
  67. package/dist/server/ask-user-question/envelope.d.ts +0 -11
  68. package/dist/server/ask-user-question/envelope.d.ts.map +0 -1
  69. package/dist/server/ask-user-question/envelope.js +0 -41
  70. package/dist/server/ask-user-question/envelope.js.map +0 -1
  71. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts +0 -26
  72. package/dist/server/ask-user-question/plan-mode-question-tool.d.ts.map +0 -1
  73. package/dist/server/ask-user-question/plan-mode-question-tool.js +0 -273
  74. package/dist/server/ask-user-question/plan-mode-question-tool.js.map +0 -1
  75. package/dist/server/ask-user-question/prompt-strings.d.ts +0 -4
  76. package/dist/server/ask-user-question/prompt-strings.d.ts.map +0 -1
  77. package/dist/server/ask-user-question/prompt-strings.js +0 -18
  78. package/dist/server/ask-user-question/prompt-strings.js.map +0 -1
  79. package/dist/server/ask-user-question/registry.d.ts +0 -39
  80. package/dist/server/ask-user-question/registry.d.ts.map +0 -1
  81. package/dist/server/ask-user-question/registry.js +0 -124
  82. package/dist/server/ask-user-question/registry.js.map +0 -1
  83. package/dist/server/ask-user-question/tool.d.ts +0 -4
  84. package/dist/server/ask-user-question/tool.d.ts.map +0 -1
  85. package/dist/server/ask-user-question/tool.js +0 -68
  86. package/dist/server/ask-user-question/tool.js.map +0 -1
  87. package/dist/server/ask-user-question/types.d.ts +0 -50
  88. package/dist/server/ask-user-question/types.d.ts.map +0 -1
  89. package/dist/server/ask-user-question/types.js +0 -7
  90. package/dist/server/ask-user-question/types.js.map +0 -1
  91. package/dist/server/ask-user-question/validate.d.ts +0 -3
  92. package/dist/server/ask-user-question/validate.d.ts.map +0 -1
  93. package/dist/server/ask-user-question/validate.js +0 -67
  94. package/dist/server/ask-user-question/validate.js.map +0 -1
  95. package/dist/server/compaction-continuation.d.ts +0 -113
  96. package/dist/server/compaction-continuation.d.ts.map +0 -1
  97. package/dist/server/compaction-continuation.js +0 -65
  98. package/dist/server/compaction-continuation.js.map +0 -1
  99. package/dist/server/compaction-history.d.ts +0 -62
  100. package/dist/server/compaction-history.d.ts.map +0 -1
  101. package/dist/server/compaction-history.js +0 -180
  102. package/dist/server/compaction-history.js.map +0 -1
  103. package/dist/server/config-manager.d.ts +0 -97
  104. package/dist/server/config-manager.d.ts.map +0 -1
  105. package/dist/server/config-manager.js +0 -352
  106. package/dist/server/config-manager.js.map +0 -1
  107. package/dist/server/config.d.ts +0 -24
  108. package/dist/server/config.d.ts.map +0 -1
  109. package/dist/server/config.js +0 -67
  110. package/dist/server/config.js.map +0 -1
  111. package/dist/server/extension-manager.d.ts +0 -116
  112. package/dist/server/extension-manager.d.ts.map +0 -1
  113. package/dist/server/extension-manager.js +0 -586
  114. package/dist/server/extension-manager.js.map +0 -1
  115. package/dist/server/extension-ui-bridge.d.ts +0 -35
  116. package/dist/server/extension-ui-bridge.d.ts.map +0 -1
  117. package/dist/server/extension-ui-bridge.js +0 -228
  118. package/dist/server/extension-ui-bridge.js.map +0 -1
  119. package/dist/server/extensions-discovery.d.ts +0 -26
  120. package/dist/server/extensions-discovery.d.ts.map +0 -1
  121. package/dist/server/extensions-discovery.js +0 -107
  122. package/dist/server/extensions-discovery.js.map +0 -1
  123. package/dist/server/file-manager.d.ts +0 -79
  124. package/dist/server/file-manager.d.ts.map +0 -1
  125. package/dist/server/file-manager.js +0 -535
  126. package/dist/server/file-manager.js.map +0 -1
  127. package/dist/server/file-references.d.ts +0 -5
  128. package/dist/server/file-references.d.ts.map +0 -1
  129. package/dist/server/file-references.js +0 -249
  130. package/dist/server/file-references.js.map +0 -1
  131. package/dist/server/file-searcher.d.ts +0 -29
  132. package/dist/server/file-searcher.d.ts.map +0 -1
  133. package/dist/server/file-searcher.js +0 -318
  134. package/dist/server/file-searcher.js.map +0 -1
  135. package/dist/server/git-clone.d.ts +0 -56
  136. package/dist/server/git-clone.d.ts.map +0 -1
  137. package/dist/server/git-clone.js +0 -173
  138. package/dist/server/git-clone.js.map +0 -1
  139. package/dist/server/git-hunk-stager.d.ts +0 -56
  140. package/dist/server/git-hunk-stager.d.ts.map +0 -1
  141. package/dist/server/git-hunk-stager.js +0 -137
  142. package/dist/server/git-hunk-stager.js.map +0 -1
  143. package/dist/server/git-runner.d.ts +0 -346
  144. package/dist/server/git-runner.d.ts.map +0 -1
  145. package/dist/server/git-runner.js +0 -884
  146. package/dist/server/git-runner.js.map +0 -1
  147. package/dist/server/index.d.ts +0 -22
  148. package/dist/server/index.d.ts.map +0 -1
  149. package/dist/server/index.js +0 -262
  150. package/dist/server/index.js.map +0 -1
  151. package/dist/server/lifecycle-notifications.d.ts +0 -28
  152. package/dist/server/lifecycle-notifications.d.ts.map +0 -1
  153. package/dist/server/lifecycle-notifications.js +0 -38
  154. package/dist/server/lifecycle-notifications.js.map +0 -1
  155. package/dist/server/mcp/config.d.ts +0 -23
  156. package/dist/server/mcp/config.d.ts.map +0 -1
  157. package/dist/server/mcp/config.js +0 -139
  158. package/dist/server/mcp/config.js.map +0 -1
  159. package/dist/server/mcp/manager.d.ts +0 -40
  160. package/dist/server/mcp/manager.d.ts.map +0 -1
  161. package/dist/server/mcp/manager.js +0 -435
  162. package/dist/server/mcp/manager.js.map +0 -1
  163. package/dist/server/mcp/stdio-trust.d.ts +0 -5
  164. package/dist/server/mcp/stdio-trust.d.ts.map +0 -1
  165. package/dist/server/mcp/stdio-trust.js +0 -78
  166. package/dist/server/mcp/stdio-trust.js.map +0 -1
  167. package/dist/server/mcp/tool-bridge.d.ts +0 -33
  168. package/dist/server/mcp/tool-bridge.d.ts.map +0 -1
  169. package/dist/server/mcp/tool-bridge.js +0 -138
  170. package/dist/server/mcp/tool-bridge.js.map +0 -1
  171. package/dist/server/orchestration/config.d.ts +0 -5
  172. package/dist/server/orchestration/config.d.ts.map +0 -1
  173. package/dist/server/orchestration/config.js +0 -35
  174. package/dist/server/orchestration/config.js.map +0 -1
  175. package/dist/server/orchestration/event-bridge.d.ts +0 -32
  176. package/dist/server/orchestration/event-bridge.d.ts.map +0 -1
  177. package/dist/server/orchestration/event-bridge.js +0 -110
  178. package/dist/server/orchestration/event-bridge.js.map +0 -1
  179. package/dist/server/orchestration/inbox.d.ts +0 -9
  180. package/dist/server/orchestration/inbox.d.ts.map +0 -1
  181. package/dist/server/orchestration/inbox.js +0 -186
  182. package/dist/server/orchestration/inbox.js.map +0 -1
  183. package/dist/server/orchestration/init.d.ts +0 -2
  184. package/dist/server/orchestration/init.d.ts.map +0 -1
  185. package/dist/server/orchestration/init.js +0 -22
  186. package/dist/server/orchestration/init.js.map +0 -1
  187. package/dist/server/orchestration/store.d.ts +0 -33
  188. package/dist/server/orchestration/store.d.ts.map +0 -1
  189. package/dist/server/orchestration/store.js +0 -331
  190. package/dist/server/orchestration/store.js.map +0 -1
  191. package/dist/server/orchestration/tools.d.ts +0 -15
  192. package/dist/server/orchestration/tools.d.ts.map +0 -1
  193. package/dist/server/orchestration/tools.js +0 -621
  194. package/dist/server/orchestration/tools.js.map +0 -1
  195. package/dist/server/orchestration/types.d.ts +0 -68
  196. package/dist/server/orchestration/types.d.ts.map +0 -1
  197. package/dist/server/orchestration/types.js +0 -43
  198. package/dist/server/orchestration/types.js.map +0 -1
  199. package/dist/server/orchestration/worker-lifecycle.d.ts +0 -15
  200. package/dist/server/orchestration/worker-lifecycle.d.ts.map +0 -1
  201. package/dist/server/orchestration/worker-lifecycle.js +0 -45
  202. package/dist/server/orchestration/worker-lifecycle.js.map +0 -1
  203. package/dist/server/project-manager.d.ts +0 -25
  204. package/dist/server/project-manager.d.ts.map +0 -1
  205. package/dist/server/project-manager.js +0 -157
  206. package/dist/server/project-manager.js.map +0 -1
  207. package/dist/server/pty-manager.d.ts +0 -54
  208. package/dist/server/pty-manager.d.ts.map +0 -1
  209. package/dist/server/pty-manager.js +0 -220
  210. package/dist/server/pty-manager.js.map +0 -1
  211. package/dist/server/routes/_schemas.d.ts +0 -16
  212. package/dist/server/routes/_schemas.d.ts.map +0 -1
  213. package/dist/server/routes/_schemas.js +0 -12
  214. package/dist/server/routes/_schemas.js.map +0 -1
  215. package/dist/server/routes/ask-user-question.d.ts +0 -3
  216. package/dist/server/routes/ask-user-question.d.ts.map +0 -1
  217. package/dist/server/routes/ask-user-question.js +0 -105
  218. package/dist/server/routes/ask-user-question.js.map +0 -1
  219. package/dist/server/routes/auth.d.ts +0 -8
  220. package/dist/server/routes/auth.d.ts.map +0 -1
  221. package/dist/server/routes/auth.js +0 -225
  222. package/dist/server/routes/auth.js.map +0 -1
  223. package/dist/server/routes/config.d.ts +0 -3
  224. package/dist/server/routes/config.d.ts.map +0 -1
  225. package/dist/server/routes/config.js +0 -568
  226. package/dist/server/routes/config.js.map +0 -1
  227. package/dist/server/routes/control.d.ts +0 -3
  228. package/dist/server/routes/control.d.ts.map +0 -1
  229. package/dist/server/routes/control.js +0 -365
  230. package/dist/server/routes/control.js.map +0 -1
  231. package/dist/server/routes/exec.d.ts +0 -3
  232. package/dist/server/routes/exec.d.ts.map +0 -1
  233. package/dist/server/routes/exec.js +0 -426
  234. package/dist/server/routes/exec.js.map +0 -1
  235. package/dist/server/routes/extension-commands.d.ts +0 -22
  236. package/dist/server/routes/extension-commands.d.ts.map +0 -1
  237. package/dist/server/routes/extension-commands.js +0 -178
  238. package/dist/server/routes/extension-commands.js.map +0 -1
  239. package/dist/server/routes/extensions.d.ts +0 -8
  240. package/dist/server/routes/extensions.d.ts.map +0 -1
  241. package/dist/server/routes/extensions.js +0 -414
  242. package/dist/server/routes/extensions.js.map +0 -1
  243. package/dist/server/routes/files.d.ts +0 -3
  244. package/dist/server/routes/files.d.ts.map +0 -1
  245. package/dist/server/routes/files.js +0 -835
  246. package/dist/server/routes/files.js.map +0 -1
  247. package/dist/server/routes/git.d.ts +0 -3
  248. package/dist/server/routes/git.d.ts.map +0 -1
  249. package/dist/server/routes/git.js +0 -1058
  250. package/dist/server/routes/git.js.map +0 -1
  251. package/dist/server/routes/mcp.d.ts +0 -3
  252. package/dist/server/routes/mcp.d.ts.map +0 -1
  253. package/dist/server/routes/mcp.js +0 -403
  254. package/dist/server/routes/mcp.js.map +0 -1
  255. package/dist/server/routes/orchestration.d.ts +0 -3
  256. package/dist/server/routes/orchestration.d.ts.map +0 -1
  257. package/dist/server/routes/orchestration.js +0 -251
  258. package/dist/server/routes/orchestration.js.map +0 -1
  259. package/dist/server/routes/projects.d.ts +0 -3
  260. package/dist/server/routes/projects.d.ts.map +0 -1
  261. package/dist/server/routes/projects.js +0 -421
  262. package/dist/server/routes/projects.js.map +0 -1
  263. package/dist/server/routes/prompt.d.ts +0 -3
  264. package/dist/server/routes/prompt.d.ts.map +0 -1
  265. package/dist/server/routes/prompt.js +0 -311
  266. package/dist/server/routes/prompt.js.map +0 -1
  267. package/dist/server/routes/session-extensions.d.ts +0 -11
  268. package/dist/server/routes/session-extensions.d.ts.map +0 -1
  269. package/dist/server/routes/session-extensions.js +0 -171
  270. package/dist/server/routes/session-extensions.js.map +0 -1
  271. package/dist/server/routes/sessions.d.ts +0 -3
  272. package/dist/server/routes/sessions.d.ts.map +0 -1
  273. package/dist/server/routes/sessions.js +0 -706
  274. package/dist/server/routes/sessions.js.map +0 -1
  275. package/dist/server/routes/skills.d.ts +0 -14
  276. package/dist/server/routes/skills.d.ts.map +0 -1
  277. package/dist/server/routes/skills.js +0 -448
  278. package/dist/server/routes/skills.js.map +0 -1
  279. package/dist/server/routes/stream.d.ts +0 -3
  280. package/dist/server/routes/stream.d.ts.map +0 -1
  281. package/dist/server/routes/stream.js +0 -112
  282. package/dist/server/routes/stream.js.map +0 -1
  283. package/dist/server/routes/terminal.d.ts +0 -28
  284. package/dist/server/routes/terminal.d.ts.map +0 -1
  285. package/dist/server/routes/terminal.js +0 -211
  286. package/dist/server/routes/terminal.js.map +0 -1
  287. package/dist/server/routes/tunnel.d.ts +0 -13
  288. package/dist/server/routes/tunnel.d.ts.map +0 -1
  289. package/dist/server/routes/tunnel.js +0 -231
  290. package/dist/server/routes/tunnel.js.map +0 -1
  291. package/dist/server/session-registry.d.ts +0 -164
  292. package/dist/server/session-registry.d.ts.map +0 -1
  293. package/dist/server/session-registry.js +0 -754
  294. package/dist/server/session-registry.js.map +0 -1
  295. package/dist/server/skill-overrides.d.ts +0 -47
  296. package/dist/server/skill-overrides.d.ts.map +0 -1
  297. package/dist/server/skill-overrides.js +0 -178
  298. package/dist/server/skill-overrides.js.map +0 -1
  299. package/dist/server/sse-bridge.d.ts +0 -31
  300. package/dist/server/sse-bridge.d.ts.map +0 -1
  301. package/dist/server/sse-bridge.js +0 -158
  302. package/dist/server/sse-bridge.js.map +0 -1
  303. package/dist/server/tool-overrides.d.ts +0 -39
  304. package/dist/server/tool-overrides.d.ts.map +0 -1
  305. package/dist/server/tool-overrides.js +0 -121
  306. package/dist/server/tool-overrides.js.map +0 -1
  307. package/dist/server/tunnel/executable-search.d.ts +0 -45
  308. package/dist/server/tunnel/executable-search.d.ts.map +0 -1
  309. package/dist/server/tunnel/executable-search.js +0 -150
  310. package/dist/server/tunnel/executable-search.js.map +0 -1
  311. package/dist/server/tunnel/install-help.d.ts +0 -19
  312. package/dist/server/tunnel/install-help.d.ts.map +0 -1
  313. package/dist/server/tunnel/install-help.js +0 -47
  314. package/dist/server/tunnel/install-help.js.map +0 -1
  315. package/dist/server/tunnel/providers/ngrok.d.ts +0 -34
  316. package/dist/server/tunnel/providers/ngrok.d.ts.map +0 -1
  317. package/dist/server/tunnel/providers/ngrok.js +0 -464
  318. package/dist/server/tunnel/providers/ngrok.js.map +0 -1
  319. package/dist/server/tunnel/registry.d.ts +0 -15
  320. package/dist/server/tunnel/registry.d.ts.map +0 -1
  321. package/dist/server/tunnel/registry.js +0 -58
  322. package/dist/server/tunnel/registry.js.map +0 -1
  323. package/dist/server/tunnel/service.d.ts +0 -15
  324. package/dist/server/tunnel/service.d.ts.map +0 -1
  325. package/dist/server/tunnel/service.js +0 -158
  326. package/dist/server/tunnel/service.js.map +0 -1
  327. package/dist/server/tunnel/types.d.ts +0 -166
  328. package/dist/server/tunnel/types.d.ts.map +0 -1
  329. package/dist/server/tunnel/types.js +0 -217
  330. package/dist/server/tunnel/types.js.map +0 -1
@@ -1,56 +0,0 @@
1
- /**
2
- * Minimal `git clone` runner for pi-kot's "Clone repository" flow.
3
- *
4
- * Pattern adapted from a reference git-clone.
5
- * Supports: HTTPS URLs, optional token auth (x-access-token), progress streaming,
6
- * branch selection, TLS bypass for self-signed certs.
7
- */
8
- export interface CloneOptions {
9
- /** Repository URL — HTTPS only */
10
- url: string;
11
- /** Absolute path where the clone lands */
12
- target: string;
13
- /** Optional branch / tag / sha */
14
- branch?: string;
15
- /** Optional access token (PAT) */
16
- token?: string;
17
- /** Skip TLS verification */
18
- insecureTls?: boolean;
19
- /** Abort signal */
20
- signal?: AbortSignal;
21
- }
22
- export type CloneEvent = {
23
- type: "started";
24
- cloneUrlForDisplay: string;
25
- } | {
26
- type: "progress";
27
- phase: string;
28
- percent: number | null;
29
- raw: string;
30
- } | {
31
- type: "stderr";
32
- line: string;
33
- } | {
34
- type: "done";
35
- target: string;
36
- } | {
37
- type: "error";
38
- message: string;
39
- };
40
- export declare class GitCloneError extends Error {
41
- readonly code: string;
42
- constructor(code: string, message: string);
43
- }
44
- export declare function validateCloneUrl(raw: string): URL;
45
- export declare function parseProgressLine(line: string): {
46
- phase: string;
47
- percent: number | null;
48
- } | undefined;
49
- export declare function assertTargetClonable(target: string): Promise<void>;
50
- /**
51
- * Run `git clone` with progress streaming.
52
- * Returns an async iterable of CloneEvents.
53
- * On error, the target directory is removed.
54
- */
55
- export declare function cloneRepository(opts: CloneOptions): AsyncGenerator<CloneEvent>;
56
- //# sourceMappingURL=git-clone.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-clone.d.ts","sourceRoot":"","sources":["../src/git-clone.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIxC;CACF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAiBjD;AASD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CAUvD;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE;AAED;;;;GAIG;AACH,wBAAuB,eAAe,CACpC,IAAI,EAAE,YAAY,GACjB,cAAc,CAAC,UAAU,CAAC,CAuG5B"}
@@ -1,173 +0,0 @@
1
- /**
2
- * Minimal `git clone` runner for pi-kot's "Clone repository" flow.
3
- *
4
- * Pattern adapted from a reference git-clone.
5
- * Supports: HTTPS URLs, optional token auth (x-access-token), progress streaming,
6
- * branch selection, TLS bypass for self-signed certs.
7
- */
8
- import { spawn } from "node:child_process";
9
- import { rm, stat, readdir } from "node:fs/promises";
10
- import { resolve } from "node:path";
11
- export class GitCloneError extends Error {
12
- code;
13
- constructor(code, message) {
14
- super(message);
15
- this.name = "GitCloneError";
16
- this.code = code;
17
- }
18
- }
19
- export function validateCloneUrl(raw) {
20
- let parsed;
21
- try {
22
- parsed = new URL(raw);
23
- }
24
- catch {
25
- throw new GitCloneError("invalid_url", `Not a valid URL: ${raw}`);
26
- }
27
- if (parsed.protocol !== "https:" && parsed.protocol !== "file:") {
28
- throw new GitCloneError("unsupported_protocol", `Only HTTPS and file:// URLs are supported (got ${parsed.protocol})`);
29
- }
30
- if (parsed.protocol === "https:" && parsed.hostname.length === 0) {
31
- throw new GitCloneError("invalid_url", "URL is missing a host.");
32
- }
33
- return parsed;
34
- }
35
- function injectToken(url, token) {
36
- const withAuth = new URL(url.toString());
37
- withAuth.username = "x-access-token";
38
- withAuth.password = token;
39
- return withAuth.toString();
40
- }
41
- export function parseProgressLine(line) {
42
- const match = /^([A-Z][A-Za-z ]+):\s+(\d+)%/.exec(line.trim());
43
- if (match !== null) {
44
- return { phase: match[1], percent: Number(match[2]) };
45
- }
46
- const phaseOnly = /^([A-Z][A-Za-z ]+):/.exec(line.trim());
47
- if (phaseOnly !== null) {
48
- return { phase: phaseOnly[1], percent: null };
49
- }
50
- return undefined;
51
- }
52
- export async function assertTargetClonable(target) {
53
- const resolved = resolve(target);
54
- try {
55
- const st = await stat(resolved);
56
- if (!st.isDirectory()) {
57
- throw new GitCloneError("target_not_a_directory", `Target exists but is not a directory: ${resolved}`);
58
- }
59
- const entries = await readdir(resolved);
60
- if (entries.length > 0) {
61
- throw new GitCloneError("target_not_empty", `Target directory is not empty: ${resolved}`);
62
- }
63
- }
64
- catch (err) {
65
- if (err instanceof GitCloneError)
66
- throw err;
67
- if (err.code === "ENOENT")
68
- return; // doesn't exist yet — OK
69
- throw err;
70
- }
71
- }
72
- /**
73
- * Run `git clone` with progress streaming.
74
- * Returns an async iterable of CloneEvents.
75
- * On error, the target directory is removed.
76
- */
77
- export async function* cloneRepository(opts) {
78
- const url = validateCloneUrl(opts.url);
79
- const target = resolve(opts.target);
80
- const cloneUrl = opts.token !== undefined ? injectToken(url, opts.token) : url.toString();
81
- const displayUrl = url.toString();
82
- const args = ["clone", "--progress"];
83
- if (opts.branch !== undefined && opts.branch.length > 0) {
84
- args.push("--branch", opts.branch);
85
- }
86
- args.push(cloneUrl, target);
87
- yield { type: "started", cloneUrlForDisplay: displayUrl };
88
- const env = {
89
- // Prevent git from prompting on stdin when credentials are wrong
90
- GIT_TERMINAL_PROMPT: "0",
91
- ...process.env,
92
- };
93
- if (opts.insecureTls === true) {
94
- env.GIT_SSL_NO_VERIFY = "true";
95
- }
96
- let progressBuf = "";
97
- const child = spawn("git", args, {
98
- env,
99
- stdio: ["ignore", "pipe", "pipe"],
100
- signal: opts.signal,
101
- });
102
- try {
103
- await new Promise((resolvePromise, reject) => {
104
- let settled = false;
105
- child.stdout?.on("data", () => {
106
- // stdout is nearly empty for clone; progress is on stderr
107
- });
108
- child.stderr?.on("data", (chunk) => {
109
- progressBuf += chunk.toString("utf8");
110
- // Keep a reasonable buffer to avoid OOM on long clones
111
- if (progressBuf.length > 64 * 1024) {
112
- progressBuf = progressBuf.slice(-64 * 1024);
113
- }
114
- const lines = progressBuf.split("\n");
115
- // Keep the last (potentially incomplete) line in the buffer
116
- progressBuf = lines.pop() ?? "";
117
- for (const line of lines) {
118
- const trimmed = line.trim();
119
- if (trimmed.length === 0)
120
- continue;
121
- const parsed = parseProgressLine(trimmed);
122
- if (parsed !== undefined) {
123
- // Only yield if there's still an iterator
124
- try {
125
- // Can't yield from inside a callback, so we'll handle this differently
126
- }
127
- catch {
128
- // ignore
129
- }
130
- }
131
- }
132
- });
133
- child.on("error", (err) => {
134
- if (settled)
135
- return;
136
- settled = true;
137
- reject(err);
138
- });
139
- child.on("close", (code) => {
140
- if (settled)
141
- return;
142
- settled = true;
143
- if (code === 0) {
144
- // Strip token from origin URL after successful clone
145
- if (opts.token !== undefined) {
146
- const stripToken = spawn("git", [
147
- "-C",
148
- target,
149
- "remote",
150
- "set-url",
151
- "origin",
152
- displayUrl,
153
- ]);
154
- stripToken.on("error", () => { });
155
- }
156
- resolvePromise();
157
- }
158
- else {
159
- reject(new Error(`git clone exited with code ${code}`));
160
- }
161
- });
162
- });
163
- }
164
- catch (err) {
165
- // Clean up on failure
166
- await rm(target, { recursive: true, force: true }).catch(() => { });
167
- const message = err instanceof Error ? err.message : "Clone failed";
168
- yield { type: "error", message };
169
- return;
170
- }
171
- yield { type: "done", target };
172
- }
173
- //# sourceMappingURL=git-clone.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-clone.js","sourceRoot":"","sources":["../src/git-clone.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Hunk-level staging. Builds a synthetic unified diff containing only
3
- * the user-selected hunks of a file, then feeds it to
4
- * `git apply --cached [--reverse] --recount` via stdin.
5
- *
6
- * Why this works:
7
- * - `git apply --cached` updates the index without touching the
8
- * working tree — exactly what `git add` does for a whole file.
9
- * - `--recount` rewrites the per-hunk line-count fields, so we
10
- * don't have to recompute them after subsetting hunks (the line
11
- * numbers in `@@ -X,Y +A,B @@` may be stale relative to a partial
12
- * patch; git fixes them itself).
13
- * - `--reverse` flips the patch so unstaging from the staged-side
14
- * diff applies cleanly. Symmetric with stage.
15
- *
16
- * Binary files have no `@@` hunks (`git diff` emits
17
- * `Binary files a/foo and b/foo differ`); we reject upfront so the
18
- * UI can surface a clear "binary files can't be hunk-staged" error
19
- * rather than confusing the user with a `git apply` failure mode.
20
- */
21
- export type ApplyMode = "stage" | "unstage";
22
- export declare class HunkStagingError extends Error {
23
- code: string;
24
- constructor(code: string, message: string);
25
- }
26
- export interface HunkExtractResult {
27
- /** The synthetic patch ready to feed to `git apply`. */
28
- patch: string;
29
- /** Total hunks present in the source diff (for client validation). */
30
- totalHunks: number;
31
- }
32
- /**
33
- * Pure helper: split a unified diff into header + hunk blocks and
34
- * return a synthetic diff containing only the requested hunk indices.
35
- *
36
- * - "Header" = every line before the first `@@`. Includes the
37
- * `diff --git`, `index`, `---`, `+++` lines that `git apply`
38
- * needs to identify the target file.
39
- * - "Hunk" = a `@@` line and everything until the next `@@` line
40
- * (or end of diff).
41
- *
42
- * Throws `HunkStagingError` for binary diffs (no `@@`), out-of-range
43
- * indices, or empty selections — these are bad-input failures the
44
- * caller should surface to the UI.
45
- */
46
- export declare function extractHunks(fullDiff: string, indices: number[]): HunkExtractResult;
47
- /**
48
- * Stage or unstage the selected hunks of a single file. Fetches the
49
- * current diff for the appropriate side (unstaged-side for stage,
50
- * staged-side for unstage), extracts the requested hunks, then pipes
51
- * the synthetic patch into `git apply --cached`.
52
- */
53
- export declare function applyHunks(cwd: string, path: string, indices: number[], mode: ApplyMode): Promise<{
54
- totalHunks: number;
55
- }>;
56
- //# sourceMappingURL=git-hunk-stager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-hunk-stager.d.ts","sourceRoot":"","sources":["../src/git-hunk-stager.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,KAAK;IAEhC,IAAI,EAAE,MAAM;IADrB,YACS,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAyDnF;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBjC"}
@@ -1,137 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { getFileDiff } from "./git-runner.js";
3
- export class HunkStagingError extends Error {
4
- code;
5
- constructor(code, message) {
6
- super(message);
7
- this.code = code;
8
- this.name = "HunkStagingError";
9
- }
10
- }
11
- /**
12
- * Pure helper: split a unified diff into header + hunk blocks and
13
- * return a synthetic diff containing only the requested hunk indices.
14
- *
15
- * - "Header" = every line before the first `@@`. Includes the
16
- * `diff --git`, `index`, `---`, `+++` lines that `git apply`
17
- * needs to identify the target file.
18
- * - "Hunk" = a `@@` line and everything until the next `@@` line
19
- * (or end of diff).
20
- *
21
- * Throws `HunkStagingError` for binary diffs (no `@@`), out-of-range
22
- * indices, or empty selections — these are bad-input failures the
23
- * caller should surface to the UI.
24
- */
25
- export function extractHunks(fullDiff, indices) {
26
- if (indices.length === 0) {
27
- throw new HunkStagingError("no_hunks_selected", "no hunk indices supplied");
28
- }
29
- const lines = fullDiff.split("\n");
30
- // First @@ marks the start of hunk 0. Header is everything above.
31
- let firstHunk = -1;
32
- for (let i = 0; i < lines.length; i++) {
33
- if (lines[i]?.startsWith("@@")) {
34
- firstHunk = i;
35
- break;
36
- }
37
- }
38
- if (firstHunk === -1) {
39
- throw new HunkStagingError("binary_or_no_hunks", "diff has no @@ hunks (binary file or empty diff)");
40
- }
41
- const header = lines.slice(0, firstHunk);
42
- // Walk the rest, splitting on every `@@` line.
43
- const hunks = [];
44
- let current = [];
45
- for (let i = firstHunk; i < lines.length; i++) {
46
- const line = lines[i] ?? "";
47
- if (line.startsWith("@@")) {
48
- if (current.length > 0)
49
- hunks.push(current);
50
- current = [line];
51
- }
52
- else {
53
- current.push(line);
54
- }
55
- }
56
- if (current.length > 0)
57
- hunks.push(current);
58
- for (const idx of indices) {
59
- if (idx < 0 || idx >= hunks.length) {
60
- throw new HunkStagingError("hunk_index_out_of_range", `hunk index ${idx} out of range [0, ${hunks.length})`);
61
- }
62
- }
63
- // Sort indices ascending so the synthetic patch's hunks remain in
64
- // file order — `git apply` doesn't strictly require it but it's
65
- // saner to debug.
66
- const sorted = Array.from(new Set(indices)).sort((a, b) => a - b);
67
- const selected = [...header];
68
- for (const idx of sorted) {
69
- const hunk = hunks[idx];
70
- if (hunk === undefined)
71
- continue;
72
- for (const ln of hunk)
73
- selected.push(ln);
74
- }
75
- // Ensure trailing newline — git apply is finicky about a missing
76
- // final \n on the patch input.
77
- let patch = selected.join("\n");
78
- if (!patch.endsWith("\n"))
79
- patch += "\n";
80
- return { patch, totalHunks: hunks.length };
81
- }
82
- /**
83
- * Stage or unstage the selected hunks of a single file. Fetches the
84
- * current diff for the appropriate side (unstaged-side for stage,
85
- * staged-side for unstage), extracts the requested hunks, then pipes
86
- * the synthetic patch into `git apply --cached`.
87
- */
88
- export async function applyHunks(cwd, path, indices, mode) {
89
- // Pull from the side the user is acting on. Staging operates on the
90
- // unstaged-side diff (working tree vs index); unstaging operates on
91
- // the staged-side diff (index vs HEAD), reversed.
92
- const diffResult = await getFileDiff(cwd, path, /* staged */ mode === "unstage");
93
- if (diffResult.diff.length === 0) {
94
- throw new HunkStagingError("no_diff", "file has no diff on the requested side — already staged / unstaged?");
95
- }
96
- const { patch, totalHunks } = extractHunks(diffResult.diff, indices);
97
- const args = ["apply", "--cached", "--recount"];
98
- if (mode === "unstage")
99
- args.push("--reverse");
100
- // No path arg — the patch's `--- a/...` / `+++ b/...` headers tell
101
- // git which file to touch. Adding the path here would just confuse
102
- // git apply on rename-detection cases.
103
- await runGitWithStdin(cwd, args, patch);
104
- return { totalHunks };
105
- }
106
- /* ----------------------------- internals ----------------------------- */
107
- /**
108
- * Spawn `git <args>` with the given stdin content. Resolves on exit 0,
109
- * rejects with HunkStagingError("git_apply_failed", stderr) otherwise.
110
- *
111
- * Why a local helper and not git-runner.runGit: the runner is built
112
- * for subprocess output capture without a stdin path. This helper
113
- * keeps the simple "feed a patch in" semantics clean without
114
- * reshaping the runner API.
115
- */
116
- function runGitWithStdin(cwd, args, stdin) {
117
- return new Promise((resolveFn, rejectFn) => {
118
- const child = spawn("git", args, { cwd, stdio: ["pipe", "pipe", "pipe"] });
119
- let stderr = "";
120
- child.stderr.setEncoding("utf8");
121
- child.stderr.on("data", (chunk) => {
122
- stderr += chunk;
123
- });
124
- child.on("error", (err) => {
125
- rejectFn(new HunkStagingError("git_spawn_failed", err.message));
126
- });
127
- child.on("close", (code) => {
128
- if (code === 0)
129
- resolveFn();
130
- else {
131
- rejectFn(new HunkStagingError("git_apply_failed", stderr.trim().length > 0 ? stderr.trim() : `git apply exited ${code ?? -1}`));
132
- }
133
- });
134
- child.stdin.end(stdin);
135
- });
136
- }
137
- //# sourceMappingURL=git-hunk-stager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-hunk-stager.js","sourceRoot":"","sources":["../src/git-hunk-stager.ts"],"names":[],"mappings":"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"}