@duvoai/cli 1.21.0 → 1.24.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/dist/bin/duvo.js CHANGED
@@ -6,7 +6,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
6
6
  import { readFileSync as readFileSync8 } from "node:fs";
7
7
  import { dirname as dirname3, join as join3 } from "node:path";
8
8
  import { fileURLToPath as fileURLToPath2 } from "node:url";
9
- import { Command } from "commander";
9
+ import { Command, Option as Option2 } from "commander";
10
10
 
11
11
  // src/api/agent-folder-schemas.ts
12
12
  import { z } from "zod";
@@ -2201,6 +2201,23 @@ var evalCountsSchema = z9.object({
2201
2201
  var evalCountsByAgentResponseSchema = z9.object({
2202
2202
  by_agent: z9.record(z9.string(), evalCountsSchema)
2203
2203
  });
2204
+ var agentRunStatsSchema = z9.object({
2205
+ success: z9.int(),
2206
+ critical: z9.int(),
2207
+ medium: z9.int(),
2208
+ failed: z9.int(),
2209
+ need_input: z9.int(),
2210
+ /** Total runs in the current lookback window. */
2211
+ total: z9.int(),
2212
+ /** Week-over-week change in total runs (current window minus previous). */
2213
+ delta: z9.int()
2214
+ });
2215
+ var agentRunStatsByAgentResponseSchema = z9.object({
2216
+ run_stats_by_agent: z9.record(z9.string(), agentRunStatsSchema)
2217
+ });
2218
+ var evalCountsAndRunStatsResponseSchema = evalCountsByAgentResponseSchema.extend(
2219
+ agentRunStatsByAgentResponseSchema.shape
2220
+ );
2204
2221
  var summarizeEvalScoresBodySchema = z9.object({
2205
2222
  since: z9.iso.datetime(),
2206
2223
  /** `"custom"` restricts to the target revision's runs + `custom__*` flags only. */
@@ -2630,6 +2647,11 @@ var DEFAULT_AGENT_CONFIG = {
2630
2647
  browserProvider: DEFAULT_BROWSER_PROVIDER
2631
2648
  }
2632
2649
  };
2650
+ var AUTOMATION_REVISION_STATUS = {
2651
+ DRAFT: "draft",
2652
+ LIVE: "live",
2653
+ HISTORIC: "historic"
2654
+ };
2633
2655
  var BUILD_STATUS = {
2634
2656
  DRAFT: "draft",
2635
2657
  LIVE: "live",
@@ -5076,7 +5098,8 @@ var listClarityProcessSnapshotsQuerySchema = z222.object({
5076
5098
  offset: z222.coerce.number().int().min(0).default(0)
5077
5099
  });
5078
5100
  var listClarityProcessSnapshotsResponseSchema = z222.object({
5079
- snapshots: z222.array(clarityProcessSnapshotVersionApiSchema)
5101
+ snapshots: z222.array(clarityProcessSnapshotVersionApiSchema),
5102
+ total: z222.number().int().nonnegative().describe("Total number of snapshots of this kind for the process")
5080
5103
  });
5081
5104
  var getClarityProcessSnapshotParamsSchema = listClarityProcessSnapshotsParamsSchema.extend({
5082
5105
  snapshot_id: z222.guid().describe("Snapshot id")
@@ -5748,7 +5771,7 @@ __name(buildClarityProcessLanguageBlock, "buildClarityProcessLanguageBlock");
5748
5771
  __name2(buildClarityProcessLanguageBlock, "buildClarityProcessLanguageBlock");
5749
5772
  function buildClarityNarrativeLanguageBlock() {
5750
5773
  return `# OUTPUT LANGUAGE
5751
- Write every narrative artifact field you produce (summary, SWOT analysis entries, projected impact, assumptions, recommendations, and supporting prose) in the original language already used by the snapshot. If the snapshot mixes languages, follow the dominant user-facing language in the existing narrative and step text. Keep JSON field keys, enum values, ids, integration or system identifiers, file paths, shell commands, and product names in English/exactly as given; do not translate them.`;
5774
+ Write every narrative artifact field you produce (summary, SWOT analysis entries, projected impact, assumptions, recommendations, and supporting prose) in the language of the snapshot's step titles and descriptions. Judge that language from the step titles and descriptions only; ignore the language of source excerpts, evidence quotes, transcript excerpts, and previously generated narrative fields such as summary, swot, or projectedImpact. If the step titles and descriptions are in English, or their language is mixed or ambiguous, write in English. Keep JSON field keys, enum values, ids, integration or system identifiers, file paths, shell commands, and product names in English/exactly as given; do not translate them.`;
5752
5775
  }
5753
5776
  __name(buildClarityNarrativeLanguageBlock, "buildClarityNarrativeLanguageBlock");
5754
5777
  __name2(buildClarityNarrativeLanguageBlock, "buildClarityNarrativeLanguageBlock");
@@ -6681,6 +6704,7 @@ var INTEGRATION_SLUGS = [
6681
6704
  "googlesheets",
6682
6705
  "googledrive",
6683
6706
  "firecrawl",
6707
+ // Deprecated 2026-07: catalog rows purged, retained for API contract + historical payloads
6684
6708
  "exa",
6685
6709
  "exa-search",
6686
6710
  "exa-company-search",
@@ -6925,8 +6949,20 @@ var updateIntegrationRequestSchema = z27.object({
6925
6949
  shared: z27.boolean().optional()
6926
6950
  });
6927
6951
  var testIntegrationRequestSchema = z27.object({
6928
- server_url: z27.url().describe("MCP server URL to test"),
6929
- headers: z27.record(z27.string(), z27.string()).optional().describe("Optional HTTP headers for authentication")
6952
+ server_url: z27.url().optional().describe("Raw MCP server URL to probe (for custom MCP servers)"),
6953
+ integration_slug: IntegrationSlugSchema.optional().describe(
6954
+ "Catalog integration slug. The backend resolves the MCP server URL and dummy auth headers server-side \u2014 no server_url or headers needed."
6955
+ ),
6956
+ headers: z27.record(z27.string(), z27.string()).optional().describe(
6957
+ "Optional HTTP headers for authentication (raw server_url mode only)"
6958
+ )
6959
+ }).refine(
6960
+ (data) => Boolean(data.server_url) !== Boolean(data.integration_slug),
6961
+ {
6962
+ message: "Provide exactly one of server_url or integration_slug"
6963
+ }
6964
+ ).refine((data) => !(data.integration_slug && data.headers), {
6965
+ message: "headers are not allowed with integration_slug \u2014 the backend builds dummy auth headers server-side"
6930
6966
  });
6931
6967
  var SUGGESTION_TYPES = [
6932
6968
  "aop",
@@ -7194,12 +7230,12 @@ var artifactDetailResponseSchema = z31.object({
7194
7230
  // teammates when the Pulse is published to the team with `edit` permission,
7195
7231
  // and for a member individually granted `edit` via a per-member share. Drives
7196
7232
  // the chat/version affordances; ownership actions stay gated on `is_creator`.
7197
- can_edit: z31.boolean(),
7198
- messages: z31.array(artifactMessageSchema)
7233
+ can_edit: z31.boolean()
7199
7234
  });
7200
7235
  var artifactMessageListResponseSchema = z31.object({
7201
7236
  data: z31.array(artifactMessageSchema),
7202
- total: z31.number().int().nonnegative()
7237
+ total: z31.number().int().nonnegative(),
7238
+ has_more: z31.boolean()
7203
7239
  });
7204
7240
  var artifactRevisionSchema = z31.object({
7205
7241
  id: z31.guid(),
@@ -8830,6 +8866,117 @@ var updateAutomationResponseApiSchema = z50.object({
8830
8866
  var deleteAutomationResponseApiSchema = z50.object({
8831
8867
  success: z50.boolean()
8832
8868
  });
8869
+ var automationRevisionStatusApiSchema = z50.enum(
8870
+ AUTOMATION_REVISION_STATUS
8871
+ );
8872
+ var automationRevisionSummaryApiSchema = z50.object({
8873
+ id: z50.guid().describe("Unique revision identifier"),
8874
+ automation_id: z50.guid().describe("ID of the automation this revision belongs to"),
8875
+ revision_number: z50.int().nullable().describe(
8876
+ "Sequential revision number, assigned on activation (null for a draft)"
8877
+ ),
8878
+ status: automationRevisionStatusApiSchema.describe(
8879
+ "Lifecycle status: draft, live, or historic"
8880
+ ),
8881
+ base_revision_id: z50.guid().nullable().describe(
8882
+ "Revision this draft was branched from (null when it has no base)"
8883
+ ),
8884
+ name: z50.string().nullable().describe("Optional human-readable revision name"),
8885
+ description: z50.string().nullable().describe("Optional revision description"),
8886
+ is_live: z50.boolean().describe("True when this is the automation's active revision"),
8887
+ is_stale_base: z50.boolean().describe(
8888
+ "True when a draft's base is no longer the active revision and must be resolved before activation"
8889
+ ),
8890
+ agent_count: z50.int().describe("Number of agent bindings in the revision"),
8891
+ queue_count: z50.int().describe("Number of queue bindings in the revision"),
8892
+ trigger_count: z50.int().describe("Number of trigger bindings in the revision"),
8893
+ modified_agent_ids: z50.array(z50.guid()).describe("Agents whose referenced build differs from the base revision"),
8894
+ created_at: z50.string().describe("ISO 8601 creation timestamp"),
8895
+ updated_at: z50.string().describe("ISO 8601 last-modified timestamp")
8896
+ });
8897
+ var automationRevisionsListApiSchema = z50.object({
8898
+ revisions: z50.array(automationRevisionSummaryApiSchema).describe("Revisions for the automation, newest first"),
8899
+ /**
8900
+ * True when older revisions exist beyond the returned window. The list is
8901
+ * capped (newest-first); older revisions remain inspectable individually via
8902
+ * `GET /automations/:automation_id/revisions/:revision_id`.
8903
+ */
8904
+ has_more: z50.boolean().describe("True when older revisions exist beyond the returned window")
8905
+ });
8906
+ var automationRevisionAgentBindingApiSchema = z50.object({
8907
+ agent_id: z50.guid().describe("Agent identifier"),
8908
+ build_id: z50.guid().describe("Build referenced for the agent in this revision")
8909
+ });
8910
+ var automationRevisionQueueBindingApiSchema = z50.object({
8911
+ case_queue_id: z50.guid().describe("Queue identifier"),
8912
+ agent_id: z50.guid().nullable().describe(
8913
+ "Agent the queue routes to in this revision (null when unrouted)"
8914
+ ),
8915
+ enabled: z50.boolean().describe("Whether the queue's routing is enabled"),
8916
+ concurrency: z50.int().nullable().describe("Per-revision concurrency limit (null for the queue default)"),
8917
+ name: z50.string().nullable().describe(
8918
+ "Per-revision queue name override (null to keep the queue's own name)"
8919
+ ),
8920
+ description: z50.string().nullable().describe("Per-revision queue description override")
8921
+ });
8922
+ var automationRevisionTriggerBindingApiSchema = z50.object({
8923
+ trigger_id: z50.guid().describe("Stable trigger identity"),
8924
+ enabled: z50.boolean().describe("Whether the trigger is enabled in this revision"),
8925
+ filter_config: z50.record(z50.string(), z50.unknown()).describe("Per-revision trigger filter configuration")
8926
+ });
8927
+ var automationRevisionDetailApiSchema = automationRevisionSummaryApiSchema.extend({
8928
+ agents: z50.array(automationRevisionAgentBindingApiSchema).describe("Agent bindings in the revision"),
8929
+ queues: z50.array(automationRevisionQueueBindingApiSchema).describe("Queue routing bindings in the revision"),
8930
+ triggers: z50.array(automationRevisionTriggerBindingApiSchema).describe("Trigger config bindings in the revision")
8931
+ });
8932
+ var automationRevisionDetailResponseApiSchema = z50.object({
8933
+ revision: automationRevisionDetailApiSchema.describe(
8934
+ "The revision with its full manifest"
8935
+ )
8936
+ });
8937
+ var automationRevisionResponseApiSchema = z50.object({
8938
+ revision: automationRevisionSummaryApiSchema.describe("The revision summary")
8939
+ });
8940
+ var AUTOMATION_REVISION_NAME_MAX_LENGTH = 200;
8941
+ var AUTOMATION_REVISION_DESCRIPTION_MAX_LENGTH = 2e3;
8942
+ var revisionNameFieldSchema = z50.string().trim().min(1).max(AUTOMATION_REVISION_NAME_MAX_LENGTH);
8943
+ var revisionDescriptionFieldSchema = z50.string().trim().max(AUTOMATION_REVISION_DESCRIPTION_MAX_LENGTH);
8944
+ var createAutomationRevisionBodyApiSchema = z50.object({
8945
+ base_revision_id: z50.guid().optional().describe("Revision to branch from (defaults to the active revision)"),
8946
+ name: revisionNameFieldSchema.optional().describe("Optional draft name"),
8947
+ description: revisionDescriptionFieldSchema.optional().describe("Optional draft description")
8948
+ });
8949
+ var setAutomationRevisionAgentBodyApiSchema = z50.object({
8950
+ agent_id: z50.guid().describe("Agent to bind in the revision"),
8951
+ build_id: z50.guid().describe("Build to reference for the agent")
8952
+ });
8953
+ var setAutomationRevisionQueueBodyApiSchema = z50.object({
8954
+ case_queue_id: z50.guid().describe("Queue to route in the revision"),
8955
+ agent_id: z50.guid().nullable().optional().describe(
8956
+ "Agent the queue routes to (null clears routing; omit to keep current)"
8957
+ ),
8958
+ enabled: z50.boolean().optional().describe(
8959
+ "Whether routing is enabled (omit to keep current; default true when new)"
8960
+ ),
8961
+ concurrency: z50.int().nonnegative().nullable().optional().describe(
8962
+ "Per-revision concurrency limit (null for queue default; omit to keep current)"
8963
+ ),
8964
+ name: revisionNameFieldSchema.nullable().optional().describe("Per-revision name override (null clears; omit to keep current)"),
8965
+ description: revisionDescriptionFieldSchema.nullable().optional().describe(
8966
+ "Per-revision description override (null clears; omit to keep current)"
8967
+ )
8968
+ });
8969
+ var activateAutomationRevisionBodyApiSchema = z50.object({
8970
+ repin_pending_cases: z50.boolean().optional().describe(
8971
+ "Re-pin the automation's pending, unclaimed cases onto the newly activated revision"
8972
+ )
8973
+ });
8974
+ var activateAutomationRevisionResponseApiSchema = z50.object({
8975
+ revision: automationRevisionSummaryApiSchema.describe(
8976
+ "The newly activated revision"
8977
+ ),
8978
+ repinned_case_count: z50.int().describe("Number of pending cases re-pinned onto the activated revision")
8979
+ });
8833
8980
  var DataResidencySchema = z51.enum(["us", "eu", "apac"]);
8834
8981
  var DataHandlingSchema = z51.enum(["standard", "zdr"]);
8835
8982
  var browserPageSchema = z52.object({
@@ -9623,11 +9770,6 @@ var FEATURE_FLAG_CATALOGUE = {
9623
9770
  defaultValue: false,
9624
9771
  description: "Exposes the versioned Automations migration entry point. When on, Managers see a 'Migrate to automations' action on the Agents page that sorts the team's standalone agents and queues into Automations (one per connected closure, via the same closure logic as the cross-team move) and stamps team.automations_migrated_at. The stamped timestamp \u2014 not this flag \u2014 drives the Automations sidebar entry. Resolved by team/org (user-level overrides are ignored by the migration gate). Off-by-default for staged, per-team rollout."
9625
9772
  },
9626
- PULSE: {
9627
- key: "pulse",
9628
- defaultValue: false,
9629
- description: "Enables Duvo Pulse \u2014 the agent-generated visualization Artifacts surface. When disabled, the side-nav entry is hidden and every /v1/artifacts/* endpoint returns 404; the cc-server ingestion callback is unaffected."
9630
- },
9631
9773
  AGENT_SELF_SCHEDULING: {
9632
9774
  key: "agent_self_scheduling",
9633
9775
  defaultValue: false,
@@ -9668,6 +9810,11 @@ var FEATURE_FLAG_CATALOGUE = {
9668
9810
  defaultValue: false,
9669
9811
  description: "Enables the case approval feature end-to-end: AOP authors can @-mention team members in the agent AOP textarea (serialized as <DUVO:USER> tags), agents can request human approval on cases via the request_case_approval tool, and approvers see and respond to pending requests on the case. Off-by-default for staged rollout."
9670
9812
  },
9813
+ CLARITY_AGENT_CHAT: {
9814
+ key: "clarity_agent_chat",
9815
+ defaultValue: false,
9816
+ description: "Routes Clarity process edits through Ask Duvo (Meta Agent) on Clarity v2 detail pages: shows the Agent Chat rail there and hides the artifact-chat composer for new edit requests while keeping artifact-chat history readable. Off-by-default for staged rollout."
9817
+ },
9671
9818
  CLARITY_ARTIFACT_CHAT: {
9672
9819
  key: "clarity_artifact_chat",
9673
9820
  defaultValue: false,
@@ -12314,6 +12461,7 @@ import { homedir } from "node:os";
12314
12461
  import { join } from "node:path";
12315
12462
  var CONFIG_DIR_NAME = "duvo";
12316
12463
  var CONFIG_FILE_NAME = "config.json";
12464
+ var UPDATE_CHECK_CACHE_FILE_NAME = "update-check.json";
12317
12465
  function getConfigDir() {
12318
12466
  const xdg = process.env.XDG_CONFIG_HOME;
12319
12467
  if (xdg && xdg.length > 0) {
@@ -12326,6 +12474,10 @@ function getConfigPath() {
12326
12474
  return join(getConfigDir(), CONFIG_FILE_NAME);
12327
12475
  }
12328
12476
  __name(getConfigPath, "getConfigPath");
12477
+ function getUpdateCheckCachePath() {
12478
+ return join(getConfigDir(), UPDATE_CHECK_CACHE_FILE_NAME);
12479
+ }
12480
+ __name(getUpdateCheckCachePath, "getUpdateCheckCachePath");
12329
12481
 
12330
12482
  // src/config/store.ts
12331
12483
  var FILE_MODE = 384;
@@ -13548,6 +13700,55 @@ var createAgentResponseSchema = z84.object({
13548
13700
  var deleteAgentResponseSchema = z84.object({
13549
13701
  success: z84.literal(true)
13550
13702
  });
13703
+ var namedRefSchema = z84.object({
13704
+ id: z84.string(),
13705
+ name: z84.string()
13706
+ });
13707
+ var moveQueueRefSchema = z84.object({
13708
+ id: z84.string(),
13709
+ name: z84.string(),
13710
+ item_count: z84.number()
13711
+ });
13712
+ var connectionDecisionSchema = z84.object({
13713
+ agent_id: z84.string(),
13714
+ agent_name: z84.string(),
13715
+ integration_type: z84.string(),
13716
+ integration_name: z84.string(),
13717
+ instance_name: z84.string(),
13718
+ decision: z84.string()
13719
+ });
13720
+ var customRebuildSchema = z84.object({
13721
+ agent_id: z84.string(),
13722
+ agent_name: z84.string(),
13723
+ custom_integration_name: z84.string()
13724
+ });
13725
+ var moveAgentResponseSchema = z84.object({
13726
+ source_team_id: z84.string(),
13727
+ target_team_id: z84.string(),
13728
+ root_agent_id: z84.string(),
13729
+ agents: z84.array(namedRefSchema),
13730
+ queues: z84.array(moveQueueRefSchema),
13731
+ total_case_items: z84.number(),
13732
+ total_runs: z84.number(),
13733
+ skills_to_clone: z84.array(namedRefSchema),
13734
+ files_to_copy: z84.array(z84.object({ path: z84.string() })),
13735
+ warnings: z84.object({
13736
+ outcome: z84.object({
13737
+ instances_reconnected: z84.array(connectionDecisionSchema),
13738
+ instances_disconnected: z84.array(connectionDecisionSchema),
13739
+ custom_integrations_to_rebuild: z84.array(customRebuildSchema),
13740
+ catalog_rows_created_on_target: z84.number()
13741
+ }),
13742
+ dropped_folders: z84.array(namedRefSchema),
13743
+ dropped_memory_count: z84.number(),
13744
+ files_copied_count: z84.number(),
13745
+ files_skipped_conflict: z84.array(z84.string())
13746
+ }),
13747
+ options: z84.object({
13748
+ move_learnings: z84.boolean()
13749
+ }),
13750
+ applied: z84.boolean()
13751
+ });
13551
13752
  var buildConfigSchema = StoredAgentConfigSchemaV2;
13552
13753
  var DEFAULT_NEW_AGENT_NAME = DEFAULT_AGENT_NAME;
13553
13754
  var DEFAULT_BUILD_NAME = "Initial build";
@@ -14535,6 +14736,151 @@ function registerAgentsModels(agents) {
14535
14736
  }
14536
14737
  __name(registerAgentsModels, "registerAgentsModels");
14537
14738
 
14739
+ // src/commands/agents/move.ts
14740
+ var NOT_STANDALONE_CODE = "ASSIGNMENT_NOT_STANDALONE";
14741
+ function registerAgentsMove(agents) {
14742
+ agents.command("move <id>").description("Move an agent (and its connected workspace) to another team").requiredOption("--to-team <id>", "ID of the team to move the agent into").option(
14743
+ "--all-together",
14744
+ "move connected queues, triggers, and handover peers along with the agent"
14745
+ ).option(
14746
+ "--skip-learnings",
14747
+ "drop the agent's accumulated learnings instead of carrying them across"
14748
+ ).option("--dry-run", "preview the move without applying any changes").option("-y, --yes", "skip the confirmation prompt").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function moveAction(id, options) {
14749
+ const agentId = trimRequired(id, "<id>");
14750
+ const targetTeamId = trimRequired(options.toTeam ?? "", "--to-team");
14751
+ const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
14752
+ const isDryRun = options.dryRun === true;
14753
+ if (!isDryRun) {
14754
+ await confirmDestructive({
14755
+ message: `Move agent "${agentId}" to team "${targetTeamId}"?`,
14756
+ skip: options.yes === true
14757
+ });
14758
+ }
14759
+ const body = {
14760
+ target_team_id: targetTeamId,
14761
+ move_learnings: options.skipLearnings !== true,
14762
+ bypass_standalone_gate: options.allTogether === true
14763
+ };
14764
+ const searchParams = new URLSearchParams();
14765
+ if (isDryRun) {
14766
+ searchParams.append("dry_run", "true");
14767
+ }
14768
+ const raw = await requestMove({
14769
+ agentId,
14770
+ apiKey,
14771
+ apiBaseUrl,
14772
+ body,
14773
+ searchParams
14774
+ });
14775
+ if (options.json) {
14776
+ printJson(raw);
14777
+ return;
14778
+ }
14779
+ const parsed = moveAgentResponseSchema.safeParse(raw);
14780
+ if (!parsed.success) {
14781
+ throw new CliError(
14782
+ `Unexpected response from the API: ${parsed.error.message}`
14783
+ );
14784
+ }
14785
+ renderPlan(parsed.data, isDryRun);
14786
+ }, "moveAction"));
14787
+ }
14788
+ __name(registerAgentsMove, "registerAgentsMove");
14789
+ async function requestMove(args) {
14790
+ try {
14791
+ return await httpRequest({
14792
+ method: "POST",
14793
+ path: `/v2/agents/${encodeURIComponent(args.agentId)}/move`,
14794
+ apiKey: args.apiKey,
14795
+ apiBaseUrl: args.apiBaseUrl,
14796
+ body: args.body,
14797
+ searchParams: args.searchParams
14798
+ });
14799
+ } catch (error) {
14800
+ if (error instanceof CliHttpError && error.apiErrorCode === NOT_STANDALONE_CODE) {
14801
+ throw new CliError(
14802
+ "This agent is connected to queues or other agents. Re-run with --all-together to move everything as a group."
14803
+ );
14804
+ }
14805
+ throw error;
14806
+ }
14807
+ }
14808
+ __name(requestMove, "requestMove");
14809
+ function renderPlan(plan, isDryRun) {
14810
+ const otherAgents = plan.agents.filter((a) => a.id !== plan.root_agent_id);
14811
+ const outcome = plan.warnings.outcome;
14812
+ console.log(green(isDryRun ? "Move preview" : "Agent moved!"));
14813
+ console.log(
14814
+ renderKeyValue([
14815
+ { label: "Target team", value: plan.target_team_id },
14816
+ { label: "Agents moving", value: String(plan.agents.length) },
14817
+ { label: "Queues", value: String(plan.queues.length) },
14818
+ { label: "Cases", value: String(plan.total_case_items) },
14819
+ { label: "Runs", value: String(plan.total_runs) },
14820
+ {
14821
+ label: "Move learnings",
14822
+ value: plan.options.move_learnings ? "yes" : "no"
14823
+ }
14824
+ ])
14825
+ );
14826
+ if (otherAgents.length > 0) {
14827
+ console.log(`
14828
+ Connected agents coming along (${otherAgents.length}):`);
14829
+ for (const agent of otherAgents) {
14830
+ console.log(` - ${agent.name} (${agent.id})`);
14831
+ }
14832
+ }
14833
+ if (plan.queues.length > 0) {
14834
+ console.log(`
14835
+ Queues (${plan.queues.length}):`);
14836
+ for (const queue of plan.queues) {
14837
+ console.log(` - ${queue.name} \u2014 ${queue.item_count} case(s)`);
14838
+ }
14839
+ }
14840
+ if (plan.skills_to_clone.length > 0) {
14841
+ const names = plan.skills_to_clone.map((s) => s.name).join(", ");
14842
+ console.log(`
14843
+ Skills copied to target: ${names}`);
14844
+ }
14845
+ if (plan.files_to_copy.length > 0) {
14846
+ const paths = plan.files_to_copy.map((f) => f.path).join(", ");
14847
+ console.log(`
14848
+ Files copied to target: ${paths}`);
14849
+ }
14850
+ if (outcome.instances_disconnected.length > 0) {
14851
+ console.log("\nConnections to reconnect on the target team:");
14852
+ for (const c of outcome.instances_disconnected) {
14853
+ console.log(` - ${c.integration_name} (${c.agent_name})`);
14854
+ }
14855
+ }
14856
+ if (outcome.custom_integrations_to_rebuild.length > 0) {
14857
+ console.log("\nCustom connections to rebuild on the target team:");
14858
+ for (const c of outcome.custom_integrations_to_rebuild) {
14859
+ console.log(` - ${c.custom_integration_name} (${c.agent_name})`);
14860
+ }
14861
+ }
14862
+ if (plan.warnings.files_skipped_conflict.length > 0) {
14863
+ const paths = plan.warnings.files_skipped_conflict.join(", ");
14864
+ console.log(`
14865
+ Files not copied (already exist on target): ${paths}`);
14866
+ }
14867
+ if (plan.warnings.dropped_folders.length > 0) {
14868
+ const names = plan.warnings.dropped_folders.map((f) => f.name).join(", ");
14869
+ console.log(`
14870
+ Queues will be moved out of their folders: ${names}`);
14871
+ }
14872
+ if (plan.warnings.dropped_memory_count > 0) {
14873
+ console.log(
14874
+ `
14875
+ ${plan.warnings.dropped_memory_count} AOP exception(s) will be cleared for users who aren't in the target team.`
14876
+ );
14877
+ }
14878
+ if (isDryRun) {
14879
+ console.log("\nNothing was changed. Re-run without --dry-run to apply.");
14880
+ }
14881
+ }
14882
+ __name(renderPlan, "renderPlan");
14883
+
14538
14884
  // src/api/schedule-schemas.ts
14539
14885
  import { z as z86 } from "zod";
14540
14886
  var publicScheduleSchema = z86.object({
@@ -15352,6 +15698,7 @@ function registerAgents(program) {
15352
15698
  registerAgentsGet(agents);
15353
15699
  registerAgentsCreate(agents);
15354
15700
  registerAgentsUpdate(agents);
15701
+ registerAgentsMove(agents);
15355
15702
  registerAgentsModels(agents);
15356
15703
  registerAgentsSetModel(agents);
15357
15704
  registerAgentsDelete(agents);
@@ -19209,6 +19556,19 @@ var CLARITY_READ_TOOLS = [
19209
19556
  endpoints: [{ method: "GET", path: "/v2/clarity/processes/:processId" }],
19210
19557
  description: "Read old v1 Clarity processes with legacy analysis, transformation guidance, and captures."
19211
19558
  },
19559
+ {
19560
+ name: "listClarityProcessSnapshots",
19561
+ scope: "v2",
19562
+ read_only: true,
19563
+ commands: ["duvo clarity list-snapshots"],
19564
+ endpoints: [
19565
+ {
19566
+ method: "GET",
19567
+ path: "/v2/clarity-v2/processes/:processId/snapshots/:kind"
19568
+ }
19569
+ ],
19570
+ description: "List lightweight v2 snapshot versions of one kind (current_process or transformation_proposal) with limit/offset pagination."
19571
+ },
19212
19572
  {
19213
19573
  name: "getClarityProcessSnapshot",
19214
19574
  scope: "v2",
@@ -21442,6 +21802,103 @@ function registerClarityProcessSummaries(clarity) {
21442
21802
  }
21443
21803
  __name(registerClarityProcessSummaries, "registerClarityProcessSummaries");
21444
21804
 
21805
+ // src/commands/clarity/list-snapshots.ts
21806
+ import { z as z99 } from "zod";
21807
+ var SNAPSHOT_KINDS = ["current_process", "transformation_proposal"];
21808
+ var DEFAULT_LIMIT7 = 50;
21809
+ var MIN_LIMIT7 = 1;
21810
+ var MAX_LIMIT7 = 100;
21811
+ var snapshotListItemSchema = z99.looseObject({
21812
+ id: z99.string(),
21813
+ status: z99.string(),
21814
+ creator_type: z99.string(),
21815
+ created_at: z99.string(),
21816
+ parent_id: z99.string().nullable().optional(),
21817
+ source_snapshot_id: z99.string().nullable().optional()
21818
+ });
21819
+ var listSnapshotsResponseSchema = z99.looseObject({
21820
+ snapshots: z99.array(snapshotListItemSchema),
21821
+ total: z99.number().int().optional()
21822
+ });
21823
+ var TABLE_COLUMNS21 = [
21824
+ {
21825
+ header: "ID",
21826
+ cell: /* @__PURE__ */ __name((row) => row.id, "cell")
21827
+ },
21828
+ {
21829
+ header: "STATUS",
21830
+ cell: /* @__PURE__ */ __name((row) => row.status, "cell")
21831
+ },
21832
+ {
21833
+ header: "CREATOR",
21834
+ cell: /* @__PURE__ */ __name((row) => row.creator_type, "cell")
21835
+ },
21836
+ {
21837
+ header: "PARENT",
21838
+ cell: /* @__PURE__ */ __name((row) => row.parent_id ?? "", "cell")
21839
+ },
21840
+ {
21841
+ header: "CREATED",
21842
+ cell: /* @__PURE__ */ __name((row) => row.created_at, "cell")
21843
+ }
21844
+ ];
21845
+ function registerClarityListSnapshots(clarity) {
21846
+ clarity.command("list-snapshots <process-id> <kind>").description(
21847
+ `List lightweight v2 snapshot versions of one kind (${SNAPSHOT_KINDS.join(" or ")}) for a Clarity process`
21848
+ ).option("--limit <n>", `page size (${MIN_LIMIT7}-${MAX_LIMIT7})`).option("--offset <n>", "number of snapshots to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function action(processId, rawKind, options) {
21849
+ const kind = parseSnapshotKind2(rawKind);
21850
+ const limit = parseLimit(options.limit, {
21851
+ defaultValue: DEFAULT_LIMIT7,
21852
+ min: MIN_LIMIT7,
21853
+ max: MAX_LIMIT7
21854
+ });
21855
+ const offset = parseOffset(options.offset);
21856
+ const config = await requireAuthenticatedConfig(this);
21857
+ const searchParams = new URLSearchParams();
21858
+ searchParams.append("limit", String(limit));
21859
+ searchParams.append("offset", String(offset));
21860
+ const raw = await getClarityJson(config, {
21861
+ method: "GET",
21862
+ path: `/v2/clarity-v2/processes/${encodeURIComponent(processId)}/snapshots/${kind}`,
21863
+ resource: "Clarity process snapshots",
21864
+ searchParams
21865
+ });
21866
+ if (options.json) {
21867
+ printJson(raw);
21868
+ return;
21869
+ }
21870
+ const parsed = listSnapshotsResponseSchema.safeParse(raw);
21871
+ if (!parsed.success) {
21872
+ throw new CliError(
21873
+ `Unexpected response from the API: ${parsed.error.message}`
21874
+ );
21875
+ }
21876
+ const response = parsed.data;
21877
+ if (response.snapshots.length === 0) {
21878
+ console.log("No snapshots found.");
21879
+ return;
21880
+ }
21881
+ console.log(renderTable(TABLE_COLUMNS21, response.snapshots));
21882
+ console.log(renderPaginationSummary(response, offset));
21883
+ }, "action"));
21884
+ }
21885
+ __name(registerClarityListSnapshots, "registerClarityListSnapshots");
21886
+ function parseSnapshotKind2(raw) {
21887
+ const kind = SNAPSHOT_KINDS.find((candidate) => candidate === raw);
21888
+ if (kind === void 0) {
21889
+ throw new CliError(`kind must be one of: ${SNAPSHOT_KINDS.join(", ")}`);
21890
+ }
21891
+ return kind;
21892
+ }
21893
+ __name(parseSnapshotKind2, "parseSnapshotKind");
21894
+ function renderPaginationSummary(response, offset) {
21895
+ if (response.total === void 0) {
21896
+ return `Showing ${response.snapshots.length} \xB7 offset ${offset}`;
21897
+ }
21898
+ return `Showing ${response.snapshots.length} of ${response.total} \xB7 offset ${offset}`;
21899
+ }
21900
+ __name(renderPaginationSummary, "renderPaginationSummary");
21901
+
21445
21902
  // src/commands/clarity/postprocess.ts
21446
21903
  var SNAPSHOT_TYPES = ["current_process", "transformation_proposal"];
21447
21904
  function registerClarityPostprocess(clarity) {
@@ -21473,9 +21930,9 @@ function registerClarityPostprocess(clarity) {
21473
21930
  __name(registerClarityPostprocess, "registerClarityPostprocess");
21474
21931
 
21475
21932
  // src/commands/clarity/process-labels.ts
21476
- var MIN_LIMIT7 = 1;
21477
- var MAX_LIMIT7 = 100;
21478
- var DEFAULT_LIMIT7 = 50;
21933
+ var MIN_LIMIT8 = 1;
21934
+ var MAX_LIMIT8 = 100;
21935
+ var DEFAULT_LIMIT8 = 50;
21479
21936
  var ORG_FLAG_DESCRIPTION2 = "organization id for the org-scoped process tag palette (overrides DUVO_ORG_ID)";
21480
21937
  var PROCESS_LABELS_RESOURCE_PATH = "/clarity/process-labels";
21481
21938
  var LABELS_WITH_COUNT_COLUMNS = [
@@ -21512,7 +21969,7 @@ function registerClarityProcessLabels(clarity) {
21512
21969
  }
21513
21970
  __name(registerClarityProcessLabels, "registerClarityProcessLabels");
21514
21971
  function registerList(processLabels) {
21515
- processLabels.command("list", { isDefault: true }).description("List process tags in the current organization").option("--org <org-id>", ORG_FLAG_DESCRIPTION2).option("--limit <n>", `page size (${MIN_LIMIT7}-${MAX_LIMIT7})`).option("--offset <n>", "number of tags to skip").option("--search <text>", "only show tags whose value contains this text").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
21972
+ processLabels.command("list", { isDefault: true }).description("List process tags in the current organization").option("--org <org-id>", ORG_FLAG_DESCRIPTION2).option("--limit <n>", `page size (${MIN_LIMIT8}-${MAX_LIMIT8})`).option("--offset <n>", "number of tags to skip").option("--search <text>", "only show tags whose value contains this text").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
21516
21973
  const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
21517
21974
  const raw = await httpRequest({
21518
21975
  method: "GET",
@@ -21610,7 +22067,7 @@ function registerListProcess(processLabels) {
21610
22067
  }
21611
22068
  __name(registerListProcess, "registerListProcess");
21612
22069
  function registerAvailable(processLabels) {
21613
- processLabels.command("available").description("List tags available to assign to a process").requiredOption("--process <process-id>", "ID of the process").option("--limit <n>", `page size (${MIN_LIMIT7}-${MAX_LIMIT7})`).option("--offset <n>", "number of tags to skip").option("--search <text>", "only show tags whose value contains this text").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function availableAction(options) {
22070
+ processLabels.command("available").description("List tags available to assign to a process").requiredOption("--process <process-id>", "ID of the process").option("--limit <n>", `page size (${MIN_LIMIT8}-${MAX_LIMIT8})`).option("--offset <n>", "number of tags to skip").option("--search <text>", "only show tags whose value contains this text").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function availableAction(options) {
21614
22071
  const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
21615
22072
  const raw = await httpRequest({
21616
22073
  method: "GET",
@@ -21697,9 +22154,9 @@ function buildAssignBody(options) {
21697
22154
  __name(buildAssignBody, "buildAssignBody");
21698
22155
  function buildListSearchParams(options) {
21699
22156
  const limit = parseLimit(options.limit, {
21700
- defaultValue: DEFAULT_LIMIT7,
21701
- min: MIN_LIMIT7,
21702
- max: MAX_LIMIT7
22157
+ defaultValue: DEFAULT_LIMIT8,
22158
+ min: MIN_LIMIT8,
22159
+ max: MAX_LIMIT8
21703
22160
  });
21704
22161
  const offset = parseOffset(options.offset);
21705
22162
  const searchParams = new URLSearchParams({
@@ -21778,40 +22235,40 @@ function renderLabelSummary(label) {
21778
22235
  __name(renderLabelSummary, "renderLabelSummary");
21779
22236
 
21780
22237
  // src/commands/clarity/process-links.ts
21781
- import { z as z99 } from "zod";
21782
- var MIN_LIMIT8 = 1;
21783
- var MAX_LIMIT8 = 500;
21784
- var DEFAULT_LIMIT8 = 100;
22238
+ import { z as z100 } from "zod";
22239
+ var MIN_LIMIT9 = 1;
22240
+ var MAX_LIMIT9 = 500;
22241
+ var DEFAULT_LIMIT9 = 100;
21785
22242
  var ORG_FLAG_DESCRIPTION3 = "organization id for the org-scoped process landscape (overrides DUVO_ORG_ID)";
21786
22243
  var PROCESS_LINKS_RESOURCE_PATH = "/clarity/hierarchy/process-links";
21787
- var processLinkTypeSchema = z99.enum([
22244
+ var processLinkTypeSchema = z100.enum([
21788
22245
  "hands_off_to",
21789
22246
  "shares_step_with",
21790
22247
  "variant_of"
21791
22248
  ]);
21792
- var processLinkStateSchema = z99.enum(["suggested", "confirmed"]);
21793
- var processLinkSchema = z99.object({
21794
- id: z99.string(),
21795
- source_node_id: z99.string(),
21796
- target_node_id: z99.string(),
22249
+ var processLinkStateSchema = z100.enum(["suggested", "confirmed"]);
22250
+ var processLinkSchema = z100.object({
22251
+ id: z100.string(),
22252
+ source_node_id: z100.string(),
22253
+ target_node_id: z100.string(),
21797
22254
  type: processLinkTypeSchema,
21798
22255
  state: processLinkStateSchema,
21799
- confidence: z99.number().nullable(),
21800
- created_at: z99.string(),
21801
- updated_at: z99.string()
22256
+ confidence: z100.number().nullable(),
22257
+ created_at: z100.string(),
22258
+ updated_at: z100.string()
21802
22259
  });
21803
- var listProcessLinksResponseSchema = z99.object({
21804
- process_links: z99.array(processLinkSchema),
21805
- total: z99.number(),
21806
- limit: z99.number(),
21807
- offset: z99.number()
22260
+ var listProcessLinksResponseSchema = z100.object({
22261
+ process_links: z100.array(processLinkSchema),
22262
+ total: z100.number(),
22263
+ limit: z100.number(),
22264
+ offset: z100.number()
21808
22265
  });
21809
- var processLinkMutationResponseSchema = z99.object({
22266
+ var processLinkMutationResponseSchema = z100.object({
21810
22267
  process_link: processLinkSchema,
21811
- created: z99.boolean().optional()
22268
+ created: z100.boolean().optional()
21812
22269
  });
21813
- var deleteProcessLinkResponseSchema = z99.object({
21814
- deleted: z99.boolean()
22270
+ var deleteProcessLinkResponseSchema = z100.object({
22271
+ deleted: z100.boolean()
21815
22272
  });
21816
22273
  var PROCESS_LINK_COLUMNS = [
21817
22274
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell"), maxWidth: 36 },
@@ -21834,7 +22291,7 @@ var PROCESS_LINK_COLUMNS = [
21834
22291
  ];
21835
22292
  function registerClarityProcessLinks(clarity) {
21836
22293
  const processLinks = clarity.command("process-links").description("Manage Clarity process links");
21837
- processLinks.command("list", { isDefault: true }).description("List process links in the current organization").option("--org <org-id>", ORG_FLAG_DESCRIPTION3).option("--node <node-id>", "only show links touching this process node").option("--limit <n>", `page size (${MIN_LIMIT8}-${MAX_LIMIT8})`).option("--offset <n>", "number of links to skip").option("--json", "output JSON").action(/* @__PURE__ */ __name(async function listAction(options) {
22294
+ processLinks.command("list", { isDefault: true }).description("List process links in the current organization").option("--org <org-id>", ORG_FLAG_DESCRIPTION3).option("--node <node-id>", "only show links touching this process node").option("--limit <n>", `page size (${MIN_LIMIT9}-${MAX_LIMIT9})`).option("--offset <n>", "number of links to skip").option("--json", "output JSON").action(/* @__PURE__ */ __name(async function listAction(options) {
21838
22295
  const config = await requireAuthenticatedConfig(this);
21839
22296
  const path = await resolveProcessLinksPath(this);
21840
22297
  const response = await listProcessLinks(config, path, options);
@@ -21904,9 +22361,9 @@ function registerClarityProcessLinks(clarity) {
21904
22361
  __name(registerClarityProcessLinks, "registerClarityProcessLinks");
21905
22362
  async function listProcessLinks(config, path, options) {
21906
22363
  const limit = parseLimit(options.limit, {
21907
- defaultValue: DEFAULT_LIMIT8,
21908
- min: MIN_LIMIT8,
21909
- max: MAX_LIMIT8
22364
+ defaultValue: DEFAULT_LIMIT9,
22365
+ min: MIN_LIMIT9,
22366
+ max: MAX_LIMIT9
21910
22367
  });
21911
22368
  const offset = parseOffset(options.offset);
21912
22369
  const searchParams = new URLSearchParams({
@@ -22004,14 +22461,14 @@ function renderProcessLinks(response) {
22004
22461
  __name(renderProcessLinks, "renderProcessLinks");
22005
22462
 
22006
22463
  // src/commands/clarity/promote-current-process.ts
22007
- import { z as z100 } from "zod";
22008
- var snapshotSchema3 = z100.object({
22009
- snapshot: z100.object({
22010
- id: z100.string(),
22011
- status: z100.string(),
22012
- creator_type: z100.string(),
22013
- created_at: z100.string(),
22014
- updated_at: z100.string()
22464
+ import { z as z101 } from "zod";
22465
+ var snapshotSchema3 = z101.object({
22466
+ snapshot: z101.object({
22467
+ id: z101.string(),
22468
+ status: z101.string(),
22469
+ creator_type: z101.string(),
22470
+ created_at: z101.string(),
22471
+ updated_at: z101.string()
22015
22472
  })
22016
22473
  });
22017
22474
  function registerClarityPromoteCurrentProcess(clarity) {
@@ -22048,14 +22505,14 @@ function registerClarityPromoteCurrentProcess(clarity) {
22048
22505
  __name(registerClarityPromoteCurrentProcess, "registerClarityPromoteCurrentProcess");
22049
22506
 
22050
22507
  // src/commands/clarity/promote-transformation-proposal.ts
22051
- import { z as z101 } from "zod";
22052
- var snapshotSchema4 = z101.object({
22053
- snapshot: z101.object({
22054
- id: z101.string(),
22055
- status: z101.string(),
22056
- creator_type: z101.string(),
22057
- created_at: z101.string(),
22058
- updated_at: z101.string()
22508
+ import { z as z102 } from "zod";
22509
+ var snapshotSchema4 = z102.object({
22510
+ snapshot: z102.object({
22511
+ id: z102.string(),
22512
+ status: z102.string(),
22513
+ creator_type: z102.string(),
22514
+ created_at: z102.string(),
22515
+ updated_at: z102.string()
22059
22516
  })
22060
22517
  });
22061
22518
  function registerClarityPromoteTransformationProposal(clarity) {
@@ -22131,8 +22588,8 @@ __name(registerClarityRevertTransformationProposal, "registerClarityRevertTransf
22131
22588
 
22132
22589
  // src/commands/clarity/save-snapshot.ts
22133
22590
  import { readFile as readFile7 } from "node:fs/promises";
22134
- import { z as z102 } from "zod";
22135
- var snapshotFileSchema = z102.union([
22591
+ import { z as z103 } from "zod";
22592
+ var snapshotFileSchema = z103.union([
22136
22593
  saveClarityProcessSnapshotBodySchema.shape.steps,
22137
22594
  saveClarityProcessSnapshotBodySchema.pick({
22138
22595
  steps: true,
@@ -22291,9 +22748,9 @@ function registerClarityStopTransformationProposal(clarity) {
22291
22748
  __name(registerClarityStopTransformationProposal, "registerClarityStopTransformationProposal");
22292
22749
 
22293
22750
  // src/commands/clarity/index.ts
22294
- var DEFAULT_LIMIT9 = 50;
22295
- var MIN_LIMIT9 = 1;
22296
- var MAX_LIMIT9 = 100;
22751
+ var DEFAULT_LIMIT10 = 50;
22752
+ var MIN_LIMIT10 = 1;
22753
+ var MAX_LIMIT10 = 100;
22297
22754
  var CLARITY_V2_REQUIRED_MESSAGE = "This command requires Clarity v2. Use `duvo clarity overview <process-id>` to read legacy v1 context.";
22298
22755
  function registerClarity(program) {
22299
22756
  const clarity = program.command("clarity").description("Manage and read Clarity processes in the Duvo public API");
@@ -22319,6 +22776,7 @@ function registerClarity(program) {
22319
22776
  registerClarityGetTransformationProposal(clarity);
22320
22777
  registerClarityListExtraCaptureRequests(clarity);
22321
22778
  registerClarityProcessSummaries(clarity);
22779
+ registerClarityListSnapshots(clarity);
22322
22780
  registerClarityArtifactChatConversations(clarity);
22323
22781
  registerClarityArtifactChatMessages(clarity);
22324
22782
  registerClaritySendArtifactChatMessage(clarity);
@@ -22344,7 +22802,7 @@ function registerClarity(program) {
22344
22802
  }
22345
22803
  __name(registerClarity, "registerClarity");
22346
22804
  function registerList2(clarity) {
22347
- clarity.command("list", { isDefault: true }).description("List Clarity processes for the current team").option("--limit <n>", `page size (${MIN_LIMIT9}-${MAX_LIMIT9})`).option("--offset <n>", "number of processes to skip").option("--search <query>", "case-insensitive search across process names").option("--status <status>", "filter by lifecycle status").option(
22805
+ clarity.command("list", { isDefault: true }).description("List Clarity processes for the current team").option("--limit <n>", `page size (${MIN_LIMIT10}-${MAX_LIMIT10})`).option("--offset <n>", "number of processes to skip").option("--search <query>", "case-insensitive search across process names").option("--status <status>", "filter by lifecycle status").option(
22348
22806
  "--process-version <1|2>",
22349
22807
  "filter by Clarity process schema version"
22350
22808
  ).option("--json", "output JSON").option("--csv", "output CSV").action(/* @__PURE__ */ __name(async function listAction(options) {
@@ -22354,7 +22812,7 @@ function registerList2(clarity) {
22354
22812
  }
22355
22813
  __name(registerList2, "registerList");
22356
22814
  function registerSearch(clarity) {
22357
- clarity.command("search <query>").description("Search Clarity processes by name").option("--limit <n>", `page size (${MIN_LIMIT9}-${MAX_LIMIT9})`).option("--offset <n>", "number of processes to skip").option("--status <status>", "filter by lifecycle status").option(
22815
+ clarity.command("search <query>").description("Search Clarity processes by name").option("--limit <n>", `page size (${MIN_LIMIT10}-${MAX_LIMIT10})`).option("--offset <n>", "number of processes to skip").option("--status <status>", "filter by lifecycle status").option(
22358
22816
  "--process-version <1|2>",
22359
22817
  "filter by Clarity process schema version"
22360
22818
  ).option("--json", "output JSON").option("--csv", "output CSV").action(/* @__PURE__ */ __name(async function searchAction(query, options) {
@@ -22699,9 +23157,9 @@ function registerExport(clarity) {
22699
23157
  __name(registerExport, "registerExport");
22700
23158
  async function loadProcessList(command, options) {
22701
23159
  const limit = parseLimit(options.limit, {
22702
- defaultValue: DEFAULT_LIMIT9,
22703
- min: MIN_LIMIT9,
22704
- max: MAX_LIMIT9
23160
+ defaultValue: DEFAULT_LIMIT10,
23161
+ min: MIN_LIMIT10,
23162
+ max: MAX_LIMIT10
22705
23163
  });
22706
23164
  const offset = parseOffset(options.offset);
22707
23165
  const version2 = parseProcessVersion(options.processVersion);
@@ -23085,7 +23543,7 @@ function registerConnectionsGet(connections) {
23085
23543
  __name(registerConnectionsGet, "registerConnectionsGet");
23086
23544
 
23087
23545
  // src/commands/connections/list.ts
23088
- var TABLE_COLUMNS21 = [
23546
+ var TABLE_COLUMNS22 = [
23089
23547
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
23090
23548
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
23091
23549
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
@@ -23125,26 +23583,26 @@ function registerConnectionsList(connections) {
23125
23583
  console.log("No connections found.");
23126
23584
  return;
23127
23585
  }
23128
- console.log(renderTable(TABLE_COLUMNS21, rows));
23586
+ console.log(renderTable(TABLE_COLUMNS22, rows));
23129
23587
  console.log(`Showing ${rows.length}`);
23130
23588
  }, "listAction"));
23131
23589
  }
23132
23590
  __name(registerConnectionsList, "registerConnectionsList");
23133
23591
 
23134
23592
  // src/commands/connections/probe.ts
23135
- import { z as z103 } from "zod";
23136
- var toolSchema = z103.object({
23137
- name: z103.string(),
23138
- description: z103.string().optional(),
23139
- input_schema: z103.record(z103.string(), z103.unknown()).optional()
23593
+ import { z as z104 } from "zod";
23594
+ var toolSchema = z104.object({
23595
+ name: z104.string(),
23596
+ description: z104.string().optional(),
23597
+ input_schema: z104.record(z104.string(), z104.unknown()).optional()
23140
23598
  });
23141
- var probeResponseSchema = z103.object({
23142
- success: z103.boolean(),
23143
- tools: z103.array(toolSchema).optional(),
23144
- error: z103.string().optional()
23599
+ var probeResponseSchema = z104.object({
23600
+ success: z104.boolean(),
23601
+ tools: z104.array(toolSchema).optional(),
23602
+ error: z104.string().optional()
23145
23603
  });
23146
23604
  var DESCRIPTION_MAX_WIDTH = 80;
23147
- var TABLE_COLUMNS22 = [
23605
+ var TABLE_COLUMNS23 = [
23148
23606
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
23149
23607
  {
23150
23608
  header: "DESCRIPTION",
@@ -23153,7 +23611,12 @@ var TABLE_COLUMNS22 = [
23153
23611
  }
23154
23612
  ];
23155
23613
  function registerConnectionsProbe(connections) {
23156
- connections.command("probe").description("Probe an MCP server URL and list its available tools").requiredOption("--url <url>", "MCP server URL to probe").option(
23614
+ connections.command("probe").description(
23615
+ "Probe an MCP server and list its available tools. Use --url for custom MCP servers or --slug for catalog integrations (the backend resolves the URL)."
23616
+ ).option("--url <url>", "MCP server URL to probe (for custom MCP servers)").option(
23617
+ "--slug <slug>",
23618
+ "Catalog integration slug (backend resolves the URL and auth headers)"
23619
+ ).option(
23157
23620
  "--header <KEY=VALUE>",
23158
23621
  "HTTP header to send (repeatable)",
23159
23622
  (value, previous) => [
@@ -23161,14 +23624,13 @@ function registerConnectionsProbe(connections) {
23161
23624
  value
23162
23625
  ]
23163
23626
  ).option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function probeAction(options) {
23164
- const url = options.url.trim();
23165
- if (url.length === 0) {
23166
- throw new CliError("--url must not be empty");
23627
+ const url = options.url?.trim();
23628
+ const slug = options.slug?.trim();
23629
+ if (Boolean(url) === Boolean(slug)) {
23630
+ throw new CliError("Provide exactly one of --url or --slug");
23167
23631
  }
23168
- const body = {
23169
- server_url: url
23170
- };
23171
- if (options.header && options.header.length > 0) {
23632
+ const body = slug ? { integration_slug: slug } : { server_url: url };
23633
+ if (!slug && options.header && options.header.length > 0) {
23172
23634
  body.headers = parseHeaderPairs("--header", options.header);
23173
23635
  }
23174
23636
  const config = await requireAuthenticatedConfig(this);
@@ -23204,7 +23666,7 @@ function registerConnectionsProbe(connections) {
23204
23666
  console.log("No tools found.");
23205
23667
  return;
23206
23668
  }
23207
- console.log(renderTable(TABLE_COLUMNS22, tools));
23669
+ console.log(renderTable(TABLE_COLUMNS23, tools));
23208
23670
  console.log(
23209
23671
  `Showing ${tools.length} tool${tools.length === 1 ? "" : "s"}`
23210
23672
  );
@@ -23360,48 +23822,48 @@ function registerConnections(program) {
23360
23822
  __name(registerConnections, "registerConnections");
23361
23823
 
23362
23824
  // src/api/credential-schemas.ts
23363
- import { z as z104 } from "zod";
23364
- var dateLike = z104.string();
23365
- var secretSchema = z104.object({
23366
- id: z104.string(),
23367
- team_id: z104.string(),
23368
- user_id: z104.string().nullable(),
23369
- name: z104.string(),
23370
- service_slug: z104.string().nullable(),
23371
- env_var_keys: z104.array(z104.string()),
23372
- created_by: z104.string(),
23825
+ import { z as z105 } from "zod";
23826
+ var dateLike = z105.string();
23827
+ var secretSchema = z105.object({
23828
+ id: z105.string(),
23829
+ team_id: z105.string(),
23830
+ user_id: z105.string().nullable(),
23831
+ name: z105.string(),
23832
+ service_slug: z105.string().nullable(),
23833
+ env_var_keys: z105.array(z105.string()),
23834
+ created_by: z105.string(),
23373
23835
  created_at: dateLike,
23374
23836
  updated_at: dateLike
23375
23837
  });
23376
- var secretsListResponseSchema = z104.array(secretSchema);
23838
+ var secretsListResponseSchema = z105.array(secretSchema);
23377
23839
  var secretResponseSchema = secretSchema;
23378
- var browserLoginSchema = z104.object({
23379
- id: z104.string(),
23380
- user_id: z104.string().nullable(),
23381
- team_id: z104.string(),
23382
- domain: z104.string(),
23383
- username: z104.string().nullable(),
23840
+ var browserLoginSchema = z105.object({
23841
+ id: z105.string(),
23842
+ user_id: z105.string().nullable(),
23843
+ team_id: z105.string(),
23844
+ domain: z105.string(),
23845
+ username: z105.string().nullable(),
23384
23846
  password: encryptedDataSchema.nullable(),
23385
23847
  otp_secret: encryptedDataSchema.nullable(),
23386
23848
  created_at: dateLike,
23387
23849
  updated_at: dateLike
23388
23850
  });
23389
- var browserLoginsListResponseSchema = z104.array(credentialPreviewSchema);
23390
- var revisionLoginSummarySchema = z104.object({
23391
- id: z104.string(),
23392
- user_id: z104.string().nullable(),
23393
- team_id: z104.string().nullable(),
23394
- domain: z104.string(),
23395
- username: z104.string().nullable(),
23851
+ var browserLoginsListResponseSchema = z105.array(credentialPreviewSchema);
23852
+ var revisionLoginSummarySchema = z105.object({
23853
+ id: z105.string(),
23854
+ user_id: z105.string().nullable(),
23855
+ team_id: z105.string().nullable(),
23856
+ domain: z105.string(),
23857
+ username: z105.string().nullable(),
23396
23858
  created_at: dateLike,
23397
23859
  updated_at: dateLike
23398
23860
  });
23399
- var revisionLoginsListResponseSchema = z104.array(
23861
+ var revisionLoginsListResponseSchema = z105.array(
23400
23862
  revisionLoginSummarySchema
23401
23863
  );
23402
- var revisionSecretsListResponseSchema = z104.array(secretSchema);
23403
- var successResponseSchema2 = z104.object({
23404
- success: z104.boolean()
23864
+ var revisionSecretsListResponseSchema = z105.array(secretSchema);
23865
+ var successResponseSchema2 = z105.object({
23866
+ success: z105.boolean()
23405
23867
  });
23406
23868
  var attachSuccessResponseSchema = successResponseSchema2;
23407
23869
  var deleteSecretResponseSchema = successResponseSchema2;
@@ -23595,7 +24057,7 @@ function registerCredentialsGet(credentials) {
23595
24057
  __name(registerCredentialsGet, "registerCredentialsGet");
23596
24058
 
23597
24059
  // src/commands/credentials/list.ts
23598
- var TABLE_COLUMNS23 = [
24060
+ var TABLE_COLUMNS24 = [
23599
24061
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
23600
24062
  { header: "DOMAIN", cell: /* @__PURE__ */ __name((row) => row.domain, "cell") },
23601
24063
  {
@@ -23654,7 +24116,7 @@ function registerCredentialsList(credentials) {
23654
24116
  console.log("No credentials found.");
23655
24117
  return;
23656
24118
  }
23657
- console.log(renderTable(TABLE_COLUMNS23, rows));
24119
+ console.log(renderTable(TABLE_COLUMNS24, rows));
23658
24120
  console.log(`Showing ${rows.length}`);
23659
24121
  }, "listAction"));
23660
24122
  }
@@ -23934,7 +24396,7 @@ function registerFilesDownloadUrl(files) {
23934
24396
  __name(registerFilesDownloadUrl, "registerFilesDownloadUrl");
23935
24397
 
23936
24398
  // src/commands/files/list.ts
23937
- var TABLE_COLUMNS24 = [
24399
+ var TABLE_COLUMNS25 = [
23938
24400
  { header: "PATH", cell: /* @__PURE__ */ __name((row) => row.path, "cell") },
23939
24401
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
23940
24402
  {
@@ -23977,7 +24439,7 @@ function registerFilesList(files) {
23977
24439
  console.log("No files found.");
23978
24440
  return;
23979
24441
  }
23980
- console.log(renderTable(TABLE_COLUMNS24, parsed.data.files));
24442
+ console.log(renderTable(TABLE_COLUMNS25, parsed.data.files));
23981
24443
  console.log(`Showing ${parsed.data.files.length}`);
23982
24444
  }, "listAction"));
23983
24445
  }
@@ -24404,7 +24866,7 @@ function registerIntegrationsCustom(integrations) {
24404
24866
  __name(registerIntegrationsCustom, "registerIntegrationsCustom");
24405
24867
 
24406
24868
  // src/commands/integrations/list.ts
24407
- var TABLE_COLUMNS25 = [
24869
+ var TABLE_COLUMNS26 = [
24408
24870
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
24409
24871
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
24410
24872
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
@@ -24446,7 +24908,7 @@ function registerIntegrationsList(integrations) {
24446
24908
  console.log("No integrations found.");
24447
24909
  return;
24448
24910
  }
24449
- console.log(renderTable(TABLE_COLUMNS25, rows));
24911
+ console.log(renderTable(TABLE_COLUMNS26, rows));
24450
24912
  console.log(`Showing ${rows.length}`);
24451
24913
  }, "listAction"));
24452
24914
  }
@@ -25289,7 +25751,7 @@ function parseHeaders(raw) {
25289
25751
  return result;
25290
25752
  }
25291
25753
  __name(parseHeaders, "parseHeaders");
25292
- var TABLE_COLUMNS26 = [
25754
+ var TABLE_COLUMNS27 = [
25293
25755
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
25294
25756
  { header: "DESCRIPTION", cell: /* @__PURE__ */ __name((row) => row.description, "cell") }
25295
25757
  ];
@@ -25347,7 +25809,7 @@ function registerOauthMcpProbe(mcp) {
25347
25809
  console.log("No tools advertised by this MCP server.");
25348
25810
  return;
25349
25811
  }
25350
- console.log(renderTable(TABLE_COLUMNS26, rows));
25812
+ console.log(renderTable(TABLE_COLUMNS27, rows));
25351
25813
  console.log(`Showing ${rows.length}`);
25352
25814
  }, "probeMcpAction"));
25353
25815
  }
@@ -25429,7 +25891,7 @@ function registerOauth(program) {
25429
25891
  __name(registerOauth, "registerOauth");
25430
25892
 
25431
25893
  // src/commands/plugins/list.ts
25432
- var TABLE_COLUMNS27 = [
25894
+ var TABLE_COLUMNS28 = [
25433
25895
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
25434
25896
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
25435
25897
  {
@@ -25463,7 +25925,7 @@ function registerPluginsList(plugins) {
25463
25925
  console.log("No plugins found.");
25464
25926
  return;
25465
25927
  }
25466
- console.log(renderTable(TABLE_COLUMNS27, parsed.data.plugins));
25928
+ console.log(renderTable(TABLE_COLUMNS28, parsed.data.plugins));
25467
25929
  console.log(`Showing ${parsed.data.plugins.length}`);
25468
25930
  }, "listAction"));
25469
25931
  }
@@ -25738,7 +26200,7 @@ function registerPulseAnswer(pulse) {
25738
26200
  __name(registerPulseAnswer, "registerPulseAnswer");
25739
26201
 
25740
26202
  // src/commands/pulse/connections.ts
25741
- var TABLE_COLUMNS28 = [
26203
+ var TABLE_COLUMNS29 = [
25742
26204
  {
25743
26205
  header: "CONNECTION ID",
25744
26206
  cell: /* @__PURE__ */ __name((row) => row.connection_id, "cell")
@@ -25770,7 +26232,7 @@ function registerList4(connections) {
25770
26232
  console.log("No connections attached.");
25771
26233
  return;
25772
26234
  }
25773
- console.log(renderTable(TABLE_COLUMNS28, parsed.data.connections));
26235
+ console.log(renderTable(TABLE_COLUMNS29, parsed.data.connections));
25774
26236
  }, "listAction"));
25775
26237
  }
25776
26238
  __name(registerList4, "registerList");
@@ -26006,10 +26468,10 @@ function registerPulseHtml(pulse) {
26006
26468
  __name(registerPulseHtml, "registerPulseHtml");
26007
26469
 
26008
26470
  // src/commands/pulse/list.ts
26009
- var DEFAULT_LIMIT10 = 20;
26010
- var MIN_LIMIT10 = 1;
26011
- var MAX_LIMIT10 = 100;
26012
- var TABLE_COLUMNS29 = [
26471
+ var DEFAULT_LIMIT11 = 20;
26472
+ var MIN_LIMIT11 = 1;
26473
+ var MAX_LIMIT11 = 100;
26474
+ var TABLE_COLUMNS30 = [
26013
26475
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
26014
26476
  {
26015
26477
  header: "TITLE",
@@ -26036,11 +26498,11 @@ function registerPulseList(pulse) {
26036
26498
  pulse.command("list", { isDefault: true }).description("List your Pulse dashboards").option(
26037
26499
  "--team",
26038
26500
  "list dashboards a teammate published to your whole team instead of your own"
26039
- ).option("--shared", "deprecated: always returns no dashboards").option("--limit <n>", `page size (${MIN_LIMIT10}-${MAX_LIMIT10})`).option("--offset <n>", "number of dashboards to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
26501
+ ).option("--shared", "deprecated: always returns no dashboards").option("--limit <n>", `page size (${MIN_LIMIT11}-${MAX_LIMIT11})`).option("--offset <n>", "number of dashboards to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
26040
26502
  const limit = parseLimit(options.limit, {
26041
- defaultValue: DEFAULT_LIMIT10,
26042
- min: MIN_LIMIT10,
26043
- max: MAX_LIMIT10
26503
+ defaultValue: DEFAULT_LIMIT11,
26504
+ min: MIN_LIMIT11,
26505
+ max: MAX_LIMIT11
26044
26506
  });
26045
26507
  const offset = parseOffset(options.offset);
26046
26508
  const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
@@ -26071,7 +26533,7 @@ function registerPulseList(pulse) {
26071
26533
  console.log("No Pulse dashboards found.");
26072
26534
  return;
26073
26535
  }
26074
- console.log(renderTable(TABLE_COLUMNS29, response.artifacts));
26536
+ console.log(renderTable(TABLE_COLUMNS30, response.artifacts));
26075
26537
  console.log(
26076
26538
  `Showing ${response.artifacts.length} of ${response.total} \xB7 offset ${response.offset}`
26077
26539
  );
@@ -26080,10 +26542,10 @@ function registerPulseList(pulse) {
26080
26542
  __name(registerPulseList, "registerPulseList");
26081
26543
 
26082
26544
  // src/commands/pulse/messages.ts
26083
- var DEFAULT_LIMIT11 = 100;
26084
- var MIN_LIMIT11 = 1;
26085
- var MAX_LIMIT11 = 500;
26086
- var TABLE_COLUMNS30 = [
26545
+ var DEFAULT_LIMIT12 = 100;
26546
+ var MIN_LIMIT12 = 1;
26547
+ var MAX_LIMIT12 = 500;
26548
+ var TABLE_COLUMNS31 = [
26087
26549
  { header: "ROLE", cell: /* @__PURE__ */ __name((row) => row.role, "cell") },
26088
26550
  {
26089
26551
  header: "CONTENT",
@@ -26093,18 +26555,22 @@ var TABLE_COLUMNS30 = [
26093
26555
  { header: "CREATED", cell: /* @__PURE__ */ __name((row) => row.created_at, "cell") }
26094
26556
  ];
26095
26557
  function registerPulseMessages(pulse) {
26096
- pulse.command("messages <id>").description("List a Pulse dashboard's chat transcript (creator only)").option("--limit <n>", `page size (${MIN_LIMIT11}-${MAX_LIMIT11})`).option("--offset <n>", "number of messages to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function messagesAction(id, options) {
26558
+ pulse.command("messages <id>").description("List a Pulse dashboard's chat transcript (creator only)").option("--limit <n>", `page size (${MIN_LIMIT12}-${MAX_LIMIT12})`).option(
26559
+ "--before <messageId>",
26560
+ "return the page of messages older than this message id (omit for the most recent page)"
26561
+ ).option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function messagesAction(id, options) {
26097
26562
  const pulseId = trimRequired(id, "<id>");
26098
26563
  const limit = parseLimit(options.limit, {
26099
- defaultValue: DEFAULT_LIMIT11,
26100
- min: MIN_LIMIT11,
26101
- max: MAX_LIMIT11
26564
+ defaultValue: DEFAULT_LIMIT12,
26565
+ min: MIN_LIMIT12,
26566
+ max: MAX_LIMIT12
26102
26567
  });
26103
- const offset = parseOffset(options.offset);
26104
26568
  const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
26105
26569
  const searchParams = new URLSearchParams();
26106
26570
  searchParams.append("limit", String(limit));
26107
- searchParams.append("offset", String(offset));
26571
+ if (options.before) {
26572
+ searchParams.append("before", trimRequired(options.before, "--before"));
26573
+ }
26108
26574
  const raw = await httpRequest({
26109
26575
  method: "GET",
26110
26576
  path: `/v2/artifacts/${encodeURIComponent(pulseId)}/messages`,
@@ -26122,13 +26588,18 @@ function registerPulseMessages(pulse) {
26122
26588
  `Unexpected response from the API: ${parsed.error.message}`
26123
26589
  );
26124
26590
  }
26125
- const { data, total } = parsed.data;
26591
+ const { data, total, has_more: hasMore } = parsed.data;
26126
26592
  if (data.length === 0) {
26127
26593
  console.log("No messages yet.");
26128
26594
  return;
26129
26595
  }
26130
- console.log(renderTable(TABLE_COLUMNS30, data));
26131
- console.log(`Showing ${data.length} of ${total} \xB7 offset ${offset}`);
26596
+ console.log(renderTable(TABLE_COLUMNS31, data));
26597
+ console.log(`Showing ${data.length} of ${total}`);
26598
+ if (hasMore) {
26599
+ console.log(
26600
+ `Older messages available. Rerun with --before ${data[0]?.id} to load them.`
26601
+ );
26602
+ }
26132
26603
  console.log(
26133
26604
  "Run with --json to see full message payloads, including the tool call id `duvo pulse answer` needs."
26134
26605
  );
@@ -26520,7 +26991,7 @@ function registerPulse(program) {
26520
26991
  __name(registerPulse, "registerPulse");
26521
26992
 
26522
26993
  // src/commands/queue-labels/index.ts
26523
- var TABLE_COLUMNS31 = [
26994
+ var TABLE_COLUMNS32 = [
26524
26995
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
26525
26996
  { header: "KEY", cell: /* @__PURE__ */ __name((row) => row.key, "cell") },
26526
26997
  { header: "VALUE", cell: /* @__PURE__ */ __name((row) => row.value, "cell") },
@@ -26574,7 +27045,7 @@ function registerList5(labels) {
26574
27045
  console.log("No labels defined on this queue.");
26575
27046
  return;
26576
27047
  }
26577
- console.log(renderTable(TABLE_COLUMNS31, parsed.data.labels));
27048
+ console.log(renderTable(TABLE_COLUMNS32, parsed.data.labels));
26578
27049
  console.log(`Showing ${parsed.data.labels.length}`);
26579
27050
  }, "listAction"));
26580
27051
  }
@@ -27325,10 +27796,10 @@ function registerQueuesLinkAgent(queues) {
27325
27796
  __name(registerQueuesLinkAgent, "registerQueuesLinkAgent");
27326
27797
 
27327
27798
  // src/commands/queues/list.ts
27328
- var DEFAULT_LIMIT12 = 20;
27329
- var MIN_LIMIT12 = 1;
27330
- var MAX_LIMIT12 = 100;
27331
- var TABLE_COLUMNS32 = [
27799
+ var DEFAULT_LIMIT13 = 20;
27800
+ var MIN_LIMIT13 = 1;
27801
+ var MAX_LIMIT13 = 100;
27802
+ var TABLE_COLUMNS33 = [
27332
27803
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
27333
27804
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
27334
27805
  {
@@ -27339,11 +27810,11 @@ var TABLE_COLUMNS32 = [
27339
27810
  { header: "CREATED", cell: /* @__PURE__ */ __name((row) => row.created_at ?? "", "cell") }
27340
27811
  ];
27341
27812
  function registerQueuesList(queues) {
27342
- queues.command("list", { isDefault: true }).description("List queues for your team").option("--limit <n>", `page size (${MIN_LIMIT12}-${MAX_LIMIT12})`).option("--offset <n>", "number of queues to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
27813
+ queues.command("list", { isDefault: true }).description("List queues for your team").option("--limit <n>", `page size (${MIN_LIMIT13}-${MAX_LIMIT13})`).option("--offset <n>", "number of queues to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
27343
27814
  const limit = parseLimit(options.limit, {
27344
- defaultValue: DEFAULT_LIMIT12,
27345
- min: MIN_LIMIT12,
27346
- max: MAX_LIMIT12
27815
+ defaultValue: DEFAULT_LIMIT13,
27816
+ min: MIN_LIMIT13,
27817
+ max: MAX_LIMIT13
27347
27818
  });
27348
27819
  const offset = parseOffset(options.offset);
27349
27820
  const config = await requireAuthenticatedConfig(this);
@@ -27376,7 +27847,7 @@ function registerQueuesList(queues) {
27376
27847
  console.log("No queues found.");
27377
27848
  return;
27378
27849
  }
27379
- console.log(renderTable(TABLE_COLUMNS32, response.queues));
27850
+ console.log(renderTable(TABLE_COLUMNS33, response.queues));
27380
27851
  const resolvedOffset = response.offset ?? offset;
27381
27852
  const total = response.total ?? null;
27382
27853
  const summary = total === null ? `Showing ${response.queues.length} \xB7 offset ${resolvedOffset}` : `Showing ${response.queues.length} of ${total} \xB7 offset ${resolvedOffset}`;
@@ -27634,7 +28105,7 @@ function registerRevisionLoginsDetach(revisionLogins) {
27634
28105
  __name(registerRevisionLoginsDetach, "registerRevisionLoginsDetach");
27635
28106
 
27636
28107
  // src/commands/revision-logins/list.ts
27637
- var TABLE_COLUMNS33 = [
28108
+ var TABLE_COLUMNS34 = [
27638
28109
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
27639
28110
  { header: "DOMAIN", cell: /* @__PURE__ */ __name((row) => row.domain, "cell") },
27640
28111
  {
@@ -27670,7 +28141,7 @@ function registerRevisionLoginsList(revisionLogins) {
27670
28141
  console.log("No logins attached to this revision.");
27671
28142
  return;
27672
28143
  }
27673
- console.log(renderTable(TABLE_COLUMNS33, rows));
28144
+ console.log(renderTable(TABLE_COLUMNS34, rows));
27674
28145
  console.log(`Showing ${rows.length}`);
27675
28146
  }, "listAction"));
27676
28147
  }
@@ -27743,7 +28214,7 @@ function registerRevisionSecretsDetach(revisionSecrets) {
27743
28214
  __name(registerRevisionSecretsDetach, "registerRevisionSecretsDetach");
27744
28215
 
27745
28216
  // src/commands/revision-secrets/list.ts
27746
- var TABLE_COLUMNS34 = [
28217
+ var TABLE_COLUMNS35 = [
27747
28218
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
27748
28219
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
27749
28220
  {
@@ -27781,7 +28252,7 @@ function registerRevisionSecretsList(revisionSecrets) {
27781
28252
  console.log("No secrets attached to this revision.");
27782
28253
  return;
27783
28254
  }
27784
- console.log(renderTable(TABLE_COLUMNS34, rows));
28255
+ console.log(renderTable(TABLE_COLUMNS35, rows));
27785
28256
  console.log(`Showing ${rows.length}`);
27786
28257
  }, "listAction"));
27787
28258
  }
@@ -27797,91 +28268,91 @@ function registerRevisionSecrets(program) {
27797
28268
  __name(registerRevisionSecrets, "registerRevisionSecrets");
27798
28269
 
27799
28270
  // src/api/run-schemas.ts
27800
- import { z as z105 } from "zod";
27801
- var publicRunSchema = z105.object({
27802
- id: z105.string(),
27803
- agent_id: z105.string(),
27804
- build_id: z105.string(),
27805
- status: z105.string(),
27806
- source: z105.string().nullish(),
27807
- sandbox_id: z105.string().nullish(),
27808
- started_at: z105.string().nullish(),
27809
- completed_at: z105.string().nullish(),
27810
- created_at: z105.string(),
27811
- updated_at: z105.string().nullish(),
27812
- human_in_the_loop_enabled: z105.boolean().nullish()
27813
- });
27814
- var startRunResponseSchema = z105.object({
28271
+ import { z as z106 } from "zod";
28272
+ var publicRunSchema = z106.object({
28273
+ id: z106.string(),
28274
+ agent_id: z106.string(),
28275
+ build_id: z106.string(),
28276
+ status: z106.string(),
28277
+ source: z106.string().nullish(),
28278
+ sandbox_id: z106.string().nullish(),
28279
+ started_at: z106.string().nullish(),
28280
+ completed_at: z106.string().nullish(),
28281
+ created_at: z106.string(),
28282
+ updated_at: z106.string().nullish(),
28283
+ human_in_the_loop_enabled: z106.boolean().nullish()
28284
+ });
28285
+ var startRunResponseSchema = z106.object({
27815
28286
  run: publicRunSchema
27816
28287
  });
27817
- var questionOptionSchema = z105.object({
27818
- label: z105.string(),
27819
- description: z105.string().nullish()
27820
- });
27821
- var questionSchema = z105.object({
27822
- question: z105.string(),
27823
- header: z105.string().nullish(),
27824
- options: z105.array(questionOptionSchema).nullish(),
27825
- multi_select: z105.boolean().nullish()
27826
- });
27827
- var pendingHumanRequestSchema = z105.object({
27828
- id: z105.string(),
27829
- title: z105.string(),
27830
- description: z105.string().nullish(),
27831
- created_at: z105.string(),
27832
- type: z105.string(),
27833
- questions: z105.array(questionSchema).nullish()
27834
- });
27835
- var getRunResponseSchema = z105.object({
28288
+ var questionOptionSchema = z106.object({
28289
+ label: z106.string(),
28290
+ description: z106.string().nullish()
28291
+ });
28292
+ var questionSchema = z106.object({
28293
+ question: z106.string(),
28294
+ header: z106.string().nullish(),
28295
+ options: z106.array(questionOptionSchema).nullish(),
28296
+ multi_select: z106.boolean().nullish()
28297
+ });
28298
+ var pendingHumanRequestSchema = z106.object({
28299
+ id: z106.string(),
28300
+ title: z106.string(),
28301
+ description: z106.string().nullish(),
28302
+ created_at: z106.string(),
28303
+ type: z106.string(),
28304
+ questions: z106.array(questionSchema).nullish()
28305
+ });
28306
+ var getRunResponseSchema = z106.object({
27836
28307
  run: publicRunSchema.nullable(),
27837
28308
  pending_human_request: pendingHumanRequestSchema.nullish()
27838
28309
  });
27839
- var stopRunResponseSchema = z105.object({
27840
- success: z105.boolean(),
27841
- message: z105.string().nullish()
27842
- });
27843
- var runMessageSchema = z105.object({
27844
- id: z105.string(),
27845
- type: z105.string(),
27846
- role: z105.string(),
27847
- timestamp: z105.string(),
27848
- text_content: z105.string().nullish(),
27849
- tool_call: z105.object({
27850
- id: z105.string(),
27851
- name: z105.string(),
27852
- arguments: z105.record(z105.string(), z105.unknown()).nullish()
28310
+ var stopRunResponseSchema = z106.object({
28311
+ success: z106.boolean(),
28312
+ message: z106.string().nullish()
28313
+ });
28314
+ var runMessageSchema = z106.object({
28315
+ id: z106.string(),
28316
+ type: z106.string(),
28317
+ role: z106.string(),
28318
+ timestamp: z106.string(),
28319
+ text_content: z106.string().nullish(),
28320
+ tool_call: z106.object({
28321
+ id: z106.string(),
28322
+ name: z106.string(),
28323
+ arguments: z106.record(z106.string(), z106.unknown()).nullish()
27853
28324
  }).nullish(),
27854
- tool_result: z105.object({
27855
- tool_call_id: z105.string(),
27856
- result: z105.unknown().nullish(),
27857
- error: z105.string().nullish()
28325
+ tool_result: z106.object({
28326
+ tool_call_id: z106.string(),
28327
+ result: z106.unknown().nullish(),
28328
+ error: z106.string().nullish()
27858
28329
  }).nullish()
27859
28330
  });
27860
- var listRunMessagesResponseSchema = z105.object({
27861
- messages: z105.array(runMessageSchema),
27862
- total: z105.number().nullish(),
27863
- limit: z105.number().nullish(),
27864
- offset: z105.number().nullish()
28331
+ var listRunMessagesResponseSchema = z106.object({
28332
+ messages: z106.array(runMessageSchema),
28333
+ total: z106.number().nullish(),
28334
+ limit: z106.number().nullish(),
28335
+ offset: z106.number().nullish()
27865
28336
  });
27866
- var postedMessageSchema = z105.object({
27867
- id: z105.string(),
27868
- type: z105.string(),
27869
- role: z105.string(),
27870
- timestamp: z105.string(),
27871
- text_content: z105.string()
28337
+ var postedMessageSchema = z106.object({
28338
+ id: z106.string(),
28339
+ type: z106.string(),
28340
+ role: z106.string(),
28341
+ timestamp: z106.string(),
28342
+ text_content: z106.string()
27872
28343
  });
27873
- var postRunMessageResponseSchema = z105.object({
28344
+ var postRunMessageResponseSchema = z106.object({
27874
28345
  message: postedMessageSchema
27875
28346
  });
27876
- var respondHumanRequestResponseSchema = z105.object({
27877
- human_request: z105.object({
27878
- id: z105.string(),
27879
- run_id: z105.string(),
27880
- title: z105.string(),
27881
- description: z105.string().nullish(),
27882
- response: z105.string().nullish(),
27883
- responded_at: z105.string().nullish(),
27884
- created_at: z105.string()
28347
+ var respondHumanRequestResponseSchema = z106.object({
28348
+ human_request: z106.object({
28349
+ id: z106.string(),
28350
+ run_id: z106.string(),
28351
+ title: z106.string(),
28352
+ description: z106.string().nullish(),
28353
+ response: z106.string().nullish(),
28354
+ responded_at: z106.string().nullish(),
28355
+ created_at: z106.string()
27885
28356
  })
27886
28357
  });
27887
28358
 
@@ -28026,13 +28497,13 @@ function registerRunsGet(runs) {
28026
28497
  __name(registerRunsGet, "registerRunsGet");
28027
28498
 
28028
28499
  // src/commands/runs/list.ts
28029
- var DEFAULT_LIMIT13 = 20;
28030
- var MIN_LIMIT13 = 1;
28031
- var MAX_LIMIT13 = 100;
28500
+ var DEFAULT_LIMIT14 = 20;
28501
+ var MIN_LIMIT14 = 1;
28502
+ var MAX_LIMIT14 = 100;
28032
28503
  var SORT_ORDERS2 = ["asc", "desc"];
28033
28504
  var HAS_ISSUES_VALUES = ["true", "false"];
28034
28505
  var TITLE_PREVIEW_WIDTH = 50;
28035
- var TABLE_COLUMNS35 = [
28506
+ var TABLE_COLUMNS36 = [
28036
28507
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
28037
28508
  { header: "RUN#", cell: /* @__PURE__ */ __name((row) => String(row.run_number), "cell") },
28038
28509
  { header: "STATUS", cell: /* @__PURE__ */ __name((row) => row.status, "cell") },
@@ -28056,7 +28527,7 @@ function isHasIssuesValue(value) {
28056
28527
  }
28057
28528
  __name(isHasIssuesValue, "isHasIssuesValue");
28058
28529
  function registerRunsList(runs) {
28059
- runs.command("list").description("List agent runs for your team").option("--limit <n>", `page size (${MIN_LIMIT13}-${MAX_LIMIT13})`).option("--offset <n>", "number of runs to skip").option("--sort-order <order>", `sort direction (${SORT_ORDERS2.join("|")})`).option(
28530
+ runs.command("list").description("List agent runs for your team").option("--limit <n>", `page size (${MIN_LIMIT14}-${MAX_LIMIT14})`).option("--offset <n>", "number of runs to skip").option("--sort-order <order>", `sort direction (${SORT_ORDERS2.join("|")})`).option(
28060
28531
  "--status <status>",
28061
28532
  "filter by status (e.g. running, completed, failed, waiting, interrupted, stopped, needs_attention)"
28062
28533
  ).option("--agent <id>", "filter by agent ID").option("--user <id>", "filter by user ID").option("--case-queue <id>", "filter by queue ID").option("--source <source>", "filter by source").option("--search <query>", "free-text search across runs").option(
@@ -28064,9 +28535,9 @@ function registerRunsList(runs) {
28064
28535
  `show only runs with (or without) issues (${HAS_ISSUES_VALUES.join("|")})`
28065
28536
  ).option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
28066
28537
  const limit = parseLimit(options.limit, {
28067
- defaultValue: DEFAULT_LIMIT13,
28068
- min: MIN_LIMIT13,
28069
- max: MAX_LIMIT13
28538
+ defaultValue: DEFAULT_LIMIT14,
28539
+ min: MIN_LIMIT14,
28540
+ max: MAX_LIMIT14
28070
28541
  });
28071
28542
  const offset = parseOffset(options.offset);
28072
28543
  if (options.sortOrder !== void 0 && !isSortOrder(options.sortOrder)) {
@@ -28133,7 +28604,7 @@ function registerRunsList(runs) {
28133
28604
  console.log("No runs found.");
28134
28605
  return;
28135
28606
  }
28136
- console.log(renderTable(TABLE_COLUMNS35, response.data));
28607
+ console.log(renderTable(TABLE_COLUMNS36, response.data));
28137
28608
  console.log(
28138
28609
  `Showing ${response.data.length} of ${response.total} \xB7 offset ${offset}`
28139
28610
  );
@@ -28239,11 +28710,11 @@ function getContent(msg) {
28239
28710
  __name(getContent, "getContent");
28240
28711
 
28241
28712
  // src/commands/runs/messages.ts
28242
- var DEFAULT_LIMIT14 = 20;
28243
- var MIN_LIMIT14 = 1;
28244
- var MAX_LIMIT14 = 50;
28713
+ var DEFAULT_LIMIT15 = 20;
28714
+ var MIN_LIMIT15 = 1;
28715
+ var MAX_LIMIT15 = 50;
28245
28716
  var TEXT_PREVIEW_WIDTH2 = 60;
28246
- var TABLE_COLUMNS36 = [
28717
+ var TABLE_COLUMNS37 = [
28247
28718
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
28248
28719
  { header: "ROLE", cell: /* @__PURE__ */ __name((row) => row.role, "cell") },
28249
28720
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
@@ -28268,7 +28739,7 @@ function previewCell(row) {
28268
28739
  }
28269
28740
  __name(previewCell, "previewCell");
28270
28741
  function registerRunsMessages(runs) {
28271
- runs.command("messages <id>").description("List messages for an agent run").option("--limit <n>", `page size (${MIN_LIMIT14}-${MAX_LIMIT14})`).option("--offset <n>", "number of messages to skip").option("--follow", "poll for new messages until the job completes").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function messagesAction(id, options) {
28742
+ runs.command("messages <id>").description("List messages for an agent run").option("--limit <n>", `page size (${MIN_LIMIT15}-${MAX_LIMIT15})`).option("--offset <n>", "number of messages to skip").option("--follow", "poll for new messages until the job completes").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function messagesAction(id, options) {
28272
28743
  const offset = parseOffset(options.offset);
28273
28744
  const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
28274
28745
  if (options.follow) {
@@ -28279,9 +28750,9 @@ function registerRunsMessages(runs) {
28279
28750
  return;
28280
28751
  }
28281
28752
  const limit = parseLimit(options.limit, {
28282
- defaultValue: DEFAULT_LIMIT14,
28283
- min: MIN_LIMIT14,
28284
- max: MAX_LIMIT14
28753
+ defaultValue: DEFAULT_LIMIT15,
28754
+ min: MIN_LIMIT15,
28755
+ max: MAX_LIMIT15
28285
28756
  });
28286
28757
  const searchParams = new URLSearchParams();
28287
28758
  searchParams.append("limit", String(limit));
@@ -28308,7 +28779,7 @@ function registerRunsMessages(runs) {
28308
28779
  console.log("No messages found.");
28309
28780
  return;
28310
28781
  }
28311
- console.log(renderTable(TABLE_COLUMNS36, response.messages));
28782
+ console.log(renderTable(TABLE_COLUMNS37, response.messages));
28312
28783
  const resolvedOffset = response.offset ?? offset;
28313
28784
  const summary = response.total === null || response.total === void 0 ? `Showing ${response.messages.length} \xB7 offset ${resolvedOffset}` : `Showing ${response.messages.length} of ${response.total} \xB7 offset ${resolvedOffset}`;
28314
28785
  console.log(summary);
@@ -28576,28 +29047,28 @@ function registerRuns(program) {
28576
29047
  __name(registerRuns, "registerRuns");
28577
29048
 
28578
29049
  // src/api/sandbox-schemas.ts
28579
- import { z as z106 } from "zod";
28580
- var createSandboxResponseSchema = z106.object({
28581
- sandbox_id: z106.string(),
28582
- expires_at: z106.string()
29050
+ import { z as z107 } from "zod";
29051
+ var createSandboxResponseSchema = z107.object({
29052
+ sandbox_id: z107.string(),
29053
+ expires_at: z107.string()
28583
29054
  });
28584
- var createSandboxUploadUrlResponseSchema = z106.object({
28585
- upload_url: z106.string(),
28586
- path: z106.string(),
28587
- expires_in_seconds: z106.number()
29055
+ var createSandboxUploadUrlResponseSchema = z107.object({
29056
+ upload_url: z107.string(),
29057
+ path: z107.string(),
29058
+ expires_in_seconds: z107.number()
28588
29059
  });
28589
- var sandboxFileSchema = z106.object({
28590
- name: z106.string(),
28591
- path: z106.string(),
28592
- type: z106.enum(["file", "dir"]),
28593
- size_bytes: z106.number()
29060
+ var sandboxFileSchema = z107.object({
29061
+ name: z107.string(),
29062
+ path: z107.string(),
29063
+ type: z107.enum(["file", "dir"]),
29064
+ size_bytes: z107.number()
28594
29065
  });
28595
- var listSandboxFilesResponseSchema = z106.object({
28596
- files: z106.array(sandboxFileSchema)
29066
+ var listSandboxFilesResponseSchema = z107.object({
29067
+ files: z107.array(sandboxFileSchema)
28597
29068
  });
28598
- var uploadSandboxFileResponseSchema = z106.object({
28599
- path: z106.string(),
28600
- size_bytes: z106.number()
29069
+ var uploadSandboxFileResponseSchema = z107.object({
29070
+ path: z107.string(),
29071
+ size_bytes: z107.number()
28601
29072
  });
28602
29073
  var DEFAULT_SANDBOX_FILES_PATH = "/workspace";
28603
29074
 
@@ -28634,7 +29105,7 @@ function registerSandboxesCreate(sandboxes) {
28634
29105
  __name(registerSandboxesCreate, "registerSandboxesCreate");
28635
29106
 
28636
29107
  // src/commands/sandboxes/files.ts
28637
- var TABLE_COLUMNS37 = [
29108
+ var TABLE_COLUMNS38 = [
28638
29109
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
28639
29110
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
28640
29111
  { header: "PATH", cell: /* @__PURE__ */ __name((row) => row.path, "cell") },
@@ -28672,7 +29143,7 @@ function registerSandboxesFiles(sandboxes) {
28672
29143
  console.log("No files found.");
28673
29144
  return;
28674
29145
  }
28675
- console.log(renderTable(TABLE_COLUMNS37, files));
29146
+ console.log(renderTable(TABLE_COLUMNS38, files));
28676
29147
  console.log(`Showing ${files.length}`);
28677
29148
  }, "filesAction"));
28678
29149
  }
@@ -29017,7 +29488,7 @@ function registerSecretsGet(secrets) {
29017
29488
  __name(registerSecretsGet, "registerSecretsGet");
29018
29489
 
29019
29490
  // src/commands/secrets/list.ts
29020
- var TABLE_COLUMNS38 = [
29491
+ var TABLE_COLUMNS39 = [
29021
29492
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
29022
29493
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
29023
29494
  {
@@ -29061,7 +29532,7 @@ function registerSecretsList(secrets) {
29061
29532
  console.log("No secrets found.");
29062
29533
  return;
29063
29534
  }
29064
- console.log(renderTable(TABLE_COLUMNS38, rows));
29535
+ console.log(renderTable(TABLE_COLUMNS39, rows));
29065
29536
  console.log(`Showing ${rows.length}`);
29066
29537
  }, "listAction"));
29067
29538
  }
@@ -29172,7 +29643,7 @@ function registerSecrets(program) {
29172
29643
  __name(registerSecrets, "registerSecrets");
29173
29644
 
29174
29645
  // src/commands/skills/assignments.ts
29175
- var TABLE_COLUMNS39 = [
29646
+ var TABLE_COLUMNS40 = [
29176
29647
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
29177
29648
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") }
29178
29649
  ];
@@ -29200,7 +29671,7 @@ function registerSkillsAssignments(skills) {
29200
29671
  console.log("No agents use this skill.");
29201
29672
  return;
29202
29673
  }
29203
- console.log(renderTable(TABLE_COLUMNS39, assignments));
29674
+ console.log(renderTable(TABLE_COLUMNS40, assignments));
29204
29675
  console.log(`Showing ${assignments.length} of ${total}`);
29205
29676
  }, "assignmentsAction"));
29206
29677
  }
@@ -29208,13 +29679,13 @@ __name(registerSkillsAssignments, "registerSkillsAssignments");
29208
29679
 
29209
29680
  // src/commands/skills/create.ts
29210
29681
  import { readFileSync as readFileSync5 } from "node:fs";
29211
- import { z as z107 } from "zod";
29212
- var createSkillResponseSchema = z107.object({
29213
- skill: z107.object({
29214
- id: z107.string(),
29215
- name: z107.string(),
29216
- description: z107.string(),
29217
- team_id: z107.string()
29682
+ import { z as z108 } from "zod";
29683
+ var createSkillResponseSchema = z108.object({
29684
+ skill: z108.object({
29685
+ id: z108.string(),
29686
+ name: z108.string(),
29687
+ description: z108.string(),
29688
+ team_id: z108.string()
29218
29689
  })
29219
29690
  });
29220
29691
  function registerSkillsCreate(skills) {
@@ -29482,7 +29953,7 @@ function readContent2(options) {
29482
29953
  __name(readContent2, "readContent");
29483
29954
 
29484
29955
  // src/commands/skills/files.ts
29485
- var TABLE_COLUMNS40 = [
29956
+ var TABLE_COLUMNS41 = [
29486
29957
  { header: "PATH", cell: /* @__PURE__ */ __name((row) => row.path, "cell") },
29487
29958
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name, "cell") },
29488
29959
  {
@@ -29521,7 +29992,7 @@ function registerSkillsFiles(skills) {
29521
29992
  console.log("No files found.");
29522
29993
  return;
29523
29994
  }
29524
- console.log(renderTable(TABLE_COLUMNS40, parsed.data.files));
29995
+ console.log(renderTable(TABLE_COLUMNS41, parsed.data.files));
29525
29996
  console.log(`Showing ${parsed.data.files.length}`);
29526
29997
  }, "filesAction"));
29527
29998
  }
@@ -29578,13 +30049,13 @@ function readExistingContent(source) {
29578
30049
  __name(readExistingContent, "readExistingContent");
29579
30050
 
29580
30051
  // src/commands/skills/install.ts
29581
- import { z as z108 } from "zod";
29582
- var installSkillResponseSchema = z108.object({
29583
- skill: z108.object({
29584
- id: z108.string(),
29585
- name: z108.string(),
29586
- description: z108.string(),
29587
- team_id: z108.string()
30052
+ import { z as z109 } from "zod";
30053
+ var installSkillResponseSchema = z109.object({
30054
+ skill: z109.object({
30055
+ id: z109.string(),
30056
+ name: z109.string(),
30057
+ description: z109.string(),
30058
+ team_id: z109.string()
29588
30059
  })
29589
30060
  });
29590
30061
  function registerSkillsInstall(skills) {
@@ -29774,13 +30245,13 @@ __name(registerSkillsSystem, "registerSkillsSystem");
29774
30245
  // src/commands/skills/upload.ts
29775
30246
  import { readFile as readFile9, stat as stat2 } from "node:fs/promises";
29776
30247
  import { basename as basename3 } from "node:path";
29777
- import { z as z109 } from "zod";
29778
- var uploadSkillResponseSchema = z109.object({
29779
- skill: z109.object({
29780
- id: z109.string(),
29781
- name: z109.string(),
29782
- description: z109.string(),
29783
- team_id: z109.string()
30248
+ import { z as z110 } from "zod";
30249
+ var uploadSkillResponseSchema = z110.object({
30250
+ skill: z110.object({
30251
+ id: z110.string(),
30252
+ name: z110.string(),
30253
+ description: z110.string(),
30254
+ team_id: z110.string()
29784
30255
  })
29785
30256
  });
29786
30257
  function registerSkillsUpload(skills) {
@@ -29899,12 +30370,12 @@ function registerSuggestionsConsume(suggestions) {
29899
30370
  __name(registerSuggestionsConsume, "registerSuggestionsConsume");
29900
30371
 
29901
30372
  // src/commands/suggestions/list.ts
29902
- var DEFAULT_LIMIT15 = 100;
29903
- var MIN_LIMIT15 = 1;
29904
- var MAX_LIMIT15 = 250;
30373
+ var DEFAULT_LIMIT16 = 100;
30374
+ var MIN_LIMIT16 = 1;
30375
+ var MAX_LIMIT16 = 250;
29905
30376
  var STATUS_FILTERS = ["pending", "history"];
29906
30377
  var TITLE_PREVIEW_WIDTH2 = 50;
29907
- var TABLE_COLUMNS41 = [
30378
+ var TABLE_COLUMNS42 = [
29908
30379
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
29909
30380
  { header: "TYPE", cell: /* @__PURE__ */ __name((row) => row.type, "cell") },
29910
30381
  { header: "STATUS", cell: /* @__PURE__ */ __name((row) => row.status, "cell") },
@@ -29925,11 +30396,11 @@ function registerSuggestionsList(suggestions) {
29925
30396
  ).option(
29926
30397
  "--status <filter>",
29927
30398
  `which inbox to show (${STATUS_FILTERS.join("|")}, default: pending)`
29928
- ).option("--limit <n>", `page size (${MIN_LIMIT15}-${MAX_LIMIT15})`).option("--offset <n>", "number of suggestions to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(agentId, options) {
30399
+ ).option("--limit <n>", `page size (${MIN_LIMIT16}-${MAX_LIMIT16})`).option("--offset <n>", "number of suggestions to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(agentId, options) {
29929
30400
  const limit = parseLimit(options.limit, {
29930
- defaultValue: DEFAULT_LIMIT15,
29931
- min: MIN_LIMIT15,
29932
- max: MAX_LIMIT15
30401
+ defaultValue: DEFAULT_LIMIT16,
30402
+ min: MIN_LIMIT16,
30403
+ max: MAX_LIMIT16
29933
30404
  });
29934
30405
  const offset = parseOffset(options.offset);
29935
30406
  if (options.status !== void 0 && !isStatusFilter(options.status)) {
@@ -29967,7 +30438,7 @@ function registerSuggestionsList(suggestions) {
29967
30438
  console.log(`Pending total: ${pendingCount}`);
29968
30439
  return;
29969
30440
  }
29970
- console.log(renderTable(TABLE_COLUMNS41, data));
30441
+ console.log(renderTable(TABLE_COLUMNS42, data));
29971
30442
  console.log(
29972
30443
  `Showing ${data.length} \xB7 offset ${offset} \xB7 pending total ${pendingCount}`
29973
30444
  );
@@ -30091,10 +30562,10 @@ function registerTeamGet(team) {
30091
30562
  __name(registerTeamGet, "registerTeamGet");
30092
30563
 
30093
30564
  // src/commands/team/members.ts
30094
- var DEFAULT_LIMIT16 = 50;
30095
- var MIN_LIMIT16 = 1;
30096
- var MAX_LIMIT16 = 100;
30097
- var TABLE_COLUMNS42 = [
30565
+ var DEFAULT_LIMIT17 = 50;
30566
+ var MIN_LIMIT17 = 1;
30567
+ var MAX_LIMIT17 = 100;
30568
+ var TABLE_COLUMNS43 = [
30098
30569
  { header: "ID", cell: /* @__PURE__ */ __name((row) => row.id, "cell") },
30099
30570
  { header: "NAME", cell: /* @__PURE__ */ __name((row) => row.name ?? "", "cell") },
30100
30571
  { header: "EMAIL", cell: /* @__PURE__ */ __name((row) => row.email, "cell") },
@@ -30108,11 +30579,11 @@ function registerTeamMembers(team) {
30108
30579
  team.command("members").description("List members of a team").option(
30109
30580
  "--team <id>",
30110
30581
  "team ID (defaults to the team scoped to your credentials)"
30111
- ).option("--limit <n>", `page size (${MIN_LIMIT16}-${MAX_LIMIT16})`).option("--offset <n>", "number of members to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function membersAction(options) {
30582
+ ).option("--limit <n>", `page size (${MIN_LIMIT17}-${MAX_LIMIT17})`).option("--offset <n>", "number of members to skip").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function membersAction(options) {
30112
30583
  const limit = parseLimit(options.limit, {
30113
- defaultValue: DEFAULT_LIMIT16,
30114
- min: MIN_LIMIT16,
30115
- max: MAX_LIMIT16
30584
+ defaultValue: DEFAULT_LIMIT17,
30585
+ min: MIN_LIMIT17,
30586
+ max: MAX_LIMIT17
30116
30587
  });
30117
30588
  const offset = parseOffset(options.offset);
30118
30589
  const config = await requireAuthenticatedConfig(this);
@@ -30145,7 +30616,7 @@ function registerTeamMembers(team) {
30145
30616
  console.log("No members found.");
30146
30617
  return;
30147
30618
  }
30148
- console.log(renderTable(TABLE_COLUMNS42, response.members));
30619
+ console.log(renderTable(TABLE_COLUMNS43, response.members));
30149
30620
  console.log(
30150
30621
  `Showing ${response.members.length} of ${response.total} \xB7 offset ${response.offset}`
30151
30622
  );
@@ -30154,9 +30625,9 @@ function registerTeamMembers(team) {
30154
30625
  __name(registerTeamMembers, "registerTeamMembers");
30155
30626
 
30156
30627
  // src/commands/team/use.ts
30157
- import { z as z110 } from "zod";
30628
+ import { z as z111 } from "zod";
30158
30629
  var TEAM_ID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
30159
- var teamIdSchema = z110.string().regex(TEAM_ID_SHAPE);
30630
+ var teamIdSchema = z111.string().regex(TEAM_ID_SHAPE);
30160
30631
  function registerTeamUse(team) {
30161
30632
  team.command("use <team-id>").description(
30162
30633
  "Set the default team for the active OAuth profile (overridable per-command via --team or DUVO_TEAM_ID)"
@@ -30242,14 +30713,14 @@ function registerTeam(program) {
30242
30713
  __name(registerTeam, "registerTeam");
30243
30714
 
30244
30715
  // src/commands/teams/list.ts
30245
- import { z as z111 } from "zod";
30246
- var teamApiSchema2 = z111.object({
30247
- id: z111.string(),
30248
- name: z111.string(),
30249
- organization_id: z111.string().nullable()
30716
+ import { z as z112 } from "zod";
30717
+ var teamApiSchema2 = z112.object({
30718
+ id: z112.string(),
30719
+ name: z112.string(),
30720
+ organization_id: z112.string().nullable()
30250
30721
  });
30251
- var listMyTeamsResponseSchema3 = z111.object({
30252
- teams: z111.array(teamApiSchema2)
30722
+ var listMyTeamsResponseSchema3 = z112.object({
30723
+ teams: z112.array(teamApiSchema2)
30253
30724
  });
30254
30725
  function registerTeamsList(teams) {
30255
30726
  teams.command("list", { isDefault: true }).description("List every team you can act on").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function listAction(options) {
@@ -30292,21 +30763,21 @@ function registerTeamsList(teams) {
30292
30763
  __name(registerTeamsList, "registerTeamsList");
30293
30764
 
30294
30765
  // src/commands/teams/org-insights.ts
30295
- import { z as z112 } from "zod";
30296
- var headlineSchema = z112.object({
30297
- total_runs: z112.number(),
30298
- completed_runs: z112.number(),
30299
- failed_runs: z112.number(),
30300
- success_rate: z112.number().nullable(),
30301
- active_agents: z112.number(),
30302
- active_users: z112.number(),
30303
- start_date: z112.string(),
30304
- end_date: z112.string(),
30305
- truncated: z112.boolean(),
30306
- aggregated_teams: z112.number(),
30307
- total_teams: z112.number()
30308
- });
30309
- var orgInsightsHeadlineResponseSchema = z112.object({
30766
+ import { z as z113 } from "zod";
30767
+ var headlineSchema = z113.object({
30768
+ total_runs: z113.number(),
30769
+ completed_runs: z113.number(),
30770
+ failed_runs: z113.number(),
30771
+ success_rate: z113.number().nullable(),
30772
+ active_agents: z113.number(),
30773
+ active_users: z113.number(),
30774
+ start_date: z113.string(),
30775
+ end_date: z113.string(),
30776
+ truncated: z113.boolean(),
30777
+ aggregated_teams: z113.number(),
30778
+ total_teams: z113.number()
30779
+ });
30780
+ var orgInsightsHeadlineResponseSchema = z113.object({
30310
30781
  headline: headlineSchema
30311
30782
  });
30312
30783
  function formatRate(rate) {
@@ -30374,26 +30845,26 @@ function registerTeamsOrgInsights(teams) {
30374
30845
  __name(registerTeamsOrgInsights, "registerTeamsOrgInsights");
30375
30846
 
30376
30847
  // src/commands/teams/org-metrics.ts
30377
- import { z as z113 } from "zod";
30378
- var teamMetricSchema = z113.object({
30379
- team_id: z113.string(),
30380
- team_name: z113.string(),
30381
- is_deleted: z113.boolean(),
30382
- member_count: z113.number(),
30383
- assignment_count: z113.number(),
30384
- scheduled_job_count: z113.number(),
30385
- total_jobs: z113.number(),
30386
- completed_jobs: z113.number(),
30387
- failed_jobs: z113.number(),
30388
- total_runs: z113.number()
30389
- });
30390
- var orgInsightsMetricsResponseSchema = z113.object({
30391
- teams: z113.array(teamMetricSchema),
30392
- start_date: z113.string(),
30393
- end_date: z113.string(),
30394
- truncated: z113.boolean(),
30395
- total_teams: z113.number(),
30396
- org_member_count: z113.number()
30848
+ import { z as z114 } from "zod";
30849
+ var teamMetricSchema = z114.object({
30850
+ team_id: z114.string(),
30851
+ team_name: z114.string(),
30852
+ is_deleted: z114.boolean(),
30853
+ member_count: z114.number(),
30854
+ assignment_count: z114.number(),
30855
+ scheduled_job_count: z114.number(),
30856
+ total_jobs: z114.number(),
30857
+ completed_jobs: z114.number(),
30858
+ failed_jobs: z114.number(),
30859
+ total_runs: z114.number()
30860
+ });
30861
+ var orgInsightsMetricsResponseSchema = z114.object({
30862
+ teams: z114.array(teamMetricSchema),
30863
+ start_date: z114.string(),
30864
+ end_date: z114.string(),
30865
+ truncated: z114.boolean(),
30866
+ total_teams: z114.number(),
30867
+ org_member_count: z114.number()
30397
30868
  });
30398
30869
  function registerTeamsOrgMetrics(teams) {
30399
30870
  teams.command("org-metrics <org-id>").description("Show per-team run metrics across an organization").option("--start-date <date>", "window start (ISO 8601, default 7d ago)").option("--end-date <date>", "window end (ISO 8601, default now)").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function orgMetricsAction(orgId, options) {
@@ -30456,20 +30927,20 @@ ${total_teams} teams${suffix} \xB7 ${org_member_count} org members`
30456
30927
  __name(registerTeamsOrgMetrics, "registerTeamsOrgMetrics");
30457
30928
 
30458
30929
  // src/commands/teams/org-usage.ts
30459
- import { z as z114 } from "zod";
30930
+ import { z as z115 } from "zod";
30460
30931
  var GRANULARITIES = ["day", "week", "month"];
30461
30932
  var DEFAULT_LOOKBACK_MS = 30 * 24 * 60 * 60 * 1e3;
30462
- var bucketSchema = z114.object({
30463
- period: z114.string(),
30464
- total_runs: z114.number(),
30465
- scheduled_runs: z114.number(),
30466
- on_demand_runs: z114.number()
30467
- });
30468
- var usageChartResponseSchema = z114.object({
30469
- buckets: z114.array(bucketSchema),
30470
- granularity: z114.enum(GRANULARITIES),
30471
- truncated: z114.boolean(),
30472
- total_teams: z114.number()
30933
+ var bucketSchema = z115.object({
30934
+ period: z115.string(),
30935
+ total_runs: z115.number(),
30936
+ scheduled_runs: z115.number(),
30937
+ on_demand_runs: z115.number()
30938
+ });
30939
+ var usageChartResponseSchema = z115.object({
30940
+ buckets: z115.array(bucketSchema),
30941
+ granularity: z115.enum(GRANULARITIES),
30942
+ truncated: z115.boolean(),
30943
+ total_teams: z115.number()
30473
30944
  });
30474
30945
  function registerTeamsOrgUsage(teams) {
30475
30946
  teams.command("org-usage <org-id>").description("Show org-wide run volume over time (scheduled vs on-demand)").option("--start-date <date>", "window start (ISO 8601, default 30d ago)").option("--end-date <date>", "window end (ISO 8601, default now)").option(
@@ -30528,17 +30999,17 @@ function registerTeamsOrgUsage(teams) {
30528
30999
  __name(registerTeamsOrgUsage, "registerTeamsOrgUsage");
30529
31000
 
30530
31001
  // src/commands/teams/org.ts
30531
- import { z as z115 } from "zod";
30532
- var orgTeamSchema = z115.object({
30533
- id: z115.string(),
30534
- name: z115.string(),
30535
- userIsMember: z115.boolean(),
30536
- userRole: z115.string().nullable(),
30537
- memberCount: z115.number()
30538
- });
30539
- var listOrgTeamsResponseSchema = z115.object({
30540
- teams: z115.array(orgTeamSchema),
30541
- total: z115.number()
31002
+ import { z as z116 } from "zod";
31003
+ var orgTeamSchema = z116.object({
31004
+ id: z116.string(),
31005
+ name: z116.string(),
31006
+ userIsMember: z116.boolean(),
31007
+ userRole: z116.string().nullable(),
31008
+ memberCount: z116.number()
31009
+ });
31010
+ var listOrgTeamsResponseSchema = z116.object({
31011
+ teams: z116.array(orgTeamSchema),
31012
+ total: z116.number()
30542
31013
  });
30543
31014
  function registerTeamsOrg(teams) {
30544
31015
  teams.command("org <org-id>").description("List all teams in an organization you belong to").option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function orgAction(orgId, options) {
@@ -30643,7 +31114,7 @@ __name(resolveActiveTeamId, "resolveActiveTeamId");
30643
31114
  var version = resolveVersion();
30644
31115
  function resolveVersion() {
30645
31116
  if (true) {
30646
- return "1.21.0";
31117
+ return "1.24.0";
30647
31118
  }
30648
31119
  const packageJsonPath = join3(
30649
31120
  dirname3(fileURLToPath2(import.meta.url)),
@@ -30661,6 +31132,11 @@ function createProgram() {
30661
31132
  ).option(
30662
31133
  "--team <id>",
30663
31134
  "use a specific team for this invocation (overrides DUVO_TEAM_ID and profile default; API-key profiles are pinned to the key's team, so a different value is rejected by the server)"
31135
+ ).addOption(
31136
+ new Option2(
31137
+ "--no-update-notifier",
31138
+ "skip the update check for this invocation"
31139
+ ).hideHelp()
30664
31140
  );
30665
31141
  program.addHelpText(
30666
31142
  "before",
@@ -30709,25 +31185,130 @@ function createProgram() {
30709
31185
  __name(createProgram, "createProgram");
30710
31186
 
30711
31187
  // src/update-check.ts
31188
+ import { mkdir as mkdir2, readFile as readFile10, writeFile as writeFile4 } from "node:fs/promises";
30712
31189
  import { createRequire } from "node:module";
30713
- import updateNotifier from "update-notifier";
31190
+ import { dirname as dirname4 } from "node:path";
30714
31191
  var ONE_DAY_MS = 24 * 60 * 60 * 1e3;
31192
+ var REGISTRY_TIMEOUT_MS = 2e3;
31193
+ var DIR_MODE2 = 448;
30715
31194
  function checkForUpdate() {
31195
+ if (isUpdateCheckDisabled()) {
31196
+ return Promise.resolve();
31197
+ }
31198
+ return runUpdateCheck().catch(() => {
31199
+ });
31200
+ }
31201
+ __name(checkForUpdate, "checkForUpdate");
31202
+ function isUpdateCheckDisabled() {
31203
+ const ci = process.env.CI;
31204
+ return process.env.NO_UPDATE_NOTIFIER !== void 0 || process.env.NODE_ENV === "test" || ci !== void 0 && ci !== "" && ci !== "false" && ci !== "0" || process.argv.includes("--no-update-notifier");
31205
+ }
31206
+ __name(isUpdateCheckDisabled, "isUpdateCheckDisabled");
31207
+ async function runUpdateCheck() {
31208
+ const pkg = loadPackageMeta();
31209
+ const cache = await readCache();
31210
+ if (cache && isNewerVersion(cache.latestVersion, pkg.version)) {
31211
+ printUpdateNotice(pkg, cache.latestVersion);
31212
+ }
31213
+ const isFresh = cache && Date.now() - cache.lastCheckedAtMs < ONE_DAY_MS;
31214
+ if (isFresh) {
31215
+ return;
31216
+ }
31217
+ await refreshCache(pkg, cache);
31218
+ }
31219
+ __name(runUpdateCheck, "runUpdateCheck");
31220
+ async function refreshCache(pkg, previous) {
30716
31221
  try {
30717
- const pkg = loadPackageMeta();
30718
- const notifier = updateNotifier({
30719
- pkg,
30720
- updateCheckInterval: ONE_DAY_MS,
30721
- shouldNotifyInNpmScript: false
31222
+ const latestVersion = await fetchLatestVersion(pkg.name);
31223
+ await writeCache({ lastCheckedAtMs: Date.now(), latestVersion });
31224
+ } catch {
31225
+ await writeCache({
31226
+ lastCheckedAtMs: Date.now(),
31227
+ latestVersion: previous?.latestVersion ?? pkg.version
30722
31228
  });
30723
- notifier.notify({ defer: false, isGlobal: true });
31229
+ }
31230
+ }
31231
+ __name(refreshCache, "refreshCache");
31232
+ function printUpdateNotice(pkg, latestVersion) {
31233
+ const updateCommand = resolveUpdateCommand(pkg.name, isStandaloneBinary());
31234
+ console.error(
31235
+ `
31236
+ Update available for ${pkg.name}: ${pkg.version} \u2192 ${latestVersion}
31237
+ Run \`${updateCommand}\` to update.
31238
+ `
31239
+ );
31240
+ }
31241
+ __name(printUpdateNotice, "printUpdateNotice");
31242
+ function resolveUpdateCommand(packageName, isStandalone) {
31243
+ return isStandalone ? "curl -fsSL https://duvo.ai/install-cli.sh | sh" : `npm install -g ${packageName}`;
31244
+ }
31245
+ __name(resolveUpdateCommand, "resolveUpdateCommand");
31246
+ function isStandaloneBinary() {
31247
+ return import.meta.url.includes("$bunfs") || import.meta.url.includes("~BUN");
31248
+ }
31249
+ __name(isStandaloneBinary, "isStandaloneBinary");
31250
+ async function fetchLatestVersion(packageName) {
31251
+ const response = await fetch(
31252
+ `https://registry.npmjs.org/-/package/${packageName}/dist-tags`,
31253
+ {
31254
+ signal: AbortSignal.timeout(REGISTRY_TIMEOUT_MS),
31255
+ headers: { accept: "application/json" }
31256
+ }
31257
+ );
31258
+ if (!response.ok) {
31259
+ throw new Error(`npm registry responded with ${response.status}`);
31260
+ }
31261
+ const body = await response.json();
31262
+ if (body === null || typeof body !== "object" || typeof body.latest !== "string") {
31263
+ throw new Error("npm registry response is missing the latest dist-tag");
31264
+ }
31265
+ return body.latest;
31266
+ }
31267
+ __name(fetchLatestVersion, "fetchLatestVersion");
31268
+ async function readCache() {
31269
+ try {
31270
+ const raw = await readFile10(getUpdateCheckCachePath(), "utf8");
31271
+ const parsed = JSON.parse(raw);
31272
+ if (parsed === null || typeof parsed !== "object" || typeof parsed.lastCheckedAtMs !== "number" || typeof parsed.latestVersion !== "string") {
31273
+ return null;
31274
+ }
31275
+ return parsed;
30724
31276
  } catch {
31277
+ return null;
30725
31278
  }
30726
31279
  }
30727
- __name(checkForUpdate, "checkForUpdate");
31280
+ __name(readCache, "readCache");
31281
+ async function writeCache(cache) {
31282
+ const path = getUpdateCheckCachePath();
31283
+ await mkdir2(dirname4(path), { recursive: true, mode: DIR_MODE2 });
31284
+ await writeFile4(path, JSON.stringify(cache), "utf8");
31285
+ }
31286
+ __name(writeCache, "writeCache");
31287
+ function parseVersion(version2) {
31288
+ const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version2.trim());
31289
+ if (!match) {
31290
+ return null;
31291
+ }
31292
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
31293
+ }
31294
+ __name(parseVersion, "parseVersion");
31295
+ function isNewerVersion(candidate, current) {
31296
+ const parsedCandidate = parseVersion(candidate);
31297
+ const parsedCurrent = parseVersion(current);
31298
+ if (!parsedCandidate || !parsedCurrent) {
31299
+ return false;
31300
+ }
31301
+ for (let index = 0; index < 3; index += 1) {
31302
+ if (parsedCandidate[index] !== parsedCurrent[index]) {
31303
+ return parsedCandidate[index] > parsedCurrent[index];
31304
+ }
31305
+ }
31306
+ return false;
31307
+ }
31308
+ __name(isNewerVersion, "isNewerVersion");
30728
31309
  function loadPackageMeta() {
30729
31310
  if (true) {
30730
- return { name: "@duvoai/cli", version: "1.21.0" };
31311
+ return { name: "@duvoai/cli", version: "1.24.0" };
30731
31312
  }
30732
31313
  const require2 = createRequire(import.meta.url);
30733
31314
  const raw = require2("../package.json");
@@ -30740,7 +31321,7 @@ function loadPackageMeta() {
30740
31321
  __name(loadPackageMeta, "loadPackageMeta");
30741
31322
 
30742
31323
  // src/bin/duvo.ts
30743
- checkForUpdate();
31324
+ void checkForUpdate();
30744
31325
  createProgram().parseAsync(process.argv).catch((error) => {
30745
31326
  handleCliError(error);
30746
31327
  });