@sema-agent/core 1.313.0 → 1.314.0

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.
@@ -137,6 +137,10 @@ async function forgetQuietly(sessions, sessionId) {
137
137
  }
138
138
  }
139
139
  export async function prepareTask(spec, deps, sessions, resume, _memorySelector, internals, runnerSelf) {
140
+ const toolFaceSnapshot = {
141
+ exclude: spec.excludeTools ? Object.freeze([...spec.excludeTools]) : undefined,
142
+ defer: spec.deferTools ? Object.freeze([...spec.deferTools]) : undefined,
143
+ };
140
144
  if (spec.resumeAt !== undefined) {
141
145
  if (resume) {
142
146
  const e = new Error("resumeAt cannot be combined with a durable resume");
@@ -672,6 +676,8 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
672
676
  thinkingLevel: harnessRef.current?.getThinkingLevel(),
673
677
  principal: spec.principal,
674
678
  clientContext: spec.clientContext,
679
+ excludeTools: toolFaceSnapshot.exclude,
680
+ deferTools: toolFaceSnapshot.defer,
675
681
  getApiKeyAndHeaders: spec.getApiKeyAndHeaders,
676
682
  parentCwd: taskRootPath,
677
683
  activeSkillScope: () => skillScope.active(),
@@ -762,6 +768,8 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
762
768
  runner: runnerSelf,
763
769
  scriptRunner: deps.workflowScriptRunner,
764
770
  governanceBaseline: deps.workflowGovernanceBaseline,
771
+ parentExcludeTools: toolFaceSnapshot.exclude,
772
+ parentDeferTools: toolFaceSnapshot.defer,
765
773
  models: deps.models,
766
774
  agents: deps.agents,
767
775
  builtinAgents: deps.builtinAgents,
@@ -1484,6 +1492,12 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
1484
1492
  }
1485
1493
  }
1486
1494
  }
1495
+ if (toolFaceSnapshot.exclude !== undefined && toolFaceSnapshot.exclude.length > 0) {
1496
+ const excluded = new Set(toolFaceSnapshot.exclude);
1497
+ for (let i = tools.length - 1; i >= 0; i--)
1498
+ if (excluded.has(tools[i].name))
1499
+ tools.splice(i, 1);
1500
+ }
1487
1501
  const assembled = assemblePrompt({
1488
1502
  provider,
1489
1503
  isDefaultProvider: provider === defaultPromptProvider,
@@ -1531,7 +1545,12 @@ export async function prepareTask(spec, deps, sessions, resume, _memorySelector,
1531
1545
  fullTools: tools.filter((t) => userToolNames.includes(t.name) || mcpToolNames.includes(t.name)),
1532
1546
  deferMode: deps.deferMode,
1533
1547
  model,
1548
+ deferNames: (toolFaceSnapshot.defer ?? []).filter((n) => tools.some((t) => t.name === n)),
1534
1549
  });
1550
+ for (const n of [...deferred]) {
1551
+ if (!tools.some((t) => t.name === n))
1552
+ deferred.delete(n);
1553
+ }
1535
1554
  const activeTools = new Set();
1536
1555
  const fpRef = {};
1537
1556
  let harnessTools = tools;