1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| async function hasPermissionsToUseToolInner( tool: Tool, input: unknown, context: ToolUseContext, ): Promise<PermissionResult> { const denyResult = checkDenyRules(tool.name, input, context) if (denyResult) return { behavior: 'deny', ...denyResult } const askResult = checkAskRules(tool.name, input, context) if (askResult && !isSandboxAutoAllow(input, context)) { return { behavior: 'ask', ...askResult } } if (tool.checkPermissions) { const toolResult = await tool.checkPermissions(input, context) if (toolResult.behavior !== 'passthrough') return toolResult } const implResult = checkImplementationDeny(tool, input, context) if (implResult) return { behavior: 'deny', ...implResult } if (requiresUserInteraction(tool, input)) { return { behavior: 'ask', message: 'This operation requires user interaction' } } const contentAskResult = checkContentAskRules(tool, input, context) if (contentAskResult) return { behavior: 'ask', ...contentAskResult } const safetyResult = checkPathSafety(tool, input, context) if (safetyResult) return { behavior: 'ask', ...safetyResult } if (context.permissionContext.mode === 'bypassPermissions') { return { behavior: 'allow', decisionReason: { type: 'mode' } } } const allowResult = checkAllowRules(tool.name, input, context) if (allowResult) return { behavior: 'allow', ...allowResult } return { behavior: 'passthrough' } }
|