@open330/oac 2026.3.5 → 2026.4.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.

Potentially problematic release.


This version of @open330/oac might be problematic. Click here for more details.

Files changed (52) hide show
  1. package/dist/budget/index.d.ts +78 -0
  2. package/dist/budget/index.js +17 -0
  3. package/dist/chunk-LQC5DLT7.js +317 -0
  4. package/dist/chunk-LQC5DLT7.js.map +1 -0
  5. package/dist/chunk-NDMV4EEK.js +1487 -0
  6. package/dist/chunk-NDMV4EEK.js.map +1 -0
  7. package/dist/chunk-TGZ2TGDA.js +348 -0
  8. package/dist/chunk-TGZ2TGDA.js.map +1 -0
  9. package/dist/chunk-UL66HWYF.js +392 -0
  10. package/dist/chunk-UL66HWYF.js.map +1 -0
  11. package/dist/chunk-VLR2VYFW.js +475 -0
  12. package/dist/chunk-VLR2VYFW.js.map +1 -0
  13. package/dist/{chunk-WC2NAMI3.js → chunk-WD3TJVSA.js} +83 -93
  14. package/dist/chunk-WD3TJVSA.js.map +1 -0
  15. package/dist/chunk-ZPI2VQ7U.js +1732 -0
  16. package/dist/chunk-ZPI2VQ7U.js.map +1 -0
  17. package/dist/cli/cli.js +15 -0
  18. package/dist/cli/cli.js.map +1 -0
  19. package/dist/cli/index.js +18 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/completion/index.d.ts +91 -0
  22. package/dist/completion/index.js +590 -0
  23. package/dist/completion/index.js.map +1 -0
  24. package/dist/core/index.d.ts +1403 -0
  25. package/dist/core/index.js +75 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/dashboard/index.d.ts +14 -0
  28. package/dist/dashboard/index.js +1257 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/discovery/index.d.ts +115 -0
  31. package/dist/discovery/index.js +19 -0
  32. package/dist/discovery/index.js.map +1 -0
  33. package/dist/event-bus-CRLkpNo0.d.ts +91 -0
  34. package/dist/execution/index.d.ts +162 -0
  35. package/dist/execution/index.js +18 -0
  36. package/dist/execution/index.js.map +1 -0
  37. package/dist/repo/index.d.ts +33 -0
  38. package/dist/repo/index.js +19 -0
  39. package/dist/repo/index.js.map +1 -0
  40. package/dist/tracking/index.d.ts +357 -0
  41. package/dist/tracking/index.js +15 -0
  42. package/dist/tracking/index.js.map +1 -0
  43. package/dist/types-CYCwgojB.d.ts +34 -0
  44. package/dist/types-cJZwCZZX.d.ts +172 -0
  45. package/package.json +42 -20
  46. package/dist/chunk-WC2NAMI3.js.map +0 -1
  47. package/dist/cli.js +0 -9
  48. package/dist/index.js +0 -12
  49. package/dist/index.js.map +0 -1
  50. /package/dist/{cli.js.map → budget/index.js.map} +0 -0
  51. /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
  52. /package/dist/{index.d.ts → cli/index.d.ts} +0 -0
@@ -1,8 +1,39 @@
1
- // src/cli.ts
2
- import { readFile as readFile5 } from "fs/promises";
1
+ import {
2
+ cloneRepo,
3
+ resolveRepo
4
+ } from "./chunk-VLR2VYFW.js";
5
+ import {
6
+ CompositeScanner,
7
+ GitHubIssuesScanner,
8
+ LintScanner,
9
+ TestGapScanner,
10
+ TodoScanner,
11
+ rankTasks
12
+ } from "./chunk-ZPI2VQ7U.js";
13
+ import {
14
+ buildExecutionPlan,
15
+ estimateTokens
16
+ } from "./chunk-UL66HWYF.js";
17
+ import {
18
+ ClaudeCodeAdapter,
19
+ CodexAdapter,
20
+ createSandbox,
21
+ executeTask
22
+ } from "./chunk-NDMV4EEK.js";
23
+ import {
24
+ UNLIMITED_BUDGET,
25
+ createEventBus,
26
+ loadConfig
27
+ } from "./chunk-TGZ2TGDA.js";
28
+ import {
29
+ contributionLogSchema,
30
+ writeContributionLog
31
+ } from "./chunk-LQC5DLT7.js";
32
+
33
+ // src/cli/cli.ts
3
34
  import { Command as Command9 } from "commander";
