@cat-factory/executor-harness 1.37.0 → 1.37.2
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/dist/git.js +12 -8
- package/package.json +3 -3
- package/src/git.ts +12 -8
package/dist/git.js
CHANGED
|
@@ -51,14 +51,18 @@ const GIT_TIMEOUT_MS = Math.max(GIT_TIMEOUT_FLOOR_MS, loadRunnerLimits().inactiv
|
|
|
51
51
|
// Emptying the helper list (`credential.helper=` with no value RESETS the multi-valued config,
|
|
52
52
|
// dropping the system/global/local helpers) removes GCM from the chain, so git falls back to
|
|
53
53
|
// the harness's own askpass helper — which returns the per-job PAT we already hold (see
|
|
54
|
-
// `authEnv`).
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
// `authEnv`). The token is never in argv; only this non-secret config is.
|
|
55
|
+
//
|
|
56
|
+
// DO NOT re-add `-c credential.interactive=false` here. It reads like harmless belt-and-braces
|
|
57
|
+
// but modern git (≥ 2.47, incl. the executor image + host git) HONORS `credential.interactive`
|
|
58
|
+
// and treats invoking GIT_ASKPASS as "interactive" — so with it set git SKIPS the askpass
|
|
59
|
+
// entirely and dies with "fatal: unable to get password from user", failing EVERY authenticated
|
|
60
|
+
// clone/push on both the native and container paths (it clones a public base repo fine — that
|
|
61
|
+
// needs no auth — then fails only at push, which is what makes it look intermittent). The GCM
|
|
62
|
+
// popup it was meant to belt-and-braces against is already fully handled by the emptied helper
|
|
63
|
+
// list above plus `GIT_TERMINAL_PROMPT=0` / `GCM_INTERACTIVE=never` in the env (see authEnv /
|
|
64
|
+
// nonInteractiveGitEnv). Exported so a unit test can pin that this arg never creeps back in.
|
|
65
|
+
export const NON_INTERACTIVE_CREDENTIAL_ARGS = ['-c', 'credential.helper='];
|
|
62
66
|
/**
|
|
63
67
|
* Env applied to git commands that DON'T carry {@link authEnv} (local ops like config/checkout/
|
|
64
68
|
* rev-parse). Keeps them from ever going interactive too — `GIT_TERMINAL_PROMPT=0` blocks the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/executor-harness",
|
|
3
|
-
"version": "1.37.
|
|
3
|
+
"version": "1.37.2",
|
|
4
4
|
"description": "Container payload: a thin TypeScript wrapper that runs the Pi coding agent against a cloned repo and opens a PR. Runs in the Cloudflare Container (and, in local native mode, as a host process); carries no secrets.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"hono": "^4.12.27",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.9",
|
|
29
|
-
"@cat-factory/server": "0.
|
|
30
|
-
"@cat-factory/spend": "0.11.
|
|
29
|
+
"@cat-factory/server": "0.101.0",
|
|
30
|
+
"@cat-factory/spend": "0.11.15"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"build": "tsc -p tsconfig.json",
|
package/src/git.ts
CHANGED
|
@@ -61,14 +61,18 @@ const GIT_TIMEOUT_MS = Math.max(
|
|
|
61
61
|
// Emptying the helper list (`credential.helper=` with no value RESETS the multi-valued config,
|
|
62
62
|
// dropping the system/global/local helpers) removes GCM from the chain, so git falls back to
|
|
63
63
|
// the harness's own askpass helper — which returns the per-job PAT we already hold (see
|
|
64
|
-
// `authEnv`).
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
// `authEnv`). The token is never in argv; only this non-secret config is.
|
|
65
|
+
//
|
|
66
|
+
// DO NOT re-add `-c credential.interactive=false` here. It reads like harmless belt-and-braces
|
|
67
|
+
// but modern git (≥ 2.47, incl. the executor image + host git) HONORS `credential.interactive`
|
|
68
|
+
// and treats invoking GIT_ASKPASS as "interactive" — so with it set git SKIPS the askpass
|
|
69
|
+
// entirely and dies with "fatal: unable to get password from user", failing EVERY authenticated
|
|
70
|
+
// clone/push on both the native and container paths (it clones a public base repo fine — that
|
|
71
|
+
// needs no auth — then fails only at push, which is what makes it look intermittent). The GCM
|
|
72
|
+
// popup it was meant to belt-and-braces against is already fully handled by the emptied helper
|
|
73
|
+
// list above plus `GIT_TERMINAL_PROMPT=0` / `GCM_INTERACTIVE=never` in the env (see authEnv /
|
|
74
|
+
// nonInteractiveGitEnv). Exported so a unit test can pin that this arg never creeps back in.
|
|
75
|
+
export const NON_INTERACTIVE_CREDENTIAL_ARGS = ['-c', 'credential.helper=']
|
|
72
76
|
|
|
73
77
|
/**
|
|
74
78
|
* Env applied to git commands that DON'T carry {@link authEnv} (local ops like config/checkout/
|