fix(task): forward parent-discovered rules, extensions, and custom tools to subagents
Each `runSubprocess` call re-ran `loadCapability<Rule>()`, `loadSessionExtensions()`, and `discoverAndLoadCustomTools()` because `ExecutorOptions` and the `createAgentSession()` call inside the executor omitted three pass-through fields the parent had already paid for. The already-correct paths (skills, context files, workspace tree, MCP manager) showed the intended pattern. - Cache `rules`, `extensionsResult`, and `loadedCustomTools` on the parent's `ToolSession`. - Add `rules` / `preloadedExtensions` / `preloadedCustomTools` to `ExecutorOptions`; forward them from both `runSubprocess` call sites in `task/index.ts` and into the executor's `createAgentSession()`. - Add `preloadedCustomTools` to `CreateAgentSessionOptions` and skip `discoverAndLoadCustomTools()` when it is supplied. - Shallow-clone `extensionsResult.extensions` when reusing `preloadedExtensions`, so the per-session autoresearch + custom-tools inline wrappers never leak back into the caller's array. Fixes #2190
This commit is contained in:
@@ -8,14 +8,16 @@ import path from "node:path";
|
||||
import type { AgentEvent, AgentIdentity, AgentTelemetryConfig, ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
||||
import { recordHandoff, resolveTelemetry } from "@oh-my-pi/pi-agent-core";
|
||||
import { logger, prompt, untilAborted } from "@oh-my-pi/pi-utils";
|
||||
import type { Rule } from "../capability/rule";
|
||||
import { ModelRegistry } from "../config/model-registry";
|
||||
import { resolveModelOverrideWithAuthFallback } from "../config/model-resolver";
|
||||
import type { PromptTemplate } from "../config/prompt-templates";
|
||||
import { Settings } from "../config/settings";
|
||||
import { SETTINGS_SCHEMA, type SettingPath } from "../config/settings-schema";
|
||||
import type { CustomTool } from "../extensibility/custom-tools/types";
|
||||
import type { CustomTool, LoadedCustomTool } from "../extensibility/custom-tools/types";
|
||||
import { runExtensionCompact, runExtensionSetModel } from "../extensibility/extensions/compact-handler";
|
||||
import { getSessionSlashCommands } from "../extensibility/extensions/get-commands-handler";
|
||||
import type { LoadExtensionsResult } from "../extensibility/extensions/types";
|
||||
import { buildSkillPromptMessage, type Skill } from "../extensibility/skills";
|
||||
import type { HindsightSessionState } from "../hindsight/state";
|
||||
import type { LocalProtocolOptions } from "../internal-urls";
|
||||
@@ -190,6 +192,12 @@ export interface ExecutorOptions {
|
||||
skills?: Skill[];
|
||||
promptTemplates?: PromptTemplate[];
|
||||
workspaceTree?: WorkspaceTree;
|
||||
/** Parent-discovered rules, forwarded to skip rule discovery in the subagent. */
|
||||
rules?: Rule[];
|
||||
/** Parent-loaded extensions, forwarded via `preloadedExtensions` to skip discovery. */
|
||||
preloadedExtensions?: LoadExtensionsResult;
|
||||
/** Parent-discovered custom tools, forwarded to skip the `.omp/tools/` scan. */
|
||||
preloadedCustomTools?: LoadedCustomTool[];
|
||||
mcpManager?: MCPManager;
|
||||
authStorage?: AuthStorage;
|
||||
modelRegistry?: ModelRegistry;
|
||||
@@ -1284,6 +1292,9 @@ export async function runSubprocess(options: ExecutorOptions): Promise<SingleRes
|
||||
skills: options.skills,
|
||||
promptTemplates: options.promptTemplates,
|
||||
workspaceTree: options.workspaceTree,
|
||||
rules: options.rules,
|
||||
preloadedExtensions: options.preloadedExtensions,
|
||||
preloadedCustomTools: options.preloadedCustomTools,
|
||||
systemPrompt: defaultPrompt => {
|
||||
const subagentPrompt = prompt.render(subagentSystemPromptTemplate, {
|
||||
agent: agent.systemPrompt,
|
||||
|
||||
@@ -990,6 +990,9 @@ export class TaskTool implements AgentTool<TaskToolSchemaInstance, TaskToolDetai
|
||||
autoloadSkills: resolvedAutoloadSkills,
|
||||
workspaceTree: this.session.workspaceTree,
|
||||
promptTemplates,
|
||||
rules: this.session.rules,
|
||||
preloadedExtensions: this.session.extensionsResult,
|
||||
preloadedCustomTools: this.session.loadedCustomTools,
|
||||
localProtocolOptions,
|
||||
parentArtifactManager,
|
||||
parentHindsightSessionState: this.session.getHindsightSessionState?.(),
|
||||
@@ -1048,6 +1051,9 @@ export class TaskTool implements AgentTool<TaskToolSchemaInstance, TaskToolDetai
|
||||
autoloadSkills: resolvedAutoloadSkills,
|
||||
workspaceTree: this.session.workspaceTree,
|
||||
promptTemplates,
|
||||
rules: this.session.rules,
|
||||
preloadedExtensions: this.session.extensionsResult,
|
||||
preloadedCustomTools: this.session.loadedCustomTools,
|
||||
localProtocolOptions,
|
||||
parentArtifactManager,
|
||||
parentHindsightSessionState: this.session.getHindsightSessionState?.(),
|
||||
|
||||
Reference in New Issue
Block a user