@botiverse/oar 0.0.4 → 0.0.6

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 (115) hide show
  1. package/README.md +15 -4
  2. package/dist/contracts/account-usage.d.ts +1 -0
  3. package/dist/contracts/account-usage.d.ts.map +1 -1
  4. package/dist/contracts/model-catalog.d.ts +51 -0
  5. package/dist/contracts/model-catalog.d.ts.map +1 -0
  6. package/dist/contracts/model-catalog.js +9 -0
  7. package/dist/contracts/model-catalog.js.map +1 -0
  8. package/dist/contracts/provider-auth.d.ts +77 -0
  9. package/dist/contracts/provider-auth.d.ts.map +1 -0
  10. package/dist/contracts/provider-auth.js +9 -0
  11. package/dist/contracts/provider-auth.js.map +1 -0
  12. package/dist/index.d.ts +12 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +17 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/runtimes/claude/account-usage.d.ts +3 -1
  17. package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
  18. package/dist/runtimes/claude/account-usage.js +26 -5
  19. package/dist/runtimes/claude/account-usage.js.map +1 -1
  20. package/dist/runtimes/codex/account-usage.d.ts +21 -0
  21. package/dist/runtimes/codex/account-usage.d.ts.map +1 -1
  22. package/dist/runtimes/codex/account-usage.js +27 -10
  23. package/dist/runtimes/codex/account-usage.js.map +1 -1
  24. package/dist/runtimes/grok/account-usage.d.ts +6 -0
  25. package/dist/runtimes/grok/account-usage.d.ts.map +1 -0
  26. package/dist/runtimes/grok/account-usage.js +142 -0
  27. package/dist/runtimes/grok/account-usage.js.map +1 -0
  28. package/dist/runtimes/grok/index.d.ts +9 -0
  29. package/dist/runtimes/grok/index.d.ts.map +1 -0
  30. package/dist/runtimes/grok/index.js +13 -0
  31. package/dist/runtimes/grok/index.js.map +1 -0
  32. package/dist/runtimes/grok/installation.d.ts +4 -0
  33. package/dist/runtimes/grok/installation.d.ts.map +1 -0
  34. package/dist/runtimes/grok/installation.js +19 -0
  35. package/dist/runtimes/grok/installation.js.map +1 -0
  36. package/dist/runtimes/grok/session.d.ts +10 -0
  37. package/dist/runtimes/grok/session.d.ts.map +1 -0
  38. package/dist/runtimes/grok/session.js +66 -0
  39. package/dist/runtimes/grok/session.js.map +1 -0
  40. package/dist/runtimes/kimi/account-usage.d.ts +9 -0
  41. package/dist/runtimes/kimi/account-usage.d.ts.map +1 -0
  42. package/dist/runtimes/kimi/account-usage.js +241 -0
  43. package/dist/runtimes/kimi/account-usage.js.map +1 -0
  44. package/dist/runtimes/kimi/auth-config.d.ts +12 -0
  45. package/dist/runtimes/kimi/auth-config.d.ts.map +1 -0
  46. package/dist/runtimes/kimi/auth-config.js +90 -0
  47. package/dist/runtimes/kimi/auth-config.js.map +1 -0
  48. package/dist/runtimes/kimi/index.d.ts +9 -0
  49. package/dist/runtimes/kimi/index.d.ts.map +1 -0
  50. package/dist/runtimes/kimi/index.js +13 -0
  51. package/dist/runtimes/kimi/index.js.map +1 -0
  52. package/dist/runtimes/kimi/installation.d.ts +4 -0
  53. package/dist/runtimes/kimi/installation.d.ts.map +1 -0
  54. package/dist/runtimes/kimi/installation.js +18 -0
  55. package/dist/runtimes/kimi/installation.js.map +1 -0
  56. package/dist/runtimes/kimi/oauth-token.d.ts +12 -0
  57. package/dist/runtimes/kimi/oauth-token.d.ts.map +1 -0
  58. package/dist/runtimes/kimi/oauth-token.js +38 -0
  59. package/dist/runtimes/kimi/oauth-token.js.map +1 -0
  60. package/dist/runtimes/kimi/session.d.ts +7 -0
  61. package/dist/runtimes/kimi/session.d.ts.map +1 -0
  62. package/dist/runtimes/kimi/session.js +39 -0
  63. package/dist/runtimes/kimi/session.js.map +1 -0
  64. package/dist/runtimes/pi/auth.d.ts +16 -0
  65. package/dist/runtimes/pi/auth.d.ts.map +1 -0
  66. package/dist/runtimes/pi/auth.js +124 -0
  67. package/dist/runtimes/pi/auth.js.map +1 -0
  68. package/dist/runtimes/pi/catalog.d.ts +10 -0
  69. package/dist/runtimes/pi/catalog.d.ts.map +1 -0
  70. package/dist/runtimes/pi/catalog.js +66 -0
  71. package/dist/runtimes/pi/catalog.js.map +1 -0
  72. package/dist/shared/acp/errors.d.ts +16 -0
  73. package/dist/shared/acp/errors.d.ts.map +1 -0
  74. package/dist/shared/acp/errors.js +25 -0
  75. package/dist/shared/acp/errors.js.map +1 -0
  76. package/dist/shared/acp/process.d.ts +24 -0
  77. package/dist/shared/acp/process.d.ts.map +1 -0
  78. package/dist/shared/acp/process.js +88 -0
  79. package/dist/shared/acp/process.js.map +1 -0
  80. package/dist/shared/acp/profile.d.ts +36 -0
  81. package/dist/shared/acp/profile.d.ts.map +1 -0
  82. package/dist/shared/acp/profile.js +104 -0
  83. package/dist/shared/acp/profile.js.map +1 -0
  84. package/dist/shared/acp/projection.d.ts +21 -0
  85. package/dist/shared/acp/projection.d.ts.map +1 -0
  86. package/dist/shared/acp/projection.js +160 -0
  87. package/dist/shared/acp/projection.js.map +1 -0
  88. package/dist/shared/acp/session.d.ts +5 -0
  89. package/dist/shared/acp/session.d.ts.map +1 -0
  90. package/dist/shared/acp/session.js +254 -0
  91. package/dist/shared/acp/session.js.map +1 -0
  92. package/dist/shared/acp/terminal.d.ts +17 -0
  93. package/dist/shared/acp/terminal.d.ts.map +1 -0
  94. package/dist/shared/acp/terminal.js +193 -0
  95. package/dist/shared/acp/terminal.js.map +1 -0
  96. package/dist/shared/executable/index.d.ts +0 -1
  97. package/dist/shared/executable/index.d.ts.map +1 -1
  98. package/dist/shared/executable/index.js.map +1 -1
  99. package/dist/shared/executable/process.d.ts +16 -15
  100. package/dist/shared/executable/process.d.ts.map +1 -1
  101. package/dist/shared/executable/process.js +46 -32
  102. package/dist/shared/executable/process.js.map +1 -1
  103. package/dist/shared/executable/resolve.d.ts +2 -15
  104. package/dist/shared/executable/resolve.d.ts.map +1 -1
  105. package/dist/shared/executable/resolve.js +4 -61
  106. package/dist/shared/executable/resolve.js.map +1 -1
  107. package/dist/shared/executable/version.d.ts +1 -1
  108. package/dist/shared/executable/version.d.ts.map +1 -1
  109. package/dist/shared/executable/version.js +2 -2
  110. package/dist/shared/executable/version.js.map +1 -1
  111. package/dist/shared/installation.d.ts +6 -1
  112. package/dist/shared/installation.d.ts.map +1 -1
  113. package/dist/shared/installation.js +11 -9
  114. package/dist/shared/installation.js.map +1 -1
  115. package/package.json +6 -3