4
35
 
5
- // src/commands/doctor.ts
36
+ // src/cli/commands/doctor.ts
6
37
  import { spawn } from "child_process";
7
38
  import chalk, { Chalk } from "chalk";
8
39
  import { Command } from "commander";
@@ -239,7 +270,7 @@ function runCommand(command, args) {
239
270
  });
240
271
  }
241
272
 
242
- // src/commands/init.ts
273
+ // src/cli/commands/init.ts
243
274
  import { constants as fsConstants } from "fs";
244
275
  import { access, mkdir, writeFile } from "fs/promises";
245
276
  import { resolve } from "path";
@@ -418,10 +449,9 @@ async function pathExists(path) {
418
449
  }
419
450
  }
420
451
 
421
- // src/commands/leaderboard.ts
452
+ // src/cli/commands/leaderboard.ts
422
453
  import { readFile, readdir } from "fs/promises";
423
454
  import { resolve as resolve2 } from "path";
424
- import { contributionLogSchema } from "@open330/oac-tracking";
425
455
  import Table from "cli-table3";
426
456
  import { Command as Command3 } from "commander";
427
457
  function createLeaderboardCommand() {
@@ -628,10 +658,9 @@ function isFileNotFoundError(error) {
628
658
  return error.code === "ENOENT";
629
659
  }
630
660
 
631
- // src/commands/log.ts
661
+ // src/cli/commands/log.ts
632
662
  import { readFile as readFile2, readdir as readdir2 } from "fs/promises";
633
663
  import { resolve as resolve3 } from "path";
634
- import { contributionLogSchema as contributionLogSchema2 } from "@open330/oac-tracking";
635
664
  import Table2 from "cli-table3";
636
665
  import { Command as Command4 } from "commander";
637
666
  function createLogCommand() {
@@ -709,7 +738,7 @@ async function readContributionLogs2(repoPath) {
709
738
  try {
710
739
  const content = await readFile2(filePath, "utf8");
711
740
  const payload = JSON.parse(content);
712
- const parsed = contributionLogSchema2.safeParse(payload);
741
+ const parsed = contributionLogSchema.safeParse(payload);
713
742
  return parsed.success ? parsed.data : null;
714
743
  } catch {
715
744
  return null;
@@ -762,17 +791,7 @@ function isFileNotFoundError2(error) {
762
791
  return code === "ENOENT";
763
792
  }
764
793
 
765
- // src/commands/plan.ts
766
- import { buildExecutionPlan, estimateTokens } from "@open330/oac-budget";
767
- import {
768
- CompositeScanner,
769
- LintScanner,
770
- TodoScanner,
771
- rankTasks
772
- } from "@open330/oac-discovery";
773
- import { cloneRepo, resolveRepo } from "@open330/oac-repo";
774
-
775
- // src/github-auth.ts
794
+ // src/cli/github-auth.ts
776
795
  import { execFileSync } from "child_process";
777
796
  function ensureGitHubAuth() {
778
797
  const githubToken = process.env.GITHUB_TOKEN?.trim();
@@ -828,18 +847,17 @@ function checkGitHubScopes(required = ["repo"]) {
828
847
  }
829
848
  }
830
849
 
831
- // src/commands/plan.ts
850
+ // src/cli/commands/plan.ts
832
851
  import chalk3, { Chalk as Chalk3 } from "chalk";
833
852
  import Table3 from "cli-table3";
834
853
  import { Command as Command5 } from "commander";
835
854
  import ora from "ora";
836
855
 
837
- // src/config-loader.ts
856
+ // src/cli/config-loader.ts
838
857
  import { constants as fsConstants2 } from "fs";
839
858
  import { access as access2, readFile as readFile3 } from "fs/promises";
840
859
  import { resolve as resolve4 } from "path";
841
860
  import { pathToFileURL } from "url";
842
- import { loadConfig } from "@open330/oac-core";
843
861
  var LEGACY_DEFINE_CONFIG_IMPORT = /@(?:open330\/oac-core|oac\/core)/;
844
862
  var LEGACY_DEFINE_CONFIG_IMPORT_LINE = /^\s*import\s*\{\s*defineConfig\s*\}\s*from\s*["']@(?:open330\/oac-core|oac\/core)["'];\s*$/m;
845
863
  var LEGACY_DEFINE_CONFIG_EXPORT = /export\s+default\s+defineConfig\s*\(/;
@@ -909,7 +927,7 @@ async function pathExists2(path) {
909
927
  }
910
928
  }
911
929
 
912
- // src/commands/plan.ts
930
+ // src/cli/commands/plan.ts
913
931
  function createPlanCommand() {
914
932
  const command = new Command5("plan");
915
933
  command.description("Build an execution plan from discovered tasks").option("--repo <owner/repo>", "Target repository (owner/repo or GitHub URL)").option("--tokens <number>", "Token budget for planning", parseInteger3).option("--provider <id>", "Agent provider id").action(async (options, cmd) => {
@@ -1117,29 +1135,8 @@ function truncate(value, maxLength) {
1117
1135
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
1118
1136
  }
1119
1137
 
1120
- // src/commands/run.ts
1138
+ // src/cli/commands/run.ts
1121
1139
  import { randomUUID } from "crypto";
1122
- import { buildExecutionPlan as buildExecutionPlan2, estimateTokens as estimateTokens2 } from "@open330/oac-budget";
1123
- import {
1124
- UNLIMITED_BUDGET,
1125
- createEventBus
1126
- } from "@open330/oac-core";
1127
- import {
1128
- CompositeScanner as CompositeScanner2,
1129
- GitHubIssuesScanner,
1130
- LintScanner as LintScanner2,
1131
- TestGapScanner,
1132
- TodoScanner as TodoScanner2,
1133
- rankTasks as rankTasks2
1134
- } from "@open330/oac-discovery";
1135
- import {
1136
- ClaudeCodeAdapter,
1137
- CodexAdapter,
1138
- createSandbox,
1139
- executeTask as workerExecuteTask
1140
- } from "@open330/oac-execution";
1141
- import { cloneRepo as cloneRepo2, resolveRepo as resolveRepo2 } from "@open330/oac-repo";
1142
- import { writeContributionLog } from "@open330/oac-tracking";
1143
1140
  import chalk4, { Chalk as Chalk4 } from "chalk";
1144
1141
  import Table4 from "cli-table3";
1145
1142
  import { Command as Command6 } from "commander";
@@ -1201,10 +1198,10 @@ function createRunCommand() {
1201
1198
  );
1202
1199
  }
1203
1200
  const resolveSpinner = createSpinner2(outputJson, "Resolving repository...");
1204
- const resolvedRepo = await resolveRepo2(repoInput);
1201
+ const resolvedRepo = await resolveRepo(repoInput);
1205
1202
  resolveSpinner?.succeed(`Resolved ${resolvedRepo.fullName}`);
1206
1203
  const cloneSpinner = createSpinner2(outputJson, "Preparing local clone...");
1207
- await cloneRepo2(resolvedRepo);
1204
+ await cloneRepo(resolvedRepo);
1208
1205
  cloneSpinner?.succeed(`Repository ready at ${resolvedRepo.localPath}`);
1209
1206
  const scanSpinner = createSpinner2(
1210
1207
  outputJson,
@@ -1216,7 +1213,7 @@ function createRunCommand() {
1216
1213
  repo: resolvedRepo
1217
1214
  });
1218
1215
  scanSpinner?.succeed(`Discovered ${scannedTasks.length} raw task(s)`);
1219
- let candidateTasks = rankTasks2(scannedTasks).filter((task) => task.priority >= minPriority);
1216
+ let candidateTasks = rankTasks(scannedTasks).filter((task) => task.priority >= minPriority);
1220
1217
  if (options.source) {
1221
1218
  candidateTasks = candidateTasks.filter((task) => task.source === options.source);
1222
1219
  }
@@ -1250,7 +1247,7 @@ function createRunCommand() {
1250
1247
  );
1251
1248
  const estimates = await estimateTaskMap2(candidateTasks, providerId);
1252
1249
  estimateSpinner?.succeed("Token estimation completed");
1253
- const plan = buildExecutionPlan2(candidateTasks, estimates, totalBudget);
1250
+ const plan = buildExecutionPlan(candidateTasks, estimates, totalBudget);
1254
1251
  if (options.dryRun) {
1255
1252
  const dryRunSummary = {
1256
1253
  runId,
@@ -1576,20 +1573,20 @@ function selectScannersFromConfig2(config, hasGitHubAuth) {
1576
1573
  }
1577
1574
  const uniqueEnabled = [...new Set(enabled)];
1578
1575
  const scannerInstances = uniqueEnabled.map((scannerName) => {
1579
- if (scannerName === "lint") return new LintScanner2();
1576
+ if (scannerName === "lint") return new LintScanner();
1580
1577
  if (scannerName === "github-issues") return new GitHubIssuesScanner();
1581
1578
  if (scannerName === "test-gap") return new TestGapScanner();
1582
- return new TodoScanner2();
1579
+ return new TodoScanner();
1583
1580
  });
1584
1581
  return {
1585
1582
  enabled: uniqueEnabled,
1586
- scanner: new CompositeScanner2(scannerInstances)
1583
+ scanner: new CompositeScanner(scannerInstances)
1587
1584
  };
1588
1585
  }
1589
1586
  async function estimateTaskMap2(tasks, providerId) {
1590
1587
  const entries = await Promise.all(
1591
1588
  tasks.map(async (task) => {
1592
- const estimate = await estimateTokens2(task, providerId);
1589
+ const estimate = await estimateTokens(task, providerId);
1593
1590
  return [task.id, estimate];
1594
1591
  })
1595
1592
  );
@@ -1607,7 +1604,7 @@ async function executeWithAgent(input2) {
1607
1604
  cleanup: sandbox.cleanup
1608
1605
  };
1609
1606
  try {
1610
- const result = await workerExecuteTask(input2.adapter, input2.task, sandbox, eventBus, {
1607
+ const result = await executeTask(input2.adapter, input2.task, sandbox, eventBus, {
1611
1608
  tokenBudget: input2.estimate.totalEstimatedTokens,
1612
1609
  timeoutMs: input2.timeoutSeconds * 1e3
1613
1610
  });
@@ -1669,21 +1666,35 @@ async function createPullRequest(input2) {
1669
1666
  env: ghEnv
1670
1667
  });
1671
1668
  const prTitle = `[OAC] ${input2.task.title}`;
1672
- const prBody = [
1669
+ const prBodyLines = [
1673
1670
  "## Summary",
1674
1671
  "",
1675
1672
  input2.task.description || `Automated contribution for task "${input2.task.title}".`,
1676
- "",
1673
+ ""
1674
+ ];
1675
+ if (input2.task.linkedIssue) {
1676
+ prBodyLines.push(
1677
+ `Closes #${input2.task.linkedIssue.number}`,
1678
+ ""
1679
+ );
1680
+ }
1681
+ prBodyLines.push(
1677
1682
  "## Context",
1678
1683
  "",
1679
1684
  `- **Task source:** ${input2.task.source}`,
1680
1685
  `- **Complexity:** ${input2.task.complexity}`,
1681
1686
  `- **Tokens used:** ${input2.execution.totalTokensUsed}`,
1682
- `- **Files changed:** ${input2.execution.filesChanged.length}`,
1687
+ `- **Files changed:** ${input2.execution.filesChanged.length}`
1688
+ );
1689
+ if (input2.task.linkedIssue) {
1690
+ prBodyLines.push(`- **Resolves:** #${input2.task.linkedIssue.number}`);
1691
+ }
1692
+ prBodyLines.push(
1683
1693
  "",
1684
1694
  "---",
1685
1695
  "*This PR was automatically generated by [OAC](https://github.com/Open330/open-agent-contribution).*"
1686
- ].join("\n");
1696
+ );
1697
+ const prBody = prBodyLines.join("\n");
1687
1698
  const ghResult = await execa(
1688
1699
  "gh",
1689
1700
  [
@@ -1952,16 +1963,7 @@ function truncate2(value, maxLength) {
1952
1963
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
1953
1964
  }
1954
1965
 
1955
- // src/commands/scan.ts
1956
- import {
1957
- CompositeScanner as CompositeScanner3,
1958
- GitHubIssuesScanner as GitHubIssuesScanner2,
1959
- LintScanner as LintScanner3,
1960
- TestGapScanner as TestGapScanner2,
1961
- TodoScanner as TodoScanner3,
1962
- rankTasks as rankTasks3
1963
- } from "@open330/oac-discovery";
1964
- import { cloneRepo as cloneRepo3, resolveRepo as resolveRepo3 } from "@open330/oac-repo";
1966
+ // src/cli/commands/scan.ts
1965
1967
  import chalk5, { Chalk as Chalk5 } from "chalk";
1966
1968
  import Table5 from "cli-table3";
1967
1969
  import { Command as Command7 } from "commander";
@@ -1989,10 +1991,10 @@ function createScanCommand() {
1989
1991
  );
1990
1992
  }
1991
1993
  const resolveSpinner = createSpinner3(outputJson, "Resolving repository...");
1992
- const resolvedRepo = await resolveRepo3(repoInput);
1994
+ const resolvedRepo = await resolveRepo(repoInput);
1993
1995
  resolveSpinner?.succeed(`Resolved ${resolvedRepo.fullName}`);
1994
1996
  const cloneSpinner = createSpinner3(outputJson, "Preparing local clone...");
1995
- await cloneRepo3(resolvedRepo);
1997
+ await cloneRepo(resolvedRepo);
1996
1998
  cloneSpinner?.succeed(`Repository ready at ${resolvedRepo.localPath}`);
1997
1999
  const scanSpinner = createSpinner3(
1998
2000
  outputJson,
@@ -2004,7 +2006,7 @@ function createScanCommand() {
2004
2006
  repo: resolvedRepo
2005
2007
  });
2006
2008
  scanSpinner?.succeed(`Scanned ${resolvedRepo.fullName}`);
2007
- const rankedTasks = rankTasks3(scannedTasks).filter(
2009
+ const rankedTasks = rankTasks(scannedTasks).filter(
2008
2010
  (task) => task.priority >= options.minPriority
2009
2011
  );
2010
2012
  if (outputJson) {
@@ -2127,15 +2129,15 @@ function selectScanners(scannerOption, config, hasGitHubAuth = false) {
2127
2129
  );
2128
2130
  }
2129
2131
  const scannerInstances = uniqueEnabled.map((name) => {
2130
- if (name === "lint") return new LintScanner3();
2131
- if (name === "github-issues") return new GitHubIssuesScanner2();
2132
- if (name === "test-gap") return new TestGapScanner2();
2133
- return new TodoScanner3();
2132
+ if (name === "lint") return new LintScanner();
2133
+ if (name === "github-issues") return new GitHubIssuesScanner();
2134
+ if (name === "test-gap") return new TestGapScanner();
2135
+ return new TodoScanner();
2134
2136
  });
2135
2137
  return {
2136
2138
  enabled: uniqueEnabled,
2137
2139
  unknown,
2138
- scanner: new CompositeScanner3(scannerInstances)
2140
+ scanner: new CompositeScanner(scannerInstances)
2139
2141
  };
2140
2142
  }
2141
2143
  function scannersFromConfig(config, hasGitHubAuth = false) {
@@ -2168,7 +2170,7 @@ function truncate3(value, maxLength) {
2168
2170
  return `${value.slice(0, Math.max(0, maxLength - 3))}...`;
2169
2171
  }
2170
2172
 
2171
- // src/commands/status.ts
2173
+ // src/cli/commands/status.ts
2172
2174
  import { readFile as readFile4 } from "fs/promises";
2173
2175
  import { resolve as resolve5 } from "path";
2174
2176
  import { Command as Command8 } from "commander";
@@ -2335,19 +2337,7 @@ function isFileNotFoundError3(error) {
2335
2337
  return error.code === "ENOENT";
2336
2338
  }
2337
2339
 
2338
- // src/cli.ts
2339
- async function readCliVersion() {
2340
- try {
2341
- const packageJsonPath = new URL("../package.json", import.meta.url);
2342
- const packageJsonRaw = await readFile5(packageJsonPath, "utf8");
2343
- const packageJson = JSON.parse(packageJsonRaw);
2344
- if (typeof packageJson.version === "string" && packageJson.version.length > 0) {
2345
- return packageJson.version;
2346
- }
2347
- } catch {
2348
- }
2349
- return "0.0.0";
2350
- }
2340
+ // src/cli/cli.ts
2351
2341
  function registerCommands(program) {
2352
2342
  program.addCommand(createInitCommand());
2353
2343
  program.addCommand(createDoctorCommand());
@@ -2359,7 +2349,7 @@ function registerCommands(program) {
2359
2349
  program.addCommand(createStatusCommand());
2360
2350
  }
2361
2351
  async function createCliProgram() {
2362
- const version = await readCliVersion();
2352
+ const version = true ? "2026.4.0" : "0.0.0";
2363
2353
  const program = new Command9();
2364
2354
  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("--json", "Output machine-readable JSON", false).option("--no-color", "Disable ANSI colors");
2365
2355
  registerCommands(program);
@@ -2374,4 +2364,4 @@ export {
2374
2364
  createCliProgram,
2375
2365
  runCli
2376
2366
  };
2377
- //# sourceMappingURL=chunk-WC2NAMI3.js.map
2367
+ //# sourceMappingURL=chunk-WD3TJVSA.js.map