@duvoai/cli 1.97.0 → 1.98.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/bin/duvo.js +98 -115
  2. package/package.json +1 -1
package/dist/bin/duvo.js CHANGED
@@ -2362,6 +2362,10 @@ var clarityCaptureSchema = z9.object({
2362
2362
  documentFileName: z9.string().nullable().optional(),
2363
2363
  documentTextMetadata: clarityDocumentTextMetadataSchema.nullable().optional(),
2364
2364
  processingFailureReason: z9.string().max(MAX_CLARITY_PROCESSING_FAILURE_REASON_LENGTH).nullable().optional(),
2365
+ scheduledJoinAt: z9.string().nullable().default(null),
2366
+ meetingUrl: z9.string().nullable().optional(),
2367
+ /** Answers a proposal step's extra-capture request (deep dive). */
2368
+ isExtraCapture: z9.boolean().optional(),
2365
2369
  transcript: z9.array(conversationMessageSchema).nullable(),
2366
2370
  /**
2367
2371
  * Whether a non-empty interview transcript exists server-side. Set by
@@ -3328,9 +3332,13 @@ function detectMeetingPlatform(meetingUrl) {
3328
3332
  }
3329
3333
  __name(detectMeetingPlatform, "detectMeetingPlatform");
3330
3334
  __name2(detectMeetingPlatform, "detectMeetingPlatform");
3335
+ var notetakerJoinAtSchema = z9.iso.datetime({ offset: true }).refine((joinAt) => new Date(joinAt).getTime() > Date.now(), {
3336
+ message: "Meeting start time must be in the future"
3337
+ });
3331
3338
  var inviteClarityNotetakerSchema = z9.object({
3332
3339
  meetingUrl: z9.url().max(2048),
3333
- extraCaptureRequestId: z9.guid().optional()
3340
+ extraCaptureRequestId: z9.guid().optional(),
3341
+ joinAt: notetakerJoinAtSchema.optional()
3334
3342
  });
3335
3343
  var inviteClarityNotetakerResponseSchema = z9.object({
3336
3344
  captureId: z9.guid(),
@@ -4389,33 +4397,6 @@ var stepSourceSchema = z12.object({
4389
4397
  "Resolution status for the structured source link. Legacy sources may omit this field."
4390
4398
  )
4391
4399
  });
4392
- var clarityStepConflictSchema = z12.object({
4393
- id: z12.string().min(1),
4394
- question: z12.string().trim().min(1),
4395
- mappedVersionIndex: z12.number().int().nonnegative().optional().describe(
4396
- "Zero-based index in versions of the account represented by this step in the current diagram. Omit when unknown. Update or clear it when the diagram or versions change. This records the diagram content, not a resolved conflict."
4397
- ),
4398
- versions: z12.array(
4399
- stepSourceSchema.extend({
4400
- captureId: z12.guid(),
4401
- title: z12.string().trim().min(1).optional().describe(
4402
- "Short heading describing this account; the excerpt remains the exact source quote"
4403
- )
4404
- })
4405
- ).min(2)
4406
- }).refine(
4407
- (conflict) => conflict.mappedVersionIndex === void 0 || conflict.mappedVersionIndex < conflict.versions.length,
4408
- {
4409
- message: "The mapped version must refer to an existing conflict version",
4410
- path: ["mappedVersionIndex"]
4411
- }
4412
- ).refine(
4413
- (conflict) => new Set(conflict.versions.map((version2) => version2.captureId)).size >= 2,
4414
- {
4415
- message: "A conflict must cite at least two distinct captures",
4416
- path: ["versions"]
4417
- }
4418
- );
4419
4400
  var stepEdgeSchema = z12.object({
4420
4401
  stepId: z12.string().min(1).describe(
4421
4402
  'Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: "step-review-invoice"'
@@ -4618,10 +4599,6 @@ var stepAgentLinkSchema = z12.object({
4618
4599
  )
4619
4600
  });
4620
4601
  var postprocessAgentSliceShape = {
4621
- conflicts: z12.array(clarityStepConflictSchema).refine(
4622
- (conflicts) => new Set(conflicts.map((conflict) => conflict.id)).size === conflicts.length,
4623
- { message: "Conflict ids must be unique within a step" }
4624
- ).optional(),
4625
4602
  ...extraCaptureNeededAgentStepSchema.shape,
4626
4603
  ...bpmnStepReadinessAgentStepSchema.shape
4627
4604
  };
@@ -5156,9 +5133,9 @@ var googleLiveProviderConfigSchema = z14.object({
5156
5133
  token: z14.string(),
5157
5134
  /**
5158
5135
  * Single-use token for the gemini-3.5-transcribe-live socket that
5159
- * transcribes the participant; set only under clarity_voice_google_transcribe.
5136
+ * transcribes the participant.
5160
5137
  */
5161
- transcriptionToken: z14.string().optional()
5138
+ transcriptionToken: z14.string()
5162
5139
  });
