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.
- package/README.md +253 -17
- package/package.json +8 -60
- package/bin/pi-kot.mjs +0 -148
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/index-B6Hxrz4s.js +0 -448
- package/dist/client/assets/index-B6Hxrz4s.js.map +0 -1
- package/dist/client/assets/index-BPImbgFg.css +0 -1
- package/dist/client/index.html +0 -14
- package/dist/server/ask-user-question/envelope.d.ts +0 -11
- package/dist/server/ask-user-question/envelope.d.ts.map +0 -1
- package/dist/server/ask-user-question/envelope.js +0 -41
- package/dist/server/ask-user-question/envelope.js.map +0 -1
- package/dist/server/ask-user-question/plan-mode-question-tool.d.ts +0 -26
- package/dist/server/ask-user-question/plan-mode-question-tool.d.ts.map +0 -1
- package/dist/server/ask-user-question/plan-mode-question-tool.js +0 -273
- package/dist/server/ask-user-question/plan-mode-question-tool.js.map +0 -1
- package/dist/server/ask-user-question/prompt-strings.d.ts +0 -4
- package/dist/server/ask-user-question/prompt-strings.d.ts.map +0 -1
- package/dist/server/ask-user-question/prompt-strings.js +0 -18
- package/dist/server/ask-user-question/prompt-strings.js.map +0 -1
- package/dist/server/ask-user-question/registry.d.ts +0 -39
- package/dist/server/ask-user-question/registry.d.ts.map +0 -1
- package/dist/server/ask-user-question/registry.js +0 -124
- package/dist/server/ask-user-question/registry.js.map +0 -1
- package/dist/server/ask-user-question/tool.d.ts +0 -4
- package/dist/server/ask-user-question/tool.d.ts.map +0 -1
- package/dist/server/ask-user-question/tool.js +0 -68
- package/dist/server/ask-user-question/tool.js.map +0 -1
- package/dist/server/ask-user-question/types.d.ts +0 -50
- package/dist/server/ask-user-question/types.d.ts.map +0 -1
- package/dist/server/ask-user-question/types.js +0 -7
- package/dist/server/ask-user-question/types.js.map +0 -1
- package/dist/server/ask-user-question/validate.d.ts +0 -3
- package/dist/server/ask-user-question/validate.d.ts.map +0 -1
- package/dist/server/ask-user-question/validate.js +0 -67
- package/dist/server/ask-user-question/validate.js.map +0 -1
- package/dist/server/compaction-continuation.d.ts +0 -113
- package/dist/server/compaction-continuation.d.ts.map +0 -1
- package/dist/server/compaction-continuation.js +0 -65
- package/dist/server/compaction-continuation.js.map +0 -1
- package/dist/server/compaction-history.d.ts +0 -62
- package/dist/server/compaction-history.d.ts.map +0 -1
- package/dist/server/compaction-history.js +0 -180
- package/dist/server/compaction-history.js.map +0 -1
- package/dist/server/config-manager.d.ts +0 -97
- package/dist/server/config-manager.d.ts.map +0 -1
- package/dist/server/config-manager.js +0 -352
- package/dist/server/config-manager.js.map +0 -1
- package/dist/server/config.d.ts +0 -24
- package/dist/server/config.d.ts.map +0 -1
- package/dist/server/config.js +0 -67
- package/dist/server/config.js.map +0 -1
- package/dist/server/extension-manager.d.ts +0 -116
- package/dist/server/extension-manager.d.ts.map +0 -1
- package/dist/server/extension-manager.js +0 -586
- package/dist/server/extension-manager.js.map +0 -1
- package/dist/server/extension-ui-bridge.d.ts +0 -35
- package/dist/server/extension-ui-bridge.d.ts.map +0 -1
- package/dist/server/extension-ui-bridge.js +0 -228
- package/dist/server/extension-ui-bridge.js.map +0 -1
- package/dist/server/extensions-discovery.d.ts +0 -26
- package/dist/server/extensions-discovery.d.ts.map +0 -1
- package/dist/server/extensions-discovery.js +0 -107
- package/dist/server/extensions-discovery.js.map +0 -1
- package/dist/server/file-manager.d.ts +0 -79
- package/dist/server/file-manager.d.ts.map +0 -1
- package/dist/server/file-manager.js +0 -535
- package/dist/server/file-manager.js.map +0 -1
- package/dist/server/file-references.d.ts +0 -5
- package/dist/server/file-references.d.ts.map +0 -1
- package/dist/server/file-references.js +0 -249
- package/dist/server/file-references.js.map +0 -1
- package/dist/server/file-searcher.d.ts +0 -29
- package/dist/server/file-searcher.d.ts.map +0 -1
- package/dist/server/file-searcher.js +0 -318
- package/dist/server/file-searcher.js.map +0 -1
- package/dist/server/git-clone.d.ts +0 -56
- package/dist/server/git-clone.d.ts.map +0 -1
- package/dist/server/git-clone.js +0 -173
- package/dist/server/git-clone.js.map +0 -1
- package/dist/server/git-hunk-stager.d.ts +0 -56
- package/dist/server/git-hunk-stager.d.ts.map +0 -1
- package/dist/server/git-hunk-stager.js +0 -137
- package/dist/server/git-hunk-stager.js.map +0 -1
- package/dist/server/git-runner.d.ts +0 -346
- package/dist/server/git-runner.d.ts.map +0 -1
- package/dist/server/git-runner.js +0 -884
- package/dist/server/git-runner.js.map +0 -1
- package/dist/server/index.d.ts +0 -22
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -262
- package/dist/server/index.js.map +0 -1
- package/dist/server/lifecycle-notifications.d.ts +0 -28
- package/dist/server/lifecycle-notifications.d.ts.map +0 -1
- package/dist/server/lifecycle-notifications.js +0 -38
- package/dist/server/lifecycle-notifications.js.map +0 -1
- package/dist/server/mcp/config.d.ts +0 -23
- package/dist/server/mcp/config.d.ts.map +0 -1
- package/dist/server/mcp/config.js +0 -139
- package/dist/server/mcp/config.js.map +0 -1
- package/dist/server/mcp/manager.d.ts +0 -40
- package/dist/server/mcp/manager.d.ts.map +0 -1
- package/dist/server/mcp/manager.js +0 -435
- package/dist/server/mcp/manager.js.map +0 -1
- package/dist/server/mcp/stdio-trust.d.ts +0 -5
- package/dist/server/mcp/stdio-trust.d.ts.map +0 -1
- package/dist/server/mcp/stdio-trust.js +0 -78
- package/dist/server/mcp/stdio-trust.js.map +0 -1
- package/dist/server/mcp/tool-bridge.d.ts +0 -33
- package/dist/server/mcp/tool-bridge.d.ts.map +0 -1
- package/dist/server/mcp/tool-bridge.js +0 -138
- package/dist/server/mcp/tool-bridge.js.map +0 -1
- package/dist/server/orchestration/config.d.ts +0 -5
- package/dist/server/orchestration/config.d.ts.map +0 -1
- package/dist/server/orchestration/config.js +0 -35
- package/dist/server/orchestration/config.js.map +0 -1
- package/dist/server/orchestration/event-bridge.d.ts +0 -32
- package/dist/server/orchestration/event-bridge.d.ts.map +0 -1
- package/dist/server/orchestration/event-bridge.js +0 -110
- package/dist/server/orchestration/event-bridge.js.map +0 -1
- package/dist/server/orchestration/inbox.d.ts +0 -9
- package/dist/server/orchestration/inbox.d.ts.map +0 -1
- package/dist/server/orchestration/inbox.js +0 -186
- package/dist/server/orchestration/inbox.js.map +0 -1
- package/dist/server/orchestration/init.d.ts +0 -2
- package/dist/server/orchestration/init.d.ts.map +0 -1
- package/dist/server/orchestration/init.js +0 -22
- package/dist/server/orchestration/init.js.map +0 -1
- package/dist/server/orchestration/store.d.ts +0 -33
- package/dist/server/orchestration/store.d.ts.map +0 -1
- package/dist/server/orchestration/store.js +0 -331
- package/dist/server/orchestration/store.js.map +0 -1
- package/dist/server/orchestration/tools.d.ts +0 -15
- package/dist/server/orchestration/tools.d.ts.map +0 -1
- package/dist/server/orchestration/tools.js +0 -621
- package/dist/server/orchestration/tools.js.map +0 -1
- package/dist/server/orchestration/types.d.ts +0 -68
- package/dist/server/orchestration/types.d.ts.map +0 -1
- package/dist/server/orchestration/types.js +0 -43
- package/dist/server/orchestration/types.js.map +0 -1
- package/dist/server/orchestration/worker-lifecycle.d.ts +0 -15
- package/dist/server/orchestration/worker-lifecycle.d.ts.map +0 -1
- package/dist/server/orchestration/worker-lifecycle.js +0 -45
- package/dist/server/orchestration/worker-lifecycle.js.map +0 -1
- package/dist/server/project-manager.d.ts +0 -25
- package/dist/server/project-manager.d.ts.map +0 -1
- package/dist/server/project-manager.js +0 -157
- package/dist/server/project-manager.js.map +0 -1
- package/dist/server/pty-manager.d.ts +0 -54
- package/dist/server/pty-manager.d.ts.map +0 -1
- package/dist/server/pty-manager.js +0 -220
- package/dist/server/pty-manager.js.map +0 -1
- package/dist/server/routes/_schemas.d.ts +0 -16
- package/dist/server/routes/_schemas.d.ts.map +0 -1
- package/dist/server/routes/_schemas.js +0 -12
- package/dist/server/routes/_schemas.js.map +0 -1
- package/dist/server/routes/ask-user-question.d.ts +0 -3
- package/dist/server/routes/ask-user-question.d.ts.map +0 -1
- package/dist/server/routes/ask-user-question.js +0 -105
- package/dist/server/routes/ask-user-question.js.map +0 -1
- package/dist/server/routes/auth.d.ts +0 -8
- package/dist/server/routes/auth.d.ts.map +0 -1
- package/dist/server/routes/auth.js +0 -225
- package/dist/server/routes/auth.js.map +0 -1
- package/dist/server/routes/config.d.ts +0 -3
- package/dist/server/routes/config.d.ts.map +0 -1
- package/dist/server/routes/config.js +0 -568
- package/dist/server/routes/config.js.map +0 -1
- package/dist/server/routes/control.d.ts +0 -3
- package/dist/server/routes/control.d.ts.map +0 -1
- package/dist/server/routes/control.js +0 -365
- package/dist/server/routes/control.js.map +0 -1
- package/dist/server/routes/exec.d.ts +0 -3
- package/dist/server/routes/exec.d.ts.map +0 -1
- package/dist/server/routes/exec.js +0 -426
- package/dist/server/routes/exec.js.map +0 -1
- package/dist/server/routes/extension-commands.d.ts +0 -22
- package/dist/server/routes/extension-commands.d.ts.map +0 -1
- package/dist/server/routes/extension-commands.js +0 -178
- package/dist/server/routes/extension-commands.js.map +0 -1
- package/dist/server/routes/extensions.d.ts +0 -8
- package/dist/server/routes/extensions.d.ts.map +0 -1
- package/dist/server/routes/extensions.js +0 -414
- package/dist/server/routes/extensions.js.map +0 -1
- package/dist/server/routes/files.d.ts +0 -3
- package/dist/server/routes/files.d.ts.map +0 -1
- package/dist/server/routes/files.js +0 -835
- package/dist/server/routes/files.js.map +0 -1
- package/dist/server/routes/git.d.ts +0 -3
- package/dist/server/routes/git.d.ts.map +0 -1
- package/dist/server/routes/git.js +0 -1058
- package/dist/server/routes/git.js.map +0 -1
- package/dist/server/routes/mcp.d.ts +0 -3
- package/dist/server/routes/mcp.d.ts.map +0 -1
- package/dist/server/routes/mcp.js +0 -403
- package/dist/server/routes/mcp.js.map +0 -1
- package/dist/server/routes/orchestration.d.ts +0 -3
- package/dist/server/routes/orchestration.d.ts.map +0 -1
- package/dist/server/routes/orchestration.js +0 -251
- package/dist/server/routes/orchestration.js.map +0 -1
- package/dist/server/routes/projects.d.ts +0 -3
- package/dist/server/routes/projects.d.ts.map +0 -1
- package/dist/server/routes/projects.js +0 -421
- package/dist/server/routes/projects.js.map +0 -1
- package/dist/server/routes/prompt.d.ts +0 -3
- package/dist/server/routes/prompt.d.ts.map +0 -1
- package/dist/server/routes/prompt.js +0 -311
- package/dist/server/routes/prompt.js.map +0 -1
- package/dist/server/routes/session-extensions.d.ts +0 -11
- package/dist/server/routes/session-extensions.d.ts.map +0 -1
- package/dist/server/routes/session-extensions.js +0 -171
- package/dist/server/routes/session-extensions.js.map +0 -1
- package/dist/server/routes/sessions.d.ts +0 -3
- package/dist/server/routes/sessions.d.ts.map +0 -1
- package/dist/server/routes/sessions.js +0 -706
- package/dist/server/routes/sessions.js.map +0 -1
- package/dist/server/routes/skills.d.ts +0 -14
- package/dist/server/routes/skills.d.ts.map +0 -1
- package/dist/server/routes/skills.js +0 -448
- package/dist/server/routes/skills.js.map +0 -1
- package/dist/server/routes/stream.d.ts +0 -3
- package/dist/server/routes/stream.d.ts.map +0 -1
- package/dist/server/routes/stream.js +0 -112
- package/dist/server/routes/stream.js.map +0 -1
- package/dist/server/routes/terminal.d.ts +0 -28
- package/dist/server/routes/terminal.d.ts.map +0 -1
- package/dist/server/routes/terminal.js +0 -211
- package/dist/server/routes/terminal.js.map +0 -1
- package/dist/server/routes/tunnel.d.ts +0 -13
- package/dist/server/routes/tunnel.d.ts.map +0 -1
- package/dist/server/routes/tunnel.js +0 -231
- package/dist/server/routes/tunnel.js.map +0 -1
- package/dist/server/session-registry.d.ts +0 -164
- package/dist/server/session-registry.d.ts.map +0 -1
- package/dist/server/session-registry.js +0 -754
- package/dist/server/session-registry.js.map +0 -1
- package/dist/server/skill-overrides.d.ts +0 -47
- package/dist/server/skill-overrides.d.ts.map +0 -1
- package/dist/server/skill-overrides.js +0 -178
- package/dist/server/skill-overrides.js.map +0 -1
- package/dist/server/sse-bridge.d.ts +0 -31
- package/dist/server/sse-bridge.d.ts.map +0 -1
- package/dist/server/sse-bridge.js +0 -158
- package/dist/server/sse-bridge.js.map +0 -1
- package/dist/server/tool-overrides.d.ts +0 -39
- package/dist/server/tool-overrides.d.ts.map +0 -1
- package/dist/server/tool-overrides.js +0 -121
- package/dist/server/tool-overrides.js.map +0 -1
- package/dist/server/tunnel/executable-search.d.ts +0 -45
- package/dist/server/tunnel/executable-search.d.ts.map +0 -1
- package/dist/server/tunnel/executable-search.js +0 -150
- package/dist/server/tunnel/executable-search.js.map +0 -1
- package/dist/server/tunnel/install-help.d.ts +0 -19
- package/dist/server/tunnel/install-help.d.ts.map +0 -1
- package/dist/server/tunnel/install-help.js +0 -47
- package/dist/server/tunnel/install-help.js.map +0 -1
- package/dist/server/tunnel/providers/ngrok.d.ts +0 -34
- package/dist/server/tunnel/providers/ngrok.d.ts.map +0 -1
- package/dist/server/tunnel/providers/ngrok.js +0 -464
- package/dist/server/tunnel/providers/ngrok.js.map +0 -1
- package/dist/server/tunnel/registry.d.ts +0 -15
- package/dist/server/tunnel/registry.d.ts.map +0 -1
- package/dist/server/tunnel/registry.js +0 -58
- package/dist/server/tunnel/registry.js.map +0 -1
- package/dist/server/tunnel/service.d.ts +0 -15
- package/dist/server/tunnel/service.d.ts.map +0 -1
- package/dist/server/tunnel/service.js +0 -158
- package/dist/server/tunnel/service.js.map +0 -1
- package/dist/server/tunnel/types.d.ts +0 -166
- package/dist/server/tunnel/types.d.ts.map +0 -1
- package/dist/server/tunnel/types.js +0 -217
- 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"}
|
package/dist/server/git-clone.js
DELETED
|
@@ -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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"}
|