@algosuite/vo-mcp 0.2.0-beta.44 → 0.2.0-beta.45

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.
@@ -13095,7 +13095,8 @@ async function readLedger(file, readFile5) {
13095
13095
  async function findPreservedRecovery(task, {
13096
13096
  clonesRoot: clonesRoot2 = process.env.VO_CODE_RUNNER_CLONES_ROOT || "",
13097
13097
  readFile: readFile5 = fsp13.readFile,
13098
- exists = fs13.existsSync
13098
+ exists = fs13.existsSync,
13099
+ alreadyPublished = preservedHeadAlreadyOnBranch
13099
13100
  } = {}) {
13100
13101
  const resumedFrom = /^[0-9a-f-]{36}$/iu.test(String(task.resumed_from || "")) ? String(task.resumed_from).toLowerCase() : null;
13101
13102
  const originalTaskId = recoveryTaskId(task.prompt) ?? resumedFrom;
@@ -13106,11 +13107,30 @@ async function findPreservedRecovery(task, {
13106
13107
  const resolved = entries.some((entry) => RESOLVED_RECOVERY_TYPES.has(entry.type) && entry.taskId === originalTaskId);
13107
13108
  const preserved = [...entries].reverse().find((entry) => entry.taskId === originalTaskId && entry.worktreeDir);
13108
13109
  if (!resolved && preserved && exists(preserved.worktreeDir)) {
13110
+ if (task.pr_branch && await alreadyPublished(preserved.worktreeDir, task.pr_branch)) return null;
13109
13111
  return { originalTaskId, ledgerPath, preserved };
13110
13112
  }
13111
13113
  }
13112
13114
  return null;
13113
13115
  }
13116
+ async function preservedHeadAlreadyOnBranch(worktreeDir, prBranch, { runGit = defaultRunGit } = {}) {
13117
+ try {
13118
+ const head = (await runGit(["rev-parse", "HEAD"], worktreeDir)).trim();
13119
+ const remote = (await runGit(["ls-remote", "origin", `refs/heads/${prBranch}`], worktreeDir)).trim().split(/\s+/u)[0];
13120
+ if (!/^[0-9a-f]{40}$/u.test(head) || !/^[0-9a-f]{40}$/u.test(remote || "")) return false;
13121
+ if (head === remote) return true;
13122
+ await runGit(["merge-base", "--is-ancestor", head, remote], worktreeDir);
13123
+ return true;
13124
+ } catch {
13125
+ return false;
13126
+ }
13127
+ }
13128
+ async function defaultRunGit(args, cwd) {
13129
+ const { execFile: execFile2 } = await import("node:child_process");
13130
+ return new Promise((resolve2, reject) => {
13131
+ execFile2("git", args, { cwd, encoding: "utf8", timeout: 6e4 }, (err, stdout) => err ? reject(err) : resolve2(stdout));
13132
+ });
13133
+ }
13114
13134
  async function recoverPreservedCodeTask({
13115
13135
  task,
13116
13136
  cfg,