@duvoai/cli 1.52.0 → 1.54.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
@@ -3070,6 +3070,23 @@ var CASE_OUTCOME_SEVERITY = {
3070
3070
  MEDIUM: "medium",
3071
3071
  LOW: "low"
3072
3072
  };
3073
+ var CASE_MANUAL_STATUS_TARGETS_BY_STATE = {
3074
+ pending: ["completed", "failed", "canceled"],
3075
+ postponed: ["pending", "completed", "failed", "canceled"],
3076
+ in_progress: ["pending", "completed", "failed", "canceled"],
3077
+ needs_input: ["pending", "completed", "failed", "canceled"],
3078
+ evaluating: ["pending", "completed", "failed", "canceled"],
3079
+ success: ["pending", "completed", "failed", "canceled"],
3080
+ issues: ["pending", "completed", "failed", "canceled"],
3081
+ completed: ["pending", "failed", "canceled"],
3082
+ failed: ["pending", "completed", "canceled"],
3083
+ canceled: ["pending", "completed", "failed"]
3084
+ };
3085
+ function caseManualStatusTargetsFor(status) {
3086
+ return CASE_MANUAL_STATUS_TARGETS_BY_STATE[status];
3087
+ }
3088
+ __name(caseManualStatusTargetsFor, "caseManualStatusTargetsFor");
3089
+ __name2(caseManualStatusTargetsFor, "caseManualStatusTargetsFor");
3073
3090
  var CASE_PRIORITY = {
3074
3091
  NONE: "none",
3075
3092
  MEDIUM: "medium",
@@ -4182,6 +4199,17 @@ var clarityProcessLandscapeFullNodeSchema = z19.object({
4182
4199
  id: z19.guid(),
4183
4200
  parentId: z19.guid().nullable(),
4184
4201
  processId: z19.guid().nullable(),
4202
+ /**
4203
+ * Whether this node is a container or work. Load-bearing for callers that
4204
+ * create nodes: a new node's parent must be an `area`, and `processId` does
4205
+ * NOT discriminate — it is null for areas and for proposed processes alike,
4206
+ * so without this an agent can only guess from the name (DUVO-9512).
4207
+ *
4208
+ * Optional for the same reason as the priority fields below — a client keeps
4209
+ * parsing responses from a server that predates it; the backend always
4210
+ * emits it.
4211
+ */
4212
+ nodeKind: z19.enum(["area", "process"]).optional(),
4185
4213
  name: z19.string(),
4186
4214
  ownerLabel: z19.string().nullable(),
4187
4215
  sortOrder: z19.number(),
@@ -12469,8 +12497,8 @@ var automationDetailResponseApiSchema = z66.object({
12469
12497
  });
12470
12498
  var createAutomationResponseApiSchema = z66.object({
12471
12499
  automation: automationSummaryApiSchema,
12472
- draft_revision_id: z66.guid().describe(
12473
- "The draft revision the new automation was created with. A manually created automation has no live revision until it is first activated, so this is where its first agent build belongs."
12500
+ draft_revision_id: z66.guid().nullable().describe(
12501
+ "The draft revision the new automation was created with, or null when the team isn't on revision semantics and the automation is a bare container. A manually created automation has no live revision until it is first activated, so this is where its first agent build belongs."
12474
12502
  ),
12475
12503
  first_agent_id: z66.guid().describe(
12476
12504
  "The automation's first agent, created alongside it with a default build bound into the draft revision, so the caller can open it directly."
@@ -13450,15 +13478,26 @@ var casesStatsSchema = z76.object({
13450
13478
  total: z76.number(),
13451
13479
  /** `pending` — unowned, idle, not postponed; claimable now. */
13452
13480
  pending: z76.number(),
13453
- /** `in_progress` — owned by a run with no open HITL token. */
13481
+ /**
13482
+ * `in_progress` — work still moving. Owned by a run with no open HITL token,
13483
+ * plus the `evaluating` window: a case that settled OK and is waiting on its
13484
+ * whole-case evaluation has no verdict yet, so it reads as still in progress
13485
+ * rather than as its own bucket.
13486
+ */
13454
13487
  processing: z76.number(),
13455
13488
  /** `needs_input` — owned by a run holding an open HITL token. */
13456
13489
  needs_input: z76.number(),
13457
13490
  /** `postponed` — unowned, scheduled for later. */
13458
13491
  postponed: z76.number(),
13459
13492
  /**
13460
- * `evaluating` — settled OK with its whole-case evaluation still resolving
13461
- * (no stored outcome yet). Transient, and bounded by the recovery sweep.
13493
+ * `evaluating` — settled OK with its whole-case evaluation still resolving (no
13494
+ * stored outcome yet). Transient, and bounded by the recovery sweep.
13495
+ *
13496
+ * NOT a bucket, and deliberately excluded from the partition sum above: these
13497
+ * cases are counted inside `processing`, because a case with no verdict yet has
13498
+ * not reached an outcome. Kept as a response field because it shipped as one —
13499
+ * dropping it is a breaking change needing its own deprecation window — and it
13500
+ * is still useful on its own as "how many are waiting on a verdict".
13462
13501
  */
13463
13502
  evaluating: z76.number(),
13464
13503
  /** `success` + `completed` — finished cleanly. */
@@ -13494,13 +13533,13 @@ var casesStatsSchema = z76.object({
13494
13533
  description: "Deprecated alias of needs_input. Read needs_input instead."
13495
13534
  }),
13496
13535
  /**
13497
- * @deprecated Every settled-OK case (`status = completed`) — i.e.
13498
- * `resolved + evaluating +` the `issues` share of `needs_review`. Not a
13499
- * synonym for `resolved`, which excludes the other two.
13536
+ * @deprecated Every settled-OK case (`status = completed`) — i.e. `resolved +`
13537
+ * the evaluating share of `processing` + the `issues` share of `needs_review`.
13538
+ * Not a synonym for `resolved`, which excludes the other two.
13500
13539
  */
13501
13540
  completed: z76.number().meta({
13502
13541
  deprecated: true,
13503
- description: "Deprecated count of all settled-OK cases. Read resolved (finished cleanly), evaluating, and needs_review instead."
13542
+ description: "Deprecated count of all settled-OK cases. Read resolved (finished cleanly), processing, and needs_review instead."
13504
13543
  }),
13505
13544
  /**
13506
13545
  * @deprecated Every errored-or-stopped case (`status = failed`) — i.e. the
@@ -13897,7 +13936,12 @@ var FEATURE_FLAG_CATALOGUE = {
13897
13936
  AUTOMATIONS: {
13898
13937
  key: "automations",
13899
13938
  defaultValue: false,
13900
- 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."
13939
+ description: "Exposes the Automations workspace 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. Which conversion runs is decided by AUTOMATION_VERSIONING, not by this flag: off (the default) writes automation containers and identity FKs only, so builds, triggers and schedules keep their existing lifecycle and a global admin can reverse the move from the team's admin panel; on, the same entry point converts straight to revision semantics and additionally stamps team.automation_revisions_migrated_at, which is not reversible. Revision semantics are also reachable for an already-converted team through the separate phase-2 cutover. The workspace stamp \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."
13940
+ },
13941
+ AUTOMATION_VERSIONING: {
13942
+ key: "automation_versioning",
13943
+ defaultValue: false,
13944
+ description: "Makes the Automations migration convert straight to revision semantics instead of the lite workspace. When off (the default), POST /automations/migrate writes automation containers only and stamps team.automations_migrated_at; when on, it also snapshots each automation's current live builds, queue routing, trigger configs and recurring schedules as revision 1 and stamps team.automation_revisions_migrated_at. Only applies to a team that is still standalone \u2014 it is not the lite-to-versioned cutover, which resolves its groups from existing automation membership rather than by closure discovery. Resolved by team/org (user-level overrides are ignored by the migration gate), and only consulted for a team that also has AUTOMATIONS on."
13901
13945
  },
13902
13946
  AGENT_SELF_SCHEDULING: {
13903
13947
  key: "agent_self_scheduling",
@@ -22383,10 +22427,14 @@ function parsePriority(raw) {
22383
22427
  __name(parsePriority, "parsePriority");
22384
22428
 
22385
22429
  // src/commands/cases/bulk-update-status.ts
22386
- var CASE_TERMINAL_STATUSES = ["completed", "failed"];
22430
+ var CASE_TERMINAL_STATUSES = [
22431
+ "completed",
22432
+ "failed",
22433
+ "canceled"
22434
+ ];
22387
22435
  function registerCasesBulkUpdateStatus(cases) {
22388
22436
  cases.command("bulk-update-status").description(
22389
- "Update the status of multiple cases to completed or failed (1-100). Interrupts any active runs."
22437
+ "Update the status of multiple cases to completed, failed, or canceled (1-100). Interrupts any active runs. Use canceled for a deliberate human stop, as distinct from a system failure."
22390
22438
  ).requiredOption("--queue <id>", "ID of the queue the cases belong to").requiredOption("--ids <list>", "comma-separated case IDs (1-100)").requiredOption(
22391
22439
  "--status <status>",
22392
22440
  `terminal status (${CASE_TERMINAL_STATUSES.join(", ")})`
@@ -43102,7 +43150,7 @@ __name(isStandaloneBinary, "isStandaloneBinary");
43102
43150
  import { createRequire } from "node:module";
43103
43151
  function getPackageMeta() {
43104
43152
  if (true) {
43105
- return { name: "@duvoai/cli", version: "1.52.0" };
43153
+ return { name: "@duvoai/cli", version: "1.54.0" };
43106
43154
  }
43107
43155
  const require2 = createRequire(import.meta.url);
43108
43156
  const raw = require2("../../package.json");