@visorcraft/idlehands 1.1.17 → 1.2.0

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 (212) hide show
  1. package/dist/agent/formatting.js +30 -13
  2. package/dist/agent/formatting.js.map +1 -1
  3. package/dist/agent/review-artifact.js +12 -8
  4. package/dist/agent/review-artifact.js.map +1 -1
  5. package/dist/agent/tool-calls.js +57 -20
  6. package/dist/agent/tool-calls.js.map +1 -1
  7. package/dist/agent/tool-loop-detection.js +310 -0
  8. package/dist/agent/tool-loop-detection.js.map +1 -0
  9. package/dist/agent/tool-loop-guard.js +235 -0
  10. package/dist/agent/tool-loop-guard.js.map +1 -0
  11. package/dist/agent.js +442 -141
  12. package/dist/agent.js.map +1 -1
  13. package/dist/anton/controller.js +46 -30
  14. package/dist/anton/controller.js.map +1 -1
  15. package/dist/anton/lock.js +5 -1
  16. package/dist/anton/lock.js.map +1 -1
  17. package/dist/anton/parser.js +18 -19
  18. package/dist/anton/parser.js.map +1 -1
  19. package/dist/anton/prompt.js +42 -11
  20. package/dist/anton/prompt.js.map +1 -1
  21. package/dist/anton/reporter.js.map +1 -1
  22. package/dist/anton/session.js.map +1 -1
  23. package/dist/anton/verifier.js +3 -5
  24. package/dist/anton/verifier.js.map +1 -1
  25. package/dist/bench/compare.js +53 -20
  26. package/dist/bench/compare.js.map +1 -1
  27. package/dist/bench/openclaw.js +4 -4
  28. package/dist/bench/openclaw.js.map +1 -1
  29. package/dist/bench/report.js +11 -3
  30. package/dist/bench/report.js.map +1 -1
  31. package/dist/bench/runner.js +20 -14
  32. package/dist/bench/runner.js.map +1 -1
  33. package/dist/bot/commands.js +65 -31
  34. package/dist/bot/commands.js.map +1 -1
  35. package/dist/bot/confirm-discord.js +32 -9
  36. package/dist/bot/confirm-discord.js.map +1 -1
  37. package/dist/bot/confirm-telegram.js +26 -10
  38. package/dist/bot/confirm-telegram.js.map +1 -1
  39. package/dist/bot/dir-guard.js +18 -3
  40. package/dist/bot/dir-guard.js.map +1 -1
  41. package/dist/bot/discord-routing.js +28 -4
  42. package/dist/bot/discord-routing.js.map +1 -1
  43. package/dist/bot/discord-streaming.js +3 -3
  44. package/dist/bot/discord-streaming.js.map +1 -1
  45. package/dist/bot/discord.js +82 -37
  46. package/dist/bot/discord.js.map +1 -1
  47. package/dist/bot/escalation.js +124 -0
  48. package/dist/bot/escalation.js.map +1 -0
  49. package/dist/bot/format.js +2 -5
  50. package/dist/bot/format.js.map +1 -1
  51. package/dist/bot/session-manager.js +17 -6
  52. package/dist/bot/session-manager.js.map +1 -1
  53. package/dist/bot/telegram.js +88 -28
  54. package/dist/bot/telegram.js.map +1 -1
  55. package/dist/cli/agent-turn.js +10 -4
  56. package/dist/cli/agent-turn.js.map +1 -1
  57. package/dist/cli/args.js +51 -9
  58. package/dist/cli/args.js.map +1 -1
  59. package/dist/cli/bot.js +19 -9
  60. package/dist/cli/bot.js.map +1 -1
  61. package/dist/cli/build-repl-context.js +60 -26
  62. package/dist/cli/build-repl-context.js.map +1 -1
  63. package/dist/cli/command-registry.js.map +1 -1
  64. package/dist/cli/commands/anton.js +5 -3
  65. package/dist/cli/commands/anton.js.map +1 -1
  66. package/dist/cli/commands/editing.js +27 -12
  67. package/dist/cli/commands/editing.js.map +1 -1
  68. package/dist/cli/commands/model.js +16 -7
  69. package/dist/cli/commands/model.js.map +1 -1
  70. package/dist/cli/commands/project.js +52 -17
  71. package/dist/cli/commands/project.js.map +1 -1
  72. package/dist/cli/commands/runtime.js +1 -1
  73. package/dist/cli/commands/runtime.js.map +1 -1
  74. package/dist/cli/commands/secrets.js +279 -0
  75. package/dist/cli/commands/secrets.js.map +1 -0
  76. package/dist/cli/commands/session.js +49 -1
  77. package/dist/cli/commands/session.js.map +1 -1
  78. package/dist/cli/commands/tools.js +3 -1
  79. package/dist/cli/commands/tools.js.map +1 -1
  80. package/dist/cli/commands/trifecta.js +1 -1
  81. package/dist/cli/commands/trifecta.js.map +1 -1
  82. package/dist/cli/commands/tui.js.map +1 -1
  83. package/dist/cli/init.js +50 -16
  84. package/dist/cli/init.js.map +1 -1
  85. package/dist/cli/input.js +25 -7
  86. package/dist/cli/input.js.map +1 -1
  87. package/dist/cli/oneshot.js +31 -19
  88. package/dist/cli/oneshot.js.map +1 -1
  89. package/dist/cli/repl-dispatch.js +10 -6
  90. package/dist/cli/repl-dispatch.js.map +1 -1
  91. package/dist/cli/runtime-cmds.js +110 -46
  92. package/dist/cli/runtime-cmds.js.map +1 -1
  93. package/dist/cli/service.js +3 -3
  94. package/dist/cli/service.js.map +1 -1
  95. package/dist/cli/session-state.js +12 -5
  96. package/dist/cli/session-state.js.map +1 -1
  97. package/dist/cli/setup.js +86 -33
  98. package/dist/cli/setup.js.map +1 -1
  99. package/dist/cli/shell.js +4 -4
  100. package/dist/cli/shell.js.map +1 -1
  101. package/dist/cli/status.js +56 -12
  102. package/dist/cli/status.js.map +1 -1
  103. package/dist/client.js +40 -21
  104. package/dist/client.js.map +1 -1
  105. package/dist/commands.js +1 -1
  106. package/dist/commands.js.map +1 -1
  107. package/dist/config.js +171 -15
  108. package/dist/config.js.map +1 -1
  109. package/dist/confirm/auto.js.map +1 -1
  110. package/dist/confirm/headless.js +13 -2
  111. package/dist/confirm/headless.js.map +1 -1
  112. package/dist/confirm/terminal.js +1 -5
  113. package/dist/confirm/terminal.js.map +1 -1
  114. package/dist/context.js +9 -3
  115. package/dist/context.js.map +1 -1
  116. package/dist/git.js +56 -61
  117. package/dist/git.js.map +1 -1
  118. package/dist/harnesses.js +137 -37
  119. package/dist/harnesses.js.map +1 -1
  120. package/dist/history.js +12 -4
  121. package/dist/history.js.map +1 -1
  122. package/dist/hooks/index.js +2 -2
  123. package/dist/hooks/index.js.map +1 -1
  124. package/dist/hooks/loader.js +6 -5
  125. package/dist/hooks/loader.js.map +1 -1
  126. package/dist/hooks/manager.js.map +1 -1
  127. package/dist/hooks/plugins/example-console.js.map +1 -1
  128. package/dist/hooks/scaffold.js +8 -6
  129. package/dist/hooks/scaffold.js.map +1 -1
  130. package/dist/index.js +120 -66
  131. package/dist/index.js.map +1 -1
  132. package/dist/indexer.js +6 -18
  133. package/dist/indexer.js.map +1 -1
  134. package/dist/jsonrpc.js.map +1 -1
  135. package/dist/lens.js +38 -16
  136. package/dist/lens.js.map +1 -1
  137. package/dist/lsp.js +60 -24
  138. package/dist/lsp.js.map +1 -1
  139. package/dist/markdown.js +6 -6
  140. package/dist/markdown.js.map +1 -1
  141. package/dist/mcp.js +15 -6
  142. package/dist/mcp.js.map +1 -1
  143. package/dist/model-customization.js +7 -3
  144. package/dist/model-customization.js.map +1 -1
  145. package/dist/progress/message-edit-scheduler.js +15 -3
  146. package/dist/progress/message-edit-scheduler.js.map +1 -1
  147. package/dist/progress/progress-message-renderer.js.map +1 -1
  148. package/dist/progress/progress-presenter.js +3 -3
  149. package/dist/progress/progress-presenter.js.map +1 -1
  150. package/dist/progress/serialize-telegram.js.map +1 -1
  151. package/dist/progress/tool-summary.js +3 -1
  152. package/dist/progress/tool-summary.js.map +1 -1
  153. package/dist/progress/turn-progress.js +3 -1
  154. package/dist/progress/turn-progress.js.map +1 -1
  155. package/dist/recovery.js +11 -3
  156. package/dist/recovery.js.map +1 -1
  157. package/dist/replay.js +9 -3
  158. package/dist/replay.js.map +1 -1
  159. package/dist/replay_cli.js +5 -3
  160. package/dist/replay_cli.js.map +1 -1
  161. package/dist/runtime/executor.js +66 -20
  162. package/dist/runtime/executor.js.map +1 -1
  163. package/dist/runtime/health.js.map +1 -1
  164. package/dist/runtime/host-runner.js +103 -0
  165. package/dist/runtime/host-runner.js.map +1 -0
  166. package/dist/runtime/planner.js +3 -1
  167. package/dist/runtime/planner.js.map +1 -1
  168. package/dist/runtime/secrets.js +102 -0
  169. package/dist/runtime/secrets.js.map +1 -0
  170. package/dist/runtime/store.js +95 -19
  171. package/dist/runtime/store.js.map +1 -1
  172. package/dist/safety.js +38 -21
  173. package/dist/safety.js.map +1 -1
  174. package/dist/spinner.js +7 -8
  175. package/dist/spinner.js.map +1 -1
  176. package/dist/sys/context.js +3 -3
  177. package/dist/sys/context.js.map +1 -1
  178. package/dist/term.js +1 -1
  179. package/dist/term.js.map +1 -1
  180. package/dist/themes.js +11 -5
  181. package/dist/themes.js.map +1 -1
  182. package/dist/tools/tool-error.js +2 -5
  183. package/dist/tools/tool-error.js.map +1 -1
  184. package/dist/tools.js +69 -34
  185. package/dist/tools.js.map +1 -1
  186. package/dist/tui/branch-picker.js +9 -3
  187. package/dist/tui/branch-picker.js.map +1 -1
  188. package/dist/tui/command-handler.js +88 -36
  189. package/dist/tui/command-handler.js.map +1 -1
  190. package/dist/tui/confirm.js.map +1 -1
  191. package/dist/tui/controller.js +234 -117
  192. package/dist/tui/controller.js.map +1 -1
  193. package/dist/tui/event-bridge.js.map +1 -1
  194. package/dist/tui/keymap.js +93 -71
  195. package/dist/tui/keymap.js.map +1 -1
  196. package/dist/tui/layout.js +9 -1
  197. package/dist/tui/layout.js.map +1 -1
  198. package/dist/tui/render.js +17 -5
  199. package/dist/tui/render.js.map +1 -1
  200. package/dist/tui/screen.js.map +1 -1
  201. package/dist/tui/state.js +129 -63
  202. package/dist/tui/state.js.map +1 -1
  203. package/dist/tui/theme.js +12 -3
  204. package/dist/tui/theme.js.map +1 -1
  205. package/dist/upgrade.js +28 -15
  206. package/dist/upgrade.js.map +1 -1
  207. package/dist/utils.js +8 -5
  208. package/dist/utils.js.map +1 -1
  209. package/dist/vault.js +48 -12
  210. package/dist/vault.js.map +1 -1
  211. package/dist/vim.js.map +1 -1
  212. package/package.json +11 -2
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import { spawnSync } from 'node:child_process';
8
8
  import { createSession } from '../agent.js';
