11import { createLogger } from '@sim/logger'
22import { type PermissionType , permissionSatisfies } from '@sim/platform-authz/workspace'
33import { toError } from '@sim/utils/errors'
4- import { omit } from '@sim/utils/object'
54import { openResourceInputSchema } from '@/lib/api/contracts/mothership-resource-tools'
65import { observeContentDelivery } from '@/lib/core/application'
76import { withWorkspaceInvocationScope } from '@/lib/core/application/workspace-invocation-scope'
@@ -13,10 +12,9 @@ import { prepareCopilotEnvironmentContext } from '@/lib/mothership/environment-c
1312import { isSearchIntegrationToolsEnabled } from '@/lib/mothership/feature-flags'
1413import { isOwnerScopedFile } from '@/lib/mothership/file-owners'
1514import { projectToolErrorMessageForCopilot } from '@/lib/mothership/request/tools/resolved-secret-result'
16- import { readToolActivity } from '@/lib/mothership/tools/activity'
1715import { recordSecretUsage } from '@/lib/secrets/usage/record'
1816import { executeTool as executeAppTool } from '@/tools'
19- import { getToolMetadata , getToolParams } from '@/tools/metadata'
17+ import { getToolMetadata } from '@/tools/metadata'
2018import { getToolEntry , isClientExecuted , isKnownTool , isSimExecuted } from './router'
2119import type { ToolExecutionContext , ToolExecutionResult , ToolHandler } from './types'
2220
@@ -241,7 +239,7 @@ async function executeGatedTool(
241239 hasHandler ( toolId ) &&
242240 ( ! isKnownTool ( toolId ) || isSimExecuted ( toolId ) || usesHeadlessClientFallback )
243241 if ( ! canUseRegisteredHandler ) {
244- const appParams = buildAppToolParams ( withoutDisplayActivity ( toolId , params ) , context )
242+ const appParams = buildAppToolParams ( params , context )
245243 const options = {
246244 ...( context . resolvedSecretTraceRegistry
247245 ? { resolvedSecretTraceRegistry : context . resolvedSecretTraceRegistry }
@@ -295,7 +293,8 @@ async function executeGatedTool(
295293 }
296294
297295 try {
298- return await handler ( omit ( params , [ 'activity' ] ) , context )
296+ const { activity : _activity , ...executionParams } = params
297+ return await handler ( executionParams , context )
299298 } catch ( error ) {
300299 const message = toError ( error ) . message
301300 logger . error ( 'Tool execution failed' , {
@@ -331,21 +330,6 @@ function recordAppToolSecretUsage(context: ToolExecutionContext): void {
331330 } )
332331}
333332
334- /**
335- * The chat's grouping label rides on a call's arguments for presentation and persistence, so an
336- * integration or MCP tool would receive an `activity` it never declared and a strict schema
337- * refuses. It is dropped only when it reads as that label and the tool declares no `activity` of
338- * its own (Azure DevOps work items take an Activity field).
339- */
340- function withoutDisplayActivity (
341- toolId : string ,
342- params : Record < string , unknown >
343- ) : Record < string , unknown > {
344- return readToolActivity ( params ) && ! getToolParams ( toolId ) ?. activity
345- ? omit ( params , [ 'activity' ] )
346- : params
347- }
348-
349333function buildAppToolParams (
350334 params : Record < string , unknown > ,
351335 context : ToolExecutionContext
0 commit comments