5163
5140
  var voiceProviderConfigSchema = z14.discriminatedUnion("method", [
5164
5141
  openAiRealtimeProviderConfigSchema,
@@ -5346,7 +5323,10 @@ var organizationInterviewSummarySchema = teamInterviewSummarySchema.extend({
5346
5323
  scope: clarityInterviewScopeSchema,
5347
5324
  teamId: z14.guid().nullable(),
5348
5325
  teamName: z14.string().nullable(),
5349
- organizationId: z14.guid()
5326
+ organizationId: z14.guid(),
5327
+ scheduledJoinAt: z14.string().nullable().default(null),
5328
+ meetingUrl: z14.string().nullable().optional(),
5329
+ processingFailureReason: z14.string().nullable().default(null)
5350
5330
  });
5351
5331
  var updateClarityInterviewUsabilityResponseSchema = z14.object({
5352
5332
  id: z14.guid(),
@@ -5376,7 +5356,10 @@ var teamInterviewSchema = clarityInterviewSchema.extend({
5376
5356
  var organizationInterviewSchema = clarityInterviewSchema.extend({
5377
5357
  scope: z14.literal("organization"),
5378
5358
  teamId: z14.null(),
5379
- organizationId: z14.guid()
5359
+ organizationId: z14.guid(),
5360
+ scheduledJoinAt: z14.string().nullable().default(null),
5361
+ meetingUrl: z14.string().nullable().optional(),
5362
+ processingFailureReason: z14.string().nullable().default(null)
5380
5363
  });
5381
5364
  var listTeamInterviewResponseSchema = z14.object({
5382
5365
  interviews: z14.array(teamInterviewSummarySchema),
@@ -5866,10 +5849,7 @@ var resolveClarityStepSourceParamsSchema = z16.object({
5866
5849
  var resolveClarityStepSourceBodySchema = z16.object({
5867
5850
  stepId: z16.string().min(1).describe("Step id within the current process"),
5868
5851
  sourceIndex: z16.number().int().nonnegative().optional().describe(
5869
- "Zero-based index into the step's sources array, or into a saved conflict's versions when conflictId is supplied. Send this or claimId."
5870
- ),
5871
- conflictId: z16.string().min(1).optional().describe(
5872
- "A conflict saved on the step in the map; sourceIndex then picks one of its versions"
5852
+ "Zero-based index into the step's sources array. Send this or claimId."
5873
5853
  ),
5874
5854
  claimId: z16.guid().optional().describe(
5875
5855
  "Claim backing a conflict bound to this snapshot and step. Send this or sourceIndex."
@@ -5877,9 +5857,7 @@ var resolveClarityStepSourceBodySchema = z16.object({
5877
5857
  }).refine(
5878
5858
  (body) => body.sourceIndex === void 0 !== (body.claimId === void 0),
5879
5859
  { message: "Send exactly one of sourceIndex and claimId" }
5880
- ).refine((body) => !(body.conflictId && body.claimId), {
5881
- message: "conflictId goes with sourceIndex, not claimId"
5882
- });
5860
+ );
5883
5861
  var CLARITY_STEP_FRAME_WINDOW_MAX = 5;
5884
5862
  var CLARITY_STEP_FRAME_MAX_STEP_IDS = 100;
5885
5863
  var CLARITY_STEP_FRAME_SIZES = ["full", "thumb"];
@@ -25046,6 +25024,10 @@ var clarityCaptureSchema2 = z282.object({
25046
25024
  documentFileName: z282.string().nullable().optional(),
25047
25025
  documentTextMetadata: clarityDocumentTextMetadataSchema2.nullable().optional(),
25048
25026
  processingFailureReason: z282.string().max(MAX_CLARITY_PROCESSING_FAILURE_REASON_LENGTH2).nullable().optional(),
25027
+ scheduledJoinAt: z282.string().nullable().default(null),
25028
+ meetingUrl: z282.string().nullable().optional(),
25029
+ /** Answers a proposal step's extra-capture request (deep dive). */
25030
+ isExtraCapture: z282.boolean().optional(),
25049
25031
  transcript: z282.array(conversationMessageSchema2).nullable(),
25050
25032
  /**
25051
25033
  * Whether a non-empty interview transcript exists server-side. Set by
@@ -26012,9 +25994,13 @@ function detectMeetingPlatform2(meetingUrl) {
26012
25994
  }
26013
25995
  __name(detectMeetingPlatform2, "detectMeetingPlatform");
26014
25996
  __name3(detectMeetingPlatform2, "detectMeetingPlatform");
25997
+ var notetakerJoinAtSchema2 = z282.iso.datetime({ offset: true }).refine((joinAt) => new Date(joinAt).getTime() > Date.now(), {
25998
+ message: "Meeting start time must be in the future"
25999
+ });
26015
26000
  var inviteClarityNotetakerSchema2 = z282.object({
26016
26001
  meetingUrl: z282.url().max(2048),
26017
- extraCaptureRequestId: z282.guid().optional()
26002
+ extraCaptureRequestId: z282.guid().optional(),
26003
+ joinAt: notetakerJoinAtSchema2.optional()
26018
26004
  });
26019
26005
  var inviteClarityNotetakerResponseSchema2 = z282.object({
26020
26006
  captureId: z282.guid(),
@@ -30826,33 +30812,6 @@ var stepSourceSchema2 = z382.object({
30826
30812
  "Resolution status for the structured source link. Legacy sources may omit this field."
30827
30813
  )
30828
30814
  });
30829
- var clarityStepConflictSchema2 = z382.object({
30830
- id: z382.string().min(1),
30831
- question: z382.string().trim().min(1),
30832
- mappedVersionIndex: z382.number().int().nonnegative().optional().describe(
30833
- "Zero-based index in versions of the account represented by this step in the current diagram. Omit when unknown. Update or clear it when the diagram or versions change. This records the diagram content, not a resolved conflict."
30834
- ),
30835
- versions: z382.array(
30836
- stepSourceSchema2.extend({
30837
- captureId: z382.guid(),
30838
- title: z382.string().trim().min(1).optional().describe(
30839
- "Short heading describing this account; the excerpt remains the exact source quote"
30840
- )
30841
- })
30842
- ).min(2)
30843
- }).refine(
30844
- (conflict) => conflict.mappedVersionIndex === void 0 || conflict.mappedVersionIndex < conflict.versions.length,
30845
- {
30846
- message: "The mapped version must refer to an existing conflict version",
30847
- path: ["mappedVersionIndex"]
30848
- }
30849
- ).refine(
30850
- (conflict) => new Set(conflict.versions.map((version2) => version2.captureId)).size >= 2,
30851
- {
30852
- message: "A conflict must cite at least two distinct captures",
30853
- path: ["versions"]
30854
- }
30855
- );
30856
30815
  var stepEdgeSchema2 = z382.object({
30857
30816
  stepId: z382.string().min(1).describe(
30858
30817
  'Id of the step this edge points to. Must match an existing step.id in the same steps array. Example: "step-review-invoice"'
@@ -31055,10 +31014,6 @@ var stepAgentLinkSchema2 = z382.object({
31055
31014
  )
31056
31015
  });
31057
31016
  var postprocessAgentSliceShape2 = {
31058
- conflicts: z382.array(clarityStepConflictSchema2).refine(
31059
- (conflicts) => new Set(conflicts.map((conflict) => conflict.id)).size === conflicts.length,
31060
- { message: "Conflict ids must be unique within a step" }
31061
- ).optional(),
31062
31017
  ...extraCaptureNeededAgentStepSchema2.shape,
31063
31018
  ...bpmnStepReadinessAgentStepSchema2.shape
31064
31019
  };
@@ -31425,9 +31380,9 @@ var googleLiveProviderConfigSchema2 = z392.object({
31425
31380
  token: z392.string(),
31426
31381
  /**
31427
31382
  * Single-use token for the gemini-3.5-transcribe-live socket that
31428
- * transcribes the participant; set only under clarity_voice_google_transcribe.
31383
+ * transcribes the participant.
31429
31384
  */
31430
- transcriptionToken: z392.string().optional()
31385
+ transcriptionToken: z392.string()
31431
31386
  });
31432
31387
  var voiceProviderConfigSchema2 = z392.discriminatedUnion("method", [
31433
31388
  openAiRealtimeProviderConfigSchema2,
@@ -31615,7 +31570,10 @@ var organizationInterviewSummarySchema2 = teamInterviewSummarySchema2.extend({
31615
31570
  scope: clarityInterviewScopeSchema2,
31616
31571
  teamId: z392.guid().nullable(),
31617
31572
  teamName: z392.string().nullable(),
31618
- organizationId: z392.guid()
31573
+ organizationId: z392.guid(),
31574
+ scheduledJoinAt: z392.string().nullable().default(null),
31575
+ meetingUrl: z392.string().nullable().optional(),
31576
+ processingFailureReason: z392.string().nullable().default(null)
31619
31577
  });
31620
31578
  var updateClarityInterviewUsabilityResponseSchema2 = z392.object({
31621
31579
  id: z392.guid(),
@@ -31645,7 +31603,10 @@ var teamInterviewSchema2 = clarityInterviewSchema2.extend({
31645
31603
  var organizationInterviewSchema2 = clarityInterviewSchema2.extend({
31646
31604
  scope: z392.literal("organization"),
31647
31605
  teamId: z392.null(),
31648
- organizationId: z392.guid()
31606
+ organizationId: z392.guid(),
31607
+ scheduledJoinAt: z392.string().nullable().default(null),
31608
+ meetingUrl: z392.string().nullable().optional(),
31609
+ processingFailureReason: z392.string().nullable().default(null)
31649
31610
  });
31650
31611
  var listTeamInterviewResponseSchema2 = z392.object({
31651
31612
  interviews: z392.array(teamInterviewSummarySchema2),
@@ -32134,10 +32095,7 @@ var resolveClarityStepSourceParamsSchema2 = z412.object({
32134
32095
  var resolveClarityStepSourceBodySchema2 = z412.object({
32135
32096
  stepId: z412.string().min(1).describe("Step id within the current process"),
32136
32097
  sourceIndex: z412.number().int().nonnegative().optional().describe(
32137
- "Zero-based index into the step's sources array, or into a saved conflict's versions when conflictId is supplied. Send this or claimId."
32138
- ),
32139
- conflictId: z412.string().min(1).optional().describe(
32140
- "A conflict saved on the step in the map; sourceIndex then picks one of its versions"
32098
+ "Zero-based index into the step's sources array. Send this or claimId."
32141
32099
  ),
32142
32100
  claimId: z412.guid().optional().describe(
32143
32101
  "Claim backing a conflict bound to this snapshot and step. Send this or sourceIndex."
@@ -32145,9 +32103,7 @@ var resolveClarityStepSourceBodySchema2 = z412.object({
32145
32103
  }).refine(
32146
32104
  (body) => body.sourceIndex === void 0 !== (body.claimId === void 0),
32147
32105
  { message: "Send exactly one of sourceIndex and claimId" }
32148
- ).refine((body) => !(body.conflictId && body.claimId), {
32149
- message: "conflictId goes with sourceIndex, not claimId"
32150
- });
32106
+ );
32151
32107
  var CLARITY_STEP_FRAME_WINDOW_MAX2 = 5;
32152
32108
  var CLARITY_STEP_FRAME_MAX_STEP_IDS2 = 100;
32153
32109
  var CLARITY_STEP_FRAME_SIZES2 = ["full", "thumb"];
@@ -32819,7 +32775,6 @@ function clarityStepsToEaseDocument(steps) {
32819
32775
  readinessRationale: _readinessRationale,
32820
32776
  extraCaptureNeeded: _extraCaptureNeeded,
32821
32777
  extraCaptureNeeds: _extraCaptureNeeds,
32822
- conflicts: _conflicts,
32823
32778
  linkedAgentId: _linkedAgentId,
32824
32779
  laneId: _laneId,
32825
32780
  ...baseStep
@@ -33133,14 +33088,7 @@ function preserveStepSourceIntegrity(previousSteps, steps) {
33133
33088
  const previous = previousById.get(step.id);
33134
33089
  const isUnchanged = previous !== void 0 && areMaterialStepFieldsEqual(previous, step);
33135
33090
  const sources = isUnchanged ? preservePreviousStructuredSources(previous.sources, step.sources) : step.sources.map(demoteCaptureBackedSource);
33136
- const { conflicts: _conflicts, ...rest } = step;
33137
- return {
33138
- ...rest,
33139
- sources,
33140
- // Conflicts quote captures about the step as it was, and their mapped
33141
- // version describes the old diagram, so only an unchanged step keeps them.
33142
- ...isUnchanged && previous.conflicts !== void 0 ? { conflicts: previous.conflicts } : {}
33143
- };
33091
+ return { ...step, sources };
33144
33092
  });
33145
33093
  }
33146
33094
  __name(preserveStepSourceIntegrity, "preserveStepSourceIntegrity");
@@ -33296,19 +33244,16 @@ function mergeSteps(previousSteps, steps) {
33296
33244
  return step;
33297
33245
  }
33298
33246
  const isUnchanged = areMaterialStepFieldsEqual(prev, step);
33299
- const inherit = /* @__PURE__ */ __name3((next, previous) => next !== void 0 ? next : isUnchanged ? previous : void 0, "inherit");
33300
33247
  const capturesFromStep = step.extraCaptureNeeded !== void 0 || step.extraCaptureNeeds !== void 0;
33301
33248
  const captureSource = capturesFromStep || !isUnchanged ? step : prev;
33302
33249
  const extraCaptureNeeded = captureSource.extraCaptureNeeded;
33303
33250
  const extraCaptureNeeds = captureSource.extraCaptureNeeds;
33304
- const conflicts = inherit(step.conflicts, prev.conflicts);
33305
33251
  return {
33306
33252
  ...step,
33307
33253
  readiness: step.readiness ?? prev.readiness,
33308
33254
  readinessRationale: nonEmptyString(step.readinessRationale) ? step.readinessRationale : prev.readinessRationale,
33309
33255
  ...extraCaptureNeeded === void 0 ? {} : { extraCaptureNeeded },
33310
- ...extraCaptureNeeds === void 0 ? {} : { extraCaptureNeeds },
33311
- ...conflicts === void 0 ? {} : { conflicts }
33256
+ ...extraCaptureNeeds === void 0 ? {} : { extraCaptureNeeds }
33312
33257
  };
33313
33258
  });
33314
33259
  }
@@ -43434,7 +43379,8 @@ var CODE_STEP_RELAY_ERROR_CODES = [
43434
43379
  "rate_limited",
43435
43380
  "tool_error",
43436
43381
  "upstream_timeout",
43437
- "upstream_error"
43382
+ "upstream_error",
43383
+ "response_too_large"
43438
43384
  ];
43439
43385
  var codeStepMcpCallResponseSchema = z98.object({
43440
43386
  result: codeStepJsonValueSchema,
@@ -46819,7 +46765,6 @@ var CHAT_PRESET_KEYS = [
46819
46765
  var chatPresetKeySchema = z123.enum(CHAT_PRESET_KEYS);
46820
46766
  var PUBLIC_STEP_OMITTED_FIELDS = {
46821
46767
  sources: true,
46822
- conflicts: true,
46823
46768
  extraCaptureNeeded: true,
46824
46769
  extraCaptureNeeds: true,
46825
46770
  linkedAgentId: true
@@ -47388,7 +47333,7 @@ var FEATURE_FLAG_CATALOGUE = {
47388
47333
  key: "clarity_conflict_detection",
47389
47334
  defaultValue: false,
47390
47335
  stage: "dev",
47391
- description: "Runs Clarity conflict detection for the team: claims are extracted from each usable capture and compared after a current-process map is ready, in background Cloud Tasks that never delay or change the map. Results are stored outside the map JSON and shown only when CLARITY_CONFLICT_REVIEW is also on, so this flag alone is a hidden run. Resolved for the team. Off by default."
47336
+ description: "Runs Clarity conflict detection for the team: after a current-process map is ready, or a capture is added or removed, one model call per snapshot compares the map's steps with every usable capture, in a background Cloud Task that never delays or changes the map. Results are stored on the snapshot beside the map JSON, never in it, and shown only when CLARITY_CONFLICT_REVIEW is also on, so this flag alone is a hidden run. Resolved for the team. Off by default."
47392
47337
  },
47393
47338
  CLARITY_CONFLICT_REVIEW: {
47394
47339
  key: "clarity_conflict_review",
@@ -47408,12 +47353,6 @@ var FEATURE_FLAG_CATALOGUE = {
47408
47353
  stage: "dev",
47409
47354
  description: "Emails account-free interview links for Clarity process invitations. When on for the inviting team, a pending process invitation to someone with no Duvo account (or with only a guest profile from an earlier link) gets a 'Start interview' link to /interview/<token> instead of the /invitations/<id> sign-in link. This covers the Invite dialog, org-chart assignment and the sendClarityInterviewInvites MCP/CLI tool. Organizations that enforce SSO, and invitees who already have a real account, keep the sign-in link. The link is tied to the invitation: revoking the invitation, removing the accepted grant, or removing the guest from the team ends it. Turning the flag off stops new links from being issued and makes existing links and guest sessions stop working on their next request. Resolved for the team, not the inviter. Off by default."
47410
47355
  },
47411
- CLARITY_STEP_CONFLICTS: {
47412
- key: "clarity_step_conflicts",
47413
- defaultValue: false,
47414
- stage: "dev",
47415
- description: "Shows saved capture conflicts on Clarity v2 current-process steps: the conflict card on each step (the competing accounts, who gave them, and their linked source evidence) and the conflict marker on the process map that scrolls to it. Only steps whose snapshot carries `conflicts` show anything; nothing generates conflicts yet. When off (default), the card and the marker stay hidden and the stored conflicts are kept untouched. Read in the browser for the viewer's current team."
47416
- },
47417
47356
  CLARITY_HIERARCHY: {
47418
47357
  key: "clarity_hierarchy",
47419
47358
  defaultValue: true,
@@ -47510,12 +47449,6 @@ var FEATURE_FLAG_CATALOGUE = {
47510
47449
  stage: "dev",
47511
47450
  description: "Routes Clarity interviews (voice-only AND voice+screenshare) to the Google Gemini Live conversational provider. When off, interviews use OpenAI Realtime."
47512
47451
  },
47513
- CLARITY_VOICE_GOOGLE_TRANSCRIBE: {
47514
- key: "clarity_voice_google_transcribe",
47515
- defaultValue: false,
47516
- stage: "dev",
47517
- description: "On a clarity_voice_google interview, transcribes the participant with gemini-3.5-transcribe-live as the live draft and replaces each finished turn with a non-streaming gemini-3.5-transcribe pass (the transcribe-turn routes). When off, the participant's transcript comes from gemini-3.8-live's own input transcription. WARNING: the 3.5 transcribe models run only on Google's global endpoint, with no EU or US data residency, so the participant's audio leaves the region gemini-3.8-live keeps it in. Enable only for teams that accept global processing."
47518
- },
47519
47452
  CLAUDE_OPUS_5_5: {
47520
47453
  key: "claude_opus_5_5",
47521
47454
  defaultValue: false,
@@ -63083,6 +63016,19 @@ var CLARITY_WRITE_TOOLS = [
63083
63016
  ],
63084
63017
  description: "Start asynchronous snapshot generation or regeneration."
63085
63018
  },
63019
+ {
63020
+ name: "bulkGenerateClarityProcessSnapshots",
63021
+ scope: "v2",
63022
+ read_only: false,
63023
+ commands: ["duvo clarity generate-maps"],
63024
+ endpoints: [
63025
+ {
63026
+ method: "POST",
63027
+ path: "/v2/clarity-v2/processes/snapshots/current_process/generate"
63028
+ }
63029
+ ],
63030
+ description: "Start current-process generation for many processes; returns started, skipped and deferred ids."
63031
+ },
63086
63032
  {
63087
63033
  name: "saveClarityProcessSnapshot",
63088
63034
  scope: "v2",
@@ -64605,6 +64551,42 @@ function registerClarityGenerateCurrentProcess(clarity) {
64605
64551
  }
64606
64552
  __name(registerClarityGenerateCurrentProcess, "registerClarityGenerateCurrentProcess");
64607
64553
 
64554
+ // src/commands/clarity/generate-maps.ts
64555
+ var MAX_PROCESS_IDS = 200;
64556
+ function registerClarityGenerateMaps(clarity) {
64557
+ clarity.command("generate-maps <process-ids...>").description(
64558
+ "Start current-process generation for many Clarity v2 processes (async). Starts what current capacity allows; rerun with the deferred ids later."
64559
+ ).option("--json", "output raw JSON from the API").action(/* @__PURE__ */ __name(async function action(processIds, options) {
64560
+ if (processIds.length > MAX_PROCESS_IDS) {
64561
+ throw new CliError(
64562
+ `Pass at most ${MAX_PROCESS_IDS} process ids per call (got ${processIds.length}).`
64563
+ );
64564
+ }
64565
+ const { apiKey, apiBaseUrl } = await requireAuthenticatedConfig(this);
64566
+ const raw = await httpRequest({
64567
+ method: "POST",
64568
+ path: "/v2/clarity-v2/processes/snapshots/current_process/generate",
64569
+ apiKey,
64570
+ apiBaseUrl,
64571
+ body: { process_ids: processIds }
64572
+ });
64573
+ if (options.json) {
64574
+ printJson(raw);
64575
+ return;
64576
+ }
64577
+ console.log(`Started ${raw.started.length}.`);
64578
+ for (const { process_id, reason } of raw.skipped) {
64579
+ console.log(`Skipped ${process_id}: ${reason}`);
64580
+ }
64581
+ if (raw.deferred.length > 0) {
64582
+ console.log(
64583
+ `Deferred ${raw.deferred.length} (no capacity yet), rerun later with: ${raw.deferred.join(" ")}`
64584
+ );
64585
+ }
64586
+ }, "action"));
64587
+ }
64588
+ __name(registerClarityGenerateMaps, "registerClarityGenerateMaps");
64589
+
64608
64590
  // src/commands/clarity/generate-transformation-proposal.ts
64609
64591
  function registerClarityGenerateTransformationProposal(clarity) {
64610
64592
  clarity.command("generate-transformation-proposal <process-id>").description(
@@ -69024,6 +69006,7 @@ function registerClarity(program) {
69024
69006
  registerClarityStopArtifactChatConversation(clarity);
69025
69007
  registerClarityDeleteArtifactChatConversation(clarity);
69026
69008
  registerClarityGenerateCurrentProcess(clarity);
69009
+ registerClarityGenerateMaps(clarity);
69027
69010
  registerClarityGenerateTransformationProposal(clarity);
69028
69011
  registerClaritySaveCurrentProcess(clarity);
69029
69012
  registerClaritySaveTransformationProposal(clarity);
@@ -81881,7 +81864,7 @@ __name(isStandaloneBinary, "isStandaloneBinary");
81881
81864
  import { createRequire } from "node:module";
81882
81865
  function getPackageMeta() {
81883
81866
  if (true) {
81884
- return { name: "@duvoai/cli", version: "1.97.0" };
81867
+ return { name: "@duvoai/cli", version: "1.98.0" };
81885
81868
  }
81886
81869
  const require2 = createRequire(import.meta.url);
81887
81870
  const raw = require2("../../package.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duvoai/cli",
3
- "version": "1.97.0",
3
+ "version": "1.98.0",
4
4
  "description": "Command-line interface for the Duvo public API",
5
5
  "bin": {
6
6
  "duvo": "./dist/bin/duvo.js"