

























@@ -78,6 +78,16 @@ import {
7878normalizeToolName,
7979resolveToolProfilePolicy,
8080} from "./tool-policy.js";
81+import {
82+createToolSearchTools,
83+resolveToolSearchConfig,
84+TOOL_CALL_RAW_TOOL_NAME,
85+TOOL_DESCRIBE_RAW_TOOL_NAME,
86+TOOL_SEARCH_CODE_MODE_TOOL_NAME,
87+TOOL_SEARCH_RAW_TOOL_NAME,
88+type ToolSearchCatalogRef,
89+type ToolSearchCatalogToolExecutor,
90+} from "./tool-search.js";
8191import { resolveWorkspaceRoot } from "./workspace-dir.js";
82928393function isOpenAIProvider(provider?: string) {
@@ -376,6 +386,12 @@ export function createOpenClawCodingTools(options?: {
376386forceHeartbeatTool?: boolean;
377387/** If false, build plugin tools only while preserving the shared policy pipeline. */
378388includeCoreTools?: boolean;
389+/** PI-only: expose OpenClaw Tool Search controls for catalog compaction. */
390+includeToolSearchControls?: boolean;
391+/** Executes cataloged tools through the active PI run lifecycle. */
392+toolSearchCatalogExecutor?: ToolSearchCatalogToolExecutor;
393+/** Runtime-local Tool Search catalog ref shared with PI attempt compaction. */
394+toolSearchCatalogRef?: ToolSearchCatalogRef;
379395/** Limits which tool families are materialized before the shared policy pipeline runs. */
380396toolConstructionPlan?: OpenClawCodingToolConstructionPlan;
381397/** Whether the sender is an owner (required for owner-only tools). */
@@ -450,9 +466,24 @@ export function createOpenClawCodingTools(options?: {
450466(options?.trigger === "heartbeat" &&
451467options?.config?.messages?.visibleReplies === "message_tool");
452468const forceHeartbeatTool = options?.forceHeartbeatTool === true || enableHeartbeatTool;
469+const toolSearchConfig = resolveToolSearchConfig(options?.config);
470+const toolSearchControlsEnabled =
471+options?.includeToolSearchControls === true && toolSearchConfig.enabled;
472+const toolSearchControlAllowlist = toolSearchControlsEnabled
473+ ? [
474+TOOL_SEARCH_CODE_MODE_TOOL_NAME,
475+TOOL_SEARCH_RAW_TOOL_NAME,
476+TOOL_DESCRIBE_RAW_TOOL_NAME,
477+TOOL_CALL_RAW_TOOL_NAME,
478+]
479+ : [];
480+const mergeToolSearchControlAllowlist = <TPolicy extends { allow?: string[] }>(
481+policy: TPolicy | undefined,
482+) => mergeAlsoAllowPolicy(policy, toolSearchControlAllowlist);
453483const runtimeProfileAlsoAllow = [
454484 ...(options?.forceMessageTool ? ["message"] : []),
455485 ...(forceHeartbeatTool ? [HEARTBEAT_RESPONSE_TOOL_NAME] : []),
486+ ...toolSearchControlAllowlist,
456487];
457488const profilePolicyWithAlsoAllow = mergeAlsoAllowPolicy(profilePolicy, [
458489 ...(profileAlsoAllow ?? []),
@@ -483,16 +514,26 @@ export function createOpenClawCodingTools(options?: {
483514store: subagentStore,
484515})
485516 : undefined;
517+const globalPolicyWithToolSearchControls = mergeToolSearchControlAllowlist(globalPolicy);
518+const globalProviderPolicyWithToolSearchControls =
519+mergeToolSearchControlAllowlist(globalProviderPolicy);
520+const agentPolicyWithToolSearchControls = mergeToolSearchControlAllowlist(agentPolicy);
521+const agentProviderPolicyWithToolSearchControls =
522+mergeToolSearchControlAllowlist(agentProviderPolicy);
523+const groupPolicyWithToolSearchControls = mergeToolSearchControlAllowlist(groupPolicy);
524+const sandboxToolPolicyWithToolSearchControls =
525+mergeToolSearchControlAllowlist(sandboxToolPolicy);
526+const subagentPolicyWithToolSearchControls = mergeToolSearchControlAllowlist(subagentPolicy);
486527const allowBackground = isToolAllowedByPolicies("process", [
487528profilePolicyWithAlsoAllow,
488529providerProfilePolicyWithAlsoAllow,
489-globalPolicy,
490-globalProviderPolicy,
491-agentPolicy,
492-agentProviderPolicy,
493-groupPolicy,
494-sandboxToolPolicy,
495-subagentPolicy,
530+globalPolicyWithToolSearchControls,
531+globalProviderPolicyWithToolSearchControls,
532+agentPolicyWithToolSearchControls,
533+agentProviderPolicyWithToolSearchControls,
534+groupPolicyWithToolSearchControls,
535+sandboxToolPolicyWithToolSearchControls,
536+subagentPolicyWithToolSearchControls,
496537]);
497538options?.recordToolPrepStage?.("tool-policy");
498539const execConfig = resolveExecConfig({ cfg: options?.config, agentId });
@@ -705,6 +746,19 @@ export function createOpenClawCodingTools(options?: {
705746},
706747resolvedConfig: options?.config,
707748});
749+const toolSearchTools = toolSearchControlsEnabled
750+ ? createToolSearchTools({
751+config: options?.config,
752+runtimeConfig: options?.config,
753+ agentId,
754+sessionKey: options?.sessionKey,
755+sessionId: options?.sessionId,
756+runId: options?.runId,
757+catalogRef: options?.toolSearchCatalogRef,
758+abortSignal: options?.abortSignal,
759+executeTool: options?.toolSearchCatalogExecutor,
760+})
761+ : [];
708762const tools: AnyAgentTool[] = [
709763 ...base,
710764 ...(includeBaseCodingTools && sandboxRoot
@@ -788,6 +842,7 @@ export function createOpenClawCodingTools(options?: {
788842recordToolPrepStage: options?.recordToolPrepStage,
789843})
790844 : pluginToolsOnly),
845+ ...toolSearchTools,
791846];
792847options?.recordToolPrepStage?.("openclaw-tools");
793848const toolsForMemoryFlush: AnyAgentTool[] = isMemoryFlushRun && memoryFlushWritePath ? [] : tools;
@@ -847,15 +902,15 @@ export function createOpenClawCodingTools(options?: {
847902providerProfilePolicy: providerProfilePolicyWithAlsoAllow,
848903 providerProfile,
849904providerProfileUnavailableCoreWarningAllowlist: providerProfilePolicy?.allow,
850- globalPolicy,
851- globalProviderPolicy,
852- agentPolicy,
853- agentProviderPolicy,
854- groupPolicy,
905+globalPolicy: globalPolicyWithToolSearchControls,
906+globalProviderPolicy: globalProviderPolicyWithToolSearchControls,
907+agentPolicy: agentPolicyWithToolSearchControls,
908+agentProviderPolicy: agentProviderPolicyWithToolSearchControls,
909+groupPolicy: groupPolicyWithToolSearchControls,
855910 agentId,
856911}),
857-{ policy: sandboxToolPolicy, label: "sandbox tools.allow" },
858-{ policy: subagentPolicy, label: "subagent tools.allow" },
912+{ policy: sandboxToolPolicyWithToolSearchControls, label: "sandbox tools.allow" },
913+{ policy: subagentPolicyWithToolSearchControls, label: "subagent tools.allow" },
859914],
860915});
861916options?.recordToolPrepStage?.("authorization-policy");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。