opencara 0.22.8 → 0.23.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/index.js +53 -13
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -165,7 +165,7 @@ function parseTimeout(value) {
165
165
  if (!match)
166
166
  return "10m";
167
167
  const minutes = parseInt(match[1], 10);
168
- if (minutes < 1 || minutes > 120)
168
+ if (minutes < 1)
169
169
  return "10m";
170
170
  return value;
171
171
  }
@@ -4011,16 +4011,56 @@ async function executeImplementTask(client, agentId, task, deps, timeoutSeconds,
4011
4011
  runTool
4012
4012
  );
4013
4013
  logger.log(` AI completed (${aiResult.tokensUsed.toLocaleString()} tokens)`);
4014
- logger.log(" Committing and pushing changes...");
4015
- const filesChanged = gitOps.commitAndPush(worktreePath, issueNumber, issueTitle);
4016
- logger.log(` Pushed ${filesChanged} file(s) to ${branchName}`);
4017
- logger.log(" Creating pull request...");
4018
- const pr = gitOps.createPR(worktreePath, issueNumber, issueTitle, aiResult.output.summary, branchName);
4019
- logger.log(` PR #${pr.prNumber} created: ${pr.prUrl}`);
4014
+ let filesChanged = 0;
4015
+ let uncommitted = 0;
4016
+ try {
4017
+ uncommitted = countChangedFiles(worktreePath);
4018
+ } catch {
4019
+ uncommitted = 1;
4020
+ }
4021
+ if (uncommitted > 0) {
4022
+ logger.log(" Committing and pushing changes...");
4023
+ filesChanged = gitOps.commitAndPush(worktreePath, issueNumber, issueTitle);
4024
+ logger.log(` Pushed ${filesChanged} file(s) to ${branchName}`);
4025
+ } else {
4026
+ logger.log(" No uncommitted changes \u2014 AI agent handled commit/push");
4027
+ }
4028
+ let prNumber = 0;
4029
+ let prUrl = "";
4030
+ try {
4031
+ logger.log(" Creating pull request...");
4032
+ const pr = gitOps.createPR(
4033
+ worktreePath,
4034
+ issueNumber,
4035
+ issueTitle,
4036
+ aiResult.output.summary,
4037
+ branchName
4038
+ );
4039
+ prNumber = pr.prNumber;
4040
+ prUrl = pr.prUrl;
4041
+ logger.log(` PR #${prNumber} created: ${prUrl}`);
4042
+ } catch (prErr) {
4043
+ try {
4044
+ const existing = ghExec(
4045
+ ["pr", "list", "--head", branchName, "--json", "number,url", "--limit", "1"],
4046
+ worktreePath
4047
+ );
4048
+ const parsed = JSON.parse(existing);
4049
+ if (parsed.length > 0) {
4050
+ prNumber = parsed[0].number;
4051
+ prUrl = parsed[0].url;
4052
+ logger.log(` PR #${prNumber} already exists: ${prUrl}`);
4053
+ } else {
4054
+ throw prErr;
4055
+ }
4056
+ } catch {
4057
+ throw prErr;
4058
+ }
4059
+ }
4020
4060
  const report = {
4021
4061
  branch: branchName,
4022
- pr_number: pr.prNumber,
4023
- pr_url: pr.prUrl,
4062
+ pr_number: prNumber,
4063
+ pr_url: prUrl,
4024
4064
  files_changed: filesChanged,
4025
4065
  summary: aiResult.output.summary
4026
4066
  };
@@ -5531,7 +5571,7 @@ function sleep2(ms, signal) {
5531
5571
  async function startAgent(agentId, platformUrl, agentInfo, reviewDeps, consumptionDeps, options) {
5532
5572
  const client = new ApiClient(platformUrl, {
5533
5573
  authToken: options?.authToken,
5534
- cliVersion: "0.22.8",
5574
+ cliVersion: "0.23.0",
5535
5575
  versionOverride: options?.versionOverride,
5536
5576
  onTokenRefresh: options?.onTokenRefresh
5537
5577
  });
@@ -5817,7 +5857,7 @@ async function startBatchAgents(config, agents, pollIntervalMs, oauthToken, opti
5817
5857
  const { versionOverride, verbose, instancesOverride, agentOwner, userOrgs } = options;
5818
5858
  const client = new ApiClient(config.platformUrl, {
5819
5859
  authToken: oauthToken,
5820
- cliVersion: "0.22.8",
5860
+ cliVersion: "0.23.0",
5821
5861
  versionOverride,
5822
5862
  onTokenRefresh: () => getValidToken(config.platformUrl, { configPath: config.authFile })
5823
5863
  });
@@ -6160,7 +6200,7 @@ agentCommand.command("start").description("Start agents in polling mode").option
6160
6200
  }
6161
6201
  config = loadConfig();
6162
6202
  }
6163
- console.log(formatVersionBanner("0.22.8", "c1ec83a"));
6203
+ console.log(formatVersionBanner("0.23.0", "6cd5f00"));
6164
6204
  if (config.agents && config.agents.length > 0) {
6165
6205
  const toolEntries = config.agents.map((a) => ({
6166
6206
  tool: a.tool,
@@ -6983,7 +7023,7 @@ var statusCommand = new Command4("status").description("Show agent config, conne
6983
7023
  });
6984
7024
 
6985
7025
  // src/index.ts
6986
- var program = new Command5().name("opencara").description("OpenCara \u2014 distributed AI code review agent").version(`${"0.22.8"} (${"c1ec83a"})`);
7026
+ var program = new Command5().name("opencara").description("OpenCara \u2014 distributed AI code review agent").version(`${"0.23.0"} (${"6cd5f00"})`);
6987
7027
  program.addCommand(agentCommand);
6988
7028
  program.addCommand(authCommand());
6989
7029
  program.addCommand(dedupCommand());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencara",
3
- "version": "0.22.8",
3
+ "version": "0.23.0",
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",