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

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.
@@ -5969,6 +5969,21 @@ var init_rate_limit_resume = __esm({
5969
5969
  }
5970
5970
  });
5971
5971
 
5972
+ // ../../scripts/virtual-office/code-runner/publish-staged.mjs
5973
+ async function nothingStagedAsync(worktreeDir, runCommand) {
5974
+ try {
5975
+ await runCommand("git", ["diff", "--cached", "--quiet"], worktreeDir);
5976
+ return true;
5977
+ } catch {
5978
+ return false;
5979
+ }
5980
+ }
5981
+ var init_publish_staged = __esm({
5982
+ "../../scripts/virtual-office/code-runner/publish-staged.mjs"() {
5983
+ "use strict";
5984
+ }
5985
+ });
5986
+
5972
5987
  // ../../scripts/virtual-office/code-runner/secure-random.mjs
5973
5988
  import { randomInt } from "node:crypto";
5974
5989
  var secureUnitRandom;
@@ -6208,6 +6223,7 @@ function pushPlan(branch, githubToken, { allowAmbientFallback = false } = {}) {
6208
6223
  var init_publish = __esm({
6209
6224
  "../../scripts/virtual-office/code-runner/publish.mjs"() {
6210
6225
  "use strict";
6226
+ init_publish_staged();
6211
6227
  init_git_resilience();
6212
6228
  init_auto_merge();
6213
6229
  init_pr_overlap_gate();
@@ -6899,8 +6915,9 @@ async function commitWorkLocallyAsync(worktreeDir, files, {
6899
6915
  for (let i = 0; i < cleaned.length; i += 100) {
6900
6916
  await runCommand("git", ["add", "--", ...cleaned.slice(i, i + 100)], worktreeDir, { timeout: 12e4 });
6901
6917
  }
6918
+ if (await nothingStagedAsync(worktreeDir, runCommand)) return { branch, truncated: false, committed: false };
6902
6919
  await runCommand("git", ["commit", "-m", compactTitle(title, 180)], worktreeDir);
6903
- return { branch, truncated: false };
6920
+ return { branch, truncated: false, committed: true };
6904
6921
  }
6905
6922
  async function existingPrUrlAsync(worktreeDir, branch, githubToken = null, { runCommand = defaultRunCommand } = {}) {
6906
6923
  try {
@@ -7108,6 +7125,7 @@ var init_publish_async = __esm({
7108
7125
  init_auto_merge();
7109
7126
  init_git_resilience();
7110
7127
  init_process_runner2();
7128
+ init_publish_staged();
7111
7129
  init_secure_random();
7112
7130
  init_pr_overlap_gate();
7113
7131
  init_existing_pr_publication();
@@ -7293,6 +7311,11 @@ var init_dispatch_onboarding = __esm({
7293
7311
  });
7294
7312
 
7295
7313
  // ../../scripts/virtual-office/code-runner/methodology-composer.mjs
7314
+ function openingClause(prompt) {
7315
+ const text = String(prompt || "").replace(UI_ROADMAP_DISPATCH_MARKER, "").trimStart();
7316
+ const firstSentence = text.split(/(?<=[.!?])\s|\n/u)[0] || "";
7317
+ return firstSentence.slice(0, 240);
7318
+ }
7296
7319
  function classifyTaskShape(task) {
7297
7320
  const prompt = String(task?.prompt || "");
7298
7321
  for (const rule of SHAPE_RULES) {
@@ -7351,7 +7374,11 @@ var init_methodology_composer = __esm({
7351
7374
  },
7352
7375
  {
7353
7376
  shape: "research",
7354
- matches: (_task, prompt) => /\b(investigate|research|root[- ]cause|audit|diagnose|find out why|explain why)\b/iu.test(prompt)
7377
+ // Live-test finding 2026-08-16 (task cbed1006): an IMPLEMENT task whose prompt
7378
+ // cites an audit doc ("…exactly as recommended in docs/audits/…; per the audit")
7379
+ // classified as research from a keyword deep in the body. Research is decided by
7380
+ // the OPENING clause — the same rule the design shape already applies.
7381
+ matches: (_task, prompt) => /\b(investigate|research|root[- ]cause|audit|diagnose|find out why|explain why)\b/iu.test(openingClause(prompt))
7355
7382
  },
7356
7383
  {
7357
7384
  shape: "design",
@@ -13073,6 +13100,7 @@ async function findPreservedRecovery(task, {
13073
13100
  const resumedFrom = /^[0-9a-f-]{36}$/iu.test(String(task.resumed_from || "")) ? String(task.resumed_from).toLowerCase() : null;
13074
13101
  const originalTaskId = recoveryTaskId(task.prompt) ?? resumedFrom;
13075
13102
  if (!originalTaskId) return null;
13103
+ if (task.pr_branch && !recoveryTaskId(task.prompt)) return null;
13076
13104
  for (const ledgerPath of recoveryLedgerCandidates(task.repo, clonesRoot2)) {
13077
13105
  const entries = await readLedger(ledgerPath, readFile5);
13078
13106
  const resolved = entries.some((entry) => RESOLVED_RECOVERY_TYPES.has(entry.type) && entry.taskId === originalTaskId);