@open330/oac 2026.220.1 → 2026.221.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.
@@ -20,7 +20,7 @@ import {
20
20
  persistContext,
21
21
  rankTasks,
22
22
  updateBacklog
23
- } from "./chunk-OTPXGXO7.js";
23
+ } from "./chunk-6JEFW6B7.js";
24
24
  import {
25
25
  buildEpicExecutionPlan,
26
26
  buildExecutionPlan,
@@ -32,7 +32,7 @@ import {
32
32
  createSandbox,
33
33
  epicAsTask,
34
34
  executeTask
35
- } from "./chunk-QPVNC7S4.js";
35
+ } from "./chunk-VX3VMPD2.js";
36
36
  import {
37
37
  UNLIMITED_BUDGET,
38
38
  createEventBus,
@@ -154,6 +154,9 @@ function shouldTryLegacyDefineConfigFallback(error) {
154
154
  if (!(error instanceof Error)) {
155
155
  return false;
156
156
  }
157
+ if (error.code === "ERR_UNKNOWN_FILE_EXTENSION") {
158
+ return true;
159
+ }
157
160
  return DEFINE_CONFIG_IMPORT.test(error.message);
158
161
  }
159
162
  function transformLegacyDefineConfigSource(source) {
@@ -571,16 +574,8 @@ async function runDoctorChecks() {
571
574
  status: claudeResult.ok ? "pass" : "fail",
572
575
  message: claudeResult.ok ? void 0 : explainCommandFailure("claude", claudeResult)
573
576
  });
574
- const codexResult = await runCommand("codex", ["--version"]);
575
- const codexVersion = extractVersion(codexResult.stdout) ?? "--";
576
- checks.push({
577
- id: "codex",
578
- name: "Codex CLI",
579
- requirement: "installed",
580
- value: codexVersion,
581
- status: codexResult.ok ? "pass" : "fail",
582
- message: codexResult.ok ? void 0 : explainCommandFailure("codex", codexResult)
583
- });
577
+ const codexCheck = await checkCodexCli();
578
+ checks.push(codexCheck);
584
579
  const opencodeResult = await runCommand("opencode", ["--version"]);
585
580
  const opencodeVersion = extractVersion(opencodeResult.stdout) ?? "--";
586
581
  checks.push({
@@ -625,6 +620,38 @@ async function checkGithubAuth() {
625
620
  message: "No GitHub authentication detected. Set GITHUB_TOKEN or run `gh auth login`."
626
621
  };
627
622
  }
623
+ async function checkCodexCli() {
624
+ const codexResult = await runCommand("codex", ["--version"]);
625
+ if (codexResult.ok) {
626
+ const version = extractVersion(codexResult.stdout) ?? "--";
627
+ return {
628
+ id: "codex",
629
+ name: "Codex CLI",
630
+ requirement: "installed",
631
+ value: version,
632
+ status: "pass"
633
+ };
634
+ }
635
+ const whichResult = await runCommand("which", ["codex"]);
636
+ if (whichResult.ok && whichResult.stdout.trim().length > 0) {
637
+ return {
638
+ id: "codex",
639
+ name: "Codex CLI",
640
+ requirement: "installed",
641
+ value: "installed",
642
+ status: "pass",
643
+ message: "Version check timed out \u2014 binary found in PATH."
644
+ };
645
+ }
646
+ return {
647
+ id: "codex",
648
+ name: "Codex CLI",
649
+ requirement: "installed",
650
+ value: "--",
651
+ status: "fail",
652
+ message: explainCommandFailure("codex", codexResult)
653
+ };
654
+ }
628
655
  function renderDoctorOutput(ui, checks, allPassed) {
629
656
  console.log("Checking environment...");
630
657
  console.log("");
@@ -697,7 +724,7 @@ async function runCommand(command, args) {
697
724
  const { execa: execa3 } = await import("execa");
698
725
  const result = await execa3(command, args, {
699
726
  reject: false,
700
- timeout: 3e4,
727
+ timeout: 1e4,
701
728
  stdin: "ignore"
702
729
  });
703
730
  return {
@@ -1599,6 +1626,8 @@ function formatDuration(seconds) {
1599
1626
  }
1600
1627
 
1601
1628
  // src/cli/commands/run/pr.ts
1629
+ var GITHUB_API_BASE_URL = "https://api.github.com";
1630
+ var OAC_PR_TITLE_PREFIX = "[OAC]";
1602
1631
  async function createPullRequest(input2) {
1603
1632
  if (!input2.sandbox) {
1604
1633
  return void 0;
@@ -1610,6 +1639,19 @@ async function createPullRequest(input2) {
1610
1639
  ghEnv.GH_TOKEN = input2.ghToken;
1611
1640
  ghEnv.GITHUB_TOKEN = input2.ghToken;
1612
1641
  }
1642
+ if (input2.task.linkedIssue && input2.ghToken) {
1643
+ const duplicate = await findExistingOacPR(
1644
+ input2.repoFullName,
1645
+ input2.task.linkedIssue.number,
1646
+ input2.ghToken
1647
+ );
1648
+ if (duplicate) {
1649
+ console.warn(
1650
+ `[oac] Skipping PR: existing OAC PR #${duplicate} already targets issue #${input2.task.linkedIssue.number}`
1651
+ );
1652
+ return void 0;
1653
+ }
1654
+ }
1613
1655
  await execa("git", ["push", "--set-upstream", "origin", branchName], {
1614
1656
  cwd: sandboxPath,
1615
1657
  env: ghEnv,
@@ -1674,6 +1716,44 @@ async function createPullRequest(input2) {
1674
1716
  return void 0;
1675
1717
  }
1676
1718
  }
1719
+ async function findExistingOacPR(repoFullName, issueNumber, token) {
1720
+ const url = `${GITHUB_API_BASE_URL}/repos/${repoFullName}/pulls?state=open&per_page=100&sort=updated&direction=desc`;
1721
+ try {
1722
+ const response = await fetch(url, {
1723
+ method: "GET",
1724
+ headers: {
1725
+ Authorization: `Bearer ${token}`,
1726
+ Accept: "application/vnd.github.v3+json"
1727
+ },
1728
+ signal: AbortSignal.timeout(15e3)
1729
+ });
1730
+ if (!response.ok) {
1731
+ return void 0;
1732
+ }
1733
+ const pulls = await response.json();
1734
+ if (!Array.isArray(pulls)) {
1735
+ return void 0;
1736
+ }
1737
+ const issueRefPattern = /(?:Fixes|Closes|Resolves)\s+#(\d+)/gi;
1738
+ for (const pr of pulls) {
1739
+ if (!pr || typeof pr !== "object") continue;
1740
+ const record = pr;
1741
+ const title = typeof record.title === "string" ? record.title : "";
1742
+ if (!title.startsWith(OAC_PR_TITLE_PREFIX)) continue;
1743
+ const prNumber = typeof record.number === "number" ? record.number : void 0;
1744
+ const body = typeof record.body === "string" ? record.body : "";
1745
+ for (const match of body.matchAll(issueRefPattern)) {
1746
+ const num = Number.parseInt(match[1], 10);
1747
+ if (num === issueNumber) {
1748
+ return prNumber;
1749
+ }
1750
+ }
1751
+ }
1752
+ return void 0;
1753
+ } catch {
1754
+ return void 0;
1755
+ }
1756
+ }
1677
1757
 
1678
1758
  // src/cli/commands/run/task.ts
1679
1759
  import Table5 from "cli-table3";
@@ -3119,7 +3199,7 @@ function registerCommands(program) {
3119
3199
  program.addCommand(createExplainCommand());
3120
3200
  }
3121
3201
  async function createCliProgram() {
3122
- const version = true ? "2026.220.1" : "0.0.0";
3202
+ const version = true ? "2026.221.0" : "0.0.0";
3123
3203
  const program = new Command13();
3124
3204
  program.name("oac").description("Open Agent Contribution CLI").version(version).option("--config <path>", "Config file path", "oac.config.ts").option("--verbose", "Enable verbose logging", false).option("--quiet", "Suppress non-error output", false).option("--json", "Output machine-readable JSON", false).option("--no-color", "Disable ANSI colors");
3125
3205
  registerCommands(program);
@@ -3149,4 +3229,4 @@ export {
3149
3229
  createCliProgram,
3150
3230
  runCli
3151
3231
  };
3152
- //# sourceMappingURL=chunk-7Y4LZUDP.js.map
3232
+ //# sourceMappingURL=chunk-SUN44O2W.js.map