MCPcopy Create free account
hub / github.com/AnukarOP/claude-code-leaked / createSubagentContext

Function createSubagentContext

source code/utils/forkedAgent.ts:347–464  ·  view source on GitHub ↗
(
  parentContext: ToolUseContext,
  overrides?: SubagentContextOverrides,
)

Source from the content-addressed store, hash-verified

345 * })
346 */
347export function createSubagentContext(
348 parentContext: ToolUseContext,
349 overrides?: SubagentContextOverrides,
350): ToolUseContext {
351 // Determine abortController: explicit override > share parent's > new child
352 const abortController =
353 overrides?.abortController ??
354 (overrides?.shareAbortController
355 ? parentContext.abortController
356 : createChildAbortController(parentContext.abortController))
357
358 // Determine getAppState - wrap to set shouldAvoidPermissionPrompts unless sharing abortController
359 // (if sharing abortController, it's an interactive agent that CAN show UI)
360 const getAppState: ToolUseContext['getAppState'] = overrides?.getAppState
361 ? overrides.getAppState
362 : overrides?.shareAbortController
363 ? parentContext.getAppState
364 : () => {
365 const state = parentContext.getAppState()
366 if (state.toolPermissionContext.shouldAvoidPermissionPrompts) {
367 return state
368 }
369 return {
370 ...state,
371 toolPermissionContext: {
372 ...state.toolPermissionContext,
373 shouldAvoidPermissionPrompts: true,
374 },
375 }
376 }
377
378 return {
379 // Mutable state - cloned by default to maintain isolation
380 // Clone overrides.readFileState if provided, otherwise clone from parent
381 readFileState: cloneFileStateCache(
382 overrides?.readFileState ?? parentContext.readFileState,
383 ),
384 nestedMemoryAttachmentTriggers: new Set<string>(),
385 loadedNestedMemoryPaths: new Set<string>(),
386 dynamicSkillDirTriggers: new Set<string>(),
387 // Per-subagent: tracks skills surfaced by discovery for was_discovered telemetry (SkillTool.ts:116)
388 discoveredSkillNames: new Set<string>(),
389 toolDecisions: undefined,
390 // Budget decisions: override > clone of parent > undefined (feature off).
391 //
392 // Clone by default (not fresh): cache-sharing forks process parent
393 // messages containing parent tool_use_ids. A fresh state would see
394 // them as unseen and make divergent replacement decisions → wire
395 // prefix differs → cache miss. A clone makes identical decisions →
396 // cache hit. For non-forking subagents the parent UUIDs never match
397 // — clone is a harmless no-op.
398 //
399 // Override: AgentTool resume (reconstructed from sidechain records)
400 // and inProcessRunner (per-teammate persistent loop state).
401 contentReplacementState:
402 overrides?.contentReplacementState ??
403 (parentContext.contentReplacementState
404 ? cloneContentReplacementState(parentContext.contentReplacementState)

Callers 4

runAgentFunction · 0.85
runForkedAgentFunction · 0.85
sessionMemory.tsFile · 0.85

Calls 5

cloneFileStateCacheFunction · 0.85
createAgentIdFunction · 0.85

Tested by

no test coverage detected