mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 19:26:58 +10:00
258 lines
22 KiB
TypeScript
258 lines
22 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
import React, { useMemo } from 'react';
|
||
|
|
import { Box, Text, useTheme } from '../../../ink.js';
|
||
|
|
import { WebFetchTool } from '../../../tools/WebFetchTool/WebFetchTool.js';
|
||
|
|
import { shouldShowAlwaysAllowOptions } from '../../../utils/permissions/permissionsLoader.js';
|
||
|
|
import { type OptionWithDescription, Select } from '../../CustomSelect/select.js';
|
||
|
|
import { type UnaryEvent, usePermissionRequestLogging } from '../hooks.js';
|
||
|
|
import { PermissionDialog } from '../PermissionDialog.js';
|
||
|
|
import type { PermissionRequestProps } from '../PermissionRequest.js';
|
||
|
|
import { PermissionRuleExplanation } from '../PermissionRuleExplanation.js';
|
||
|
|
import { logUnaryPermissionEvent } from '../utils.js';
|
||
|
|
function inputToPermissionRuleContent(input: {
|
||
|
|
[k: string]: unknown;
|
||
|
|
}): string {
|
||
|
|
try {
|
||
|
|
const parsedInput = WebFetchTool.inputSchema.safeParse(input);
|
||
|
|
if (!parsedInput.success) {
|
||
|
|
return `input:${input.toString()}`;
|
||
|
|
}
|
||
|
|
const {
|
||
|
|
url
|
||
|
|
} = parsedInput.data;
|
||
|
|
const hostname = new URL(url).hostname;
|
||
|
|
return `domain:${hostname}`;
|
||
|
|
} catch {
|
||
|
|
return `input:${input.toString()}`;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
export function WebFetchPermissionRequest(t0) {
|
||
|
|
const $ = _c(41);
|
||
|
|
const {
|
||
|
|
toolUseConfirm,
|
||
|
|
onDone,
|
||
|
|
onReject,
|
||
|
|
verbose,
|
||
|
|
workerBadge
|
||
|
|
} = t0;
|
||
|
|
const [theme] = useTheme();
|
||
|
|
const {
|
||
|
|
url
|
||
|
|
} = toolUseConfirm.input as {
|
||
|
|
url: string;
|
||
|
|
};
|
||
|
|
let t1;
|
||
|
|
if ($[0] !== url) {
|
||
|
|
t1 = new URL(url);
|
||
|
|
$[0] = url;
|
||
|
|
$[1] = t1;
|
||
|
|
} else {
|
||
|
|
t1 = $[1];
|
||
|
|
}
|
||
|
|
const hostname = t1.hostname;
|
||
|
|
let t2;
|
||
|
|
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t2 = {
|
||
|
|
completion_type: "tool_use_single",
|
||
|
|
language_name: "none"
|
||
|
|
};
|
||
|
|
$[2] = t2;
|
||
|
|
} else {
|
||
|
|
t2 = $[2];
|
||
|
|
}
|
||
|
|
const unaryEvent = t2;
|
||
|
|
usePermissionRequestLogging(toolUseConfirm, unaryEvent);
|
||
|
|
let t3;
|
||
|
|
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t3 = shouldShowAlwaysAllowOptions();
|
||
|
|
$[3] = t3;
|
||
|
|
} else {
|
||
|
|
t3 = $[3];
|
||
|
|
}
|
||
|
|
const showAlwaysAllowOptions = t3;
|
||
|
|
let t4;
|
||
|
|
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t4 = {
|
||
|
|
label: "Yes",
|
||
|
|
value: "yes"
|
||
|
|
};
|
||
|
|
$[4] = t4;
|
||
|
|
} else {
|
||
|
|
t4 = $[4];
|
||
|
|
}
|
||
|
|
let result;
|
||
|
|
if ($[5] !== hostname) {
|
||
|
|
result = [t4];
|
||
|
|
if (showAlwaysAllowOptions) {
|
||
|
|
const t5 = <Text bold={true}>{hostname}</Text>;
|
||
|
|
let t6;
|
||
|
|
if ($[7] !== t5) {
|
||
|
|
t6 = {
|
||
|
|
label: <Text>Yes, and don't ask again for {t5}</Text>,
|
||
|
|
value: "yes-dont-ask-again-domain"
|
||
|
|
};
|
||
|
|
$[7] = t5;
|
||
|
|
$[8] = t6;
|
||
|
|
} else {
|
||
|
|
t6 = $[8];
|
||
|
|
}
|
||
|
|
result.push(t6);
|
||
|
|
}
|
||
|
|
let t5;
|
||
|
|
if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t5 = {
|
||
|
|
label: <Text>No, and tell Claude what to do differently <Text bold={true}>(esc)</Text></Text>,
|
||
|
|
value: "no"
|
||
|
|
};
|
||
|
|
$[9] = t5;
|
||
|
|
} else {
|
||
|
|
t5 = $[9];
|
||
|
|
}
|
||
|
|
result.push(t5);
|
||
|
|
$[5] = hostname;
|
||
|
|
$[6] = result;
|
||
|
|
} else {
|
||
|
|
result = $[6];
|
||
|
|
}
|
||
|
|
const options = result;
|
||
|
|
let t5;
|
||
|
|
if ($[10] !== onDone || $[11] !== onReject || $[12] !== toolUseConfirm) {
|
||
|
|
t5 = function onChange(newValue) {
|
||
|
|
bb8: switch (newValue) {
|
||
|
|
case "yes":
|
||
|
|
{
|
||
|
|
logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "accept");
|
||
|
|
toolUseConfirm.onAllow(toolUseConfirm.input, []);
|
||
|
|
onDone();
|
||
|
|
break bb8;
|
||
|
|
}
|
||
|
|
case "yes-dont-ask-again-domain":
|
||
|
|
{
|
||
|
|
logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "accept");
|
||
|
|
const ruleContent = inputToPermissionRuleContent(toolUseConfirm.input);
|
||
|
|
const ruleValue = {
|
||
|
|
toolName: toolUseConfirm.tool.name,
|
||
|
|
ruleContent
|
||
|
|
};
|
||
|
|
toolUseConfirm.onAllow(toolUseConfirm.input, [{
|
||
|
|
type: "addRules",
|
||
|
|
rules: [ruleValue],
|
||
|
|
behavior: "allow",
|
||
|
|
destination: "localSettings"
|
||
|
|
}]);
|
||
|
|
onDone();
|
||
|
|
break bb8;
|
||
|
|
}
|
||
|
|
case "no":
|
||
|
|
{
|
||
|
|
logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "reject");
|
||
|
|
toolUseConfirm.onReject();
|
||
|
|
onReject();
|
||
|
|
onDone();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
$[10] = onDone;
|
||
|
|
$[11] = onReject;
|
||
|
|
$[12] = toolUseConfirm;
|
||
|
|
$[13] = t5;
|
||
|
|
} else {
|
||
|
|
t5 = $[13];
|
||
|
|
}
|
||
|
|
const onChange = t5;
|
||
|
|
let t6;
|
||
|
|
if ($[14] !== theme || $[15] !== toolUseConfirm.input || $[16] !== verbose) {
|
||
|
|
t6 = WebFetchTool.renderToolUseMessage(toolUseConfirm.input as {
|
||
|
|
url: string;
|
||
|
|
prompt: string;
|
||
|
|
}, {
|
||
|
|
theme,
|
||
|
|
verbose
|
||
|
|
});
|
||
|
|
$[14] = theme;
|
||
|
|
$[15] = toolUseConfirm.input;
|
||
|
|
$[16] = verbose;
|
||
|
|
$[17] = t6;
|
||
|
|
} else {
|
||
|
|
t6 = $[17];
|
||
|
|
}
|
||
|
|
let t7;
|
||
|
|
if ($[18] !== t6) {
|
||
|
|
t7 = <Text>{t6}</Text>;
|
||
|
|
$[18] = t6;
|
||
|
|
$[19] = t7;
|
||
|
|
} else {
|
||
|
|
t7 = $[19];
|
||
|
|
}
|
||
|
|
let t8;
|
||
|
|
if ($[20] !== toolUseConfirm.description) {
|
||
|
|
t8 = <Text dimColor={true}>{toolUseConfirm.description}</Text>;
|
||
|
|
$[20] = toolUseConfirm.description;
|
||
|
|
$[21] = t8;
|
||
|
|
} else {
|
||
|
|
t8 = $[21];
|
||
|
|
}
|
||
|
|
let t9;
|
||
|
|
if ($[22] !== t7 || $[23] !== t8) {
|
||
|
|
t9 = <Box flexDirection="column" paddingX={2} paddingY={1}>{t7}{t8}</Box>;
|
||
|
|
$[22] = t7;
|
||
|
|
$[23] = t8;
|
||
|
|
$[24] = t9;
|
||
|
|
} else {
|
||
|
|
t9 = $[24];
|
||
|
|
}
|
||
|
|
let t10;
|
||
|
|
if ($[25] !== toolUseConfirm.permissionResult) {
|
||
|
|
t10 = <PermissionRuleExplanation permissionResult={toolUseConfirm.permissionResult} toolType="tool" />;
|
||
|
|
$[25] = toolUseConfirm.permissionResult;
|
||
|
|
$[26] = t10;
|
||
|
|
} else {
|
||
|
|
t10 = $[26];
|
||
|
|
}
|
||
|
|
let t11;
|
||
|
|
if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t11 = <Text>Do you want to allow Claude to fetch this content?</Text>;
|
||
|
|
$[27] = t11;
|
||
|
|
} else {
|
||
|
|
t11 = $[27];
|
||
|
|
}
|
||
|
|
let t12;
|
||
|
|
if ($[28] !== onChange) {
|
||
|
|
t12 = () => onChange("no");
|
||
|
|
$[28] = onChange;
|
||
|
|
$[29] = t12;
|
||
|
|
} else {
|
||
|
|
t12 = $[29];
|
||
|
|
}
|
||
|
|
let t13;
|
||
|
|
if ($[30] !== onChange || $[31] !== options || $[32] !== t12) {
|
||
|
|
t13 = <Select options={options} onChange={onChange} onCancel={t12} />;
|
||
|
|
$[30] = onChange;
|
||
|
|
$[31] = options;
|
||
|
|
$[32] = t12;
|
||
|
|
$[33] = t13;
|
||
|
|
} else {
|
||
|
|
t13 = $[33];
|
||
|
|
}
|
||
|
|
let t14;
|
||
|
|
if ($[34] !== t10 || $[35] !== t13) {
|
||
|
|
t14 = <Box flexDirection="column">{t10}{t11}{t13}</Box>;
|
||
|
|
$[34] = t10;
|
||
|
|
$[35] = t13;
|
||
|
|
$[36] = t14;
|
||
|
|
} else {
|
||
|
|
t14 = $[36];
|
||
|
|
}
|
||
|
|
let t15;
|
||
|
|
if ($[37] !== t14 || $[38] !== t9 || $[39] !== workerBadge) {
|
||
|
|
t15 = <PermissionDialog title="Fetch" workerBadge={workerBadge}>{t9}{t14}</PermissionDialog>;
|
||
|
|
$[37] = t14;
|
||
|
|
$[38] = t9;
|
||
|
|
$[39] = workerBadge;
|
||
|
|
$[40] = t15;
|
||
|
|
} else {
|
||
|
|
t15 = $[40];
|
||
|
|
}
|
||
|
|
return t15;
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJCb3giLCJUZXh0IiwidXNlVGhlbWUiLCJXZWJGZXRjaFRvb2wiLCJzaG91bGRTaG93QWx3YXlzQWxsb3dPcHRpb25zIiwiT3B0aW9uV2l0aERlc2NyaXB0aW9uIiwiU2VsZWN0IiwiVW5hcnlFdmVudCIsInVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyIsIlBlcm1pc3Npb25EaWFsb2ciLCJQZXJtaXNzaW9uUmVxdWVzdFByb3BzIiwiUGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvbiIsImxvZ1VuYXJ5UGVybWlzc2lvbkV2ZW50IiwiaW5wdXRUb1Blcm1pc3Npb25SdWxlQ29udGVudCIsImlucHV0IiwiayIsInBhcnNlZElucHV0IiwiaW5wdXRTY2hlbWEiLCJzYWZlUGFyc2UiLCJzdWNjZXNzIiwidG9TdHJpbmciLCJ1cmwiLCJkYXRhIiwiaG9zdG5hbWUiLCJVUkwiLCJXZWJGZXRjaFBlcm1pc3Npb25SZXF1ZXN0IiwidDAiLCIkIiwiX2MiLCJ0b29sVXNlQ29uZmlybSIsIm9uRG9uZSIsIm9uUmVqZWN0IiwidmVyYm9zZSIsIndvcmtlckJhZGdlIiwidGhlbWUiLCJ0MSIsInQyIiwiU3ltYm9sIiwiZm9yIiwiY29tcGxldGlvbl90eXBlIiwibGFuZ3VhZ2VfbmFtZSIsInVuYXJ5RXZlbnQiLCJ0MyIsInNob3dBbHdheXNBbGxvd09wdGlvbnMiLCJ0NCIsImxhYmVsIiwidmFsdWUiLCJyZXN1bHQiLCJ0NSIsInQ2IiwicHVzaCIsIm9wdGlvbnMiLCJvbkNoYW5nZSIsIm5ld1ZhbHVlIiwiYmI4Iiwib25BbGxvdyIsInJ1bGVDb250ZW50IiwicnVsZVZhbHVlIiwidG9vbE5hbWUiLCJ0b29sIiwibmFtZSIsInR5cGUiLCJydWxlcyIsImJlaGF2aW9yIiwiZGVzdGluYXRpb24iLCJyZW5kZXJUb29sVXNlTWVzc2FnZSIsInByb21wdCIsInQ3IiwidDgiLCJkZXNjcmlwdGlvbiIsInQ5IiwidDEwIiwicGVybWlzc2lvblJlc3VsdCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSJdLCJzb3VyY2VzIjpbIldlYkZldGNoUGVybWlzc2lvblJlcXVlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgV2ViRmV0Y2hUb29sIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvV2ViRmV0Y2hUb29sL1dlYkZldGNoVG9vbC5qcydcbmltcG9ydCB7IHNob3VsZFNob3dBbHdheXNBbGxvd09wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9uc0xvYWRlci5qcydcbmltcG9ydCB7XG4gIHR5cGUgT3B0aW9uV2l0aERlc2NyaXB0aW9uLFxuICBTZWxlY3QsXG59IGZyb20gJy4uLy4uL0N1c3RvbVNlbGVjdC9zZWxlY3QuanMnXG5pbXBvcnQgeyB0eXBlIFVuYXJ5RXZlbnQsIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyB9IGZyb20gJy4uL2hvb2tzLmpzJ1xuaW1wb3J0IHsgUGVybWlzc2lvbkRpYWxvZyB9IGZyb20gJy4uL1Blcm1pc3Npb25EaWFsb2cuanMnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMgfSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IFBlcm1pc3Npb25SdWxlRXhwbGFuYXRpb24gfSBmcm9tICcuLi9QZXJtaXNzaW9uUnVsZUV4cGxhbmF0aW9uLmpzJ1xuaW1wb3J0IHsgbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQgfSBmcm9tICcuLi91dGlscy5qcydcblxuZnVuY3Rpb24gaW5wdXRUb1Blcm1pc3Npb25SdWxlQ29udGVudChpbnB1dDogeyBbazogc3RyaW5nXTogdW5rbm93biB9KTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRJbnB1dCA9IFdlYkZldGNoVG9vbC5pbnB1dFNjaGVtYS5zYWZlUGFyc2UoaW5wdXQpXG4gICAgaWYgKCFwYXJzZWRJbnB1dC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gYGlucHV0OiR7aW5wdXQudG9TdHJpbmcoKX1gXG4gICAgfVxuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXJzZWRJbnB1dC5kYXRhXG4gICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWVcbiAgICByZXR1cm4gYGRvbWFpbjoke2hvc3RuYW1lfWBcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGBpbnB1dDoke2lucHV0LnRvU3RyaW5nKCl9YFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXZWJGZXRjaFBlcm1pc3Npb25SZXF1ZXN0KHtcbiAgdG9vbFVzZUNvbmZpcm0sXG4gIG9uRG9uZSxcbiAgb25SZWplY3QsXG4gIHZlcmJvc2UsXG4gIHdvcmtlckJhZGdlLFxufTogUGVybWlzc2lvblJlcXVlc3RQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpXG4gIC8vIHVybCBpcyBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgaW5wdXQgc2NoZW1hXG4gIGNvbnN0IHsgdXJsIH0gPSB0b29sVXNlQ29uZmlybS5pbnB1dCBhcyB7IHVybDogc3RyaW5nIH1cblxuICAvLyBFeHRyYWN0IGhvc3RuYW1lIGZyb20gVVJMXG4gIGNvbnN0IGhvc3RuYW1lID0gbmV3IFVSTCh1cmwpLmhvc3RuYW1lXG5cbiAgY29uc3QgdW5hcnlFdmVudCA9IHVzZU1lbW88VW5hcnlFdmVudD4oXG4gICAgKCkgPT4gKHsgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJywgbGFuZ3VhZ2VfbmFtZTogJ25vbmUnIH0pLFxuICAgIFtdLFxuICApXG5cbiAgdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nKHRvb2xVc2VDb25maXJtLCB1bmFyeUV2ZW50KVxuXG4gIC8vIEdlbmVyYXRlIHBlcm1pc3Npb24gb3B0aW9ucyBzcGVjaWZpYyB0byBkb21haW5zXG4gIGNvbnN0IHNob3dBbHdheXNBbGxvd09wdGlvbnMgPSBzaG91bGRTaG93QWx3YXlzQWxsb3dPcHRpb25zKClcbiAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCk6IE9wdGlvbldpdGhEZXNjcmlwdGlvbjxzdHJpbmc+W10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogT3B0aW9uV2l0aERlc2NyaXB0aW9uPHN0cmluZz5bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdZZXMnLFxuICAgICAgICB2YWx1ZTogJ3llcycsXG4gICAgICB9LFxuICAgIF1cblxuICAgIGlmIChzaG93QWx3YXl
|