@vm0/cli 9.209.3 → 9.210.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/{chunk-O6UJMPWI.js → chunk-6EGWCGWC.js} +1103 -238
- package/{chunk-O6UJMPWI.js.map → chunk-6EGWCGWC.js.map} +1 -1
- package/{figma.generated-7FWIRN56.js → figma.generated-EJXHASDR.js} +2 -2
- package/figma.generated-EJXHASDR.js.map +1 -0
- package/index.js +101 -45
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/zero.js +115 -75
- package/zero.js.map +1 -1
- package/figma.generated-7FWIRN56.js.map +0 -1
|
@@ -18,7 +18,7 @@ var figmaFirewall = {
|
|
|
18
18
|
base: "https://api.figma.com",
|
|
19
19
|
auth: {
|
|
20
20
|
headers: {
|
|
21
|
-
|
|
21
|
+
"X-Figma-Token": "${{ secrets.FIGMA_TOKEN }}"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
permissions: [
|
|
@@ -190,4 +190,4 @@ var figmaFirewall = {
|
|
|
190
190
|
export {
|
|
191
191
|
figmaFirewall
|
|
192
192
|
};
|
|
193
|
-
//# sourceMappingURL=figma.generated-
|
|
193
|
+
//# sourceMappingURL=figma.generated-EJXHASDR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/connectors/src/firewalls/figma.generated.ts"],"sourcesContent":["// Auto-generated from Figma's official OpenAPI spec.\n// Source: https://github.com/figma/rest-api-spec\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate:figma\n//\n// DO NOT EDIT THIS FILE MANUALLY.\n\nimport type { FirewallConfig } from \"../firewall-types\";\n\nexport const figmaFirewall = {\n name: \"figma\",\n description: \"Figma API\",\n placeholders: {\n FIGMA_TOKEN: \"figd_CoffeeSafeLocalCoffeeSafeLocalCoffeeSafe\",\n },\n apis: [\n {\n base: \"https://api.figma.com\",\n auth: {\n headers: {\n \"X-Figma-Token\": \"${{ secrets.FIGMA_TOKEN }}\",\n },\n },\n permissions: [\n {\n name: \"current_user:read\",\n description: \"Read your name, email, and profile image.\",\n rules: [\n \"GET /v1/me\",\n ],\n },\n {\n name: \"file_comments:read\",\n description: \"Read the comments for files.\",\n rules: [\n \"GET /v1/files/{file_key}/comments\",\n \"GET /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_comments:write\",\n description: \"Post and delete comments and comment reactions in files.\",\n rules: [\n \"POST /v1/files/{file_key}/comments\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}\",\n \"POST /v1/files/{file_key}/comments/{comment_id}/reactions\",\n \"DELETE /v1/files/{file_key}/comments/{comment_id}/reactions\",\n ],\n },\n {\n name: \"file_content:read\",\n description: \"Read the contents of files, such as nodes and the editor type.\",\n rules: [\n \"GET /v1/files/{file_key}\",\n \"GET /v1/files/{file_key}/images\",\n \"GET /v1/files/{file_key}/nodes\",\n \"GET /v1/images/{file_key}\",\n ],\n },\n {\n name: \"file_dev_resources:read\",\n description: \"Read dev resources in files.\",\n rules: [\n \"GET /v1/files/{file_key}/dev_resources\",\n ],\n },\n {\n name: \"file_dev_resources:write\",\n description: \"Write to dev resources in files.\",\n rules: [\n \"POST /v1/dev_resources\",\n \"PUT /v1/dev_resources\",\n \"DELETE /v1/files/{file_key}/dev_resources/{dev_resource_id}\",\n ],\n },\n {\n name: \"file_metadata:read\",\n description: \"Read metadata of files.\",\n rules: [\n \"GET /v1/files/{file_key}/meta\",\n \"GET /v1/oembed\",\n ],\n },\n {\n name: \"file_variables:read\",\n description: \"Read variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\n \"GET /v1/files/{file_key}/variables/local\",\n \"GET /v1/files/{file_key}/variables/published\",\n ],\n },\n {\n name: \"file_variables:write\",\n description: \"Write to variables in Figma file. Note: this is only available to members in Enterprise organizations.\",\n rules: [\n \"POST /v1/files/{file_key}/variables\",\n ],\n },\n {\n name: \"file_versions:read\",\n description: \"Read the version history for files you can access.\",\n rules: [\n \"GET /v1/files/{file_key}/versions\",\n ],\n },\n {\n name: \"library_analytics:read\",\n description: \"Read library analytics data.\",\n rules: [\n \"GET /v1/analytics/libraries/{file_key}/component/actions\",\n \"GET /v1/analytics/libraries/{file_key}/component/usages\",\n \"GET /v1/analytics/libraries/{file_key}/style/actions\",\n \"GET /v1/analytics/libraries/{file_key}/style/usages\",\n \"GET /v1/analytics/libraries/{file_key}/variable/actions\",\n \"GET /v1/analytics/libraries/{file_key}/variable/usages\",\n ],\n },\n {\n name: \"library_assets:read\",\n description: \"Read data of individual published components and styles.\",\n rules: [\n \"GET /v1/component_sets/{key}\",\n \"GET /v1/components/{key}\",\n \"GET /v1/styles/{key}\",\n ],\n },\n {\n name: \"library_content:read\",\n description: \"Read published components and styles of files.\",\n rules: [\n \"GET /v1/files/{file_key}/component_sets\",\n \"GET /v1/files/{file_key}/components\",\n \"GET /v1/files/{file_key}/styles\",\n ],\n },\n {\n name: \"org:activity_log_read\",\n description: \"Read activity logs in the organization.\",\n rules: [\n \"GET /v1/activity_logs\",\n ],\n },\n {\n name: \"project_metadata:read\",\n description: \"Read metadata of projects.\",\n rules: [\n \"GET /v1/projects/{project_id}/meta\",\n ],\n },\n {\n name: \"projects:read\",\n description: \"List projects and files in projects.\",\n rules: [\n \"GET /v1/projects/{project_id}/files\",\n \"GET /v1/teams/{team_id}/projects\",\n ],\n },\n {\n name: \"team_library_content:read\",\n description: \"Read published components and styles of teams.\",\n rules: [\n \"GET /v1/teams/{team_id}/component_sets\",\n \"GET /v1/teams/{team_id}/components\",\n \"GET /v1/teams/{team_id}/styles\",\n ],\n },\n {\n name: \"webhooks:read\",\n description: \"Read metadata of webhooks.\",\n rules: [\n \"GET /v2/teams/{team_id}/webhooks\",\n \"GET /v2/webhooks\",\n \"GET /v2/webhooks/{webhook_id}\",\n \"GET /v2/webhooks/{webhook_id}/requests\",\n ],\n },\n {\n name: \"webhooks:write\",\n description: \"Create and manage webhooks.\",\n rules: [\n \"POST /v2/webhooks\",\n \"PUT /v2/webhooks/{webhook_id}\",\n \"DELETE /v2/webhooks/{webhook_id}\",\n ],\n },\n ],\n },\n ],\n} as const satisfies FirewallConfig;\n"],"mappings":"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","names":[]}
|
package/index.js
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
extractSecretNames,
|
|
29
29
|
extractVarNames,
|
|
30
30
|
formatBytes,
|
|
31
|
+
formatIsoTimestamp,
|
|
31
32
|
formatRelativeTime,
|
|
32
33
|
getActiveOrg,
|
|
33
34
|
getAgentEvents,
|
|
@@ -47,6 +48,7 @@ import {
|
|
|
47
48
|
getToken,
|
|
48
49
|
guaranteedConnectorProvidedBindingNames,
|
|
49
50
|
isInteractive,
|
|
51
|
+
isSupportedFramework,
|
|
50
52
|
isUUID,
|
|
51
53
|
listRuns,
|
|
52
54
|
listStorages,
|
|
@@ -56,10 +58,11 @@ import {
|
|
|
56
58
|
listZeroVariables,
|
|
57
59
|
loadConfig,
|
|
58
60
|
loadValues,
|
|
59
|
-
|
|
61
|
+
parseBoundedLogCount,
|
|
60
62
|
parseIdentifier,
|
|
61
63
|
parsePermissionPolicies,
|
|
62
64
|
parsePositiveLogCount,
|
|
65
|
+
parseSearchQuery,
|
|
63
66
|
parseTime,
|
|
64
67
|
pollEvents,
|
|
65
68
|
prepareStorage,
|
|
@@ -74,7 +77,7 @@ import {
|
|
|
74
77
|
uo,
|
|
75
78
|
volumeConfigSchema,
|
|
76
79
|
withErrorHandler
|
|
77
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-6EGWCGWC.js";
|
|
78
81
|
import {
|
|
79
82
|
external_exports
|
|
80
83
|
} from "./chunk-S3DAXIKY.js";
|
|
@@ -411,7 +414,7 @@ function getConfigPath() {
|
|
|
411
414
|
return join(os.homedir(), ".vm0", "config.json");
|
|
412
415
|
}
|
|
413
416
|
var infoCommand = new Command().name("info").description("Display environment and debug information").action(async () => {
|
|
414
|
-
console.log(source_default.bold(`VM0 CLI v${"9.
|
|
417
|
+
console.log(source_default.bold(`VM0 CLI v${"9.210.0"}`));
|
|
415
418
|
console.log();
|
|
416
419
|
const config = await loadConfig();
|
|
417
420
|
const hasEnvToken = !!process.env.VM0_TOKEN;
|
|
@@ -1113,7 +1116,7 @@ var composeCommand = new Command().name("compose").description("Create or update
|
|
|
1113
1116
|
options.autoUpdate = false;
|
|
1114
1117
|
}
|
|
1115
1118
|
if (options.autoUpdate !== false) {
|
|
1116
|
-
await startSilentUpgrade("9.
|
|
1119
|
+
await startSilentUpgrade("9.210.0");
|
|
1117
1120
|
}
|
|
1118
1121
|
try {
|
|
1119
1122
|
const { config, agentName, agent, basePath } = await loadAndValidateConfig(resolvedConfigFile);
|
|
@@ -1210,7 +1213,7 @@ var mainRunCommand = new Command().name("run").description("Run an agent").argum
|
|
|
1210
1213
|
withErrorHandler(
|
|
1211
1214
|
async (identifier, prompt, options) => {
|
|
1212
1215
|
if (options.autoUpdate !== false) {
|
|
1213
|
-
await startSilentUpgrade("9.
|
|
1216
|
+
await startSilentUpgrade("9.210.0");
|
|
1214
1217
|
}
|
|
1215
1218
|
const { name, version } = parseIdentifier(identifier);
|
|
1216
1219
|
let composeId;
|
|
@@ -2418,38 +2421,40 @@ init_esm_shims();
|
|
|
2418
2421
|
// src/commands/logs/search.ts
|
|
2419
2422
|
init_esm_shims();
|
|
2420
2423
|
var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
2421
|
-
function
|
|
2422
|
-
const
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2424
|
+
function supportedSearchFramework(framework) {
|
|
2425
|
+
const normalized = framework ?? void 0;
|
|
2426
|
+
return isSupportedFramework(normalized) ? normalized : void 0;
|
|
2427
|
+
}
|
|
2428
|
+
function renderSearchEvent(event, framework, renderer, normalizer) {
|
|
2429
|
+
const parsedEvents = normalizer.process(
|
|
2430
|
+
event.eventData,
|
|
2431
|
+
supportedSearchFramework(framework),
|
|
2432
|
+
new Date(event.createdAt)
|
|
2433
|
+
);
|
|
2434
|
+
for (const parsed of parsedEvents) {
|
|
2435
|
+
renderer.render(parsed);
|
|
2436
|
+
}
|
|
2437
|
+
}
|
|
2438
|
+
function flushSearchRenderer(renderer, normalizer) {
|
|
2439
|
+
for (const parsed of normalizer.flush()) {
|
|
2426
2440
|
renderer.render(parsed);
|
|
2427
2441
|
}
|
|
2442
|
+
renderer.flush();
|
|
2428
2443
|
}
|
|
2429
2444
|
function formatRunHeader(runId, agentName, timestamp) {
|
|
2430
2445
|
const shortId = runId.slice(0, 8);
|
|
2431
|
-
const time =
|
|
2446
|
+
const time = formatIsoTimestamp(timestamp);
|
|
2432
2447
|
return `\u2500\u2500 Run ${shortId} (${agentName}, ${time}) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;
|
|
2433
2448
|
}
|
|
2434
2449
|
function parseContextOptions(options) {
|
|
2435
|
-
const contextN = options.context ?
|
|
2436
|
-
const before = options.beforeContext ?
|
|
2437
|
-
const after = options.afterContext ?
|
|
2438
|
-
if (isNaN(before) || before < 0 || before > 10) {
|
|
2439
|
-
throw new Error("--before-context must be between 0 and 10");
|
|
2440
|
-
}
|
|
2441
|
-
if (isNaN(after) || after < 0 || after > 10) {
|
|
2442
|
-
throw new Error("--after-context must be between 0 and 10");
|
|
2443
|
-
}
|
|
2450
|
+
const contextN = options.context !== void 0 ? parseBoundedLogCount(options.context, "--context", 0, 10) : 0;
|
|
2451
|
+
const before = options.beforeContext !== void 0 ? parseBoundedLogCount(options.beforeContext, "--before-context", 0, 10) : contextN;
|
|
2452
|
+
const after = options.afterContext !== void 0 ? parseBoundedLogCount(options.afterContext, "--after-context", 0, 10) : contextN;
|
|
2444
2453
|
return { before, after };
|
|
2445
2454
|
}
|
|
2446
2455
|
function parseLimit2(value) {
|
|
2447
|
-
if (
|
|
2448
|
-
|
|
2449
|
-
if (isNaN(limit) || limit < 1 || limit > 50) {
|
|
2450
|
-
throw new Error("--limit must be between 1 and 50");
|
|
2451
|
-
}
|
|
2452
|
-
return limit;
|
|
2456
|
+
if (value === void 0) return void 0;
|
|
2457
|
+
return parseBoundedLogCount(value, "--limit", 1, 50);
|
|
2453
2458
|
}
|
|
2454
2459
|
function renderResults(response) {
|
|
2455
2460
|
const grouped = /* @__PURE__ */ new Map();
|
|
@@ -2477,16 +2482,22 @@ function renderResults(response) {
|
|
|
2477
2482
|
for (const result of group.results) {
|
|
2478
2483
|
const renderer = new EventRenderer({
|
|
2479
2484
|
showTimestamp: true,
|
|
2480
|
-
verbose: false
|
|
2481
|
-
buffered: false
|
|
2485
|
+
verbose: false
|
|
2482
2486
|
});
|
|
2487
|
+
const normalizer = new EventStreamNormalizer();
|
|
2483
2488
|
for (const event of result.contextBefore) {
|
|
2484
|
-
|
|
2489
|
+
renderSearchEvent(event, result.framework, renderer, normalizer);
|
|
2485
2490
|
}
|
|
2486
|
-
|
|
2491
|
+
renderSearchEvent(
|
|
2492
|
+
result.matchedEvent,
|
|
2493
|
+
result.framework,
|
|
2494
|
+
renderer,
|
|
2495
|
+
normalizer
|
|
2496
|
+
);
|
|
2487
2497
|
for (const event of result.contextAfter) {
|
|
2488
|
-
|
|
2498
|
+
renderSearchEvent(event, result.framework, renderer, normalizer);
|
|
2489
2499
|
}
|
|
2500
|
+
flushSearchRenderer(renderer, normalizer);
|
|
2490
2501
|
}
|
|
2491
2502
|
}
|
|
2492
2503
|
if (response.hasMore) {
|
|
@@ -2500,11 +2511,26 @@ function renderResults(response) {
|
|
|
2500
2511
|
}
|
|
2501
2512
|
var searchCommand = new Command().name("search").description("Search agent events across runs").argument("<keyword>", "Search keyword").option("-A, --after-context <n>", "Show n events after each match").option("-B, --before-context <n>", "Show n events before each match").option("-C, --context <n>", "Show n events before and after each match").option("--agent <id>", "Filter by agent ID").option("--run <id>", "Filter by specific run ID").option("--since <time>", "Search logs since (default: 7d)").option("--limit <n>", "Maximum number of matches (default: 20)").action(
|
|
2502
2513
|
withErrorHandler(async (keyword, options) => {
|
|
2514
|
+
const searchKeyword = parseSearchQuery(keyword, "Keyword");
|
|
2515
|
+
if (options.agent !== void 0 && !isUUID(options.agent)) {
|
|
2516
|
+
console.error(
|
|
2517
|
+
source_default.red(`\u2717 Invalid agent ID "${options.agent}" \u2014 expected a UUID`)
|
|
2518
|
+
);
|
|
2519
|
+
console.error(source_default.dim(" Run: vm0 run list to find agent IDs"));
|
|
2520
|
+
process.exit(1);
|
|
2521
|
+
}
|
|
2522
|
+
if (options.run !== void 0 && !isUUID(options.run)) {
|
|
2523
|
+
console.error(
|
|
2524
|
+
source_default.red(`\u2717 Invalid run ID "${options.run}" \u2014 expected a UUID`)
|
|
2525
|
+
);
|
|
2526
|
+
console.error(source_default.dim(" Run: vm0 run list to find run IDs"));
|
|
2527
|
+
process.exit(1);
|
|
2528
|
+
}
|
|
2503
2529
|
const { before, after } = parseContextOptions(options);
|
|
2504
|
-
const since = options.since ? parseTime(options.since) : Date.now() - SEVEN_DAYS_MS;
|
|
2530
|
+
const since = options.since !== void 0 ? parseTime(options.since) : Date.now() - SEVEN_DAYS_MS;
|
|
2505
2531
|
const limit = parseLimit2(options.limit);
|
|
2506
2532
|
const response = await searchLogs({
|
|
2507
|
-
keyword,
|
|
2533
|
+
keyword: searchKeyword,
|
|
2508
2534
|
agentId: options.agent,
|
|
2509
2535
|
runId: options.run,
|
|
2510
2536
|
since,
|
|
@@ -2534,7 +2560,7 @@ function buildPlatformLogsUrl(apiUrl, runId) {
|
|
|
2534
2560
|
return `http://${hostname}:3001/logs/${runId}`;
|
|
2535
2561
|
}
|
|
2536
2562
|
const parts = hostname.split(".");
|
|
2537
|
-
if (parts[0] === "www" || parts[0] === "app" || parts[0] === "platform") {
|
|
2563
|
+
if (parts[0] === "www" || parts[0] === "app" || parts[0] === "platform" || parts[0] === "api") {
|
|
2538
2564
|
parts[0] = "app";
|
|
2539
2565
|
} else {
|
|
2540
2566
|
parts.unshift("app");
|
|
@@ -2543,6 +2569,12 @@ function buildPlatformLogsUrl(apiUrl, runId) {
|
|
|
2543
2569
|
const port = url.port ? `:${url.port}` : "";
|
|
2544
2570
|
return `https://${platformHost}${port}/logs/${runId}`;
|
|
2545
2571
|
}
|
|
2572
|
+
function supportedLogFramework(framework) {
|
|
2573
|
+
return isSupportedFramework(framework) ? framework : void 0;
|
|
2574
|
+
}
|
|
2575
|
+
function hasLogFramework(framework) {
|
|
2576
|
+
return framework !== void 0 && framework !== null;
|
|
2577
|
+
}
|
|
2546
2578
|
function formatMetric(metric) {
|
|
2547
2579
|
const memPercent = (metric.mem_used / metric.mem_total * 100).toFixed(1);
|
|
2548
2580
|
const diskPercent = (metric.disk_used / metric.disk_total * 100).toFixed(1);
|
|
@@ -2742,6 +2774,13 @@ var logsCommand = new Command().name("logs").description("View and search agent
|
|
|
2742
2774
|
logsCommand.help();
|
|
2743
2775
|
return;
|
|
2744
2776
|
}
|
|
2777
|
+
if (!isUUID(runId)) {
|
|
2778
|
+
console.error(
|
|
2779
|
+
source_default.red(`\u2717 Invalid run ID "${runId}" \u2014 expected a UUID`)
|
|
2780
|
+
);
|
|
2781
|
+
console.error(source_default.dim(" Run: vm0 run list to find run IDs"));
|
|
2782
|
+
process.exit(1);
|
|
2783
|
+
}
|
|
2745
2784
|
const logType = getLogType(options);
|
|
2746
2785
|
const countModes = [
|
|
2747
2786
|
options.tail !== void 0,
|
|
@@ -2754,7 +2793,7 @@ var logsCommand = new Command().name("logs").description("View and search agent
|
|
|
2754
2793
|
);
|
|
2755
2794
|
}
|
|
2756
2795
|
let since;
|
|
2757
|
-
if (options.since) {
|
|
2796
|
+
if (options.since !== void 0) {
|
|
2758
2797
|
since = parseTime(options.since);
|
|
2759
2798
|
}
|
|
2760
2799
|
const isAll = options.all === true;
|
|
@@ -2795,13 +2834,21 @@ var logsCommand = new Command().name("logs").description("View and search agent
|
|
|
2795
2834
|
)
|
|
2796
2835
|
);
|
|
2797
2836
|
async function showAgentEvents(runId, options, platformUrl) {
|
|
2798
|
-
let framework = "claude-code";
|
|
2799
2837
|
const events = await collectLogItems({
|
|
2800
2838
|
fetchPage: async (request) => {
|
|
2801
2839
|
const response = await getAgentEvents(runId, request);
|
|
2802
|
-
|
|
2840
|
+
const responseFramework = response.framework;
|
|
2803
2841
|
return {
|
|
2804
|
-
items: response.events
|
|
2842
|
+
items: response.events.map((event) => {
|
|
2843
|
+
const framework2 = supportedLogFramework(
|
|
2844
|
+
responseFramework ?? void 0
|
|
2845
|
+
);
|
|
2846
|
+
return {
|
|
2847
|
+
event,
|
|
2848
|
+
...framework2 ? { framework: framework2 } : {},
|
|
2849
|
+
useDefaultFramework: !hasLogFramework(responseFramework)
|
|
2850
|
+
};
|
|
2851
|
+
}),
|
|
2805
2852
|
hasMore: response.hasMore,
|
|
2806
2853
|
nextCursor: response.nextCursor
|
|
2807
2854
|
};
|
|
@@ -2815,14 +2862,23 @@ async function showAgentEvents(runId, options, platformUrl) {
|
|
|
2815
2862
|
console.log(source_default.yellow("No agent events found for this run"));
|
|
2816
2863
|
return;
|
|
2817
2864
|
}
|
|
2865
|
+
const framework = events.find((item) => {
|
|
2866
|
+
return item.framework !== void 0;
|
|
2867
|
+
})?.framework;
|
|
2818
2868
|
const renderer = createLogRenderer(true);
|
|
2819
2869
|
const normalizer = new EventStreamNormalizer();
|
|
2820
|
-
for (const
|
|
2821
|
-
renderAgentEvent(
|
|
2870
|
+
for (const item of events) {
|
|
2871
|
+
renderAgentEvent(
|
|
2872
|
+
item.event,
|
|
2873
|
+
renderer,
|
|
2874
|
+
normalizer,
|
|
2875
|
+
item.framework ?? (item.useDefaultFramework ? framework : void 0)
|
|
2876
|
+
);
|
|
2822
2877
|
}
|
|
2823
2878
|
for (const parsed of normalizer.flush()) {
|
|
2824
2879
|
renderer.render(parsed);
|
|
2825
2880
|
}
|
|
2881
|
+
renderer.flush();
|
|
2826
2882
|
console.log(source_default.dim(`View on platform: ${platformUrl}`));
|
|
2827
2883
|
}
|
|
2828
2884
|
async function showSystemLog(runId, options) {
|
|
@@ -3016,13 +3072,13 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
|
|
|
3016
3072
|
if (latestVersion === null) {
|
|
3017
3073
|
throw new Error("Could not check for updates. Please try again later.");
|
|
3018
3074
|
}
|
|
3019
|
-
if (latestVersion === "9.
|
|
3020
|
-
console.log(source_default.green(`\u2713 Already up to date (${"9.
|
|
3075
|
+
if (latestVersion === "9.210.0") {
|
|
3076
|
+
console.log(source_default.green(`\u2713 Already up to date (${"9.210.0"})`));
|
|
3021
3077
|
return;
|
|
3022
3078
|
}
|
|
3023
3079
|
console.log(
|
|
3024
3080
|
source_default.yellow(
|
|
3025
|
-
`Current version: ${"9.
|
|
3081
|
+
`Current version: ${"9.210.0"} -> Latest version: ${latestVersion}`
|
|
3026
3082
|
)
|
|
3027
3083
|
);
|
|
3028
3084
|
console.log();
|
|
@@ -3049,7 +3105,7 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
|
|
|
3049
3105
|
const success = await performUpgrade(packageManager);
|
|
3050
3106
|
if (success) {
|
|
3051
3107
|
console.log(
|
|
3052
|
-
source_default.green(`\u2713 Upgraded from ${"9.
|
|
3108
|
+
source_default.green(`\u2713 Upgraded from ${"9.210.0"} to ${latestVersion}`)
|
|
3053
3109
|
);
|
|
3054
3110
|
return;
|
|
3055
3111
|
}
|
|
@@ -3116,7 +3172,7 @@ var whoamiCommand = new Command().name("whoami").description("Show current ident
|
|
|
3116
3172
|
|
|
3117
3173
|
// src/index.ts
|
|
3118
3174
|
var program = new Command();
|
|
3119
|
-
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.
|
|
3175
|
+
program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.210.0");
|
|
3120
3176
|
program.addCommand(authCommand);
|
|
3121
3177
|
program.addCommand(infoCommand);
|
|
3122
3178
|
program.addCommand(composeCommand);
|