({
baseTools,
enabledTools,
replPrimitiveTools,
}: ToolInventoryInputs)
| 85 | } |
| 86 | |
| 87 | export function buildToolInventory({ |
| 88 | baseTools, |
| 89 | enabledTools, |
| 90 | replPrimitiveTools, |
| 91 | }: ToolInventoryInputs): ToolInventoryEntry[] { |
| 92 | const baseByName = new Map(baseTools.map(tool => [tool.name, tool])) |
| 93 | const enabledByName = new Map(enabledTools.map(tool => [tool.name, tool])) |
| 94 | const replByName = new Map(replPrimitiveTools.map(tool => [tool.name, tool])) |
| 95 | |
| 96 | const toolNames = sortToolNames([ |
| 97 | ...Object.keys(TOOL_POLICY_BY_NAME), |
| 98 | ...baseByName.keys(), |
| 99 | ...enabledByName.keys(), |
| 100 | ...replByName.keys(), |
| 101 | ]) |
| 102 | |
| 103 | return toolNames.map(name => { |
| 104 | const policy = getToolPolicy(name) |
| 105 | const baseTool = baseByName.get(name) |
| 106 | const enabledTool = enabledByName.get(name) |
| 107 | const replTool = replByName.get(name) |
| 108 | const tool = enabledTool ?? baseTool ?? replTool |
| 109 | const turnOneOrDeferred: ToolAdvertisedSurface = |
| 110 | enabledTool === undefined |
| 111 | ? 'not_exposed' |
| 112 | : isDeferredTool(enabledTool) |
| 113 | ? 'deferred' |
| 114 | : 'turn_one' |
| 115 | |
| 116 | return { |
| 117 | name, |
| 118 | tier: policy?.tier ?? null, |
| 119 | rationale: policy?.rationale ?? null, |
| 120 | policyDefined: policy !== undefined, |
| 121 | compiled: baseTool !== undefined || replTool !== undefined, |
| 122 | baseRegistered: baseTool !== undefined, |
| 123 | enabled: enabledTool !== undefined, |
| 124 | turnOneOrDeferred, |
| 125 | replExposed: replTool !== undefined, |
| 126 | shouldDefer: tool?.shouldDefer === true, |
| 127 | alwaysLoad: tool?.alwaysLoad === true, |
| 128 | isMcp: tool?.isMcp === true, |
| 129 | aliases: tool?.aliases ?? [], |
| 130 | searchHint: tool?.searchHint ?? null, |
| 131 | userFacingName: resolveUserFacingName(tool), |
| 132 | } |
| 133 | }) |
| 134 | } |
| 135 | |
| 136 | export function collectToolInventory( |
| 137 | permissionContext: ToolPermissionContext = getEmptyToolPermissionContext(), |
no test coverage detected