@llm4ts/runner 0.12.0 → 0.13.1
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/NodeProcessExecutor.d.ts.map +1 -1
- package/dist/NodeProcessExecutor.js +11 -2
- package/dist/NodeProcessExecutor.js.map +1 -1
- package/dist/WindowsCommand.d.ts +17 -0
- package/dist/WindowsCommand.d.ts.map +1 -0
- package/dist/WindowsCommand.js +81 -0
- package/dist/WindowsCommand.js.map +1 -0
- package/package.json +5 -4
- package/src/NodeProcessExecutor.ts +12 -2
- package/src/WindowsCommand.ts +107 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeProcessExecutor.d.ts","sourceRoot":"","sources":["../src/NodeProcessExecutor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EACL,eAAe,EAIf,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"NodeProcessExecutor.d.ts","sourceRoot":"","sources":["../src/NodeProcessExecutor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EACL,eAAe,EAIf,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAA;AA+TrC,eAAO,MAAM,mBAAmB,EAAE,oBAMhC,CAAA;AAEF,eAAO,MAAM,uBAAuB,4CAAsD,CAAA"}
|
|
@@ -7,6 +7,7 @@ import * as Queue from "effect/Queue";
|
|
|
7
7
|
import * as Stream from "effect/Stream";
|
|
8
8
|
import { ProcessExecutor, ProcessResult, makeProcessExecutor } from "@llm4ts/core/ProcessExecutor";
|
|
9
9
|
import { InvalidRequestError, ProviderError } from "@llm4ts/core/Errors";
|
|
10
|
+
import { windowsInvocation } from "./WindowsCommand.js";
|
|
10
11
|
const maxStderrLines = 256;
|
|
11
12
|
const errorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
12
13
|
const commandName = (argv) => argv[0] ?? "process";
|
|
@@ -24,14 +25,22 @@ const spawnChild = (argv, cwd, envVars) => {
|
|
|
24
25
|
message: "process failed: empty argv"
|
|
25
26
|
}));
|
|
26
27
|
}
|
|
28
|
+
// Windows only, and only for a batch file: `az`/`gemini` and friends
|
|
29
|
+
// install as `.cmd`, which has to be resolved through PATHEXT and handed
|
|
30
|
+
// to cmd.exe — the two things a shell does that a shell-less spawn does
|
|
31
|
+
// not. See WindowsCommand.ts for why a shell is not the answer instead.
|
|
32
|
+
const windows = process.platform === "win32" ? windowsInvocation(argv) : undefined;
|
|
33
|
+
const file = windows?.file ?? command;
|
|
34
|
+
const spawnArgs = windows === undefined ? args : windows.args;
|
|
27
35
|
return Effect.try({
|
|
28
|
-
try: () => spawn(
|
|
36
|
+
try: () => spawn(file, spawnArgs, {
|
|
29
37
|
cwd,
|
|
30
38
|
env: {
|
|
31
39
|
...process.env,
|
|
32
40
|
...envVars
|
|
33
41
|
},
|
|
34
|
-
stdio: "pipe"
|
|
42
|
+
stdio: "pipe",
|
|
43
|
+
...(windows === undefined ? {} : { windowsVerbatimArguments: windows.verbatim })
|
|
35
44
|
}),
|
|
36
45
|
catch: (error) => processFailure(argv, errorMessage(error))
|
|
37
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeProcessExecutor.js","sourceRoot":"","sources":["../src/NodeProcessExecutor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NodeProcessExecutor.js","sourceRoot":"","sources":["../src/NodeProcessExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,eAAe,EACf,aAAa,EACb,mBAAmB,EAGpB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAA;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAExD,MAAM,WAAW,GAAG,CAAC,IAA2B,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;AAEjF,MAAM,WAAW,GAAG,GAAwB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;AAElG,MAAM,cAAc,GAAG,CAAC,IAA2B,EAAE,MAAc,EAAiB,EAAE,CACpF,aAAa,CAAC,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,wCAAwC,WAAW,CAAC,IAAI,CAAC,oCAAoC;YACjH,wDAAwD;QAC1D,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,MAAM,EAAE;CAC7C,CAAC,CAAA;AAEJ,MAAM,UAAU,GAAG,CACjB,IAA2B,EAC3B,GAAW,EACX,OAAyC,EACqB,EAAE;IAChE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,IAAI,CAChB,aAAa,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,4BAA4B;SACtC,CAAC,CACH,CAAA;IACH,CAAC;IAED,qEAAqE;IACrE,yEAAyE;IACzE,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAA;IACrC,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IAE7D,OAAO,MAAM,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE,CACR,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE;YACrB,GAAG;YACH,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,OAAO;aACX;YACD,KAAK,EAAE,MAAM;YACb,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;SACjF,CAAC;QACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;KAC5D,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,KAAqC,EAAuB,EAAE,CAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvB,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,kBAAkB,GAAG,CACzB,KAAqC,EACrC,KAAyB,EACnB,EAAE;IACR,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,CAC3B,KAAqC,EACrC,IAA2B,EAC3B,KAAyB,EACoB,EAAE,CAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;IACzB,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAElE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,QAAuB,EAAQ,EAAE;QAChD,MAAM,CACJ,MAAM,CAAC,OAAO,CACZ,aAAa,CAAC,IAAI,CAAC;YACjB,MAAM;YACN,MAAM;YACN,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC;SACzB,CAAC,CACH,CACF,CAAA;IACH,CAAC,CAAA;IAED,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5B,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAEhC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACtB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3B,QAAQ,CAAC,KAAK,EAAE,CAAA;QAChB,QAAQ,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,MAAM,WAAW,GAAG,CAClB,IAA2B,EAC3B,GAAW,EACX,OAAyC,EACzC,KAAyB,EACe,EAAE;IAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAC,iBAAiB,CAC7B,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EACnD,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAC5B,CAAA;AACH,CAAC,CAAA;AAQD,MAAM,UAAU,GAAG,CACjB,KAAqC,EACrC,IAA2B,EAC3B,OAAsB,EACW,EAAE,CACnC,MAAM,CAAC,QAAQ,CAAmB,CAAC,KAAK,EAAE,EAAE,CAC1C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAElE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACtC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;QACtC,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;QACrC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/E,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,QAAuB,EAAQ,EAAE;QAChD,IAAI,OAAO,CAAC,aAAa,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC,GACpE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EACnD,EAAE,CAAA;YACF,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAE5B,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3B,QAAQ,CAAC,KAAK,EAAE,CAAA;QAChB,QAAQ,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC9E,CAAA;AACH,CAAC,CAAC,CACH,CAAA;AAEH,MAAM,YAAY,GAAG,CACnB,IAA2B,EAC3B,GAAW,EACX,OAAyC,EACzC,KAAyB,EACQ,EAAE;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAmB,CAAC,KAAK,EAAE,EAAE,CACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CACrF,SAAS,CAAC,OAAO,CAAC,CACnB,CAAA;QACD,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAElE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;YACtC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAChC,CAAC,CAAA;QACD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;YACtC,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnB,CAAC;QACH,CAAC,CAAA;QACD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACrC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC,CAAA;QACD,MAAM,OAAO,GAAG,CAAC,QAAuB,EAAQ,EAAE;YAChD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC,GACpE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EACnD,EAAE,CAAA;gBACF,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;YACxE,CAAC;QACH,CAAC,CAAA;QAED,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC5B,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAEhC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3B,QAAQ,CAAC,KAAK,EAAE,CAAA;YAChB,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAChB,KAAqC,EACrC,IAA2B,EAC3B,IAAY,EACwB,EAAE,CACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;IACzB,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC,CAAA;IACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAClC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACjC,MAAM,CACJ,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YACnC,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CACrD,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,MAAM,mBAAmB,GAAG,CAC1B,KAA0B,EAC1B,MAAuC,EACjB,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AAE1C,MAAM,gBAAgB,GAA6C,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IACxF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9E,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAC1C,CAAA;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CACrF,SAAS,CAAC,OAAO,CAAC,CACnB,CAAA;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI;YACvC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAChD,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CACxE,CAAA;QACH,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;QACnB,CAAC,CAAC,CACH,EACD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACrC,CAAA;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAE9B,OAAO,mBAAmB,CACxB,KAAK,EACL,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE;YACtB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;SACrB,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAyB,mBAAmB,CAAC;IAC3E,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC;IACvE,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC;IACjF,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;IACnF,qBAAqB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;IAC7F,gBAAgB;CACjB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,mBAAmB,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const quoteArgument: (argument: string) => string;
|
|
2
|
+
export declare const isBatchFile: (file: string) => boolean;
|
|
3
|
+
export declare const defaultPathExt = ".COM;.EXE;.BAT;.CMD";
|
|
4
|
+
export interface WindowsLookup {
|
|
5
|
+
readonly path?: string | undefined;
|
|
6
|
+
readonly pathExt?: string | undefined;
|
|
7
|
+
readonly exists?: (candidate: string) => boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const resolveCommand: (command: string, lookup?: WindowsLookup) => string;
|
|
10
|
+
export interface WindowsInvocation {
|
|
11
|
+
readonly file: string;
|
|
12
|
+
readonly args: ReadonlyArray<string>;
|
|
13
|
+
readonly verbatim: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const batchInvocation: (argv: ReadonlyArray<string>, comspec?: string) => WindowsInvocation;
|
|
16
|
+
export declare const windowsInvocation: (argv: ReadonlyArray<string>, lookup?: WindowsLookup) => WindowsInvocation | undefined;
|
|
17
|
+
//# sourceMappingURL=WindowsCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowsCommand.d.ts","sourceRoot":"","sources":["../src/WindowsCommand.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAG4B,CAAA;AAE7E,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAAuC,CAAA;AAElF,eAAO,MAAM,cAAc,wBAAwB,CAAA;AAEnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;CACjD;AAKD,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,SAAQ,aAAkB,KAAG,MA2B5E,CAAA;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAOD,eAAO,MAAM,eAAe,GAC1B,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,UAAS,MAA4C,KACpD,iBAID,CAAA;AAIF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,aAAa,CAAC,MAAM,CAAC,EAC3B,SAAQ,aAAkB,KACzB,iBAAiB,GAAG,SAOtB,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
// win32 semantics explicitly, never the host's: this module only ever
|
|
3
|
+
// describes Windows, so it should not change meaning with the platform it
|
|
4
|
+
// happens to be reasoned about on — and stays testable off Windows.
|
|
5
|
+
import { win32 as path } from "node:path";
|
|
6
|
+
// Why Windows needs any of this.
|
|
7
|
+
//
|
|
8
|
+
// `az boards query …` works when a human types it into PowerShell, and the
|
|
9
|
+
// same argv fails from `spawn` with `EINVAL`. Both are correct: a shell does
|
|
10
|
+
// two things a shell-less spawn does not.
|
|
11
|
+
//
|
|
12
|
+
// 1. It resolves `az` to a real file using PATHEXT. `spawn` searches PATH
|
|
13
|
+
// but never appends an extension, so a bare `az` is simply not found.
|
|
14
|
+
// 2. It knows a `.cmd`/`.bat` is a script, not an image, and hands it to
|
|
15
|
+
// cmd.exe. Windows has no "execute a script" syscall, and since
|
|
16
|
+
// CVE-2024-27980 Node refuses to spawn one directly at all.
|
|
17
|
+
//
|
|
18
|
+
// So the executor does both itself, rather than turning on a shell. Node's
|
|
19
|
+
// own `shell: true` builds its command line as `${file} ${args.join(" ")}`
|
|
20
|
+
// with no quoting whatsoever, which splits any argument containing a space
|
|
21
|
+
// and hands metacharacters — a WIQL `<>`, say — to cmd.exe as redirection.
|
|
22
|
+
// Quoting each argument first is the whole difference.
|
|
23
|
+
// Arguments a program must receive whole are quoted the way the Microsoft C
|
|
24
|
+
// runtime parses them back: backslashes are literal except before a quote,
|
|
25
|
+
// where they double, and a quote inside the value is escaped.
|
|
26
|
+
export const quoteArgument = (argument) => argument.length > 0 && !/[\s"&|<>^()%!,;=]/.test(argument)
|
|
27
|
+
? argument
|
|
28
|
+
: `"${argument.replace(/(\\*)"/g, '$1$1\\"').replace(/(\\*)$/, "$1$1")}"`;
|
|
29
|
+
export const isBatchFile = (file) => /\.(?:cmd|bat)$/i.test(file);
|
|
30
|
+
export const defaultPathExt = ".COM;.EXE;.BAT;.CMD";
|
|
31
|
+
// What a shell does before running anything: find the file the word means.
|
|
32
|
+
// A command that already carries an extension is taken at its word; one that
|
|
33
|
+
// names a directory is looked for only there.
|
|
34
|
+
export const resolveCommand = (command, lookup = {}) => {
|
|
35
|
+
if (path.extname(command) !== "") {
|
|
36
|
+
return command;
|
|
37
|
+
}
|
|
38
|
+
const exists = lookup.exists ?? existsSync;
|
|
39
|
+
const extensions = (lookup.pathExt ?? process.env["PATHEXT"] ?? defaultPathExt)
|
|
40
|
+
.split(";")
|
|
41
|
+
.map((extension) => extension.trim())
|
|
42
|
+
.filter((extension) => extension.length > 0);
|
|
43
|
+
const directories = command.includes(path.sep) || command.includes("/")
|
|
44
|
+
? [path.dirname(command)]
|
|
45
|
+
: (lookup.path ?? process.env["PATH"] ?? "")
|
|
46
|
+
.split(path.delimiter)
|
|
47
|
+
.filter((directory) => directory.length > 0);
|
|
48
|
+
const name = path.basename(command);
|
|
49
|
+
for (const directory of directories) {
|
|
50
|
+
for (const extension of extensions) {
|
|
51
|
+
const candidate = path.join(directory, `${name}${extension}`);
|
|
52
|
+
if (exists(candidate)) {
|
|
53
|
+
return candidate;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Unresolved is not an error here: spawning reports "command not found"
|
|
58
|
+
// with the name the caller used, which reads better than a guess.
|
|
59
|
+
return command;
|
|
60
|
+
};
|
|
61
|
+
// `cmd.exe /d /s /c "<line>"`: /d skips AutoRun, and /s strips exactly the
|
|
62
|
+
// outer pair of quotes and runs the rest verbatim. Every argument that
|
|
63
|
+
// carries a metacharacter sits inside its own quotes by then, so cmd passes
|
|
64
|
+
// it through instead of acting on it. verbatim is what stops libuv quoting
|
|
65
|
+
// the line a second time.
|
|
66
|
+
export const batchInvocation = (argv, comspec = process.env["ComSpec"] ?? "cmd.exe") => ({
|
|
67
|
+
file: comspec,
|
|
68
|
+
args: ["/d", "/s", "/c", `"${argv.map(quoteArgument).join(" ")}"`],
|
|
69
|
+
verbatim: true
|
|
70
|
+
});
|
|
71
|
+
// The one decision this module exists to make. Off Windows, and for a real
|
|
72
|
+
// executable on it, nothing changes: the command is spawned directly.
|
|
73
|
+
export const windowsInvocation = (argv, lookup = {}) => {
|
|
74
|
+
const [command, ...rest] = argv;
|
|
75
|
+
if (command === undefined) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const resolved = resolveCommand(command, lookup);
|
|
79
|
+
return isBatchFile(resolved) ? batchInvocation([resolved, ...rest]) : undefined;
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=WindowsCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowsCommand.js","sourceRoot":"","sources":["../src/WindowsCommand.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llm4ts/runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.1",
|
|
4
4
|
"description": "Node runner, CLI, terminal, and MCP composition for llm4ts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"./Terminal": "./dist/Terminal.js",
|
|
33
33
|
"./TerminalInteraction": "./dist/TerminalInteraction.js",
|
|
34
34
|
"./Package": "./dist/Package.js",
|
|
35
|
-
"./package.json": "./package.json"
|
|
35
|
+
"./package.json": "./package.json",
|
|
36
|
+
"./WindowsCommand": "./dist/WindowsCommand.js"
|
|
36
37
|
},
|
|
37
38
|
"publishConfig": {
|
|
38
39
|
"access": "public",
|
|
@@ -56,8 +57,8 @@
|
|
|
56
57
|
"typescript"
|
|
57
58
|
],
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"@llm4ts/core": "0.
|
|
60
|
-
"@llm4ts/flow": "0.
|
|
60
|
+
"@llm4ts/core": "0.13.1",
|
|
61
|
+
"@llm4ts/flow": "0.13.1"
|
|
61
62
|
},
|
|
62
63
|
"peerDependencies": {
|
|
63
64
|
"effect": "4.0.0-beta.102"
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
type ProcessExecutorShape
|
|
14
14
|
} from "@llm4ts/core/ProcessExecutor"
|
|
15
15
|
import { InvalidRequestError, ProviderError, type LlmError } from "@llm4ts/core/Errors"
|
|
16
|
+
import { windowsInvocation } from "./WindowsCommand.ts"
|
|
16
17
|
|
|
17
18
|
const maxStderrLines = 256
|
|
18
19
|
|
|
@@ -45,15 +46,24 @@ const spawnChild = (
|
|
|
45
46
|
)
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
// Windows only, and only for a batch file: `az`/`gemini` and friends
|
|
50
|
+
// install as `.cmd`, which has to be resolved through PATHEXT and handed
|
|
51
|
+
// to cmd.exe — the two things a shell does that a shell-less spawn does
|
|
52
|
+
// not. See WindowsCommand.ts for why a shell is not the answer instead.
|
|
53
|
+
const windows = process.platform === "win32" ? windowsInvocation(argv) : undefined
|
|
54
|
+
const file = windows?.file ?? command
|
|
55
|
+
const spawnArgs = windows === undefined ? args : windows.args
|
|
56
|
+
|
|
48
57
|
return Effect.try({
|
|
49
58
|
try: () =>
|
|
50
|
-
spawn(
|
|
59
|
+
spawn(file, spawnArgs, {
|
|
51
60
|
cwd,
|
|
52
61
|
env: {
|
|
53
62
|
...process.env,
|
|
54
63
|
...envVars
|
|
55
64
|
},
|
|
56
|
-
stdio: "pipe"
|
|
65
|
+
stdio: "pipe",
|
|
66
|
+
...(windows === undefined ? {} : { windowsVerbatimArguments: windows.verbatim })
|
|
57
67
|
}),
|
|
58
68
|
catch: (error) => processFailure(argv, errorMessage(error))
|
|
59
69
|
})
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { existsSync } from "node:fs"
|
|
2
|
+
// win32 semantics explicitly, never the host's: this module only ever
|
|
3
|
+
// describes Windows, so it should not change meaning with the platform it
|
|
4
|
+
// happens to be reasoned about on — and stays testable off Windows.
|
|
5
|
+
import { win32 as path } from "node:path"
|
|
6
|
+
|
|
7
|
+
// Why Windows needs any of this.
|
|
8
|
+
//
|
|
9
|
+
// `az boards query …` works when a human types it into PowerShell, and the
|
|
10
|
+
// same argv fails from `spawn` with `EINVAL`. Both are correct: a shell does
|
|
11
|
+
// two things a shell-less spawn does not.
|
|
12
|
+
//
|
|
13
|
+
// 1. It resolves `az` to a real file using PATHEXT. `spawn` searches PATH
|
|
14
|
+
// but never appends an extension, so a bare `az` is simply not found.
|
|
15
|
+
// 2. It knows a `.cmd`/`.bat` is a script, not an image, and hands it to
|
|
16
|
+
// cmd.exe. Windows has no "execute a script" syscall, and since
|
|
17
|
+
// CVE-2024-27980 Node refuses to spawn one directly at all.
|
|
18
|
+
//
|
|
19
|
+
// So the executor does both itself, rather than turning on a shell. Node's
|
|
20
|
+
// own `shell: true` builds its command line as `${file} ${args.join(" ")}`
|
|
21
|
+
// with no quoting whatsoever, which splits any argument containing a space
|
|
22
|
+
// and hands metacharacters — a WIQL `<>`, say — to cmd.exe as redirection.
|
|
23
|
+
// Quoting each argument first is the whole difference.
|
|
24
|
+
|
|
25
|
+
// Arguments a program must receive whole are quoted the way the Microsoft C
|
|
26
|
+
// runtime parses them back: backslashes are literal except before a quote,
|
|
27
|
+
// where they double, and a quote inside the value is escaped.
|
|
28
|
+
export const quoteArgument = (argument: string): string =>
|
|
29
|
+
argument.length > 0 && !/[\s"&|<>^()%!,;=]/.test(argument)
|
|
30
|
+
? argument
|
|
31
|
+
: `"${argument.replace(/(\\*)"/g, '$1$1\\"').replace(/(\\*)$/, "$1$1")}"`
|
|
32
|
+
|
|
33
|
+
export const isBatchFile = (file: string): boolean => /\.(?:cmd|bat)$/i.test(file)
|
|
34
|
+
|
|
35
|
+
export const defaultPathExt = ".COM;.EXE;.BAT;.CMD"
|
|
36
|
+
|
|
37
|
+
export interface WindowsLookup {
|
|
38
|
+
readonly path?: string | undefined
|
|
39
|
+
readonly pathExt?: string | undefined
|
|
40
|
+
readonly exists?: (candidate: string) => boolean
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// What a shell does before running anything: find the file the word means.
|
|
44
|
+
// A command that already carries an extension is taken at its word; one that
|
|
45
|
+
// names a directory is looked for only there.
|
|
46
|
+
export const resolveCommand = (command: string, lookup: WindowsLookup = {}): string => {
|
|
47
|
+
if (path.extname(command) !== "") {
|
|
48
|
+
return command
|
|
49
|
+
}
|
|
50
|
+
const exists = lookup.exists ?? existsSync
|
|
51
|
+
const extensions = (lookup.pathExt ?? process.env["PATHEXT"] ?? defaultPathExt)
|
|
52
|
+
.split(";")
|
|
53
|
+
.map((extension) => extension.trim())
|
|
54
|
+
.filter((extension) => extension.length > 0)
|
|
55
|
+
const directories =
|
|
56
|
+
command.includes(path.sep) || command.includes("/")
|
|
57
|
+
? [path.dirname(command)]
|
|
58
|
+
: (lookup.path ?? process.env["PATH"] ?? "")
|
|
59
|
+
.split(path.delimiter)
|
|
60
|
+
.filter((directory) => directory.length > 0)
|
|
61
|
+
const name = path.basename(command)
|
|
62
|
+
for (const directory of directories) {
|
|
63
|
+
for (const extension of extensions) {
|
|
64
|
+
const candidate = path.join(directory, `${name}${extension}`)
|
|
65
|
+
if (exists(candidate)) {
|
|
66
|
+
return candidate
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Unresolved is not an error here: spawning reports "command not found"
|
|
71
|
+
// with the name the caller used, which reads better than a guess.
|
|
72
|
+
return command
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface WindowsInvocation {
|
|
76
|
+
readonly file: string
|
|
77
|
+
readonly args: ReadonlyArray<string>
|
|
78
|
+
readonly verbatim: boolean
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// `cmd.exe /d /s /c "<line>"`: /d skips AutoRun, and /s strips exactly the
|
|
82
|
+
// outer pair of quotes and runs the rest verbatim. Every argument that
|
|
83
|
+
// carries a metacharacter sits inside its own quotes by then, so cmd passes
|
|
84
|
+
// it through instead of acting on it. verbatim is what stops libuv quoting
|
|
85
|
+
// the line a second time.
|
|
86
|
+
export const batchInvocation = (
|
|
87
|
+
argv: ReadonlyArray<string>,
|
|
88
|
+
comspec: string = process.env["ComSpec"] ?? "cmd.exe"
|
|
89
|
+
): WindowsInvocation => ({
|
|
90
|
+
file: comspec,
|
|
91
|
+
args: ["/d", "/s", "/c", `"${argv.map(quoteArgument).join(" ")}"`],
|
|
92
|
+
verbatim: true
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
// The one decision this module exists to make. Off Windows, and for a real
|
|
96
|
+
// executable on it, nothing changes: the command is spawned directly.
|
|
97
|
+
export const windowsInvocation = (
|
|
98
|
+
argv: ReadonlyArray<string>,
|
|
99
|
+
lookup: WindowsLookup = {}
|
|
100
|
+
): WindowsInvocation | undefined => {
|
|
101
|
+
const [command, ...rest] = argv
|
|
102
|
+
if (command === undefined) {
|
|
103
|
+
return undefined
|
|
104
|
+
}
|
|
105
|
+
const resolved = resolveCommand(command, lookup)
|
|
106
|
+
return isBatchFile(resolved) ? batchInvocation([resolved, ...rest]) : undefined
|
|
107
|
+
}
|