opencara 0.19.2 → 0.19.3

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/index.js +69 -20
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -174,6 +174,42 @@ function parseStringArray(value) {
174
174
  return [];
175
175
  return value.filter((v) => typeof v === "string");
176
176
  }
177
+ function parseTriggerSection(raw, defaults) {
178
+ if (!raw)
179
+ return { ...defaults };
180
+ const result = {};
181
+ const eventsRaw = raw.events !== void 0 ? raw.events : raw.on;
182
+ if (eventsRaw === false) {
183
+ } else if (Array.isArray(eventsRaw)) {
184
+ result.events = eventsRaw.filter((v) => typeof v === "string");
185
+ } else if (defaults.events !== void 0) {
186
+ result.events = defaults.events;
187
+ }
188
+ if (raw.comment === false) {
189
+ } else if (typeof raw.comment === "string") {
190
+ result.comment = raw.comment;
191
+ } else if (defaults.comment !== void 0) {
192
+ result.comment = defaults.comment;
193
+ }
194
+ if (raw.label === false) {
195
+ } else if (typeof raw.label === "string") {
196
+ result.label = raw.label;
197
+ } else if (defaults.label !== void 0) {
198
+ result.label = defaults.label;
199
+ }
200
+ if (raw.status === false) {
201
+ } else if (typeof raw.status === "string") {
202
+ result.status = raw.status;
203
+ } else if (defaults.status !== void 0) {
204
+ result.status = defaults.status;
205
+ }
206
+ if (Array.isArray(raw.skip)) {
207
+ result.skip = raw.skip.filter((v) => typeof v === "string");
208
+ } else if (defaults.skip !== void 0) {
209
+ result.skip = defaults.skip;
210
+ }
211
+ return result;
212
+ }
177
213
  var DEFAULT_MODEL_DIVERSITY_GRACE_MS = 3e4;
