@vm0/cli 2.0.0 → 3.1.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.
- package/index.js +163 -104
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -12488,44 +12488,56 @@ function validateAgentConfig(config2) {
|
|
|
12488
12488
|
if (!cfg.version) {
|
|
12489
12489
|
return { valid: false, error: "Missing config.version" };
|
|
12490
12490
|
}
|
|
12491
|
-
if (!cfg.agents ||
|
|
12492
|
-
return { valid: false, error: "Missing
|
|
12491
|
+
if (!cfg.agents || typeof cfg.agents !== "object") {
|
|
12492
|
+
return { valid: false, error: "Missing agents object in config" };
|
|
12493
12493
|
}
|
|
12494
|
-
if (cfg.agents
|
|
12495
|
-
return {
|
|
12496
|
-
|
|
12497
|
-
|
|
12498
|
-
|
|
12499
|
-
return { valid: false, error: "First agent must be an object" };
|
|
12494
|
+
if (Array.isArray(cfg.agents)) {
|
|
12495
|
+
return {
|
|
12496
|
+
valid: false,
|
|
12497
|
+
error: "agents must be an object, not an array. Use format: agents: { agent-name: { ... } }"
|
|
12498
|
+
};
|
|
12500
12499
|
}
|
|
12501
|
-
|
|
12502
|
-
|
|
12500
|
+
const agentKeys = Object.keys(cfg.agents);
|
|
12501
|
+
if (agentKeys.length === 0) {
|
|
12502
|
+
return {
|
|
12503
|
+
valid: false,
|
|
12504
|
+
error: "agents must have at least one agent defined"
|
|
12505
|
+
};
|
|
12503
12506
|
}
|
|
12504
|
-
if (
|
|
12505
|
-
return {
|
|
12507
|
+
if (agentKeys.length > 1) {
|
|
12508
|
+
return {
|
|
12509
|
+
valid: false,
|
|
12510
|
+
error: "Multiple agents not supported yet. Only one agent allowed."
|
|
12511
|
+
};
|
|
12506
12512
|
}
|
|
12507
|
-
|
|
12513
|
+
const agentName = agentKeys[0];
|
|
12514
|
+
if (!validateAgentName(agentName)) {
|
|
12508
12515
|
return {
|
|
12509
12516
|
valid: false,
|
|
12510
|
-
error: "Invalid
|
|
12517
|
+
error: "Invalid agent name format. Must be 3-64 characters, letters, numbers, and hyphens only. Must start and end with letter or number."
|
|
12511
12518
|
};
|
|
12512
12519
|
}
|
|
12520
|
+
const agentsObj = cfg.agents;
|
|
12521
|
+
const agent = agentsObj[agentName];
|
|
12522
|
+
if (!agent || typeof agent !== "object") {
|
|
12523
|
+
return { valid: false, error: "Agent definition must be an object" };
|
|
12524
|
+
}
|
|
12513
12525
|
if (!agent.working_dir || typeof agent.working_dir !== "string") {
|
|
12514
12526
|
return {
|
|
12515
12527
|
valid: false,
|
|
12516
|
-
error: "Missing or invalid
|
|
12528
|
+
error: "Missing or invalid agent.working_dir (must be a string)"
|
|
12517
12529
|
};
|
|
12518
12530
|
}
|
|
12519
12531
|
if (!agent.image || typeof agent.image !== "string") {
|
|
12520
12532
|
return {
|
|
12521
12533
|
valid: false,
|
|
12522
|
-
error: "Missing or invalid
|
|
12534
|
+
error: "Missing or invalid agent.image (must be a string)"
|
|
12523
12535
|
};
|
|
12524
12536
|
}
|
|
12525
12537
|
if (!agent.provider || typeof agent.provider !== "string") {
|
|
12526
12538
|
return {
|
|
12527
12539
|
valid: false,
|
|
12528
|
-
error: "Missing or invalid
|
|
12540
|
+
error: "Missing or invalid agent.provider (must be a string)"
|
|
12529
12541
|
};
|
|
12530
12542
|
}
|
|
12531
12543
|
const agentVolumes = agent.volumes;
|
|
@@ -12857,39 +12869,67 @@ var ClaudeEventParser = class {
|
|
|
12857
12869
|
// src/lib/event-renderer.ts
|
|
12858
12870
|
import chalk3 from "chalk";
|
|
12859
12871
|
var EventRenderer = class {
|
|
12872
|
+
/**
|
|
12873
|
+
* Format elapsed time between two timestamps
|
|
12874
|
+
* Returns [+Nms] for < 1000ms, [+N.Ns] for >= 1000ms
|
|
12875
|
+
*/
|
|
12876
|
+
static formatElapsed(previous, current) {
|
|
12877
|
+
const elapsedMs = current.getTime() - previous.getTime();
|
|
12878
|
+
if (elapsedMs < 1e3) {
|
|
12879
|
+
return `[+${elapsedMs}ms]`;
|
|
12880
|
+
}
|
|
12881
|
+
return `[+${(elapsedMs / 1e3).toFixed(1)}s]`;
|
|
12882
|
+
}
|
|
12883
|
+
/**
|
|
12884
|
+
* Format total elapsed time
|
|
12885
|
+
* Returns N.Ns format
|
|
12886
|
+
*/
|
|
12887
|
+
static formatTotalTime(start, end) {
|
|
12888
|
+
const elapsedMs = end.getTime() - start.getTime();
|
|
12889
|
+
return `${(elapsedMs / 1e3).toFixed(1)}s`;
|
|
12890
|
+
}
|
|
12860
12891
|
/**
|
|
12861
12892
|
* Render a parsed event to console
|
|
12862
12893
|
*/
|
|
12863
|
-
static render(event) {
|
|
12894
|
+
static render(event, options) {
|
|
12895
|
+
const elapsedPrefix = options?.verbose && options?.previousTimestamp ? chalk3.gray(
|
|
12896
|
+
this.formatElapsed(options.previousTimestamp, event.timestamp)
|
|
12897
|
+
) : "";
|
|
12864
12898
|
switch (event.type) {
|
|
12865
12899
|
case "init":
|
|
12866
|
-
this.renderInit(event);
|
|
12900
|
+
this.renderInit(event, elapsedPrefix);
|
|
12867
12901
|
break;
|
|
12868
12902
|
case "text":
|
|
12869
|
-
this.renderText(event);
|
|
12903
|
+
this.renderText(event, elapsedPrefix);
|
|
12870
12904
|
break;
|
|
12871
12905
|
case "tool_use":
|
|
12872
|
-
this.renderToolUse(event);
|
|
12906
|
+
this.renderToolUse(event, elapsedPrefix);
|
|
12873
12907
|
break;
|
|
12874
12908
|
case "tool_result":
|
|
12875
|
-
this.renderToolResult(event);
|
|
12909
|
+
this.renderToolResult(event, elapsedPrefix);
|
|
12876
12910
|
break;
|
|
12877
12911
|
case "result":
|
|
12878
|
-
this.renderResult(event);
|
|
12912
|
+
this.renderResult(event, elapsedPrefix);
|
|
12879
12913
|
break;
|
|
12880
12914
|
case "vm0_start":
|
|
12881
|
-
this.renderVm0Start(event);
|
|
12915
|
+
this.renderVm0Start(event, elapsedPrefix);
|
|
12882
12916
|
break;
|
|
12883
12917
|
case "vm0_result":
|
|
12884
|
-
this.renderVm0Result(
|
|
12918
|
+
this.renderVm0Result(
|
|
12919
|
+
event,
|
|
12920
|
+
elapsedPrefix,
|
|
12921
|
+
options?.verbose ? options?.startTimestamp : void 0
|
|
12922
|
+
);
|
|
12885
12923
|
break;
|
|
12886
12924
|
case "vm0_error":
|
|
12887
|
-
this.renderVm0Error(event);
|
|
12925
|
+
this.renderVm0Error(event, elapsedPrefix);
|
|
12888
12926
|
break;
|
|
12889
12927
|
}
|
|
12890
12928
|
}
|
|
12891
|
-
static renderInit(event) {
|
|
12892
|
-
console.log(
|
|
12929
|
+
static renderInit(event, elapsedPrefix) {
|
|
12930
|
+
console.log(
|
|
12931
|
+
chalk3.cyan("[init]") + elapsedPrefix + " Starting Claude Code agent"
|
|
12932
|
+
);
|
|
12893
12933
|
console.log(` Session: ${chalk3.gray(String(event.data.sessionId || ""))}`);
|
|
12894
12934
|
console.log(` Model: ${chalk3.gray(String(event.data.model || ""))}`);
|
|
12895
12935
|
console.log(
|
|
@@ -12898,13 +12938,13 @@ var EventRenderer = class {
|
|
|
12898
12938
|
)}`
|
|
12899
12939
|
);
|
|
12900
12940
|
}
|
|
12901
|
-
static renderText(event) {
|
|
12941
|
+
static renderText(event, elapsedPrefix) {
|
|
12902
12942
|
const text = String(event.data.text || "");
|
|
12903
|
-
console.log(chalk3.blue("[text]") + " " + text);
|
|
12943
|
+
console.log(chalk3.blue("[text]") + elapsedPrefix + " " + text);
|
|
12904
12944
|
}
|
|
12905
|
-
static renderToolUse(event) {
|
|
12945
|
+
static renderToolUse(event, elapsedPrefix) {
|
|
12906
12946
|
const tool = String(event.data.tool || "");
|
|
12907
|
-
console.log(chalk3.yellow("[tool_use]") + " " + tool);
|
|
12947
|
+
console.log(chalk3.yellow("[tool_use]") + elapsedPrefix + " " + tool);
|
|
12908
12948
|
const input = event.data.input;
|
|
12909
12949
|
if (input && typeof input === "object") {
|
|
12910
12950
|
for (const [key, value] of Object.entries(input)) {
|
|
@@ -12914,19 +12954,19 @@ var EventRenderer = class {
|
|
|
12914
12954
|
}
|
|
12915
12955
|
}
|
|
12916
12956
|
}
|
|
12917
|
-
static renderToolResult(event) {
|
|
12957
|
+
static renderToolResult(event, elapsedPrefix) {
|
|
12918
12958
|
const isError = Boolean(event.data.isError);
|
|
12919
12959
|
const status = isError ? "Error" : "Completed";
|
|
12920
12960
|
const color = isError ? chalk3.red : chalk3.green;
|
|
12921
|
-
console.log(color("[tool_result]") + " " + status);
|
|
12961
|
+
console.log(color("[tool_result]") + elapsedPrefix + " " + status);
|
|
12922
12962
|
const result = String(event.data.result || "");
|
|
12923
12963
|
console.log(` ${chalk3.gray(result)}`);
|
|
12924
12964
|
}
|
|
12925
|
-
static renderResult(event) {
|
|
12965
|
+
static renderResult(event, elapsedPrefix) {
|
|
12926
12966
|
const success2 = Boolean(event.data.success);
|
|
12927
12967
|
const status = success2 ? "\u2713 completed successfully" : "\u2717 failed";
|
|
12928
12968
|
const color = success2 ? chalk3.green : chalk3.red;
|
|
12929
|
-
console.log(color("[result]") + " " + status);
|
|
12969
|
+
console.log(color("[result]") + elapsedPrefix + " " + status);
|
|
12930
12970
|
const durationMs = Number(event.data.durationMs || 0);
|
|
12931
12971
|
const durationSec = (durationMs / 1e3).toFixed(1);
|
|
12932
12972
|
console.log(` Duration: ${chalk3.gray(durationSec + "s")}`);
|
|
@@ -12951,8 +12991,8 @@ var EventRenderer = class {
|
|
|
12951
12991
|
);
|
|
12952
12992
|
}
|
|
12953
12993
|
}
|
|
12954
|
-
static renderVm0Start(event) {
|
|
12955
|
-
console.log(chalk3.cyan("[vm0_start]") + " Run starting");
|
|
12994
|
+
static renderVm0Start(event, elapsedPrefix) {
|
|
12995
|
+
console.log(chalk3.cyan("[vm0_start]") + elapsedPrefix + " Run starting");
|
|
12956
12996
|
if (event.data.runId) {
|
|
12957
12997
|
console.log(` Run ID: ${chalk3.gray(String(event.data.runId))}`);
|
|
12958
12998
|
}
|
|
@@ -12963,8 +13003,10 @@ var EventRenderer = class {
|
|
|
12963
13003
|
}
|
|
12964
13004
|
this.renderArtifactAndVolumes(event.data);
|
|
12965
13005
|
}
|
|
12966
|
-
static renderVm0Result(event) {
|
|
12967
|
-
console.log(
|
|
13006
|
+
static renderVm0Result(event, elapsedPrefix, startTimestamp) {
|
|
13007
|
+
console.log(
|
|
13008
|
+
chalk3.green("[vm0_result]") + elapsedPrefix + " \u2713 Run completed successfully"
|
|
13009
|
+
);
|
|
12968
13010
|
console.log(
|
|
12969
13011
|
` Checkpoint: ${chalk3.gray(String(event.data.checkpointId || ""))}`
|
|
12970
13012
|
);
|
|
@@ -12975,6 +13017,10 @@ var EventRenderer = class {
|
|
|
12975
13017
|
` Conversation: ${chalk3.gray(String(event.data.conversationId || ""))}`
|
|
12976
13018
|
);
|
|
12977
13019
|
this.renderArtifactAndVolumes(event.data);
|
|
13020
|
+
if (startTimestamp) {
|
|
13021
|
+
const totalTime = this.formatTotalTime(startTimestamp, event.timestamp);
|
|
13022
|
+
console.log(` Total time: ${chalk3.gray(totalTime)}`);
|
|
13023
|
+
}
|
|
12978
13024
|
}
|
|
12979
13025
|
/**
|
|
12980
13026
|
* Format version ID for display (show short 8-character prefix)
|
|
@@ -13005,8 +13051,8 @@ var EventRenderer = class {
|
|
|
13005
13051
|
}
|
|
13006
13052
|
}
|
|
13007
13053
|
}
|
|
13008
|
-
static renderVm0Error(event) {
|
|
13009
|
-
console.log(chalk3.red("[vm0_error]") + " \u2717 Run failed");
|
|
13054
|
+
static renderVm0Error(event, elapsedPrefix) {
|
|
13055
|
+
console.log(chalk3.red("[vm0_error]") + elapsedPrefix + " \u2717 Run failed");
|
|
13010
13056
|
let errorMessage = "";
|
|
13011
13057
|
if (typeof event.data.error === "string") {
|
|
13012
13058
|
errorMessage = event.data.error;
|
|
@@ -13048,12 +13094,15 @@ function isUUID(str) {
|
|
|
13048
13094
|
return /^[0-9a-f-]{36}$/i.test(str);
|
|
13049
13095
|
}
|
|
13050
13096
|
var DEFAULT_TIMEOUT_SECONDS = 120;
|
|
13051
|
-
async function pollEvents(runId, timeoutSeconds) {
|
|
13097
|
+
async function pollEvents(runId, timeoutSeconds, options) {
|
|
13052
13098
|
let nextSequence = -1;
|
|
13053
13099
|
let complete = false;
|
|
13054
13100
|
const pollIntervalMs = 500;
|
|
13055
13101
|
const timeoutMs = timeoutSeconds * 1e3;
|
|
13056
13102
|
const startTime = Date.now();
|
|
13103
|
+
const startTimestamp = /* @__PURE__ */ new Date();
|
|
13104
|
+
let previousTimestamp = startTimestamp;
|
|
13105
|
+
const verbose = options?.verbose;
|
|
13057
13106
|
while (!complete) {
|
|
13058
13107
|
const elapsed = Date.now() - startTime;
|
|
13059
13108
|
if (elapsed > timeoutMs) {
|
|
@@ -13073,7 +13122,12 @@ async function pollEvents(runId, timeoutSeconds) {
|
|
|
13073
13122
|
event.eventData
|
|
13074
13123
|
);
|
|
13075
13124
|
if (parsed) {
|
|
13076
|
-
EventRenderer.render(parsed
|
|
13125
|
+
EventRenderer.render(parsed, {
|
|
13126
|
+
verbose,
|
|
13127
|
+
previousTimestamp,
|
|
13128
|
+
startTimestamp
|
|
13129
|
+
});
|
|
13130
|
+
previousTimestamp = parsed.timestamp;
|
|
13077
13131
|
if (parsed.type === "vm0_result" || parsed.type === "vm0_error") {
|
|
13078
13132
|
complete = true;
|
|
13079
13133
|
}
|
|
@@ -13085,6 +13139,18 @@ async function pollEvents(runId, timeoutSeconds) {
|
|
|
13085
13139
|
}
|
|
13086
13140
|
}
|
|
13087
13141
|
}
|
|
13142
|
+
function logVerbosePreFlight(action, details) {
|
|
13143
|
+
console.log(chalk4.blue(`
|
|
13144
|
+
${action}...`));
|
|
13145
|
+
for (const { label, value } of details) {
|
|
13146
|
+
if (value !== void 0) {
|
|
13147
|
+
console.log(chalk4.gray(` ${label}: ${value}`));
|
|
13148
|
+
}
|
|
13149
|
+
}
|
|
13150
|
+
console.log();
|
|
13151
|
+
console.log(chalk4.blue("Executing in sandbox..."));
|
|
13152
|
+
console.log();
|
|
13153
|
+
}
|
|
13088
13154
|
var runCmd = new Command2().name("run").description("Execute an agent").argument(
|
|
13089
13155
|
"<identifier>",
|
|
13090
13156
|
"Agent name or config ID (e.g., 'my-agent' or 'cfg-abc-123')"
|
|
@@ -13108,7 +13174,7 @@ var runCmd = new Command2().name("run").description("Execute an agent").argument
|
|
|
13108
13174
|
"-t, --timeout <seconds>",
|
|
13109
13175
|
"Polling timeout in seconds (default: 120)",
|
|
13110
13176
|
String(DEFAULT_TIMEOUT_SECONDS)
|
|
13111
|
-
).action(
|
|
13177
|
+
).option("-v, --verbose", "Show verbose output with timing information").action(
|
|
13112
13178
|
async (identifier, prompt, options) => {
|
|
13113
13179
|
const timeoutSeconds = parseInt(options.timeout, 10);
|
|
13114
13180
|
if (isNaN(timeoutSeconds) || timeoutSeconds <= 0) {
|
|
@@ -13126,17 +13192,24 @@ var runCmd = new Command2().name("run").description("Execute an agent").argument
|
|
|
13126
13192
|
);
|
|
13127
13193
|
process.exit(1);
|
|
13128
13194
|
}
|
|
13195
|
+
const verbose = options.verbose;
|
|
13129
13196
|
try {
|
|
13130
13197
|
let configId;
|
|
13131
13198
|
if (isUUID(identifier)) {
|
|
13132
13199
|
configId = identifier;
|
|
13133
|
-
|
|
13200
|
+
if (verbose) {
|
|
13201
|
+
console.log(chalk4.gray(` Using config ID: ${configId}`));
|
|
13202
|
+
}
|
|
13134
13203
|
} else {
|
|
13135
|
-
|
|
13204
|
+
if (verbose) {
|
|
13205
|
+
console.log(chalk4.gray(` Resolving agent name: ${identifier}`));
|
|
13206
|
+
}
|
|
13136
13207
|
try {
|
|
13137
13208
|
const config2 = await apiClient.getConfigByName(identifier);
|
|
13138
13209
|
configId = config2.id;
|
|
13139
|
-
|
|
13210
|
+
if (verbose) {
|
|
13211
|
+
console.log(chalk4.gray(` Resolved to config ID: ${configId}`));
|
|
13212
|
+
}
|
|
13140
13213
|
} catch (error43) {
|
|
13141
13214
|
if (error43 instanceof Error) {
|
|
13142
13215
|
console.error(chalk4.red(`\u2717 Agent not found: ${identifier}`));
|
|
@@ -13149,32 +13222,22 @@ var runCmd = new Command2().name("run").description("Execute an agent").argument
|
|
|
13149
13222
|
process.exit(1);
|
|
13150
13223
|
}
|
|
13151
13224
|
}
|
|
13152
|
-
|
|
13153
|
-
|
|
13154
|
-
|
|
13155
|
-
|
|
13156
|
-
|
|
13157
|
-
|
|
13158
|
-
|
|
13159
|
-
|
|
13160
|
-
|
|
13161
|
-
|
|
13162
|
-
|
|
13163
|
-
|
|
13164
|
-
|
|
13165
|
-
|
|
13166
|
-
|
|
13167
|
-
chalk4.gray(
|
|
13168
|
-
` Volume versions: ${JSON.stringify(options.volumeVersion)}`
|
|
13169
|
-
)
|
|
13170
|
-
);
|
|
13171
|
-
}
|
|
13172
|
-
if (options.conversation) {
|
|
13173
|
-
console.log(chalk4.gray(` Conversation: ${options.conversation}`));
|
|
13225
|
+
if (verbose) {
|
|
13226
|
+
logVerbosePreFlight("Creating agent run", [
|
|
13227
|
+
{ label: "Prompt", value: prompt },
|
|
13228
|
+
{
|
|
13229
|
+
label: "Variables",
|
|
13230
|
+
value: Object.keys(options.vars).length > 0 ? JSON.stringify(options.vars) : void 0
|
|
13231
|
+
},
|
|
13232
|
+
{ label: "Artifact", value: options.artifactName },
|
|
13233
|
+
{ label: "Artifact version", value: options.artifactVersion },
|
|
13234
|
+
{
|
|
13235
|
+
label: "Volume versions",
|
|
13236
|
+
value: Object.keys(options.volumeVersion).length > 0 ? JSON.stringify(options.volumeVersion) : void 0
|
|
13237
|
+
},
|
|
13238
|
+
{ label: "Conversation", value: options.conversation }
|
|
13239
|
+
]);
|
|
13174
13240
|
}
|
|
13175
|
-
console.log();
|
|
13176
|
-
console.log(chalk4.blue("Executing in sandbox..."));
|
|
13177
|
-
console.log();
|
|
13178
13241
|
const response = await apiClient.createRun({
|
|
13179
13242
|
agentConfigId: configId,
|
|
13180
13243
|
prompt,
|
|
@@ -13184,7 +13247,7 @@ var runCmd = new Command2().name("run").description("Execute an agent").argument
|
|
|
13184
13247
|
volumeVersions: Object.keys(options.volumeVersion).length > 0 ? options.volumeVersion : void 0,
|
|
13185
13248
|
conversationId: options.conversation
|
|
13186
13249
|
});
|
|
13187
|
-
await pollEvents(response.runId, timeoutSeconds);
|
|
13250
|
+
await pollEvents(response.runId, timeoutSeconds, { verbose });
|
|
13188
13251
|
} catch (error43) {
|
|
13189
13252
|
if (error43 instanceof Error) {
|
|
13190
13253
|
if (error43.message.includes("Not authenticated")) {
|
|
@@ -13216,7 +13279,7 @@ runCmd.command("resume").description("Resume an agent run from a checkpoint (use
|
|
|
13216
13279
|
"-t, --timeout <seconds>",
|
|
13217
13280
|
"Polling timeout in seconds (default: 120)",
|
|
13218
13281
|
String(DEFAULT_TIMEOUT_SECONDS)
|
|
13219
|
-
).action(
|
|
13282
|
+
).option("-v, --verbose", "Show verbose output with timing information").action(
|
|
13220
13283
|
async (checkpointId, prompt, options, command) => {
|
|
13221
13284
|
const allOpts = command.optsWithGlobals();
|
|
13222
13285
|
const timeoutSeconds = parseInt(options.timeout, 10);
|
|
@@ -13226,6 +13289,7 @@ runCmd.command("resume").description("Resume an agent run from a checkpoint (use
|
|
|
13226
13289
|
);
|
|
13227
13290
|
process.exit(1);
|
|
13228
13291
|
}
|
|
13292
|
+
const verbose = options.verbose || allOpts.verbose;
|
|
13229
13293
|
try {
|
|
13230
13294
|
if (!isUUID(checkpointId)) {
|
|
13231
13295
|
console.error(
|
|
@@ -13234,25 +13298,22 @@ runCmd.command("resume").description("Resume an agent run from a checkpoint (use
|
|
|
13234
13298
|
console.error(chalk4.gray(" Checkpoint ID must be a valid UUID"));
|
|
13235
13299
|
process.exit(1);
|
|
13236
13300
|
}
|
|
13237
|
-
|
|
13238
|
-
|
|
13239
|
-
|
|
13240
|
-
|
|
13241
|
-
|
|
13242
|
-
|
|
13243
|
-
|
|
13244
|
-
|
|
13245
|
-
);
|
|
13301
|
+
if (verbose) {
|
|
13302
|
+
logVerbosePreFlight("Resuming agent run from checkpoint", [
|
|
13303
|
+
{ label: "Checkpoint ID", value: checkpointId },
|
|
13304
|
+
{ label: "Prompt", value: prompt },
|
|
13305
|
+
{
|
|
13306
|
+
label: "Volume overrides",
|
|
13307
|
+
value: Object.keys(allOpts.volumeVersion).length > 0 ? JSON.stringify(allOpts.volumeVersion) : void 0
|
|
13308
|
+
}
|
|
13309
|
+
]);
|
|
13246
13310
|
}
|
|
13247
|
-
console.log();
|
|
13248
|
-
console.log(chalk4.blue("Executing in sandbox..."));
|
|
13249
|
-
console.log();
|
|
13250
13311
|
const response = await apiClient.createRun({
|
|
13251
13312
|
checkpointId,
|
|
13252
13313
|
prompt,
|
|
13253
13314
|
volumeVersions: Object.keys(allOpts.volumeVersion).length > 0 ? allOpts.volumeVersion : void 0
|
|
13254
13315
|
});
|
|
13255
|
-
await pollEvents(response.runId, timeoutSeconds);
|
|
13316
|
+
await pollEvents(response.runId, timeoutSeconds, { verbose });
|
|
13256
13317
|
} catch (error43) {
|
|
13257
13318
|
if (error43 instanceof Error) {
|
|
13258
13319
|
if (error43.message.includes("Not authenticated")) {
|
|
@@ -13283,7 +13344,7 @@ runCmd.command("continue").description(
|
|
|
13283
13344
|
"-t, --timeout <seconds>",
|
|
13284
13345
|
"Polling timeout in seconds (default: 120)",
|
|
13285
13346
|
String(DEFAULT_TIMEOUT_SECONDS)
|
|
13286
|
-
).action(
|
|
13347
|
+
).option("-v, --verbose", "Show verbose output with timing information").action(
|
|
13287
13348
|
async (agentSessionId, prompt, options, command) => {
|
|
13288
13349
|
const allOpts = command.optsWithGlobals();
|
|
13289
13350
|
const timeoutSeconds = parseInt(options.timeout, 10);
|
|
@@ -13293,6 +13354,7 @@ runCmd.command("continue").description(
|
|
|
13293
13354
|
);
|
|
13294
13355
|
process.exit(1);
|
|
13295
13356
|
}
|
|
13357
|
+
const verbose = options.verbose || allOpts.verbose;
|
|
13296
13358
|
try {
|
|
13297
13359
|
if (!isUUID(agentSessionId)) {
|
|
13298
13360
|
console.error(
|
|
@@ -13301,26 +13363,23 @@ runCmd.command("continue").description(
|
|
|
13301
13363
|
console.error(chalk4.gray(" Agent session ID must be a valid UUID"));
|
|
13302
13364
|
process.exit(1);
|
|
13303
13365
|
}
|
|
13304
|
-
|
|
13305
|
-
|
|
13306
|
-
|
|
13307
|
-
|
|
13308
|
-
|
|
13309
|
-
|
|
13310
|
-
|
|
13311
|
-
|
|
13312
|
-
|
|
13313
|
-
);
|
|
13366
|
+
if (verbose) {
|
|
13367
|
+
logVerbosePreFlight("Continuing agent run from session", [
|
|
13368
|
+
{ label: "Session ID", value: agentSessionId },
|
|
13369
|
+
{ label: "Prompt", value: prompt },
|
|
13370
|
+
{ label: "Note", value: "Using latest artifact version" },
|
|
13371
|
+
{
|
|
13372
|
+
label: "Volume overrides",
|
|
13373
|
+
value: Object.keys(allOpts.volumeVersion).length > 0 ? JSON.stringify(allOpts.volumeVersion) : void 0
|
|
13374
|
+
}
|
|
13375
|
+
]);
|
|
13314
13376
|
}
|
|
13315
|
-
console.log();
|
|
13316
|
-
console.log(chalk4.blue("Executing in sandbox..."));
|
|
13317
|
-
console.log();
|
|
13318
13377
|
const response = await apiClient.createRun({
|
|
13319
13378
|
sessionId: agentSessionId,
|
|
13320
13379
|
prompt,
|
|
13321
13380
|
volumeVersions: Object.keys(allOpts.volumeVersion).length > 0 ? allOpts.volumeVersion : void 0
|
|
13322
13381
|
});
|
|
13323
|
-
await pollEvents(response.runId, timeoutSeconds);
|
|
13382
|
+
await pollEvents(response.runId, timeoutSeconds, { verbose });
|
|
13324
13383
|
} catch (error43) {
|
|
13325
13384
|
if (error43 instanceof Error) {
|
|
13326
13385
|
if (error43.message.includes("Not authenticated")) {
|
|
@@ -14047,7 +14106,7 @@ var artifactCommand = new Command10().name("artifact").description("Manage cloud
|
|
|
14047
14106
|
|
|
14048
14107
|
// src/index.ts
|
|
14049
14108
|
var program = new Command11();
|
|
14050
|
-
program.name("vm0").description("VM0 CLI - A modern build tool").version("
|
|
14109
|
+
program.name("vm0").description("VM0 CLI - A modern build tool").version("3.1.0");
|
|
14051
14110
|
program.command("hello").description("Say hello from the App").action(() => {
|
|
14052
14111
|
console.log(chalk11.blue("Welcome to the VM0 CLI!"));
|
|
14053
14112
|
console.log(chalk11.green(`Core says: ${FOO}`));
|