@qawolf/cli 1.21.0 → 1.22.1

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/cli.js CHANGED
@@ -342181,6 +342181,18 @@ async function downloadBundle(signedUrl, deps) {
342181
342181
  return { ok: true, value: { tmpArchive } };
342182
342182
  }
342183
342183
 
342184
+ // node_modules/@qawolf/api-contracts/dist/v1/identity/organization.js
342185
+ var identityOrganization = exports_external.object({
342186
+ id: exports_external.string(),
342187
+ name: exports_external.string(),
342188
+ workOsOrganizationId: exports_external.string(),
342189
+ workspaces: exports_external.array(exports_external.object({
342190
+ id: exports_external.string(),
342191
+ name: exports_external.string(),
342192
+ slug: exports_external.string()
342193
+ }))
342194
+ });
342195
+
342184
342196
  // node_modules/@qawolf/api-contracts/dist/v1/identity/index.js
342185
342197
  var identityResponse = exports_external.union([
342186
342198
  exports_external.object({
@@ -342196,6 +342208,7 @@ var identityResponse = exports_external.union([
342196
342208
  id: exports_external.string(),
342197
342209
  name: exports_external.string()
342198
342210
  }),
342211
+ organizations: exports_external.array(identityOrganization),
342199
342212
  user: exports_external.object({
342200
342213
  email: exports_external.string(),
342201
342214
  id: exports_external.string()
@@ -342205,13 +342218,16 @@ var identityResponse = exports_external.union([
342205
342218
  organization: exports_external.object({
342206
342219
  id: exports_external.string(),
342207
342220
  name: exports_external.string()
342208
- })
342209
- })
342221
+ }),
342222
+ organizations: exports_external.never().optional(),
342223
+ user: exports_external.never().optional()
342224
+ }).transform(({ organization }) => ({ organization }))
342210
342225
  ]);
342211
342226
  // node_modules/@qawolf/api-contracts/dist/v1/ids.js