178
214
  function parseDurationSeconds(value, defaultMs) {
179
215
  if (typeof value === "number")
@@ -188,11 +224,23 @@ function parseDurationSeconds(value, defaultMs) {
188
224
  const seconds = parseInt(match[1], 10);
189
225
  return clamp(seconds, 0, 300) * 1e3;
190
226
  }
191
- var DEFAULT_TRIGGER = {
192
- on: ["opened"],
227
+ var DEFAULT_REVIEW_TRIGGER = {
228
+ events: ["opened"],
193
229
  comment: "/opencara review",
194
230
  skip: ["draft"]
195
231
  };
232
+ var DEFAULT_IMPLEMENT_TRIGGER = {
233
+ comment: "/opencara go",
234
+ status: "Ready"
235
+ };
236
+ var DEFAULT_FIX_TRIGGER = {
237
+ comment: "/opencara fix"
238
+ };
239
+ var DEFAULT_TRIAGE_TRIGGER = {
240
+ events: ["opened"],
241
+ comment: "/opencara triage"
242
+ };
243
+ var DEFAULT_TRIGGER = DEFAULT_REVIEW_TRIGGER;
196
244
  var DEFAULT_FEATURE_CONFIG = {
197
245
  prompt: "Review this pull request for bugs, security issues, and code quality.",
198
246
  agentCount: 1,
@@ -273,16 +321,12 @@ function parseFeatureFields(raw, defaults) {
273
321
  };
274
322
  }
275
323
  function parseReviewSection(raw) {
276
- const triggerRaw = isObject(raw.trigger) ? raw.trigger : {};
324
+ const triggerRaw = isObject(raw.trigger) ? raw.trigger : void 0;
277
325
  const reviewerRaw = isObject(raw.reviewer) ? raw.reviewer : {};
278
326
  const base = parseFeatureFields(raw, DEFAULT_FEATURE_CONFIG);
279
327
  return {
280
328
  ...base,
281
- trigger: {
282
- on: Array.isArray(triggerRaw.on) ? triggerRaw.on.filter((v) => typeof v === "string") : DEFAULT_TRIGGER.on,
283
- comment: typeof triggerRaw.comment === "string" ? triggerRaw.comment : DEFAULT_TRIGGER.comment,
284
- skip: Array.isArray(triggerRaw.skip) ? triggerRaw.skip.filter((v) => typeof v === "string") : DEFAULT_TRIGGER.skip
285
- },
329
+ trigger: parseTriggerSection(triggerRaw, DEFAULT_REVIEW_TRIGGER),
286
330
  reviewer: {
287
331
  whitelist: parseEntityList(reviewerRaw.whitelist),
288
332
  blacklist: parseEntityList(reviewerRaw.blacklist)
@@ -341,12 +385,17 @@ function parseTriageSection(raw) {
341
385
  }
342
386
  }
343
387
  }
388
+ const triggerRaw = isObject(raw.trigger) ? raw.trigger : void 0;
389
+ let triageDefaults = DEFAULT_TRIAGE_TRIGGER;
390
+ if (!triggerRaw && Array.isArray(raw.triggers)) {
391
+ triageDefaults = { ...DEFAULT_TRIAGE_TRIGGER, events: parseStringArray(raw.triggers) };
392
+ }
344
393
  return {
345
394
  ...base,
346
395
  enabled: typeof raw.enabled === "boolean" ? raw.enabled : true,
396
+ trigger: parseTriggerSection(triggerRaw, triageDefaults),
347
397
  defaultMode,
348
398
  autoLabel: typeof raw.auto_label === "boolean" ? raw.auto_label : false,
349
- triggers: Array.isArray(raw.triggers) ? parseStringArray(raw.triggers) : ["opened"],
350
399
  ...authorModes ? { authorModes } : {}
351
400
  };
352
401
  }
@@ -360,9 +409,11 @@ var DEFAULT_IMPLEMENT_FEATURE = {
360
409
  };
361
410
  function parseImplementSection(raw) {
362
411
  const base = parseFeatureFields(raw, DEFAULT_IMPLEMENT_FEATURE);
412
+ const triggerRaw = isObject(raw.trigger) ? raw.trigger : void 0;
363
413
  return {
364
414
  ...base,
365
- enabled: typeof raw.enabled === "boolean" ? raw.enabled : true
415
+ enabled: typeof raw.enabled === "boolean" ? raw.enabled : true,
416
+ trigger: parseTriggerSection(triggerRaw, DEFAULT_IMPLEMENT_TRIGGER)
366
417
  };
367
418
  }
368
419
  var DEFAULT_FIX_FEATURE = {
@@ -375,9 +426,11 @@ var DEFAULT_FIX_FEATURE = {
375
426
  };
376
427
  function parseFixSection(raw) {
377
428
  const base = parseFeatureFields(raw, DEFAULT_FIX_FEATURE);
429
+ const triggerRaw = isObject(raw.trigger) ? raw.trigger : void 0;
378
430
  return {
379
431
  ...base,
380
- enabled: typeof raw.enabled === "boolean" ? raw.enabled : true
432
+ enabled: typeof raw.enabled === "boolean" ? raw.enabled : true,
433
+ trigger: parseTriggerSection(triggerRaw, DEFAULT_FIX_TRIGGER)
381
434
  };
382
435
  }
383
436
  function parseOpenCaraConfig(toml) {
@@ -423,7 +476,7 @@ function parseOpenCaraConfig(toml) {
423
476
  return config;
424
477
  }
425
478
  function parseLegacyReviewConfig(raw) {
426
- const triggerRaw = isObject(raw.trigger) ? raw.trigger : {};
479
+ const triggerRaw = isObject(raw.trigger) ? raw.trigger : void 0;
427
480
  const agentsRaw = isObject(raw.agents) ? raw.agents : {};
428
481
  const reviewerRaw = isObject(raw.reviewer) ? raw.reviewer : {};
429
482
  return {
@@ -433,11 +486,7 @@ function parseLegacyReviewConfig(raw) {
433
486
  preferredModels: parseStringArray(agentsRaw.preferred_models),
434
487
  preferredTools: parseStringArray(agentsRaw.preferred_tools),
435
488
  modelDiversityGraceMs: parseDurationSeconds(raw.model_diversity_grace ?? agentsRaw.model_diversity_grace, DEFAULT_MODEL_DIVERSITY_GRACE_MS),
436
- trigger: {
437
- on: Array.isArray(triggerRaw.on) ? triggerRaw.on.filter((v) => typeof v === "string") : DEFAULT_TRIGGER.on,
438
- comment: typeof triggerRaw.comment === "string" ? triggerRaw.comment : DEFAULT_TRIGGER.comment,
439
- skip: Array.isArray(triggerRaw.skip) ? triggerRaw.skip.filter((v) => typeof v === "string") : DEFAULT_TRIGGER.skip
440
- },
489
+ trigger: parseTriggerSection(triggerRaw, DEFAULT_REVIEW_TRIGGER),
441
490
  reviewer: {
442
491
  whitelist: parseEntityList(reviewerRaw.whitelist),
443
492
  blacklist: parseEntityList(reviewerRaw.blacklist)
@@ -5211,7 +5260,7 @@ function sleep2(ms, signal) {
5211
5260
  async function startAgent(agentId, platformUrl, agentInfo, reviewDeps, consumptionDeps, options) {
5212
5261
  const client = new ApiClient(platformUrl, {
5213
5262
  authToken: options?.authToken,
5214
- cliVersion: "0.19.2",
5263
+ cliVersion: "0.19.3",
5215
5264
  versionOverride: options?.versionOverride,
5216
5265
  onTokenRefresh: options?.onTokenRefresh
5217
5266
  });
@@ -5498,7 +5547,7 @@ async function startBatchAgents(config, agents, pollIntervalMs, oauthToken, opti
5498
5547
  const { versionOverride, verbose, instancesOverride, agentOwner, userOrgs } = options;
5499
5548
  const client = new ApiClient(config.platformUrl, {
5500
5549
  authToken: oauthToken,
5501
- cliVersion: "0.19.2",
5550
+ cliVersion: "0.19.3",
5502
5551
  versionOverride,
5503
5552
  onTokenRefresh: () => getValidToken(config.platformUrl, { configPath: config.authFile })
5504
5553
  });
@@ -6655,7 +6704,7 @@ var statusCommand = new Command4("status").description("Show agent config, conne
6655
6704
  });
6656
6705
 
6657
6706
  // src/index.ts
6658
- var program = new Command5().name("opencara").description("OpenCara \u2014 distributed AI code review agent").version("0.19.2");
6707
+ var program = new Command5().name("opencara").description("OpenCara \u2014 distributed AI code review agent").version("0.19.3");
6659
6708
  program.addCommand(agentCommand);
6660
6709
  program.addCommand(authCommand());
6661
6710
  program.addCommand(dedupCommand());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencara",
3
- "version": "0.19.2",
3
+ "version": "0.19.3",
4
4
  "description": "Distributed AI code review agent — poll, review, and submit PR reviews using your own AI tools",
5
5
  "type": "module",
6
6
  "license": "MIT",