@@ -1,19 +1,16 @@
1
1
  import spawn from "cross-spawn";
2
- /** Windows npm shims are .cmd/.bat files, which modern Node refuses to spawn without a shell (EINVAL). Line processes go through cross-spawn instead (correct cmd arg quoting); this predicate remains for one-shot execFile calls, whose args must stay SINGLE-WORD on Windows because shell:true does not quote. */
2
+ /** Windows npm shims need a shell for one-shot execFile calls. */
3
3
  export function requiresShell(command, platform) {
4
4
  return platform === "win32" && /\.(?:cmd|bat)$/iu.test(command);
5
5
  }
6
+ /**
7
+ * Spawn through cross-spawn so Windows .cmd shims preserve multi-word args.
8
+ * Line parsing is attached lazily; protocol SDKs can consume the raw streams.
9
+ */
6
10
  export function spawnLineProcess(command, args, options = {}) {
7
- // cross-spawn, not node's spawn: Windows .cmd shims need a shell, and
8
- // node's shell:true joins args UNQUOTED — a multi-word argument (e.g. a
9
- // --system-prompt value) silently truncates at its first space (caught by
10
- // the system-prompt snapshots on Windows CI). cross-spawn does the cmd
11
- // escaping correctly and is a no-op wrapper elsewhere.
12
11
  const child = spawn(command, [...args], {
13
12
  ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
14
13
  env: options.env ?? process.env,
15
- // OAR_CHILD_STDERR=inherit surfaces child stderr on the parent's — the
16
- // debugging knob for "the process died and nobody knows why".
17
14
  stdio: ["pipe", "pipe", process.env.OAR_CHILD_STDERR === "inherit" ? "inherit" : "ignore"],
18
15
  });
19
16
  const { stdin, stdout } = child;
@@ -23,50 +20,67 @@ export function spawnLineProcess(command, args, options = {}) {
23
20
  const lineHandlers = [];
24
21
  const exitHandlers = [];
25
22
  let buffer = "";
23
+ let readingLines = false;
26
24
  let ended = false;
25
+ let exitCode = null;
27
26
  const { promise: spawned, resolve: spawnOk, reject: spawnFailed } = Promise.withResolvers();
28
27
  const { promise: exited, resolve: exitDone } = Promise.withResolvers();
29
28
  child.once("spawn", spawnOk);
30
29
  const end = (code) => {
31
- if (!ended) {
32
- ended = true;
33
- for (const handler of exitHandlers) {
34
- handler(code);
35
- }
36
- exitDone(code);
30
+ if (ended) {
31
+ return;
37
32
  }
38
- };
39
- stdout.on("data", (chunk) => {
40
- buffer += chunk.toString();
41
- const lines = buffer.split("\n");
42
- buffer = lines.pop() ?? "";
43
- for (const raw of lines) {
44
- const line = raw.trim();
45
- if (line.length > 0) {
46
- for (const handler of lineHandlers) {
47
- handler(line);
48
- }
49
- }
33
+ ended = true;
34
+ exitCode = code;
35
+ for (const handler of exitHandlers) {
36
+ handler(code);
50
37
  }
51
- });
52
- child.on("exit", (code) => {
53
- end(code);
54
- });
38
+ exitDone(code);
39
+ };
40
+ child.on("exit", end);
55
41
  child.on("error", (error) => {
56
42
  spawnFailed(error);
57
43
  end(null);
58
44
  });
45
+ const readLines = () => {
46
+ stdout.on("data", (chunk) => {
47
+ buffer += chunk.toString();
48
+ const lines = buffer.split("\n");
49
+ buffer = lines.pop() ?? "";
50
+ for (const raw of lines) {
51
+ const line = raw.trim();
52
+ if (line.length > 0) {
53
+ for (const handler of lineHandlers) {
54
+ handler(line);
55
+ }
56
+ }
57
+ }
58
+ });
59
+ };
59
60
  return {
60
61
  spawned,
61
62
  exited,
62
- write(text) {
63
+ stdin,
64
+ stdout,
65
+ write: (text) => {
63
66
  stdin.write(text);
64
67
  },
65
68
  onLine(handler) {
66
69
  lineHandlers.push(handler);
70
+ if (!readingLines) {
71
+ readingLines = true;
72
+ readLines();
73
+ }
67
74
  },
68
75
  onExit(handler) {
69
- exitHandlers.push(handler);
76
+ if (ended) {
77
+ queueMicrotask(() => {
78
+ handler(exitCode);
79
+ });
80
+ }
81
+ else {
82
+ exitHandlers.push(handler);
83
+ }
70
84
  },
71
85
  kill() {
72
86
  stdin.end();
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAuBhC,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,QAAyB;IACtE,OAAO,QAAQ,KAAK,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,IAAuB,EACvB,UAA0B,EAAE;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;QACtC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;KAC3F,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,YAAY,GAA+B,EAAE,CAAC;IACpD,MAAM,YAAY,GAAsC,EAAE,CAAC;IAC3D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;IAClG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,aAAa,EAAiB,CAAC;IACtF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,IAAmB,EAAQ,EAAE;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,KAAK,GAAG,IAAI,CAAC;QACb,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;wBACnC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACd,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,CAAC,OAAO;YACZ,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAC;gBACpB,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,CAAC,OAAO;YACZ,IAAI,KAAK,EAAE,CAAC;gBACV,cAAc,CAAC,GAAG,EAAE;oBAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI;YACF,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,16 +1,3 @@
1
- /** The one execFileSync shape resolution needs a typed seam for tests. */
2
- export type ExecFileSyncLike = (command: string, args: readonly string[], options: {
3
- readonly env: NodeJS.ProcessEnv;
4
- readonly encoding: "utf8";
5
- readonly stdio: readonly ["ignore", "pipe", "ignore"];
6
- readonly timeout?: number;
7
- }) => string | Buffer;
8
- export interface ExecutableResolveOptions {
9
- readonly platform?: NodeJS.Platform;
10
- readonly env?: NodeJS.ProcessEnv;
11
- readonly execFileSyncFn?: ExecFileSyncLike;
12
- readonly existsSyncFn?: (filePath: string) => boolean;
13
- }
14
- /** Resolve one executable without invoking a shell. */
15
- export declare function resolveExecutable(executable: string, options?: ExecutableResolveOptions): string | null;
1
+ /** Resolve one executable through PATH (and PATHEXT on Windows) without spawning anything. */
2
+ export declare function resolveExecutable(executable: string): string | null;
16
3
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/resolve.ts"],"names":[],"mappings":"AAIA,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IACP,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,KACE,MAAM,GAAG,MAAM,CAAC;AAErB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACvD;AAkDD,uDAAuD;AACvD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,wBAA6B,GACrC,MAAM,GAAG,IAAI,CAiBf"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/resolve.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnE"}
@@ -1,63 +1,6 @@
1
- import { execFileSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import path from "node:path";
4
- function firstLine(value) {
5
- const line = (typeof value === "string" ? value : value.toString()).trim().split(/\r?\n/u)[0];
6
- return line === undefined || line.length === 0 ? null : line;
7
- }
8
- function resolveWindows(executable, env, execFile, exists) {
9
- // The name travels via env, NOT as a trailing argument: powershell -Command
10
- // appends trailing arguments to the command string instead of binding $args,
11
- // which silently resolved nothing (caught by CI once Windows ran for real).
12
- const script = [
13
- "$cmd = Get-Command -Name $env:OAR_RESOLVE_TARGET -ErrorAction Stop | Select-Object -First 1",
14
- "if ($cmd.Path) { $cmd.Path } elseif ($cmd.Source) { $cmd.Source }",
15
- ].join("; ");
16
- try {
17
- const resolved = firstLine(execFile("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script],
18
- // Cold powershell startup on CI runners routinely exceeds 1s; keep this
19
- // generous — resolution is rare and cached by callers, not hot-path.
20
- {
21
- env: { ...env, OAR_RESOLVE_TARGET: executable },
22
- encoding: "utf8",
23
- stdio: ["ignore", "pipe", "ignore"],
24
- timeout: 15_000,
25
- }));
26
- if (resolved === null || !resolved.toLowerCase().endsWith(".ps1")) {
27
- return resolved;
28
- }
29
- const directory = path.dirname(resolved);
30
- const base = path.basename(resolved, ".ps1");
31
- for (const extension of [".cmd", ".bat", ".exe", ""]) {
32
- const candidate = path.join(directory, `${base}${extension}`);
33
- if (exists(candidate)) {
34
- return candidate;
35
- }
36
- }
37
- return null;
38
- }
39
- catch {
40
- return null;
41
- }
42
- }
43
- /** Resolve one executable without invoking a shell. */
44
- export function resolveExecutable(executable, options = {}) {
45
- const platform = options.platform ?? process.platform;
46
- const env = options.env ?? process.env;
47
- const execFile = options.execFileSyncFn ?? execFileSync;
48
- const exists = options.existsSyncFn ?? existsSync;
49
- if (platform === "win32") {
50
- return resolveWindows(executable, env, execFile, exists);
51
- }
52
- try {
53
- return firstLine(execFile("which", [executable], {
54
- env,
55
- encoding: "utf8",
56
- stdio: ["ignore", "pipe", "ignore"],
57
- }));
58
- }
59
- catch {
60
- return null;
61
- }
1
+ import which from "which";
2
+ /** Resolve one executable through PATH (and PATHEXT on Windows) without spawning anything. */
3
+ export function resolveExecutable(executable) {
4
+ return which.sync(executable, { nothrow: true });
62
5
  }
63
6
  //# sourceMappingURL=resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/shared/executable/resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/shared/executable/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -2,5 +2,5 @@
2
2
  * Read one executable's `--version` first line.
3
3
  * Returns undefined when the executable rejects the flag; throws only when it cannot be spawned.
4
4
  */
5
- export declare function readExecutableVersion(executable: string): Promise<string | undefined>;
5
+ export declare function readExecutableVersion(executable: string, timeoutMs?: number): Promise<string | undefined>;
6
6
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU3F"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B"}
@@ -3,8 +3,8 @@ import { runExecutable } from "./run.js";
3
3
  * Read one executable's `--version` first line.
4
4
  * Returns undefined when the executable rejects the flag; throws only when it cannot be spawned.
5
5
  */
6
- export async function readExecutableVersion(executable) {
7
- const result = await runExecutable(executable, ["--version"]);
6
+ export async function readExecutableVersion(executable, timeoutMs) {
7
+ const result = await runExecutable(executable, ["--version"], timeoutMs === undefined ? {} : { timeoutMs });
8
8
  if (!result.ok && result.exitCode === null) {
9
9
  throw new Error(`Failed to run ${executable} --version`);
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/shared/executable/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,SAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,UAAU,EACV,CAAC,WAAW,CAAC,EACb,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAC7C,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
@@ -1,9 +1,14 @@
1
1
  import type { InstallationProbe } from "../contracts/installation.js";
2
+ export interface ExecutableInstallationOptions {
3
+ readonly readinessTimeoutMs?: number;
4
+ readonly versionTimeoutMs?: number;
5
+ }
6
+ export type ExecutableFallbacks = readonly string[] | (() => readonly string[]);
2
7
  /**
3
8
  * An installation probed from an executable: the env var pins one candidate
4
9
  * exclusively; otherwise the command name and fallbacks are tried in order and
5
10
  * the first usable candidate wins. When readiness args are given, a candidate
6
11
  * must run them successfully or the probe moves on to the next one.
7
12
  */
8
- export declare function executableInstallation(envVar: string, command: string, fallbacks?: readonly string[], readiness?: readonly string[]): InstallationProbe;
13
+ export declare function executableInstallation(envVar: string, command: string, fallbacks?: ExecutableFallbacks, readiness?: readonly string[], options?: ExecutableInstallationOptions): InstallationProbe;
9
14
  //# sourceMappingURL=installation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAC;AAmB5F;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,SAAS,MAAM,EAAO,EACjC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAC5B,iBAAiB,CAgCnB"}
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,8BAA8B,CAAC;AAK5F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC,CAAC;AAmBhF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,mBAAwB,EACnC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,6BAAkC,GAC1C,iBAAiB,CAwCnB"}
@@ -1,15 +1,13 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { readExecutableVersion, resolveExecutable, runExecutable } from "./executable/index.js";
3
- // An entry with a path separator is a pinned path: it must exist as given and
4
- // never silently falls back to a different binary. A bare name resolves on PATH.
5
3
  function usable(entry) {
6
4
  if (entry.includes("/") || entry.includes("\\")) {
7
5
  return existsSync(entry) ? entry : null;
8
6
  }
9
7
  return resolveExecutable(entry);
10
8
  }
11
- async function versionSnapshot(command) {
12
- const version = await readExecutableVersion(command);
9
+ async function versionSnapshot(command, timeoutMs) {
10
+ const version = await readExecutableVersion(command, timeoutMs);
13
11
  return version === undefined
14
12
  ? { kind: "available", via: "executable", command }
15
13
  : { kind: "available", via: "executable", command, version };
@@ -20,10 +18,12 @@ async function versionSnapshot(command) {
20
18
  * the first usable candidate wins. When readiness args are given, a candidate
21
19
  * must run them successfully or the probe moves on to the next one.
22
20
  */
23
- export function executableInstallation(envVar, command, fallbacks = [], readiness) {
21
+ export function executableInstallation(envVar, command, fallbacks = [], readiness, options = {}) {
24
22
  return async () => {
25
23
  const pinned = process.env[envVar];
26
- const entries = pinned !== undefined && pinned !== "" ? [pinned] : [command, ...fallbacks];
24
+ const entries = pinned !== undefined && pinned !== ""
25
+ ? [pinned]
26
+ : [command, ...(typeof fallbacks === "function" ? fallbacks() : fallbacks)];
27
27
  const found = [];
28
28
  for (const entry of entries) {
29
29
  const candidate = usable(entry);
@@ -36,15 +36,17 @@ export function executableInstallation(envVar, command, fallbacks = [], readines
36
36
  return { kind: "not_found" };
37
37
  }
38
38
  if (readiness === undefined) {
39
- return versionSnapshot(first);
39
+ return versionSnapshot(first, options.versionTimeoutMs);
40
40
  }
41
41
  for (const candidate of found) {
42
- const result = await runExecutable(candidate, readiness);
42
+ const result = await runExecutable(candidate, readiness, options.readinessTimeoutMs === undefined ? {} : {
43
+ timeoutMs: options.readinessTimeoutMs,
44
+ });
43
45
  if (!result.ok && result.exitCode === null) {
44
46
  throw new Error(`Failed to run ${candidate} ${readiness.join(" ")}`);
45
47
  }
46
48
  if (result.ok) {
47
- return versionSnapshot(candidate);
49
+ return versionSnapshot(candidate, options.versionTimeoutMs);
48
50
  }
49
51
  }
50
52
  return { kind: "unsupported", reason: `${readiness.join(" ")} failed` };
@@ -1 +1 @@
1
- {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEhG,8EAA8E;AAC9E,iFAAiF;AACjF,SAAS,MAAM,CAAC,KAAa;IAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE;QACnD,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,OAAe,EACf,YAA+B,EAAE,EACjC,SAA6B;IAE7B,OAAO,KAAK,IAAmC,EAAE;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;QAE3F,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/shared/installation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/oar",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "Provider-independent contracts for observing agent runtimes",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -35,10 +35,13 @@
35
35
  "@earendil-works/pi-coding-agent": "^0.84.2"
36
36
  },
37
37
  "dependencies": {
38
- "cross-spawn": "^7.0.6"
38
+ "@agentclientprotocol/sdk": "^1.4.0",
39
+ "cross-spawn": "^7.0.6",
40
+ "which": "^2.0.2"
39
41
  },
40
42
  "devDependencies": {
41
- "@types/cross-spawn": "^6.0.6"
43
+ "@types/cross-spawn": "^6.0.6",
44
+ "@types/which": "^2.0.2"
42
45
  },
43
46
  "scripts": {
44
47
  "build": "tsc -p tsconfig.build.json",