9
- import { expandAtFileRefs, expandPromptImages } from './input.js';
10
- import { friendlyError, normalizeOutputFormat } from './args.js';
11
9
  import { banner, err as errFmt } from '../term.js';
12
10
  import { projectDir } from '../utils.js';
11
+ import { friendlyError, normalizeOutputFormat } from './args.js';
12
+ import { expandAtFileRefs, expandPromptImages } from './input.js';
13
13
  /**
14
14
  * Runs a single instruction against the agent and exits the process.
15
15
  */
@@ -46,7 +46,7 @@ export async function runOneShot(opts) {
46
46
  const diffOnly = !!config.diff_only;
47
47
  const shouldFailOnError = config.fail_on_error !== false;
48
48
  let diffOnlyEnabled = false;
49
- const runGit = (command, timeoutMs = 10_000) => spawnSync('bash', ['-lc', command], {
49
+ const runGit = (command, timeoutMs = 10_000) => spawnSync('bash', ['-c', command], {
50
50
  cwd: oneShotCwd,
51
51
  encoding: 'utf8',
52
52
  timeout: timeoutMs,
@@ -63,7 +63,10 @@ export async function runOneShot(opts) {
63
63
  };
64
64
  if (diffOnly) {
65
65
  const inside = runGit('git rev-parse --is-inside-work-tree');
66
- if (inside.status !== 0 || !String(inside.stdout || '').trim().startsWith('true')) {
66
+ if (inside.status !== 0 ||
67
+ !String(inside.stdout || '')
68
+ .trim()
69
+ .startsWith('true')) {
67
70
  console.error('--diff-only requires running inside a git repository.');
68
71
  process.exit(2);
69
72
  }
@@ -104,23 +107,32 @@ export async function runOneShot(opts) {
104
107
  const { CliSpinner } = await import('../spinner.js');
105
108
  spinner = new CliSpinner({ styler: S, verbose: config.verbose });
106
109
  spinner.start();
107
- const uiMode = config.verbose ? 'verbose' : (config.quiet ? 'quiet' : 'normal');
108
- oneShotHooks = uiMode === 'verbose'
109
- ? {
110
- onToolCall: (e) => spinner.onToolCall(e),
111
- onToolResult: (e) => spinner.onToolResult(e),
112
- }
113
- : uiMode === 'quiet'
110
+ const uiMode = config.verbose ? 'verbose' : config.quiet ? 'quiet' : 'normal';
111
+ oneShotHooks =
112
+ uiMode === 'verbose'
114
113
  ? {
115
- onToken: (t) => { spinner.onFirstDelta(); partialAssistant += t; process.stdout.write(t); },
116
- onFirstDelta: () => spinner.onFirstDelta(),
117
- }
118
- : {
119
- onToken: (t) => { spinner.onFirstDelta(); partialAssistant += t; process.stdout.write(t); },
120
- onFirstDelta: () => spinner.onFirstDelta(),
121
114
  onToolCall: (e) => spinner.onToolCall(e),
122
115
  onToolResult: (e) => spinner.onToolResult(e),
123
- };
116
+ }
117
+ : uiMode === 'quiet'
118
+ ? {
119
+ onToken: (t) => {
120
+ spinner.onFirstDelta();
121
+ partialAssistant += t;
122
+ process.stdout.write(t);
123
+ },
124
+ onFirstDelta: () => spinner.onFirstDelta(),
125
+ }
126
+ : {
127
+ onToken: (t) => {
128
+ spinner.onFirstDelta();
129
+ partialAssistant += t;
130
+ process.stdout.write(t);
131
+ },
132
+ onFirstDelta: () => spinner.onFirstDelta(),
133
+ onToolCall: (e) => spinner.onToolCall(e),
134
+ onToolResult: (e) => spinner.onToolResult(e),
135
+ };
124
136
  }
125
137
  else {
126
138
  oneShotHooks = {
@@ -248,7 +260,7 @@ export async function runOneShot(opts) {
248
260
  });
249
261
  flushJsonArray();
250
262
  }
251
- process.exit((shouldFailOnError || !cleaned) ? 1 : 0);
263
+ process.exit(shouldFailOnError || !cleaned ? 1 : 0);
252
264
  }
253
265
  }
254
266
  //# sourceMappingURL=oneshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oneshot.js","sourceRoot":"","sources":["../../src/cli/oneshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oneshot.js","sourceRoot":"","sources":["../../src/cli/oneshot.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { runDirectShellCommand } from './shell.js';
2
- import { splitTokens } from './command-utils.js';
3
- import { findCommand } from './command-registry.js';
4
1
  import { expandArgs } from '../commands.js';
5
- import { projectDir } from '../utils.js';
6
2
  import { warn as warnFmt, err as errFmt } from '../term.js';
3
+ import { projectDir } from '../utils.js';
4
+ import { findCommand } from './command-registry.js';
5
+ import { splitTokens } from './command-utils.js';
6
+ import { runDirectShellCommand } from './shell.js';
7
7
  /**
8
8
  * Handle REPL pre-turn dispatch:
9
9
  * - direct shell execution
@@ -30,8 +30,12 @@ export async function runReplPreTurn(opts) {
30
30
  command,
31
31
  cwd: projectDir(config),
32
32
  timeoutSec,
33
- onStart: (proc) => { ctx.activeShellProc = proc; },
34
- onStop: () => { ctx.activeShellProc = null; },
33
+ onStart: (proc) => {
34
+ ctx.activeShellProc = proc;
35
+ },
36
+ onStop: () => {
37
+ ctx.activeShellProc = null;
38
+ },
35
39
  });
36
40
  if (result.timedOut)
37
41
  console.log(warnFmt(`[shell] killed after ${timeoutSec}s timeout`, S));
@@ -1 +1 @@
1
- {"version":3,"file":"repl-dispatch.js","sourceRoot":"","sources":["../../src/cli/repl-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repl-dispatch.js","sourceRoot":"","sources":["../../src/cli/repl-dispatch.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
+ import { spawnSync } from 'node:child_process';
1
2
  import path from 'node:path';
2
- import readline from 'node:readline/promises';
3
3
  import { stdin as input, stdout as output } from 'node:process';
4
- import { spawnSync } from 'node:child_process';
4
+ import readline from 'node:readline/promises';
5
5
  import { probeModelsEndpoint, waitForModelsReady } from '../runtime/health.js';
6
6
  import { loadRuntimes, saveRuntimes, validateRuntimes, redactConfig, bootstrapRuntimes, interpolateTemplate, } from '../runtime/store.js';
7
+ import { HostCommandRunner } from '../runtime/host-runner.js';
7
8
  import { configDir, shellEscape } from '../utils.js';
8
9
  import { firstToken } from './command-utils.js';
9
10
  function runtimesFilePath() {
@@ -26,7 +27,7 @@ async function ask(rl, prompt, fallback = '') {
26
27
  return ans || fallback;
27
28
  }
28
29
  function runLocalCommand(command, timeoutSec = 5) {
29
- const p = spawnSync('bash', ['-lc', command], { encoding: 'utf8', timeout: timeoutSec * 1000 });
30
+ const p = spawnSync('bash', ['-c', command], { encoding: 'utf8', timeout: timeoutSec * 1000 });
30
31
  return {
31
32
  ok: p.status === 0,
32
33
  code: p.status,
@@ -34,21 +35,9 @@ function runLocalCommand(command, timeoutSec = 5) {
34
35
  stderr: p.stderr ?? '',
35
36
  };
36
37
  }
37
- function runHostCommand(host, command, timeoutSec = 5) {
38
- if (host.transport === 'local')
39
- return runLocalCommand(command, timeoutSec);
40
- const target = `${host.connection.user ? `${host.connection.user}@` : ''}${host.connection.host ?? ''}`;
41
- const sshParts = [
42
- 'ssh',
43
- '-o', 'BatchMode=yes',
44
- '-o', `ConnectTimeout=${timeoutSec}`,
45
- ];
46
- if (host.connection.port)
47
- sshParts.push('-p', String(host.connection.port));
48
- if (host.connection.key_path)
49
- sshParts.push('-i', shellEscape(host.connection.key_path));
50
- sshParts.push(shellEscape(target), '--', 'bash', '-lc', shellEscape(command));
51
- return runLocalCommand(sshParts.join(' '), timeoutSec + 1);
38
+ const hostCommandRunner = new HostCommandRunner();
39
+ async function runHostCommand(host, command, timeoutSec = 5) {
40
+ return await hostCommandRunner.runOnHost(host, command, timeoutSec);
52
41
  }
53
42
  function usage(kind) {
54
43
  console.log(`Usage:\n idlehands ${kind}\n idlehands ${kind} show <id>\n idlehands ${kind} add\n idlehands ${kind} edit <id>\n idlehands ${kind} remove <id>\n idlehands ${kind} validate\n idlehands ${kind} test <id>\n idlehands ${kind} doctor`);
@@ -89,7 +78,9 @@ export async function runHostsSubcommand(args, _config) {
89
78
  id: await ask(rl, 'Host id (e.g. local-main)'),
90
79
  display_name: await ask(rl, 'Display name'),
91
80
  enabled: (await ask(rl, 'Enabled (y/n)', 'y')).toLowerCase().startsWith('y'),
92
- transport: ((await ask(rl, 'Transport (local/ssh)', 'local')).toLowerCase() === 'ssh' ? 'ssh' : 'local'),
81
+ transport: (await ask(rl, 'Transport (local/ssh)', 'local')).toLowerCase() === 'ssh'
82
+ ? 'ssh'
83
+ : 'local',
93
84
  connection: {
94
85
  host: undefined,
95
86
  port: undefined,
@@ -98,12 +89,18 @@ export async function runHostsSubcommand(args, _config) {
98
89
  password: undefined,
99
90
  },
100
91
  capabilities: {
101
- gpu: (await ask(rl, 'GPU tags (comma-separated)', '')).split(',').map((s) => s.trim()).filter(Boolean),
92
+ gpu: (await ask(rl, 'GPU tags (comma-separated)', ''))
93
+ .split(',')
94
+ .map((s) => s.trim())
95
+ .filter(Boolean),
102
96
  vram_gb: (() => {
103
97
  const raw = args['vram-gb'] ?? undefined;
104
98
  return raw == null ? undefined : Number(raw);
105
99
  })(),
106
- backends: (await ask(rl, 'Supported backends (comma-separated)', '')).split(',').map((s) => s.trim()).filter(Boolean),
100
+ backends: (await ask(rl, 'Supported backends (comma-separated)', ''))
101
+ .split(',')
102
+ .map((s) => s.trim())
103
+ .filter(Boolean),
107
104
  },
108
105
  health: {
109
106
  check_cmd: await ask(rl, 'Health check command', 'true'),
@@ -200,7 +197,7 @@ export async function runHostsSubcommand(args, _config) {
200
197
  source: '',
201
198
  port: '',
202
199
  });
203
- const res = runHostCommand(host, command, host.health.timeout_sec ?? 5);
200
+ const res = await runHostCommand(host, command, host.health.timeout_sec ?? 5);
204
201
  console.log(`[${host.id}] ${res.ok ? 'OK' : 'FAIL'} (exit=${res.code ?? -1})`);
205
202
  if (res.stdout.trim())
206
203
  console.log(res.stdout.trim());
@@ -220,7 +217,7 @@ export async function runHostsSubcommand(args, _config) {
220
217
  problems.push(`[${host.id}] ssh host is missing`);
221
218
  continue;
222
219
  }
223
- const ping = runHostCommand(host, 'echo ok', 5);
220
+ const ping = await runHostCommand(host, 'echo ok', 5);
224
221
  if (!ping.ok)
225
222
  problems.push(`[${host.id}] ssh unreachable (${ping.code ?? -1})`);
226
223
  }
@@ -288,7 +285,12 @@ export async function runBackendsSubcommand(args, _config) {
288
285
  type: (await ask(rl, 'Type (vulkan|rocm|cuda|metal|cpu|custom)', 'custom')),
289
286
  host_filters: (() => {
290
287
  const raw = (args.hosts ?? '').toString();
291
- return raw ? raw.split(',').map((s) => s.trim()).filter(Boolean) : 'any';
288
+ return raw
289
+ ? raw
290
+ .split(',')
291
+ .map((s) => s.trim())
292
+ .filter(Boolean)
293
+ : 'any';
292
294
  })(),
293
295
  apply_cmd: await ask(rl, 'Apply command (optional)', ''),
294
296
  verify_cmd: await ask(rl, 'Verify command (optional)', ''),
@@ -297,7 +299,13 @@ export async function runBackendsSubcommand(args, _config) {
297
299
  args: undefined,
298
300
  };
299
301
  const filters = await ask(rl, 'Host filters (any or comma-separated ids)', 'any');
300
- backend.host_filters = filters === 'any' ? 'any' : filters.split(',').map((s) => s.trim()).filter(Boolean);
302
+ backend.host_filters =
303
+ filters === 'any'
304
+ ? 'any'
305
+ : filters
306
+ .split(',')
307
+ .map((s) => s.trim())
308
+ .filter(Boolean);
301
309
  if (!backend.apply_cmd)
302
310
  backend.apply_cmd = null;
303
311
  if (!backend.verify_cmd)
@@ -370,8 +378,14 @@ export async function runBackendsSubcommand(args, _config) {
370
378
  const cmdText = interpolateTemplate(backend.verify_cmd, {
371
379
  backend_id: backend.id,
372
380
  backend_args: (backend.args ?? []).join(' '),
373
- backend_env: Object.entries(backend.env ?? {}).map(([k, v]) => `${k}=${v}`).join(' '),
374
- host: '', host_id: '', model_id: '', source: '', port: '',
381
+ backend_env: Object.entries(backend.env ?? {})
382
+ .map(([k, v]) => `${k}=${v}`)
383
+ .join(' '),
384
+ host: '',
385
+ host_id: '',
386
+ model_id: '',
387
+ source: '',
388
+ port: '',
375
389
  });
376
390
  const res = runLocalCommand(cmdText, 8);
377
391
  console.log(`[${backend.id}] ${res.ok ? 'OK' : 'FAIL'} (exit=${res.code ?? -1})`);
@@ -459,7 +473,9 @@ export async function runModelsSubcommand(args, _config) {
459
473
  const rpcBackendName = `rocm-rpc-${rpcAddr.replace(/[:.]/g, '-')}`;
460
474
  let existingBackend = runtimes.backends.find((b) => b.type === 'rocm' && b.args?.some((a) => a === rpcAddr));
461
475
  if (!existingBackend) {
462
- const createBackend = (await ask(rl, `Create RPC backend '${rpcBackendName}'? (y/n)`, 'y')).toLowerCase().startsWith('y');
476
+ const createBackend = (await ask(rl, `Create RPC backend '${rpcBackendName}'? (y/n)`, 'y'))
477
+ .toLowerCase()
478
+ .startsWith('y');
463
479
  if (createBackend) {
464
480
  existingBackend = {
465
481
  id: rpcBackendName,
@@ -471,7 +487,18 @@ export async function runModelsSubcommand(args, _config) {
471
487
  verify_cmd: 'rocminfo >/dev/null 2>&1',
472
488
  rollback_cmd: null,
473
489
  env: { ROCBLAS_USE_HIPBLASLT: '1' },
474
- args: ['-ngl', '99', '-fa', 'on', '--rpc', rpcAddr, '-ts', tsRatio, '-dio', '--no-warmup'],
490
+ args: [
491
+ '-ngl',
492
+ '99',
493
+ '-fa',
494
+ 'on',
495
+ '--rpc',
496
+ rpcAddr,
497
+ '-ts',
498
+ tsRatio,
499
+ '-dio',
500
+ '--no-warmup',
501
+ ],
475
502
  };
476
503
  runtimes.backends.push(existingBackend);
477
504
  console.log(` Created RPC backend: ${rpcBackendName}`);
@@ -485,7 +512,8 @@ export async function runModelsSubcommand(args, _config) {
485
512
  rpcProbeTimeout = Number(await ask(rl, 'Probe timeout sec (large RPC models need 300-7200)', '3600'));
486
513
  rpcProbeInterval = Number(await ask(rl, 'Probe interval ms', '5000'));
487
514
  // Default start_cmd with -dio baked in (backend_args already includes it from the RPC backend)
488
- startCmdDefault = 'nohup env {backend_env} llama-server -m {source} --port {port} --ctx-size 4096 {backend_args} --host 0.0.0.0 > /tmp/llama-server.log 2>&1 &';
515
+ startCmdDefault =
516
+ 'nohup env {backend_env} llama-server -m {source} --port {port} --ctx-size 4096 {backend_args} --host 0.0.0.0 > /tmp/llama-server.log 2>&1 &';
489
517
  }
490
518
  const model = {
491
519
  id: modelId,
@@ -517,8 +545,20 @@ export async function runModelsSubcommand(args, _config) {
517
545
  else {
518
546
  const hp = await ask(rl, 'Host policy (any or comma-separated ids)', 'any');
519
547
  const bp = await ask(rl, 'Backend policy (any or comma-separated ids)', 'any');
520
- model.host_policy = hp === 'any' ? 'any' : hp.split(',').map((s) => s.trim()).filter(Boolean);
521
- model.backend_policy = bp === 'any' ? 'any' : bp.split(',').map((s) => s.trim()).filter(Boolean);
548
+ model.host_policy =
549
+ hp === 'any'
550
+ ? 'any'
551
+ : hp
552
+ .split(',')
553
+ .map((s) => s.trim())
554
+ .filter(Boolean);
555
+ model.backend_policy =
556
+ bp === 'any'
557
+ ? 'any'
558
+ : bp
559
+ .split(',')
560
+ .map((s) => s.trim())
561
+ .filter(Boolean);
522
562
  }
523
563
  await saveRuntimes({ ...runtimes, models: [...runtimes.models, model] });
524
564
  console.log(`Added model: ${model.id}`);
@@ -581,16 +621,22 @@ export async function runModelsSubcommand(args, _config) {
581
621
  throw new Error(`model not found: ${id}`);
582
622
  const host = model.host_policy === 'any'
583
623
  ? runtimes.hosts.find((h) => h.enabled)
584
- : model.host_policy.map((hid) => runtimes.hosts.find((h) => h.id === hid && h.enabled)).find(Boolean);
624
+ : model.host_policy
625
+ .map((hid) => runtimes.hosts.find((h) => h.id === hid && h.enabled))
626
+ .find(Boolean);
585
627
  if (!host)
586
628
  throw new Error(`no eligible host for model: ${model.id}`);
587
629
  const backend = model.backend_policy === 'any'
588
630
  ? runtimes.backends.find((b) => b.enabled)
589
- : model.backend_policy.map((bid) => runtimes.backends.find((b) => b.id === bid && b.enabled)).find(Boolean);
631
+ : model.backend_policy
632
+ .map((bid) => runtimes.backends.find((b) => b.id === bid && b.enabled))
633
+ .find(Boolean);
590
634
  const port = model.runtime_defaults?.port ?? 8080;
591
635
  const backendArgs = backend?.args?.map((a) => shellEscape(a)).join(' ') ?? '';
592
636
  const backendEnv = backend?.env
593
- ? Object.entries(backend.env).map(([k, v]) => `${k}=${shellEscape(String(v))}`).join(' ')
637
+ ? Object.entries(backend.env)
638
+ .map(([k, v]) => `${k}=${shellEscape(String(v))}`)
639
+ .join(' ')
594
640
  : '';
595
641
  const cmdText = interpolateTemplate(model.launch.probe_cmd, {
596
642
  model_id: model.id,
@@ -602,7 +648,7 @@ export async function runModelsSubcommand(args, _config) {
602
648
  host: host.connection.host ?? host.id,
603
649
  host_id: host.id,
604
650
  });
605
- const res = runHostCommand(host, cmdText, model.launch.probe_timeout_sec ?? 60);
651
+ const res = await runHostCommand(host, cmdText, model.launch.probe_timeout_sec ?? 60);
606
652
  console.log(`[${model.id}] host=${host.id} ${res.ok ? 'OK' : 'FAIL'} (exit=${res.code ?? -1})`);
607
653
  if (res.stdout.trim())
608
654
  console.log(res.stdout.trim());
@@ -702,7 +748,7 @@ async function applyDynamicProbeDefaults(result, rtConfig, runOnHost) {
702
748
  return;
703
749
  const d = deriveProbeDefaultsFromSizeGiB(sizeGiB);
704
750
  for (const step of result.steps) {
705
- if (step.kind !== "probe_health")
751
+ if (step.kind !== 'probe_health')
706
752
  continue;
707
753
  if (!hasExplicitTimeout)
708
754
  step.timeout_sec = d.timeoutSec;
@@ -798,7 +844,11 @@ export async function runSelectSubcommand(args, _config) {
798
844
  else if (status === 'error') {
799
845
  process.stdout.write(' ✗\n');
800
846
  if (detail) {
801
- for (const line of detail.split('\n').map((l) => l.trim()).filter(Boolean).slice(0, 6)) {
847
+ for (const line of detail
848
+ .split('\n')
849
+ .map((l) => l.trim())
850
+ .filter(Boolean)
851
+ .slice(0, 6)) {
802
852
  process.stdout.write(` ${line}\n`);
803
853
  }
804
854
  }
@@ -825,7 +875,7 @@ export async function runSelectSubcommand(args, _config) {
825
875
  const readyChecks = [];
826
876
  let readyOk = true;
827
877
  if (execResult.ok && waitReady) {
828
- const timeoutSec = waitTimeoutSec ?? (executedPlan.model.launch.probe_timeout_sec ?? 60);
878
+ const timeoutSec = waitTimeoutSec ?? executedPlan.model.launch.probe_timeout_sec ?? 60;
829
879
  for (const resolvedHost of executedPlan.hosts) {
830
880
  const hostCfg = rtConfig.hosts.find((h) => h.id === resolvedHost.id);
831
881
  if (!hostCfg)
@@ -925,7 +975,10 @@ export async function runHealthSubcommand(args, _config) {
925
975
  return ports;
926
976
  }
927
977
  if (trimmed.includes(',')) {
928
- const parts = trimmed.split(',').map((s) => s.trim()).filter(Boolean);
978
+ const parts = trimmed
979
+ .split(',')
980
+ .map((s) => s.trim())
981
+ .filter(Boolean);
929
982
  const ports = parts.map(Number).filter((p) => Number.isFinite(p) && p >= 1 && p <= 65535);
930
983
  return ports.length > 0 ? ports : null;
931
984
  }
@@ -992,13 +1045,15 @@ export async function runHealthSubcommand(args, _config) {
992
1045
  ? enabledHosts
993
1046
  : enabledHosts.filter((h) => model.host_policy.includes(h.id));
994
1047
  const backend = model.backend_policy === 'any'
995
- ? enabledBackends[0] ?? null
996
- : enabledBackends.find((b) => model.backend_policy.includes(b.id)) ?? null;
1048
+ ? (enabledBackends[0] ?? null)
1049
+ : (enabledBackends.find((b) => model.backend_policy.includes(b.id)) ?? null);
997
1050
  for (const host of targetHosts) {
998
1051
  const port = String(model.runtime_defaults?.port ?? 8080);
999
1052
  const backendArgs = backend?.args?.map((a) => shellEscape(a)).join(' ') ?? '';
1000
1053
  const backendEnv = backend?.env
1001
- ? Object.entries(backend.env).map(([k, v]) => `${k}=${shellEscape(String(v))}`).join(' ')
1054
+ ? Object.entries(backend.env)
1055
+ .map(([k, v]) => `${k}=${shellEscape(String(v))}`)
1056
+ .join(' ')
1002
1057
  : '';
1003
1058
  const vars = {
1004
1059
  source: model.source,
@@ -1063,7 +1118,10 @@ export async function runHealthSubcommand(args, _config) {
1063
1118
  if (!jsonOut)
1064
1119
  console.log(`\n${BOLD}Discovered Servers (/v1/models + /health)${RESET}`);
1065
1120
  for (const host of enabledHosts) {
1066
- const hostEntry = { hostId: host.id, services: [] };
1121
+ const hostEntry = {
1122
+ hostId: host.id,
1123
+ services: [],
1124
+ };
1067
1125
  if (!jsonOut)
1068
1126
  console.log(` ${host.id}:`);
1069
1127
  for (const port of candidatePorts) {
@@ -1079,10 +1137,16 @@ export async function runHealthSubcommand(args, _config) {
1079
1137
  exitCode: probe.exitCode,
1080
1138
  });
1081
1139
  if (!jsonOut) {
1082
- const icon = probe.status === 'ready' ? `${GREEN}✓${RESET}` : probe.status === 'loading' ? `${YELLOW}~${RESET}` : `${DIM}?${RESET}`;
1140
+ const icon = probe.status === 'ready'
1141
+ ? `${GREEN}✓${RESET}`
1142
+ : probe.status === 'loading'
1143
+ ? `${YELLOW}~${RESET}`
1144
+ : `${DIM}?${RESET}`;
1083
1145
  const extras = probe.modelIds.filter((id) => !configuredModelIds.has(id));
1084
1146
  const idsText = probe.modelIds.length ? ` models=${probe.modelIds.join(', ')}` : '';
1085
- const extrasText = extras.length ? ` ${YELLOW}(extra/unconfigured: ${extras.join(', ')})${RESET}` : '';
1147
+ const extrasText = extras.length
1148
+ ? ` ${YELLOW}(extra/unconfigured: ${extras.join(', ')})${RESET}`
1149
+ : '';
1086
1150
  const httpText = probe.httpCode != null ? ` http=${probe.httpCode}` : '';
1087
1151
  console.log(` ${icon} :${port} ${probe.status}${httpText}${idsText}${extrasText}`);
1088
1152
  }