@llm4ts/runner 0.13.0 → 0.13.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.
@@ -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;AAqTrC,eAAO,MAAM,mBAAmB,EAAE,oBAMhC,CAAA;AAEF,eAAO,MAAM,uBAAuB,4CAAsD,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(command, args, {
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":"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"}
@@ -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.13.0",
3
+ "version": "0.13.2",
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.13.0",
60
- "@llm4ts/flow": "0.13.0"
60
+ "@llm4ts/core": "0.13.2",
61
+ "@llm4ts/flow": "0.13.2"
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(command, args, {
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
+ }