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

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.
@@ -7293,6 +7293,11 @@ var init_dispatch_onboarding = __esm({
7293
7293
  });
7294
7294
 
7295
7295
  // ../../scripts/virtual-office/code-runner/methodology-composer.mjs
7296
+ function openingClause(prompt) {
7297
+ const text = String(prompt || "").replace(UI_ROADMAP_DISPATCH_MARKER, "").trimStart();
7298
+ const firstSentence = text.split(/(?<=[.!?])\s|\n/u)[0] || "";
7299
+ return firstSentence.slice(0, 240);
7300
+ }
7296
7301
  function classifyTaskShape(task) {
7297
7302
  const prompt = String(task?.prompt || "");
7298
7303
  for (const rule of SHAPE_RULES) {
@@ -7351,7 +7356,11 @@ var init_methodology_composer = __esm({
7351
7356
  },
7352
7357
  {
7353
7358
  shape: "research",
7354
- matches: (_task, prompt) => /\b(investigate|research|root[- ]cause|audit|diagnose|find out why|explain why)\b/iu.test(prompt)
7359
+ // Live-test finding 2026-08-16 (task cbed1006): an IMPLEMENT task whose prompt
7360
+ // cites an audit doc ("…exactly as recommended in docs/audits/…; per the audit")
7361
+ // classified as research from a keyword deep in the body. Research is decided by
7362
+ // the OPENING clause — the same rule the design shape already applies.
7363
+ matches: (_task, prompt) => /\b(investigate|research|root[- ]cause|audit|diagnose|find out why|explain why)\b/iu.test(openingClause(prompt))
7355
7364
  },
7356
7365
  {
7357
7366
  shape: "design",
@@ -13073,6 +13082,7 @@ async function findPreservedRecovery(task, {
13073
13082
  const resumedFrom = /^[0-9a-f-]{36}$/iu.test(String(task.resumed_from || "")) ? String(task.resumed_from).toLowerCase() : null;
13074
13083
  const originalTaskId = recoveryTaskId(task.prompt) ?? resumedFrom;
13075
13084
  if (!originalTaskId) return null;
13085
+ if (task.pr_branch && !recoveryTaskId(task.prompt)) return null;
13076
13086
  for (const ledgerPath of recoveryLedgerCandidates(task.repo, clonesRoot2)) {
13077
13087
  const entries = await readLedger(ledgerPath, readFile5);
13078
13088
  const resolved = entries.some((entry) => RESOLVED_RECOVERY_TYPES.has(entry.type) && entry.taskId === originalTaskId);