@algosuite/vo-mcp 0.2.0-beta.52 → 0.2.0-beta.54

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.
@@ -140,12 +140,12 @@ var require_extend = __commonJS({
140
140
  }
141
141
  });
142
142
 
143
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/package.json
143
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/package.json
144
144
  var require_package = __commonJS({
145
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/package.json"(exports, module) {
145
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/package.json"(exports, module) {
146
146
  module.exports = {
147
147
  name: "gaxios",
148
- version: "7.3.0",
148
+ version: "7.3.1",
149
149
  description: "A simple common HTTP client specifically for Google APIs and services.",
150
150
  main: "build/cjs/src/index.js",
151
151
  types: "build/cjs/src/index.d.ts",
@@ -223,7 +223,7 @@ var require_package = __commonJS({
223
223
  "karma-mocha": "^2.0.0",
224
224
  "karma-remap-coverage": "^0.1.5",
225
225
  "karma-sourcemap-loader": "^0.4.0",
226
- "karma-webpack": "^5.0.1",
226
+ "karma-webpack": "^5.0.0",
227
227
  mocha: "^11.1.0",
228
228
  multiparty: "^4.2.1",
229
229
  mv: "^2.1.1",
@@ -234,7 +234,7 @@ var require_package = __commonJS({
234
234
  puppeteer: "^24.0.0",
235
235
  sinon: "21.0.3",
236
236
  "stream-browserify": "^3.0.0",
237
- tmp: "0.2.6",
237
+ tmp: "0.2.7",
238
238
  "ts-loader": "^9.5.2",
239
239
  typescript: "5.8.3",
240
240
  "undici-types": "^7.24.1",
@@ -251,18 +251,18 @@ var require_package = __commonJS({
251
251
  }
252
252
  });
253
253
 
254
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/util.cjs
254
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/util.cjs
255
255
  var require_util = __commonJS({
256
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/util.cjs"(exports, module) {
256
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/util.cjs"(exports, module) {
257
257
  "use strict";
258
258
  var pkg = require_package();
259
259
  module.exports = { pkg };
260
260
  }
261
261
  });
262
262
 
263
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/common.js
263
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/common.js
264
264
  var require_common = __commonJS({
265
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/common.js"(exports) {
265
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/common.js"(exports) {
266
266
  "use strict";
267
267
  var __importDefault = exports && exports.__importDefault || function(mod3) {
268
268
  return mod3 && mod3.__esModule ? mod3 : { "default": mod3 };
@@ -502,9 +502,9 @@ var require_common = __commonJS({
502
502
  }
503
503
  });
504
504
 
505
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/retry.js
505
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/retry.js
506
506
  var require_retry = __commonJS({
507
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/retry.js"(exports) {
507
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/retry.js"(exports) {
508
508
  "use strict";
509
509
  Object.defineProperty(exports, "__esModule", { value: true });
510
510
  exports.getRetryConfig = getRetryConfig;
@@ -607,9 +607,9 @@ var require_retry = __commonJS({
607
607
  }
608
608
  });
609
609
 
610
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/interceptor.js
610
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/interceptor.js
611
611
  var require_interceptor = __commonJS({
612
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/interceptor.js"(exports) {
612
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/interceptor.js"(exports) {
613
613
  "use strict";
614
614
  Object.defineProperty(exports, "__esModule", { value: true });
615
615
  exports.GaxiosInterceptorManager = void 0;
@@ -8341,9 +8341,9 @@ var init_src = __esm({
8341
8341
  }
8342
8342
  });
8343
8343
 
8344
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/gaxios.js
8344
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/gaxios.js
8345
8345
  var require_gaxios = __commonJS({
8346
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/gaxios.js"(exports) {
8346
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/gaxios.js"(exports) {
8347
8347
  "use strict";
8348
8348
  var __importDefault = exports && exports.__importDefault || function(mod3) {
8349
8349
  return mod3 && mod3.__esModule ? mod3 : { "default": mod3 };
@@ -8815,9 +8815,9 @@ Content-Type: ${partContentType}\r
8815
8815
  }
8816
8816
  });
8817
8817
 
8818
- // ../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/index.js
8818
+ // ../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/index.js
8819
8819
  var require_src2 = __commonJS({
8820
- "../../node_modules/.pnpm/gaxios@7.3.0/node_modules/gaxios/build/cjs/src/index.js"(exports) {
8820
+ "../../node_modules/.pnpm/gaxios@7.3.1/node_modules/gaxios/build/cjs/src/index.js"(exports) {
8821
8821
  "use strict";
8822
8822
  var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m2, k, k2) {
8823
8823
  if (k2 === void 0) k2 = k;
@@ -8141,7 +8141,20 @@ var init_headless_execution_contract = __esm({
8141
8141
  "`pnpm exec tsc --noEmit -p <dir>`); any other Bash command (`node \u2026`, `npx \u2026`, `git \u2026`, `gh \u2026`) is",
8142
8142
  "auto-denied \u2014 that is expected, not a broken environment. Wrap what you need as `pnpm exec <cmd>`.",
8143
8143
  "Roadmap-board drift (`check-roadmap-board-coverage` red): run `pnpm run roadmap:board` and keep the",
8144
- "regenerated `public/roadmap-progress.json` + `cloud-run/vo-control-plane/data/roadmap-progress.json`."
8144
+ "regenerated `public/roadmap-progress.json` + `cloud-run/vo-control-plane/data/roadmap-progress.json`.",
8145
+ // 2026-08-18: a task asked for `missingTin` persisted a FULL 9-digit TIN — an SSN for any sole
8146
+ // proprietor — while owner-roster.ts already stored last-4 and the client portal promised users it
8147
+ // would "never ask you to type your full SSN". The agent was not wrong to infer it; the SPEC never
8148
+ // said. `scripts/ci/check-pii-field-posture.mjs` now blocks the PR, but a blocked PR is spend
8149
+ // already burnt, so say it here too.
8150
+ "Sensitive fields (SSN/TIN/EIN, DOB, account or routing numbers, passport/licence): do NOT decide the",
8151
+ "storage form yourself. Search for an existing precedent first (`owner-roster.ts` validates TIN",
8152
+ "**last 4**; `cpa-mirror` stores `taxpayerSsnLast4` and excludes raw `ssn`) and follow it. Prefer a",
8153
+ "masked/last-4/boolean form. If the task truly needs a full value, STOP and say so in the PR body",
8154
+ "rather than persisting it \u2014 storing full PII is a compliance decision, not a feature detail. Whenever",
8155
+ "your diff persists ANY new field carrying such an identifier (masked or not), STATE the posture in",
8156
+ "the PR body as `PII-POSTURE: <storage form + the precedent followed>` \u2014 CI hard-blocks high-severity",
8157
+ "forms without the marker, and a blocked PR is spend already burnt."
8145
8158
  ].join("\n");
8146
8159
  }
8147
8160
  });
@@ -8337,8 +8350,21 @@ function classifyTaskShape(task) {
8337
8350
  }
8338
8351
  return "feature";
8339
8352
  }
8353
+ function stripDispatchBoilerplate(text) {
8354
+ const contractLines = HEADLESS_EXECUTION_CONTRACT.split("\n").map((l) => l.trim()).filter((l) => l.length >= 20);
8355
+ return String(text ?? "").split("\n").map((rawLine) => {
8356
+ const line = rawLine.trim().replace(/^(?:>[ \t]*){1,64}/u, "").trim();
8357
+ if (line.length < 20) return rawLine;
8358
+ if (contractLines.some((c) => c.includes(line))) return null;
8359
+ let redacted = line;
8360
+ for (const c of contractLines) {
8361
+ if (redacted.includes(c)) redacted = redacted.split(c).join(" ");
8362
+ }
8363
+ return redacted === line ? rawLine : redacted;
8364
+ }).filter((l) => l !== null).join("\n");
8365
+ }
8340
8366
  function matchGovernedStakes(task) {
8341
- const prompt = String(task?.prompt || "");
8367
+ const prompt = stripDispatchBoilerplate(String(task?.prompt || ""));
8342
8368
  const m = GOVERNED_STAKES_PATTERN.exec(prompt);
8343
8369
  return m ? m[0] : null;
8344
8370
  }
@@ -8368,6 +8394,7 @@ var UI_ROADMAP_DISPATCH_MARKER, SHAPE_RULES, GOVERNED_STAKES_PATTERN, RESEARCH_W
8368
8394
  var init_methodology_composer = __esm({
8369
8395
  "../../scripts/virtual-office/code-runner/methodology-composer.mjs"() {
8370
8396
  "use strict";
8397
+ init_headless_execution_contract();
8371
8398
  UI_ROADMAP_DISPATCH_MARKER = /^\s*work on\s+[^\n]{1,200}?\s+roadmap task:/iu;
8372
8399
  SHAPE_RULES = [
8373
8400
  {
@@ -8413,6 +8440,7 @@ var init_methodology_composer = __esm({
8413
8440
  "If the consensus tools are not available in this session, say exactly that in the PR body instead of silently skipping \u2014 an unverified governed claim must be visible, never implied."
8414
8441
  ];
8415
8442
  UNIVERSAL_DIRECTIVES = [
8443
+ 'NEGATIVE CONTROL FIRST \u2014 your first deliverable, before further implementation, is the check that FAILS when your work is wrong: for a test-writing task, run the new tests and show at least one failing against the exact production line it guards (then passing); for a fix or feature, the failing-then-passing check. Paste that real output into the PR body. Budget dies from the end \u2014 agents author first and verify last, so exhaustion deletes exactly the verification evidence (measured 2026-08-20: $12.60 across a task plus its continuation for 363 test lines that were never once executed, whose PR body echoed the words "NEGATIVE CONTROL" from its spec with zero runs behind them). A surviving negative control is worth more than another feature file.',
8416
8444
  'Before finishing, REHEARSE the repo gates your diff will hit and fix failures locally. HOW: bare `node <script>` is DENIED in this session (only `pnpm \u2026` is pre-authorized) \u2014 run whole-tree gates through their package.json aliases (`pnpm run check:<gate>`, e.g. `pnpm run check:algobooks-model-tiering`, `pnpm run check:hollow-tests`) or as `pnpm exec node scripts/...`; never conclude "cannot run" and hand-write a generated artifact. Diff-scoped gates (base...head, committed refs) cannot see your UNCOMMITTED edits, so satisfy their rule by construction: any roadmap-doc change under docs/current or docs/vo -> run `pnpm run roadmap:progress && pnpm exec node scripts/sync-roadmap-progress.mjs` and keep the regenerated artifacts in your diff (board drift gate); any top-level `.ts` directly under functions-core-tax/src/tax/ (not tests, not tax-year-thresholds.ts, not nested dirs; even a comment-only edit counts) -> in docs/current/algotax-coverage-roadmap.md the file MUST have a row in the callable Status table (most `algobooks-*.ts` files have NONE \u2014 add an honest row first, or the gate fails with "has no row"), then either change that row\'s Status or append a dated Update Log line that NAMES the changed file\'s basename (a dated line that does not name the file still fails); ONLY for a comment-only / no-behavior diff you may instead end your final summary with a line `VO-ALLOW-NO-AUDIT-UPDATE: <reason>` (it lands in the PR body the gate reads) \u2014 never when logic changed \u2014 tax-audit ratchet; a new entry in REQUIRED_GATE_INVOCATIONS -> classify it in scripts/ci/check-main-health-core.mjs (anti-drift test); new test files -> no Date.now()/new Date() fixtures and 4+ real assertions (clock-fixture + hollow-test gates); a .github/workflows edit may be rejected at push (the runner token lacks the workflows scope) -> say so in your final summary instead of retrying. Live tests 2026-08-16: four dispatched PRs bounced on exactly these.',
8417
8445
  "Verification is a stage, not a vibe: before publishing, run the tests/build your change touches and cite their actual output. A claim without execution evidence is not done.",
8418
8446
  "Work to completion or end with an explicit failure reason. Do not stop because time has passed; stop when the evidence says the work is done \u2014 or state exactly what is blocking.",
@@ -13039,6 +13067,7 @@ function runnerStagePatch(stage, message, extra = {}) {
13039
13067
  return { stage, message, ...extra };
13040
13068
  }
13041
13069
  function buildPrBody(task, run, files, { armAutoMerge = false } = {}) {
13070
+ const governedStakes = matchGovernedStakes({ prompt: String(task.prompt || "") });
13042
13071
  return [
13043
13072
  "## AlgoHQ Command Center \u2014 Code-from-Anywhere task",
13044
13073
  "",
@@ -13048,6 +13077,7 @@ function buildPrBody(task, run, files, { armAutoMerge = false } = {}) {
13048
13077
  typeof run.costUsd === "number" ? `- **Agent cost:** $${run.costUsd.toFixed(4)}` : "- **Agent cost:** n/a",
13049
13078
  typeof run.numTurns === "number" ? `- **Turns:** ${run.numTurns}` : "",
13050
13079
  `- **Files changed:** ${files.length}`,
13080
+ ...governedStakes ? ["", `VO-GOVERNED-STAKES: ${governedStakes}`] : [],
13051
13081
  "",
13052
13082
  "### Prompt",
13053
13083
  "",
@@ -13083,6 +13113,7 @@ var init_task_helpers = __esm({
13083
13113
  "../../scripts/virtual-office/code-runner/task-helpers.mjs"() {
13084
13114
  "use strict";
13085
13115
  init_redact_tokens();
13116
+ init_methodology_composer();
13086
13117
  }
13087
13118
  });
13088
13119