@algosuite/vo-mcp 0.2.0-beta.70 → 0.2.0-beta.71

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.
@@ -300,15 +300,21 @@ function normalizeClaudePermissionMode(value) {
300
300
  }
301
301
  return normalized;
302
302
  }
303
- function buildClaudeArgs({ permissionMode = DEFAULT_PERMISSION_MODE, maxTurns, model, effort, maxBudgetUsd, researchHarness = false, env = process.env } = {}) {
303
+ function buildClaudeArgs({ permissionMode = DEFAULT_PERMISSION_MODE, maxTurns, model, effort, maxBudgetUsd, researchHarness = false, toolPolicy = "default", env = process.env } = {}) {
304
304
  const effectivePermissionMode = normalizeClaudePermissionMode(permissionMode);
305
- const noWeb = String(env?.VO_CODE_RUNNER_NO_WEB ?? "").trim() === "1";
305
+ if (!["default", "skill_readonly", "frozen_inputs_only"].includes(toolPolicy)) {
306
+ throw new Error(`unsupported Claude tool policy "${toolPolicy}"`);
307
+ }
308
+ const frozenInputsOnly = toolPolicy === "frozen_inputs_only";
309
+ const skillReadonly = toolPolicy === "skill_readonly";
310
+ const restrictedSkill = frozenInputsOnly || skillReadonly;
311
+ const noWeb = frozenInputsOnly || String(env?.VO_CODE_RUNNER_NO_WEB ?? "").trim() === "1";
306
312
  const research = noWeb ? [] : VO_RESEARCH_TOOLS;
307
313
  const noWorkflow = noWeb || String(env?.VO_CODE_RUNNER_NO_WORKFLOW ?? "").trim() === "1";
308
- const workflow = researchHarness === true && !noWorkflow ? VO_WORKFLOW_TOOLS : [];
309
- const noConsensus = String(env?.VO_CODE_RUNNER_NO_CONSENSUS ?? "").trim() === "1";
314
+ const workflow = !restrictedSkill && researchHarness === true && !noWorkflow ? VO_WORKFLOW_TOOLS : [];
315
+ const noConsensus = frozenInputsOnly || String(env?.VO_CODE_RUNNER_NO_CONSENSUS ?? "").trim() === "1";
310
316
  const consensus = noConsensus ? [] : VO_CONSENSUS_TOOLS;
311
- const baseTools = effectivePermissionMode === DEFAULT_PERMISSION_MODE ? [VO_SESSION_STATE_TOOL, VO_HEADLESS_PNPM_TOOL, VO_HEADLESS_PNPM_FROM_DIR_TOOL] : [VO_SESSION_STATE_TOOL];
317
+ const baseTools = restrictedSkill ? [] : effectivePermissionMode === DEFAULT_PERMISSION_MODE ? [VO_SESSION_STATE_TOOL, VO_HEADLESS_PNPM_TOOL, VO_HEADLESS_PNPM_FROM_DIR_TOOL] : [VO_SESSION_STATE_TOOL];
312
318
  const allowedTools = [...baseTools, ...consensus, ...research, ...workflow].join(",");
313
319
  const args = [
314
320
  "-p",
@@ -320,6 +326,21 @@ function buildClaudeArgs({ permissionMode = DEFAULT_PERMISSION_MODE, maxTurns, m
320
326
  "--allowedTools",
321
327
  allowedTools
322
328
  ];
329
+ if (restrictedSkill) {
330
+ const builtInTools = skillReadonly ? research.join(",") : "";
331
+ args.push(
332
+ "--tools",
333
+ builtInTools,
334
+ "--disable-slash-commands",
335
+ "--no-chrome",
336
+ "--no-session-persistence",
337
+ "--permission-prompts",
338
+ "none"
339
+ );
340
+ }
341
+ if (frozenInputsOnly) {
342
+ args.push("--strict-mcp-config", "--safe-mode");
343
+ }
323
344
  if (Number.isInteger(maxTurns) && maxTurns > 0) {
324
345
  args.push("--max-turns", String(maxTurns));
325
346
  }
@@ -332,7 +353,9 @@ function buildClaudeArgs({ permissionMode = DEFAULT_PERMISSION_MODE, maxTurns, m
332
353
  if (typeof maxBudgetUsd === "number" && maxBudgetUsd > 0) {
333
354
  args.push("--max-budget-usd", String(maxBudgetUsd));
334
355
  }
335
- args.push(...context7McpArgs(env));
356
+ if (!restrictedSkill) {
357
+ args.push(...context7McpArgs(env));
358
+ }
336
359
  return args;
337
360
  }
338
361
 
@@ -624,8 +647,8 @@ var ClaudeRunner = class {
624
647
  get binary() {
625
648
  return "claude";
626
649
  }
627
- buildArgs({ permissionMode, maxTurns, model, effort, maxBudgetUsd, researchHarness } = {}) {
628
- return buildClaudeArgs({ permissionMode, maxTurns, model, effort, maxBudgetUsd, researchHarness });
650
+ buildArgs({ permissionMode, maxTurns, model, effort, maxBudgetUsd, researchHarness, toolPolicy } = {}) {
651
+ return buildClaudeArgs({ permissionMode, maxTurns, model, effort, maxBudgetUsd, researchHarness, toolPolicy });
629
652
  }
630
653
  parseEvent(line) {
631
654
  return parseStreamEvent(line);