342212
342227
  var defaultIdSchemas = {
342213
342228
  aiTask: exports_external.string().min(1).describe("The id of the AI task."),
342214
342229
  automation: exports_external.string().min(1).describe("The id of the automation."),
342230
+ chatSession: exports_external.string().min(1).describe("The id of the chat session."),
342215
342231
  environment: exports_external.string().min(1).describe("The id of the environment."),
342216
342232
  environmentRef: exports_external.string().min(1).describe("The id or alias of the environment. Aliases require a team API key."),
342217
342233
  flow: exports_external.string().min(1).describe("The id of the flow."),
@@ -342239,20 +342255,25 @@ var makeFlowSelectionSchema = (ids) => exports_external.object({
342239
342255
  // node_modules/@qawolf/api-contracts/dist/v1/run/index.js
342240
342256
  var makeCreateRunContract = (ids) => {
342241
342257
  const input = exports_external.object({
342242
- aiTaskId: ids.aiTask.describe("The AI task whose conversation should receive run status updates.").optional(),
342258
+ aiTaskId: ids.aiTask.optional().describe("The AI task whose conversation should receive run status updates."),
342259
+ chatSessionId: ids.chatSession.optional().describe("The chat session whose transcript should receive run status updates."),
342243
342260
  environmentId: ids.environmentRef,
342244
342261
  environmentVariables: exports_external.record(exports_external.string(), exports_external.string()).optional(),
342245
342262
  ignoreRules: exports_external.boolean().describe("Ignore this team's sequencing rules for this run. By default they are honoured: the flows your selection depends on are added to the run, and flows run in the order the rules require. Set this to run exactly what you selected, in any order.").default(false),
342246
342263
  pullRequestNumber: exports_external.number().int().positive().describe("The number of the pull request to associate with the run.").optional(),
342247
342264
  repository: exports_external.string().min(1).describe('The owner/name of the repository, e.g. "acme/web".').optional()
342248
- }).and(makeFlowSelectionSchema(ids));
342265
+ }).and(makeFlowSelectionSchema(ids)).refine((value) => !(value.aiTaskId && value.chatSessionId), {
342266
+ message: "Provide at most one of aiTaskId and chatSessionId: a task already implies its own chat session.",
342267
+ path: ["chatSessionId"]
342268
+ });
342249
342269
  const output = resource({
342250
342270
  excludedFlows: exports_external.array(exports_external.object({
342251
342271
  flowId: ids.flow,
342252
342272
  name: exports_external.string().describe("The name of the flow."),
342253
342273
  reason: exports_external.enum(["deleted", "not-on-branch"]).describe('Why the flow cannot run: "deleted" means the flow was deleted, "not-on-branch" means the flow has no file at the commit the run was created from.')
342254
342274
  })).describe("Explicitly requested flows that were left out of the run, each with the reason. Flows selected through tags are not reported here."),
342255
- runId: ids.run
342275
+ runId: ids.run,
342276
+ tracking: exports_external.enum(["registered", "failed", "not-requested"]).describe('Whether the conversation named by aiTaskId or chatSessionId will receive run status updates: "registered" when it will, "failed" when the run was created but the registration failed, "not-requested" when neither id was given or the AI task has no conversation to notify.')
342256
342277
  }, { urlFieldDescription: "Absolute URL of the run page." });
342257
342278
  return {
342258
342279
  description: "Create a run for the selected flows and/or tags in an environment.",
@@ -346164,7 +346185,7 @@ function startUpdateCheck(deps) {
346164
346185
  // package.json
346165
346186
  var package_default = {
346166
346187
  name: "@qawolf/cli",
346167
- version: "1.21.0",
346188
+ version: "1.22.1",
346168
346189
  description: "Run and manage QA Wolf flows from the terminal, CI, or an AI agent",
346169
346190
  keywords: [
346170
346191
  "automation",
@@ -346235,7 +346256,7 @@ var package_default = {
346235
346256
  "@clack/prompts": "1.5.1",
346236
346257
  "@napi-rs/keyring": "1.3.0",
346237
346258
  "@oxc-node/core": "0.1.0",
346238
- "@qawolf/api-contracts": "0.37.0",
346259
+ "@qawolf/api-contracts": "0.39.0",
346239
346260
  "@qawolf/emails": "1.1.1",
346240
346261
  "@qawolf/flow-targets": "1.0.0",
346241
346262
  "@qawolf/flows": "0.1.4",
@@ -357341,18 +357362,38 @@ var skippedContractNames = new Set([
357341
357362
  "runner.terminate"
357342
357363
  ]);
357343
357364
 
357344
- // src/commands/publicApi/index.ts
357345
- var groupDescriptions = {
357346
- run: "Trigger and manage QA Wolf runs on the platform"
357347
- };
357365
+ // src/commands/publicApi/environmentOptions.ts
357348
357366
  var optionEnvironmentVariables = new Map([
357349
357367
  ["environmentId", "QAWOLF_ENVIRONMENT"],
357350
- ["public.run.create.aiTaskId", "QAWOLF_AI_TASK_ID"]
357368
+ ["public.run.create.aiTaskId", "QAWOLF_AI_TASK_ID"],
357369
+ ["public.run.create.chatSessionId", "QAWOLF_CHAT_SESSION_ID"]
357351
357370
  ]);
357352
357371
  function optionEnvironmentVariable(spec, path9) {
357353
357372
  const dotted = path9.join(".");
357354
357373
  return optionEnvironmentVariables.get(`${spec.trpcPath}.${dotted}`) ?? optionEnvironmentVariables.get(dotted);
357355
357374
  }
357375
+ var exclusiveOptions = new Map([
357376
+ ["public.run.create", { keep: "aiTaskId", drop: "chatSessionId" }]
357377
+ ]);
357378
+ function withoutExclusiveConflict(spec, command, options) {
357379
+ const pair = exclusiveOptions.get(spec.trpcPath);
357380
+ if (!pair)
357381
+ return options;
357382
+ if (options[pair.keep] === undefined || options[pair.drop] === undefined) {
357383
+ return options;
357384
+ }
357385
+ const fromEnvironment = (key) => command.getOptionValueSource(key) === "env";
357386
+ if (!fromEnvironment(pair.keep) && !fromEnvironment(pair.drop)) {
357387
+ return options;
357388
+ }
357389
+ const dropped = fromEnvironment(pair.drop) ? pair.drop : pair.keep;
357390
+ return Object.fromEntries(Object.entries(options).filter(([key]) => key !== dropped));
357391
+ }
357392
+
357393
+ // src/commands/publicApi/index.ts
357394
+ var groupDescriptions = {
357395
+ run: "Trigger and manage QA Wolf runs on the platform"
357396
+ };
357356
357397
  function resolveGroup(parent2, segment) {
357357
357398
  const existing = parent2.commands.find((command) => command.name() === segment);
357358
357399
  return existing ?? parent2.command(segment).description(groupDescriptions[segment] ?? `QA Wolf public API ${segment} commands`);
@@ -357381,7 +357422,7 @@ function registerSpec(program2, signals, spec, authDeps) {
357381
357422
  command.option(flag.flag, flag.description);
357382
357423
  }
357383
357424
  }
357384
- command.action((options, leaf) => withAuthContext(signals, (ctx) => handlePublicApiCommand(ctx, spec, options), authDeps ?? {})(options, leaf));
357425
+ command.action((options, leaf) => withAuthContext(signals, (ctx) => handlePublicApiCommand(ctx, spec, withoutExclusiveConflict(spec, leaf, options)), authDeps ?? {})(options, leaf));
357385
357426
  }
357386
357427
  function registerPublicApiCommands(program2, signals, options = {}) {
357387
357428
  const specs = buildCommandSpecs(options.contracts ?? publicContractsV1, {
@@ -359747,4 +359788,4 @@ createProgram({ signals }).parseAsync().catch(() => {
359747
359788
  process.exitCode = 1;
359748
359789
  }).finally(() => flushAndExit(typeof process.exitCode === "number" ? process.exitCode : 0));
359749
359790
 
359750
- //# debugId=65DBB9A4D5E4AFCD64756E2164756E21
359791
+ //# debugId=CDE51BC4C33640F464756E2164756E21
@@ -185448,6 +185448,18 @@ function date4(params) {
185448
185448
 
185449
185449
  // node_modules/zod/v4/classic/external.js
185450
185450
  config(en_default());
185451
+ // node_modules/@qawolf/api-contracts/dist/v1/identity/organization.js
185452
+ var identityOrganization = exports_external.object({
185453
+ id: exports_external.string(),
185454
+ name: exports_external.string(),
185455
+ workOsOrganizationId: exports_external.string(),
185456
+ workspaces: exports_external.array(exports_external.object({
185457
+ id: exports_external.string(),
185458
+ name: exports_external.string(),
185459
+ slug: exports_external.string()
185460
+ }))
185461
+ });
185462
+
185451
185463
  // node_modules/@qawolf/api-contracts/dist/v1/identity/index.js
185452
185464
  var identityResponse = exports_external.union([
185453
185465
  exports_external.object({
@@ -185463,6 +185475,7 @@ var identityResponse = exports_external.union([
185463
185475
  id: exports_external.string(),
185464
185476
  name: exports_external.string()
185465
185477
  }),
185478
+ organizations: exports_external.array(identityOrganization),
185466
185479
  user: exports_external.object({
185467
185480
  email: exports_external.string(),
185468
185481
  id: exports_external.string()
@@ -185472,13 +185485,16 @@ var identityResponse = exports_external.union([
185472
185485
  organization: exports_external.object({
185473
185486
  id: exports_external.string(),
185474
185487
  name: exports_external.string()
185475
- })
185476
- })
185488
+ }),
185489
+ organizations: exports_external.never().optional(),
185490
+ user: exports_external.never().optional()
185491
+ }).transform(({ organization }) => ({ organization }))
185477
185492
  ]);
185478
185493
  // node_modules/@qawolf/api-contracts/dist/v1/ids.js
185479
185494
  var defaultIdSchemas = {
185480
185495
  aiTask: exports_external.string().min(1).describe("The id of the AI task."),
185481
185496
  automation: exports_external.string().min(1).describe("The id of the automation."),
185497
+ chatSession: exports_external.string().min(1).describe("The id of the chat session."),
185482
185498
  environment: exports_external.string().min(1).describe("The id of the environment."),
185483
185499
  environmentRef: exports_external.string().min(1).describe("The id or alias of the environment. Aliases require a team API key."),
185484
185500
  flow: exports_external.string().min(1).describe("The id of the flow."),
@@ -185506,20 +185522,25 @@ var makeFlowSelectionSchema = (ids) => exports_external.object({
185506
185522
  // node_modules/@qawolf/api-contracts/dist/v1/run/index.js
185507
185523
  var makeCreateRunContract = (ids) => {
185508
185524
  const input = exports_external.object({
185509
- aiTaskId: ids.aiTask.describe("The AI task whose conversation should receive run status updates.").optional(),
185525
+ aiTaskId: ids.aiTask.optional().describe("The AI task whose conversation should receive run status updates."),
185526
+ chatSessionId: ids.chatSession.optional().describe("The chat session whose transcript should receive run status updates."),
185510
185527
  environmentId: ids.environmentRef,
185511
185528
  environmentVariables: exports_external.record(exports_external.string(), exports_external.string()).optional(),
185512
185529
  ignoreRules: exports_external.boolean().describe("Ignore this team's sequencing rules for this run. By default they are honoured: the flows your selection depends on are added to the run, and flows run in the order the rules require. Set this to run exactly what you selected, in any order.").default(false),
185513
185530
  pullRequestNumber: exports_external.number().int().positive().describe("The number of the pull request to associate with the run.").optional(),
185514
185531
  repository: exports_external.string().min(1).describe('The owner/name of the repository, e.g. "acme/web".').optional()
185515
- }).and(makeFlowSelectionSchema(ids));
185532
+ }).and(makeFlowSelectionSchema(ids)).refine((value) => !(value.aiTaskId && value.chatSessionId), {
185533
+ message: "Provide at most one of aiTaskId and chatSessionId: a task already implies its own chat session.",
185534
+ path: ["chatSessionId"]
185535
+ });
185516
185536
  const output = resource({
185517
185537
  excludedFlows: exports_external.array(exports_external.object({
185518
185538
  flowId: ids.flow,
185519
185539
  name: exports_external.string().describe("The name of the flow."),
185520
185540
  reason: exports_external.enum(["deleted", "not-on-branch"]).describe('Why the flow cannot run: "deleted" means the flow was deleted, "not-on-branch" means the flow has no file at the commit the run was created from.')
185521
185541
  })).describe("Explicitly requested flows that were left out of the run, each with the reason. Flows selected through tags are not reported here."),
185522
- runId: ids.run
185542
+ runId: ids.run,
185543
+ tracking: exports_external.enum(["registered", "failed", "not-requested"]).describe('Whether the conversation named by aiTaskId or chatSessionId will receive run status updates: "registered" when it will, "failed" when the run was created but the registration failed, "not-requested" when neither id was given or the AI task has no conversation to notify.')
185523
185544
  }, { urlFieldDescription: "Absolute URL of the run page." });
185524
185545
  return {
185525
185546
  description: "Create a run for the selected flows and/or tags in an environment.",
@@ -191010,4 +191031,4 @@ export {
191010
191031
  createRunnerSdk
191011
191032
  };
191012
191033
 
191013
- //# debugId=4D175977D5C9693B64756E2164756E21
191034
+ //# debugId=42D4AA4E1C2C966064756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qawolf/cli",
3
- "version": "1.21.0",
3
+ "version": "1.22.1",
4
4
  "description": "Run and manage QA Wolf flows from the terminal, CI, or an AI agent",
5
5
  "keywords": [
6
6
  "automation",
@@ -71,7 +71,7 @@
71
71
  "@clack/prompts": "1.5.1",
72
72
  "@napi-rs/keyring": "1.3.0",
73
73
  "@oxc-node/core": "0.1.0",
74
- "@qawolf/api-contracts": "0.37.0",
74
+ "@qawolf/api-contracts": "0.39.0",
75
75
  "@qawolf/emails": "1.1.1",
76
76
  "@qawolf/flow-targets": "1.0.0",
77
77
  "@qawolf/flows": "0.1.4",