@vm0/cli 9.65.1 → 9.66.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 (2) hide show
  1. package/index.js +101 -267
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -45,7 +45,7 @@ if (DSN) {
45
45
  Sentry.init({
46
46
  dsn: DSN,
47
47
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
48
- release: "9.65.1",
48
+ release: "9.66.0",
49
49
  sendDefaultPii: false,
50
50
  tracesSampleRate: 0,
51
51
  shutdownTimeout: 500,
@@ -64,7 +64,7 @@ if (DSN) {
64
64
  }
65
65
  });
66
66
  Sentry.setContext("cli", {
67
- version: "9.65.1",
67
+ version: "9.66.0",
68
68
  command: process.argv.slice(2).join(" ")
69
69
  });
70
70
  Sentry.setContext("runtime", {
@@ -675,7 +675,7 @@ function getConfigPath() {
675
675
  return join2(homedir2(), ".vm0", "config.json");
676
676
  }
677
677
  var infoCommand = new Command6().name("info").description("Display environment and debug information").action(async () => {
678
- console.log(chalk4.bold(`VM0 CLI v${"9.65.1"}`));
678
+ console.log(chalk4.bold(`VM0 CLI v${"9.66.0"}`));
679
679
  console.log();
680
680
  const config = await loadConfig();
681
681
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -902,17 +902,7 @@ var agentDefinitionSchema = z4.object({
902
902
  displayName: z4.string().optional(),
903
903
  description: z4.string().optional(),
904
904
  sound: z4.string().optional()
905
- }).optional(),
906
- /**
907
- * @deprecated Server-resolved field. User input is ignored.
908
- * @internal
909
- */
910
- image: z4.string().optional(),
911
- /**
912
- * @deprecated Server-resolved field. User input is ignored.
913
- * @internal
914
- */
915
- working_dir: z4.string().optional()
905
+ }).optional()
916
906
  });
917
907
  var agentComposeContentSchema = z4.object({
918
908
  version: z4.string().min(1, "Version is required"),
@@ -2634,7 +2624,6 @@ var variablesByNameContract = c11.router({
2634
2624
 
2635
2625
  // ../../packages/core/src/contracts/model-providers.ts
2636
2626
  import { z as z15 } from "zod";
2637
- var c12 = initContract();
2638
2627
  var MODEL_PROVIDER_TYPES = {
2639
2628
  "claude-code-oauth-token": {
2640
2629
  framework: "claude-code",
@@ -2970,137 +2959,18 @@ var upsertModelProviderResponseSchema = z15.object({
2970
2959
  provider: modelProviderResponseSchema,
2971
2960
  created: z15.boolean()
2972
2961
  });
2973
- var checkSecretResponseSchema = z15.object({
2974
- exists: z15.boolean(),
2975
- secretName: z15.string()
2976
- });
2977
- var modelProvidersMainContract = c12.router({
2978
- list: {
2979
- method: "GET",
2980
- path: "/api/model-providers",
2981
- headers: authHeadersSchema,
2982
- responses: {
2983
- 200: modelProviderListResponseSchema,
2984
- 401: apiErrorSchema,
2985
- 500: apiErrorSchema
2986
- },
2987
- summary: "List all model providers"
2988
- },
2989
- upsert: {
2990
- method: "PUT",
2991
- path: "/api/model-providers",
2992
- headers: authHeadersSchema,
2993
- body: upsertModelProviderRequestSchema,
2994
- responses: {
2995
- 200: upsertModelProviderResponseSchema,
2996
- 201: upsertModelProviderResponseSchema,
2997
- 400: apiErrorSchema,
2998
- 401: apiErrorSchema,
2999
- 409: apiErrorSchema,
3000
- 500: apiErrorSchema
3001
- },
3002
- summary: "Create or update a model provider"
3003
- }
3004
- });
3005
- var modelProvidersCheckContract = c12.router({
3006
- check: {
3007
- method: "GET",
3008
- path: "/api/model-providers/check/:type",
3009
- headers: authHeadersSchema,
3010
- pathParams: z15.object({
3011
- type: modelProviderTypeSchema
3012
- }),
3013
- responses: {
3014
- 200: checkSecretResponseSchema,
3015
- 401: apiErrorSchema,
3016
- 500: apiErrorSchema
3017
- },
3018
- summary: "Check if secret exists for a model provider type"
3019
- }
3020
- });
3021
- var modelProvidersByTypeContract = c12.router({
3022
- delete: {
3023
- method: "DELETE",
3024
- path: "/api/model-providers/:type",
3025
- headers: authHeadersSchema,
3026
- pathParams: z15.object({
3027
- type: modelProviderTypeSchema
3028
- }),
3029
- responses: {
3030
- 204: c12.noBody(),
3031
- 401: apiErrorSchema,
3032
- 404: apiErrorSchema,
3033
- 500: apiErrorSchema
3034
- },
3035
- summary: "Delete a model provider"
3036
- }
3037
- });
3038
- var modelProvidersConvertContract = c12.router({
3039
- convert: {
3040
- method: "POST",
3041
- path: "/api/model-providers/:type/convert",
3042
- headers: authHeadersSchema,
3043
- pathParams: z15.object({
3044
- type: modelProviderTypeSchema
3045
- }),
3046
- body: z15.undefined(),
3047
- responses: {
3048
- 200: modelProviderResponseSchema,
3049
- 400: apiErrorSchema,
3050
- 401: apiErrorSchema,
3051
- 404: apiErrorSchema,
3052
- 500: apiErrorSchema
3053
- },
3054
- summary: "Convert existing user secret to model provider"
3055
- }
3056
- });
3057
- var modelProvidersSetDefaultContract = c12.router({
3058
- setDefault: {
3059
- method: "POST",
3060
- path: "/api/model-providers/:type/set-default",
3061
- headers: authHeadersSchema,
3062
- pathParams: z15.object({
3063
- type: modelProviderTypeSchema
3064
- }),
3065
- body: z15.undefined(),
3066
- responses: {
3067
- 200: modelProviderResponseSchema,
3068
- 401: apiErrorSchema,
3069
- 404: apiErrorSchema,
3070
- 500: apiErrorSchema
3071
- },
3072
- summary: "Set a model provider as default for its framework"
3073
- }
3074
- });
3075
2962
  var updateModelRequestSchema = z15.object({
3076
2963
  selectedModel: z15.string().optional()
3077
2964
  });
3078
- var modelProvidersUpdateModelContract = c12.router({
3079
- updateModel: {
3080
- method: "PATCH",
3081
- path: "/api/model-providers/:type/model",
3082
- headers: authHeadersSchema,
3083
- pathParams: z15.object({
3084
- type: modelProviderTypeSchema
3085
- }),
3086
- body: updateModelRequestSchema,
3087
- responses: {
3088
- 200: modelProviderResponseSchema,
3089
- 401: apiErrorSchema,
3090
- 404: apiErrorSchema,
3091
- 500: apiErrorSchema
3092
- },
3093
- summary: "Update model selection for an existing provider"
3094
- }
3095
- });
3096
2965
 
3097
2966
  // ../../packages/core/src/contracts/sessions.ts
3098
2967
  import { z as z16 } from "zod";
3099
- var c13 = initContract();
2968
+ var c12 = initContract();
3100
2969
  var storedChatMessageSchema = z16.object({
3101
2970
  role: z16.enum(["user", "assistant"]),
3102
2971
  content: z16.string(),
3103
2972
  runId: z16.string().optional(),
2973
+ summaries: z16.array(z16.string()).optional(),
3104
2974
  createdAt: z16.string()
3105
2975
  });
3106
2976
  var sessionResponseSchema = z16.object({
@@ -3141,7 +3011,7 @@ var checkpointResponseSchema = z16.object({
3141
3011
  volumeVersionsSnapshot: volumeVersionsSnapshotSchema2.nullable(),
3142
3012
  createdAt: z16.string()
3143
3013
  });
3144
- var sessionsContract = c13.router({
3014
+ var sessionsContract = c12.router({
3145
3015
  /**
3146
3016
  * GET /api/agent/sessions?agentComposeId=X
3147
3017
  * List chat sessions for an agent
@@ -3160,7 +3030,7 @@ var sessionsContract = c13.router({
3160
3030
  summary: "List chat sessions for an agent"
3161
3031
  }
3162
3032
  });
3163
- var sessionsByIdContract = c13.router({
3033
+ var sessionsByIdContract = c12.router({
3164
3034
  /**
3165
3035
  * GET /api/agent/sessions/:id
3166
3036
  * Get session by ID
@@ -3181,7 +3051,7 @@ var sessionsByIdContract = c13.router({
3181
3051
  summary: "Get session by ID"
3182
3052
  }
3183
3053
  });
3184
- var sessionMessagesContract = c13.router({
3054
+ var sessionMessagesContract = c12.router({
3185
3055
  /**
3186
3056
  * POST /api/agent/sessions/:id/messages
3187
3057
  * Append chat messages to a session
@@ -3211,7 +3081,7 @@ var sessionMessagesContract = c13.router({
3211
3081
  summary: "Append chat messages to a session"
3212
3082
  }
3213
3083
  });
3214
- var checkpointsByIdContract = c13.router({
3084
+ var checkpointsByIdContract = c12.router({
3215
3085
  /**
3216
3086
  * GET /api/agent/checkpoints/:id
3217
3087
  * Get checkpoint by ID
@@ -3235,7 +3105,7 @@ var checkpointsByIdContract = c13.router({
3235
3105
 
3236
3106
  // ../../packages/core/src/contracts/chat-threads.ts
3237
3107
  import { z as z17 } from "zod";
3238
- var c14 = initContract();
3108
+ var c13 = initContract();
3239
3109
  var chatThreadListItemSchema = z17.object({
3240
3110
  id: z17.string(),
3241
3111
  title: z17.string().nullable(),
@@ -3265,7 +3135,7 @@ var chatThreadDetailSchema = z17.object({
3265
3135
  createdAt: z17.string(),
3266
3136
  updatedAt: z17.string()
3267
3137
  });
3268
- var chatThreadsContract = c14.router({
3138
+ var chatThreadsContract = c13.router({
3269
3139
  create: {
3270
3140
  method: "POST",
3271
3141
  path: "/api/chat-threads",
@@ -3294,7 +3164,7 @@ var chatThreadsContract = c14.router({
3294
3164
  summary: "List chat threads for an agent"
3295
3165
  }
3296
3166
  });
3297
- var chatThreadByIdContract = c14.router({
3167
+ var chatThreadByIdContract = c13.router({
3298
3168
  get: {
3299
3169
  method: "GET",
3300
3170
  path: "/api/chat-threads/:id",
@@ -3308,7 +3178,7 @@ var chatThreadByIdContract = c14.router({
3308
3178
  summary: "Get chat thread detail with messages"
3309
3179
  }
3310
3180
  });
3311
- var chatThreadRunsContract = c14.router({
3181
+ var chatThreadRunsContract = c13.router({
3312
3182
  addRun: {
3313
3183
  method: "POST",
3314
3184
  path: "/api/chat-threads/:id/runs",
@@ -3328,7 +3198,7 @@ var chatThreadRunsContract = c14.router({
3328
3198
 
3329
3199
  // ../../packages/core/src/contracts/runners.ts
3330
3200
  import { z as z18 } from "zod";
3331
- var c15 = initContract();
3201
+ var c14 = initContract();
3332
3202
  var runnerGroupSchema = z18.string().regex(
3333
3203
  /^[a-z0-9-]+\/[a-z0-9-]+$/,
3334
3204
  "Runner group must be in org/name format (e.g., acme/production)"
@@ -3341,7 +3211,7 @@ var jobSchema = z18.object({
3341
3211
  checkpointId: z18.uuid().nullable(),
3342
3212
  experimentalProfile: z18.string().optional()
3343
3213
  });
3344
- var runnersPollContract = c15.router({
3214
+ var runnersPollContract = c14.router({
3345
3215
  poll: {
3346
3216
  method: "POST",
3347
3217
  path: "/api/runners/poll",
@@ -3444,7 +3314,7 @@ var executionContextSchema = z18.object({
3444
3314
  // VM profile for resource allocation (e.g., "vm0/default", "vm0/browser")
3445
3315
  experimentalProfile: z18.string().optional()
3446
3316
  });
3447
- var runnersJobClaimContract = c15.router({
3317
+ var runnersJobClaimContract = c14.router({
3448
3318
  claim: {
3449
3319
  method: "POST",
3450
3320
  path: "/api/runners/jobs/:id/claim",
@@ -3470,7 +3340,7 @@ var runnersJobClaimContract = c15.router({
3470
3340
 
3471
3341
  // ../../packages/core/src/contracts/schedules.ts
3472
3342
  import { z as z19 } from "zod";
3473
- var c16 = initContract();
3343
+ var c15 = initContract();
3474
3344
  var scheduleTriggerSchema = z19.object({
3475
3345
  cron: z19.string().optional(),
3476
3346
  at: z19.string().optional(),
@@ -3587,7 +3457,7 @@ var deployScheduleResponseSchema = z19.object({
3587
3457
  created: z19.boolean()
3588
3458
  // true if created, false if updated
3589
3459
  });
3590
- var schedulesMainContract = c16.router({
3460
+ var schedulesMainContract = c15.router({
3591
3461
  /**
3592
3462
  * POST /api/agent/schedules
3593
3463
  * Deploy (create or update) a schedule
@@ -3625,7 +3495,7 @@ var schedulesMainContract = c16.router({
3625
3495
  summary: "List all schedules"
3626
3496
  }
3627
3497
  });
3628
- var schedulesByNameContract = c16.router({
3498
+ var schedulesByNameContract = c15.router({
3629
3499
  /**
3630
3500
  * GET /api/agent/schedules/:name
3631
3501
  * Get schedule by name
@@ -3663,7 +3533,7 @@ var schedulesByNameContract = c16.router({
3663
3533
  composeId: z19.string().uuid("Compose ID required")
3664
3534
  }),
3665
3535
  responses: {
3666
- 204: c16.noBody(),
3536
+ 204: c15.noBody(),
3667
3537
  401: apiErrorSchema,
3668
3538
  403: apiErrorSchema,
3669
3539
  404: apiErrorSchema
@@ -3671,7 +3541,7 @@ var schedulesByNameContract = c16.router({
3671
3541
  summary: "Delete schedule"
3672
3542
  }
3673
3543
  });
3674
- var schedulesEnableContract = c16.router({
3544
+ var schedulesEnableContract = c15.router({
3675
3545
  /**
3676
3546
  * POST /api/agent/schedules/:name/enable
3677
3547
  * Enable a disabled schedule
@@ -3717,7 +3587,7 @@ var schedulesEnableContract = c16.router({
3717
3587
  summary: "Disable schedule"
3718
3588
  }
3719
3589
  });
3720
- var scheduleRunsContract = c16.router({
3590
+ var scheduleRunsContract = c15.router({
3721
3591
  /**
3722
3592
  * GET /api/agent/schedules/:name/runs
3723
3593
  * List recent runs for a schedule
@@ -3745,7 +3615,7 @@ var scheduleRunsContract = c16.router({
3745
3615
 
3746
3616
  // ../../packages/core/src/contracts/realtime.ts
3747
3617
  import { z as z20 } from "zod";
3748
- var c17 = initContract();
3618
+ var c16 = initContract();
3749
3619
  var ablyTokenRequestSchema = z20.object({
3750
3620
  keyName: z20.string(),
3751
3621
  ttl: z20.number().optional(),
@@ -3755,7 +3625,7 @@ var ablyTokenRequestSchema = z20.object({
3755
3625
  nonce: z20.string(),
3756
3626
  mac: z20.string()
3757
3627
  });
3758
- var runnerRealtimeTokenContract = c17.router({
3628
+ var runnerRealtimeTokenContract = c16.router({
3759
3629
  /**
3760
3630
  * POST /api/runners/realtime/token
3761
3631
  * Get an Ably token to subscribe to a runner group's job notification channel
@@ -3788,7 +3658,7 @@ var listQuerySchema = z21.object({
3788
3658
  cursor: z21.string().optional(),
3789
3659
  limit: z21.coerce.number().min(1).max(100).default(20)
3790
3660
  });
3791
- var c18 = initContract();
3661
+ var c17 = initContract();
3792
3662
  var logStatusSchema = z21.enum([
3793
3663
  "queued",
3794
3664
  "pending",
@@ -3832,7 +3702,7 @@ var logDetailSchema = z21.object({
3832
3702
  completedAt: z21.string().nullable(),
3833
3703
  artifact: artifactSchema
3834
3704
  });
3835
- var logsListContract = c18.router({
3705
+ var logsListContract = c17.router({
3836
3706
  list: {
3837
3707
  method: "GET",
3838
3708
  path: "/api/app/logs",
@@ -3850,7 +3720,7 @@ var logsListContract = c18.router({
3850
3720
  summary: "List agent run logs with pagination"
3851
3721
  }
3852
3722
  });
3853
- var logsByIdContract = c18.router({
3723
+ var logsByIdContract = c17.router({
3854
3724
  getById: {
3855
3725
  method: "GET",
3856
3726
  path: "/api/app/logs/:id",
@@ -3870,7 +3740,7 @@ var artifactDownloadResponseSchema = z21.object({
3870
3740
  url: z21.url(),
3871
3741
  expiresAt: z21.string()
3872
3742
  });
3873
- var artifactDownloadContract = c18.router({
3743
+ var artifactDownloadContract = c17.router({
3874
3744
  getDownloadUrl: {
3875
3745
  method: "GET",
3876
3746
  path: "/api/app/artifacts/download",
@@ -3889,7 +3759,7 @@ var artifactDownloadContract = c18.router({
3889
3759
 
3890
3760
  // ../../packages/core/src/contracts/compose-jobs.ts
3891
3761
  import { z as z22 } from "zod";
3892
- var c19 = initContract();
3762
+ var c18 = initContract();
3893
3763
  var composeJobStatusSchema = z22.enum([
3894
3764
  "pending",
3895
3765
  "running",
@@ -3924,7 +3794,7 @@ var composeJobResponseSchema = z22.object({
3924
3794
  startedAt: z22.string().optional(),
3925
3795
  completedAt: z22.string().optional()
3926
3796
  });
3927
- var composeJobsMainContract = c19.router({
3797
+ var composeJobsMainContract = c18.router({
3928
3798
  /**
3929
3799
  * POST /api/compose/jobs
3930
3800
  * Create a new compose job from GitHub URL or platform content
@@ -3944,7 +3814,7 @@ var composeJobsMainContract = c19.router({
3944
3814
  summary: "Create compose job"
3945
3815
  }
3946
3816
  });
3947
- var composeJobsByIdContract = c19.router({
3817
+ var composeJobsByIdContract = c18.router({
3948
3818
  /**
3949
3819
  * GET /api/compose/jobs/:jobId
3950
3820
  * Get compose job status and result
@@ -3964,7 +3834,7 @@ var composeJobsByIdContract = c19.router({
3964
3834
  summary: "Get compose job status"
3965
3835
  }
3966
3836
  });
3967
- var webhookComposeCompleteContract = c19.router({
3837
+ var webhookComposeCompleteContract = c18.router({
3968
3838
  /**
3969
3839
  * POST /api/webhooks/compose/complete
3970
3840
  * Handle compose job completion from sandbox
@@ -3994,7 +3864,7 @@ var webhookComposeCompleteContract = c19.router({
3994
3864
 
3995
3865
  // ../../packages/core/src/contracts/connectors.ts
3996
3866
  import { z as z23 } from "zod";
3997
- var c20 = initContract();
3867
+ var c19 = initContract();
3998
3868
  var CONNECTOR_TYPES_DEF = {
3999
3869
  axiom: {
4000
3870
  label: "Axiom",
@@ -6654,7 +6524,7 @@ var connectorListResponseSchema = z23.object({
6654
6524
  configuredTypes: z23.array(connectorTypeSchema),
6655
6525
  connectorProvidedSecretNames: z23.array(z23.string())
6656
6526
  });
6657
- var connectorsMainContract = c20.router({
6527
+ var connectorsMainContract = c19.router({
6658
6528
  list: {
6659
6529
  method: "GET",
6660
6530
  path: "/api/connectors",
@@ -6667,7 +6537,7 @@ var connectorsMainContract = c20.router({
6667
6537
  summary: "List all connectors for the authenticated user"
6668
6538
  }
6669
6539
  });
6670
- var connectorsByTypeContract = c20.router({
6540
+ var connectorsByTypeContract = c19.router({
6671
6541
  get: {
6672
6542
  method: "GET",
6673
6543
  path: "/api/connectors/:type",
@@ -6691,7 +6561,7 @@ var connectorsByTypeContract = c20.router({
6691
6561
  type: connectorTypeSchema
6692
6562
  }),
6693
6563
  responses: {
6694
- 204: c20.noBody(),
6564
+ 204: c19.noBody(),
6695
6565
  401: apiErrorSchema,
6696
6566
  404: apiErrorSchema,
6697
6567
  500: apiErrorSchema
@@ -6705,7 +6575,7 @@ var scopeDiffResponseSchema = z23.object({
6705
6575
  currentScopes: z23.array(z23.string()),
6706
6576
  storedScopes: z23.array(z23.string())
6707
6577
  });
6708
- var connectorScopeDiffContract = c20.router({
6578
+ var connectorScopeDiffContract = c19.router({
6709
6579
  getScopeDiff: {
6710
6580
  method: "GET",
6711
6581
  path: "/api/connectors/:type/scope-diff",
@@ -6740,7 +6610,7 @@ var connectorSessionStatusResponseSchema = z23.object({
6740
6610
  status: connectorSessionStatusSchema,
6741
6611
  errorMessage: z23.string().nullable().optional()
6742
6612
  });
6743
- var connectorSessionsContract = c20.router({
6613
+ var connectorSessionsContract = c19.router({
6744
6614
  /**
6745
6615
  * POST /api/connectors/:type/sessions
6746
6616
  * Create a new connector session for CLI device flow
@@ -6762,7 +6632,7 @@ var connectorSessionsContract = c20.router({
6762
6632
  summary: "Create connector session for CLI device flow"
6763
6633
  }
6764
6634
  });
6765
- var connectorSessionByIdContract = c20.router({
6635
+ var connectorSessionByIdContract = c19.router({
6766
6636
  /**
6767
6637
  * GET /api/connectors/:type/sessions/:sessionId
6768
6638
  * Get connector session status (for CLI polling)
@@ -6792,7 +6662,7 @@ var computerConnectorCreateResponseSchema = z23.object({
6792
6662
  endpointPrefix: z23.string(),
6793
6663
  domain: z23.string()
6794
6664
  });
6795
- var computerConnectorContract = c20.router({
6665
+ var computerConnectorContract = c19.router({
6796
6666
  create: {
6797
6667
  method: "POST",
6798
6668
  path: "/api/connectors/computer",
@@ -6823,7 +6693,7 @@ var computerConnectorContract = c20.router({
6823
6693
  path: "/api/connectors/computer",
6824
6694
  headers: authHeadersSchema,
6825
6695
  responses: {
6826
- 204: c20.noBody(),
6696
+ 204: c19.noBody(),
6827
6697
  401: apiErrorSchema,
6828
6698
  404: apiErrorSchema,
6829
6699
  500: apiErrorSchema
@@ -7176,7 +7046,7 @@ async function expandFirewallConfigs(config, fetchFn) {
7176
7046
 
7177
7047
  // ../../packages/core/src/contracts/user-preferences.ts
7178
7048
  import { z as z24 } from "zod";
7179
- var c21 = initContract();
7049
+ var c20 = initContract();
7180
7050
  var sendModeSchema = z24.enum(["enter", "cmd-enter"]);
7181
7051
  var userPreferencesResponseSchema = z24.object({
7182
7052
  timezone: z24.string().nullable(),
@@ -7197,7 +7067,7 @@ var updateUserPreferencesRequestSchema = z24.object({
7197
7067
  message: "At least one preference must be provided"
7198
7068
  }
7199
7069
  );
7200
- var userPreferencesContract = c21.router({
7070
+ var userPreferencesContract = c20.router({
7201
7071
  /**
7202
7072
  * GET /api/user/preferences
7203
7073
  * Get current user's preferences
@@ -7234,7 +7104,7 @@ var userPreferencesContract = c21.router({
7234
7104
 
7235
7105
  // ../../packages/core/src/contracts/org-list.ts
7236
7106
  import { z as z25 } from "zod";
7237
- var c22 = initContract();
7107
+ var c21 = initContract();
7238
7108
  var orgListItemSchema = z25.object({
7239
7109
  slug: z25.string(),
7240
7110
  role: z25.string()
@@ -7243,7 +7113,7 @@ var orgListResponseSchema = z25.object({
7243
7113
  orgs: z25.array(orgListItemSchema),
7244
7114
  active: z25.string().optional()
7245
7115
  });
7246
- var orgListContract = c22.router({
7116
+ var orgListContract = c21.router({
7247
7117
  /**
7248
7118
  * GET /api/org/list
7249
7119
  * List all orgs accessible to the user
@@ -7263,7 +7133,7 @@ var orgListContract = c22.router({
7263
7133
 
7264
7134
  // ../../packages/core/src/contracts/onboarding.ts
7265
7135
  import { z as z26 } from "zod";
7266
- var c23 = initContract();
7136
+ var c22 = initContract();
7267
7137
  var onboardingStatusResponseSchema = z26.object({
7268
7138
  needsOnboarding: z26.boolean(),
7269
7139
  isAdmin: z26.boolean(),
@@ -7279,7 +7149,7 @@ var onboardingStatusResponseSchema = z26.object({
7279
7149
  }).nullable(),
7280
7150
  defaultAgentSkills: z26.array(z26.string())
7281
7151
  });
7282
- var onboardingStatusContract = c23.router({
7152
+ var onboardingStatusContract = c22.router({
7283
7153
  getStatus: {
7284
7154
  method: "GET",
7285
7155
  path: "/api/onboarding/status",
@@ -7294,7 +7164,7 @@ var onboardingStatusContract = c23.router({
7294
7164
 
7295
7165
  // ../../packages/core/src/contracts/skills.ts
7296
7166
  import { z as z27 } from "zod";
7297
- var c24 = initContract();
7167
+ var c23 = initContract();
7298
7168
  var skillFrontmatterSchema = z27.object({
7299
7169
  name: z27.string().optional(),
7300
7170
  description: z27.string().optional(),
@@ -7306,7 +7176,7 @@ var resolvedSkillSchema = z27.object({
7306
7176
  versionHash: z27.string(),
7307
7177
  frontmatter: skillFrontmatterSchema
7308
7178
  });
7309
- var skillsResolveContract = c24.router({
7179
+ var skillsResolveContract = c23.router({
7310
7180
  resolve: {
7311
7181
  method: "POST",
7312
7182
  path: "/api/skills/resolve",
@@ -7328,8 +7198,8 @@ var skillsResolveContract = c24.router({
7328
7198
 
7329
7199
  // ../../packages/core/src/contracts/org-model-providers.ts
7330
7200
  import { z as z28 } from "zod";
7331
- var c25 = initContract();
7332
- var orgModelProvidersMainContract = c25.router({
7201
+ var c24 = initContract();
7202
+ var orgModelProvidersMainContract = c24.router({
7333
7203
  list: {
7334
7204
  method: "GET",
7335
7205
  path: "/api/org/model-providers",
@@ -7357,7 +7227,7 @@ var orgModelProvidersMainContract = c25.router({
7357
7227
  summary: "Create or update an org-level model provider (admin only)"
7358
7228
  }
7359
7229
  });
7360
- var orgModelProvidersByTypeContract = c25.router({
7230
+ var orgModelProvidersByTypeContract = c24.router({
7361
7231
  delete: {
7362
7232
  method: "DELETE",
7363
7233
  path: "/api/org/model-providers/:type",
@@ -7366,7 +7236,7 @@ var orgModelProvidersByTypeContract = c25.router({
7366
7236
  type: modelProviderTypeSchema
7367
7237
  }),
7368
7238
  responses: {
7369
- 204: c25.noBody(),
7239
+ 204: c24.noBody(),
7370
7240
  401: apiErrorSchema,
7371
7241
  403: apiErrorSchema,
7372
7242
  404: apiErrorSchema,
@@ -7375,7 +7245,7 @@ var orgModelProvidersByTypeContract = c25.router({
7375
7245
  summary: "Delete an org-level model provider (admin only)"
7376
7246
  }
7377
7247
  });
7378
- var orgModelProvidersSetDefaultContract = c25.router({
7248
+ var orgModelProvidersSetDefaultContract = c24.router({
7379
7249
  setDefault: {
7380
7250
  method: "POST",
7381
7251
  path: "/api/org/model-providers/:type/set-default",
@@ -7394,7 +7264,7 @@ var orgModelProvidersSetDefaultContract = c25.router({
7394
7264
  summary: "Set org-level model provider as default (admin only)"
7395
7265
  }
7396
7266
  });
7397
- var orgModelProvidersUpdateModelContract = c25.router({
7267
+ var orgModelProvidersUpdateModelContract = c24.router({
7398
7268
  updateModel: {
7399
7269
  method: "PATCH",
7400
7270
  path: "/api/org/model-providers/:type/model",
@@ -7416,8 +7286,8 @@ var orgModelProvidersUpdateModelContract = c25.router({
7416
7286
 
7417
7287
  // ../../packages/core/src/contracts/org-secrets.ts
7418
7288
  import { z as z29 } from "zod";
7419
- var c26 = initContract();
7420
- var orgSecretsMainContract = c26.router({
7289
+ var c25 = initContract();
7290
+ var orgSecretsMainContract = c25.router({
7421
7291
  list: {
7422
7292
  method: "GET",
7423
7293
  path: "/api/org/secrets",
@@ -7445,7 +7315,7 @@ var orgSecretsMainContract = c26.router({
7445
7315
  summary: "Create or update an org-level secret (admin only)"
7446
7316
  }
7447
7317
  });
7448
- var orgSecretsByNameContract = c26.router({
7318
+ var orgSecretsByNameContract = c25.router({
7449
7319
  delete: {
7450
7320
  method: "DELETE",
7451
7321
  path: "/api/org/secrets/:name",
@@ -7454,7 +7324,7 @@ var orgSecretsByNameContract = c26.router({
7454
7324
  name: secretNameSchema
7455
7325
  }),
7456
7326
  responses: {
7457
- 204: c26.noBody(),
7327
+ 204: c25.noBody(),
7458
7328
  401: apiErrorSchema,
7459
7329
  403: apiErrorSchema,
7460
7330
  404: apiErrorSchema,
@@ -7466,8 +7336,8 @@ var orgSecretsByNameContract = c26.router({
7466
7336
 
7467
7337
  // ../../packages/core/src/contracts/org-variables.ts
7468
7338
  import { z as z30 } from "zod";
7469
- var c27 = initContract();
7470
- var orgVariablesMainContract = c27.router({
7339
+ var c26 = initContract();
7340
+ var orgVariablesMainContract = c26.router({
7471
7341
  list: {
7472
7342
  method: "GET",
7473
7343
  path: "/api/org/variables",
@@ -7495,7 +7365,7 @@ var orgVariablesMainContract = c27.router({
7495
7365
  summary: "Create or update an org-level variable (admin only)"
7496
7366
  }
7497
7367
  });
7498
- var orgVariablesByNameContract = c27.router({
7368
+ var orgVariablesByNameContract = c26.router({
7499
7369
  delete: {
7500
7370
  method: "DELETE",
7501
7371
  path: "/api/org/variables/:name",
@@ -7504,7 +7374,7 @@ var orgVariablesByNameContract = c27.router({
7504
7374
  name: variableNameSchema
7505
7375
  }),
7506
7376
  responses: {
7507
- 204: c27.noBody(),
7377
+ 204: c26.noBody(),
7508
7378
  401: apiErrorSchema,
7509
7379
  403: apiErrorSchema,
7510
7380
  404: apiErrorSchema,
@@ -7514,23 +7384,6 @@ var orgVariablesByNameContract = c27.router({
7514
7384
  }
7515
7385
  });
7516
7386
 
7517
- // ../../packages/core/src/org-reference.ts
7518
- function isLegacySystemTemplate(reference) {
7519
- return reference.startsWith("vm0-");
7520
- }
7521
- function getLegacySystemTemplateWarning(legacyFormat) {
7522
- if (!isLegacySystemTemplate(legacyFormat)) {
7523
- return void 0;
7524
- }
7525
- if (legacyFormat === "vm0-claude-code") {
7526
- return `Warning: "${legacyFormat}" format is deprecated. Use "vm0/claude-code" instead.`;
7527
- }
7528
- if (legacyFormat.startsWith("vm0-github-cli")) {
7529
- return `Warning: "${legacyFormat}" is deprecated. GitHub CLI is now included in the base image.`;
7530
- }
7531
- return `Warning: "${legacyFormat}" format is deprecated.`;
7532
- }
7533
-
7534
7387
  // ../../packages/core/src/storage-names.ts
7535
7388
  function getInstructionsStorageName(agentName) {
7536
7389
  return `agent-instructions@${agentName}`;
@@ -9589,24 +9442,6 @@ function hasVolumes(config) {
9589
9442
  const volumes = cfg.volumes;
9590
9443
  return typeof volumes === "object" && volumes !== null && Object.keys(volumes).length > 0;
9591
9444
  }
9592
- function checkLegacyImageFormat(config) {
9593
- const cfg = config;
9594
- const agentsConfig = cfg.agents;
9595
- for (const [name, agentConfig] of Object.entries(agentsConfig)) {
9596
- const image = agentConfig.image;
9597
- if (image) {
9598
- console.log(
9599
- chalk6.yellow(
9600
- `\u26A0 Agent "${name}": 'image' field is deprecated and will be ignored. The server resolves the image based on the framework.`
9601
- )
9602
- );
9603
- const warning = getLegacySystemTemplateWarning(image);
9604
- if (warning) {
9605
- console.log(chalk6.yellow(` ${warning}`));
9606
- }
9607
- }
9608
- }
9609
- }
9610
9445
  async function uploadAssets(agentName, agent, basePath, jsonMode) {
9611
9446
  if (agent.instructions) {
9612
9447
  if (!jsonMode) {
@@ -9928,9 +9763,6 @@ async function handleGitHubCompose(url, options) {
9928
9763
  )
9929
9764
  });
9930
9765
  }
9931
- if (!options.json) {
9932
- checkLegacyImageFormat(config);
9933
- }
9934
9766
  const skillResults = await uploadAssets(
9935
9767
  agentName,
9936
9768
  agent,
@@ -9974,7 +9806,7 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9974
9806
  options.autoUpdate = false;
9975
9807
  }
9976
9808
  if (options.autoUpdate !== false) {
9977
- await startSilentUpgrade("9.65.1");
9809
+ await startSilentUpgrade("9.66.0");
9978
9810
  }
9979
9811
  try {
9980
9812
  let result;
@@ -9982,9 +9814,6 @@ var composeCommand = new Command7().name("compose").description("Create or updat
9982
9814
  result = await handleGitHubCompose(resolvedConfigFile, options);
9983
9815
  } else {
9984
9816
  const { config, agentName, agent, basePath } = await loadAndValidateConfig(resolvedConfigFile);
9985
- if (!options.json) {
9986
- checkLegacyImageFormat(config);
9987
- }
9988
9817
  const skillResults = await uploadAssets(
9989
9818
  agentName,
9990
9819
  agent,
@@ -10796,7 +10625,7 @@ var mainRunCommand = new Command8().name("run").description("Run an agent").argu
10796
10625
  withErrorHandler(
10797
10626
  async (identifier, prompt, options) => {
10798
10627
  if (options.autoUpdate !== false) {
10799
- await startSilentUpgrade("9.65.1");
10628
+ await startSilentUpgrade("9.66.0");
10800
10629
  }
10801
10630
  const { org, name, version } = parseIdentifier(identifier);
10802
10631
  let composeId;
@@ -12516,7 +12345,7 @@ var cookAction = new Command35().name("cook").description("Quick start: prepare,
12516
12345
  withErrorHandler(
12517
12346
  async (prompt, options) => {
12518
12347
  if (options.autoUpdate !== false) {
12519
- const shouldExit = await checkAndUpgrade("9.65.1", prompt);
12348
+ const shouldExit = await checkAndUpgrade("9.66.0", prompt);
12520
12349
  if (shouldExit) {
12521
12350
  process.exit(0);
12522
12351
  }
@@ -14698,20 +14527,28 @@ import { tmpdir as tmpdir7 } from "os";
14698
14527
  import * as tar6 from "tar";
14699
14528
  import { stringify as yamlStringify } from "yaml";
14700
14529
  function cleanComposeContent(content) {
14701
- const cleaned = {
14530
+ const agents = {};
14531
+ for (const [name, agent] of Object.entries(content.agents)) {
14532
+ const cleaned = {
14533
+ framework: agent.framework
14534
+ };
14535
+ if (agent.description) cleaned.description = agent.description;
14536
+ if (agent.volumes) cleaned.volumes = agent.volumes;
14537
+ if (agent.environment) cleaned.environment = agent.environment;
14538
+ if (agent.instructions) cleaned.instructions = agent.instructions;
14539
+ if (agent.skills) cleaned.skills = agent.skills;
14540
+ if (agent.experimental_runner)
14541
+ cleaned.experimental_runner = agent.experimental_runner;
14542
+ agents[name] = cleaned;
14543
+ }
14544
+ const result = {
14702
14545
  version: content.version,
14703
- agents: {}
14546
+ agents
14704
14547
  };
14705
- for (const [agentName, agent] of Object.entries(content.agents)) {
14706
- const { image, working_dir: workingDir, ...rest } = agent;
14707
- void image;
14708
- void workingDir;
14709
- cleaned.agents[agentName] = rest;
14710
- }
14711
14548
  if (content.volumes) {
14712
- cleaned.volumes = content.volumes;
14549
+ result.volumes = content.volumes;
14713
14550
  }
14714
- return cleaned;
14551
+ return result;
14715
14552
  }
14716
14553
  async function downloadInstructions(agentName, instructionsPath, destination) {
14717
14554
  const destPath = join10(destination, instructionsPath);
@@ -14853,7 +14690,7 @@ var listCommand9 = new Command65().name("list").alias("ls").description("List al
14853
14690
  );
14854
14691
  return;
14855
14692
  }
14856
- const nameWidth = Math.max(4, ...data.composes.map((c28) => c28.name.length));
14693
+ const nameWidth = Math.max(4, ...data.composes.map((c27) => c27.name.length));
14857
14694
  const header = ["NAME".padEnd(nameWidth), "VERSION", "UPDATED"].join(
14858
14695
  " "
14859
14696
  );
@@ -15001,12 +14838,6 @@ function formatVariableSources(sources) {
15001
14838
  function formatAgentDetails(agentName, agent, agentSources, volumeConfigs) {
15002
14839
  console.log(` ${chalk59.cyan(agentName)}:`);
15003
14840
  console.log(` Framework: ${agent.framework}`);
15004
- if (agent.image) {
15005
- console.log(` Image: ${agent.image}`);
15006
- }
15007
- if (agent.working_dir) {
15008
- console.log(` Working Dir: ${agent.working_dir}`);
15009
- }
15010
14841
  formatVolumes(agent.volumes ?? [], volumeConfigs);
15011
14842
  formatListSection("Skills", agent.skills ?? []);
15012
14843
  if (agentSources) {
@@ -15271,6 +15102,9 @@ function validateTimeFormat(time) {
15271
15102
  if (minute < 0 || minute > 59) {
15272
15103
  return "Minute must be 0-59";
15273
15104
  }
15105
+ if (minute % 5 !== 0) {
15106
+ return "Minute must be a multiple of 5 (0, 5, 10, ..., 55)";
15107
+ }
15274
15108
  return true;
15275
15109
  }
15276
15110
  function validateDateFormat(date) {
@@ -15457,7 +15291,7 @@ async function gatherFrequency(optionFrequency, existingFrequency) {
15457
15291
  if (!isInteractive()) {
15458
15292
  throw new Error("--frequency is required (daily|weekly|monthly|once|loop)");
15459
15293
  }
15460
- const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c28) => c28.value === existingFrequency) : 0;
15294
+ const defaultIndex = existingFrequency ? FREQUENCY_CHOICES.findIndex((c27) => c27.value === existingFrequency) : 0;
15461
15295
  frequency = await promptSelect(
15462
15296
  "Schedule frequency",
15463
15297
  FREQUENCY_CHOICES,
@@ -15482,7 +15316,7 @@ async function gatherDay(frequency, optionDay, existingDay) {
15482
15316
  throw new Error("--day is required for weekly/monthly");
15483
15317
  }
15484
15318
  if (frequency === "weekly") {
15485
- const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c28) => c28.value === existingDay) : 0;
15319
+ const defaultDayIndex = existingDay !== void 0 ? DAY_OF_WEEK_CHOICES.findIndex((c27) => c27.value === existingDay) : 0;
15486
15320
  const day2 = await promptSelect(
15487
15321
  "Day of week",
15488
15322
  DAY_OF_WEEK_CHOICES,
@@ -16932,7 +16766,7 @@ import chalk76 from "chalk";
16932
16766
  var listCommand13 = new Command86().name("list").alias("ls").description("List all connectors and their status").action(
16933
16767
  withErrorHandler(async () => {
16934
16768
  const result = await listConnectors();
16935
- const connectedMap = new Map(result.connectors.map((c28) => [c28.type, c28]));
16769
+ const connectedMap = new Map(result.connectors.map((c27) => [c27.type, c27]));
16936
16770
  const allTypesRaw = Object.keys(CONNECTOR_TYPES);
16937
16771
  const allTypes = [];
16938
16772
  for (const type2 of allTypesRaw) {
@@ -17493,16 +17327,16 @@ async function handleModelProvider(ctx) {
17493
17327
  const providerType = await step.prompt(
17494
17328
  () => promptSelect(
17495
17329
  "Select provider type:",
17496
- choices.map((c28) => ({
17497
- title: c28.label,
17498
- value: c28.type
17330
+ choices.map((c27) => ({
17331
+ title: c27.label,
17332
+ value: c27.type
17499
17333
  }))
17500
17334
  )
17501
17335
  );
17502
17336
  if (!providerType) {
17503
17337
  process.exit(0);
17504
17338
  }
17505
- const selectedChoice = choices.find((c28) => c28.type === providerType);
17339
+ const selectedChoice = choices.find((c27) => c27.type === providerType);
17506
17340
  if (selectedChoice?.helpText) {
17507
17341
  for (const line of selectedChoice.helpText.split("\n")) {
17508
17342
  step.detail(chalk82.dim(line));
@@ -17856,13 +17690,13 @@ var upgradeCommand = new Command94().name("upgrade").description("Upgrade vm0 CL
17856
17690
  if (latestVersion === null) {
17857
17691
  throw new Error("Could not check for updates. Please try again later.");
17858
17692
  }
17859
- if (latestVersion === "9.65.1") {
17860
- console.log(chalk86.green(`\u2713 Already up to date (${"9.65.1"})`));
17693
+ if (latestVersion === "9.66.0") {
17694
+ console.log(chalk86.green(`\u2713 Already up to date (${"9.66.0"})`));
17861
17695
  return;
17862
17696
  }
17863
17697
  console.log(
17864
17698
  chalk86.yellow(
17865
- `Current version: ${"9.65.1"} -> Latest version: ${latestVersion}`
17699
+ `Current version: ${"9.66.0"} -> Latest version: ${latestVersion}`
17866
17700
  )
17867
17701
  );
17868
17702
  console.log();
@@ -17889,7 +17723,7 @@ var upgradeCommand = new Command94().name("upgrade").description("Upgrade vm0 CL
17889
17723
  const success = await performUpgrade(packageManager);
17890
17724
  if (success) {
17891
17725
  console.log(
17892
- chalk86.green(`\u2713 Upgraded from ${"9.65.1"} to ${latestVersion}`)
17726
+ chalk86.green(`\u2713 Upgraded from ${"9.66.0"} to ${latestVersion}`)
17893
17727
  );
17894
17728
  return;
17895
17729
  }
@@ -17903,7 +17737,7 @@ var upgradeCommand = new Command94().name("upgrade").description("Upgrade vm0 CL
17903
17737
 
17904
17738
  // src/index.ts
17905
17739
  var program = new Command95();
17906
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.65.1");
17740
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.66.0");
17907
17741
  program.addCommand(authCommand);
17908
17742
  program.addCommand(infoCommand);
17909
17743
  program.addCommand(composeCommand);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vm0/cli",
3
- "version": "9.65.1",
3
+ "version": "9.66.0",
4
4
  "description": "CLI application",
5
5
  "repository": {
6
6
  "type": "git",