SandboxOverridesTab.tsx
components/sandbox/SandboxOverridesTab.tsx
193
Lines
20473
Bytes
1
Exports
7
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with shell-safety, ui-flow. It contains 193 lines, 7 detected imports, and 1 detected exports.
Important relationships
Detected exports
SandboxOverridesTab
Keywords
textelsesandboxoncompletereactmodesymbolmemo_cache_sentineloptionsopen
Detected imports
react/compiler-runtimereact../../ink.js../../types/command.js../../utils/sandbox/sandbox-adapter.js../CustomSelect/select.js../design-system/Tabs.js
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
import { c as _c } from "react/compiler-runtime";
import React from 'react';
import { Box, color, Link, Text, useTheme } from '../../ink.js';
import type { CommandResultDisplay } from '../../types/command.js';
import { SandboxManager } from '../../utils/sandbox/sandbox-adapter.js';
import { Select } from '../CustomSelect/select.js';
import { useTabHeaderFocus } from '../design-system/Tabs.js';
type Props = {
onComplete: (result?: string, options?: {
display?: CommandResultDisplay;
}) => void;
};
type OverrideMode = 'open' | 'closed';
export function SandboxOverridesTab(t0) {
const $ = _c(5);
const {
onComplete
} = t0;
const isEnabled = SandboxManager.isSandboxingEnabled();
const isLocked = SandboxManager.areSandboxSettingsLockedByPolicy();
const currentAllowUnsandboxed = SandboxManager.areUnsandboxedCommandsAllowed();
if (!isEnabled) {
let t1;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t1 = <Box flexDirection="column" paddingY={1}><Text color="subtle">Sandbox is not enabled. Enable sandbox to configure override settings.</Text></Box>;
$[0] = t1;
} else {
t1 = $[0];
}
return t1;
}
if (isLocked) {
let t1;
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
t1 = <Text color="subtle">Override settings are managed by a higher-priority configuration and cannot be changed locally.</Text>;
$[1] = t1;
} else {
t1 = $[1];
}
let t2;
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
t2 = <Box flexDirection="column" paddingY={1}>{t1}<Box marginTop={1}><Text dimColor={true}>Current setting:{" "}{currentAllowUnsandboxed ? "Allow unsandboxed fallback" : "Strict sandbox mode"}</Text></Box></Box>;
$[2] = t2;
} else {
t2 = $[2];
}
return t2;
}
let t1;
if ($[3] !== onComplete) {
t1 = <OverridesSelect onComplete={onComplete} currentMode={currentAllowUnsandboxed ? "open" : "closed"} />;
$[3] = onComplete;
$[4] = t1;
} else {
t1 = $[4];
}
return t1;
}
// Split so useTabHeaderFocus() only runs when the Select renders. Calling it
// above the early returns registers a down-arrow opt-in even when we return
// static text — pressing ↓ then blurs the header with no way back.
function OverridesSelect(t0) {
const $ = _c(25);
const {
onComplete,
currentMode
} = t0;
const [theme] = useTheme();
const {
headerFocused,
focusHeader
} = useTabHeaderFocus();
let t1;
if ($[0] !== theme) {
t1 = color("success", theme)("(current)");
$[0] = theme;
$[1] = t1;
} else {
t1 = $[1];
}
const currentIndicator = t1;
const t2 = currentMode === "open" ? `Allow unsandboxed fallback ${currentIndicator}` : "Allow unsandboxed fallback";
let t3;
if ($[2] !== t2) {
t3 = {
label: t2,
value: "open"
};
$[2] = t2;
$[3] = t3;
} else {
t3 = $[3];
}
const t4 = currentMode === "closed" ? `Strict sandbox mode ${currentIndicator}` : "Strict sandbox mode";
let t5;
if ($[4] !== t4) {
t5 = {
label: t4,
value: "closed"
};
$[4] = t4;
$[5] = t5;
} else {
t5 = $[5];
}
let t6;
if ($[6] !== t3 || $[7] !== t5) {
t6 = [t3, t5];
$[6] = t3;
$[7] = t5;
$[8] = t6;
} else {
t6 = $[8];
}
const options = t6;
let t7;
if ($[9] !== onComplete) {
t7 = async function handleSelect(value) {
const mode = value as OverrideMode;
await SandboxManager.setSandboxSettings({
allowUnsandboxedCommands: mode === "open"
});
const message = mode === "open" ? "\u2713 Unsandboxed fallback allowed - commands can run outside sandbox when necessary" : "\u2713 Strict sandbox mode - all commands must run in sandbox or be excluded via the `excludedCommands` option";
onComplete(message);
};
$[9] = onComplete;
$[10] = t7;
} else {
t7 = $[10];
}
const handleSelect = t7;
let t8;
if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
t8 = <Box marginBottom={1}><Text bold={true}>Configure Overrides:</Text></Box>;
$[11] = t8;
} else {
t8 = $[11];
}
let t9;
if ($[12] !== onComplete) {
t9 = () => onComplete(undefined, {
display: "skip"
});
$[12] = onComplete;
$[13] = t9;
} else {
t9 = $[13];
}
let t10;
if ($[14] !== focusHeader || $[15] !== handleSelect || $[16] !== headerFocused || $[17] !== options || $[18] !== t9) {
t10 = <Select options={options} onChange={handleSelect} onCancel={t9} onUpFromFirstItem={focusHeader} isDisabled={headerFocused} />;
$[14] = focusHeader;
$[15] = handleSelect;
$[16] = headerFocused;
$[17] = options;
$[18] = t9;
$[19] = t10;
} else {
t10 = $[19];
}
let t11;
if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
t11 = <Text dimColor={true}><Text bold={true} dimColor={true}>Allow unsandboxed fallback:</Text>{" "}When a command fails due to sandbox restrictions, Claude can retry with dangerouslyDisableSandbox to run outside the sandbox (falling back to default permissions).</Text>;
$[20] = t11;
} else {
t11 = $[20];
}
let t12;
if ($[21] === Symbol.for("react.memo_cache_sentinel")) {
t12 = <Text dimColor={true}><Text bold={true} dimColor={true}>Strict sandbox mode:</Text>{" "}All bash commands invoked by the model must run in the sandbox unless they are explicitly listed in excludedCommands.</Text>;
$[21] = t12;
} else {
t12 = $[21];
}
let t13;
if ($[22] === Symbol.for("react.memo_cache_sentinel")) {
t13 = <Box flexDirection="column" marginTop={1} gap={1}>{t11}{t12}<Text dimColor={true}>Learn more:{" "}<Link url="https://code.claude.com/docs/en/sandboxing#configure-sandboxing">code.claude.com/docs/en/sandboxing#configure-sandboxing</Link></Text></Box>;
$[22] = t13;
} else {
t13 = $[22];
}
let t14;
if ($[23] !== t10) {
t14 = <Box flexDirection="column" paddingY={1}>{t8}{t10}{t13}</Box>;
$[23] = t10;
$[24] = t14;
} else {
t14 = $[24];
}
return t14;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkJveCIsImNvbG9yIiwiTGluayIsIlRleHQiLCJ1c2VUaGVtZSIsIkNvbW1hbmRSZXN1bHREaXNwbGF5IiwiU2FuZGJveE1hbmFnZXIiLCJTZWxlY3QiLCJ1c2VUYWJIZWFkZXJGb2N1cyIsIlByb3BzIiwib25Db21wbGV0ZSIsInJlc3VsdCIsIm9wdGlvbnMiLCJkaXNwbGF5IiwiT3ZlcnJpZGVNb2RlIiwiU2FuZGJveE92ZXJyaWRlc1RhYiIsInQwIiwiJCIsIl9jIiwiaXNFbmFibGVkIiwiaXNTYW5kYm94aW5nRW5hYmxlZCIsImlzTG9ja2VkIiwiYXJlU2FuZGJveFNldHRpbmdzTG9ja2VkQnlQb2xpY3kiLCJjdXJyZW50QWxsb3dVbnNhbmRib3hlZCIsImFyZVVuc2FuZGJveGVkQ29tbWFuZHNBbGxvd2VkIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJ0MiIsIk92ZXJyaWRlc1NlbGVjdCIsImN1cnJlbnRNb2RlIiwidGhlbWUiLCJoZWFkZXJGb2N1c2VkIiwiZm9jdXNIZWFkZXIiLCJjdXJyZW50SW5kaWNhdG9yIiwidDMiLCJsYWJlbCIsInZhbHVlIiwidDQiLCJ0NSIsInQ2IiwidDciLCJoYW5kbGVTZWxlY3QiLCJtb2RlIiwic2V0U2FuZGJveFNldHRpbmdzIiwiYWxsb3dVbnNhbmRib3hlZENvbW1hbmRzIiwibWVzc2FnZSIsInQ4IiwidDkiLCJ1bmRlZmluZWQiLCJ0MTAiLCJ0MTEiLCJ0MTIiLCJ0MTMiLCJ0MTQiXSwic291cmNlcyI6WyJTYW5kYm94T3ZlcnJpZGVzVGFiLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIGNvbG9yLCBMaW5rLCBUZXh0LCB1c2VUaGVtZSB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFJlc3VsdERpc3BsYXkgfSBmcm9tICcuLi8uLi90eXBlcy9jb21tYW5kLmpzJ1xuaW1wb3J0IHsgU2FuZGJveE1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9zYW5kYm94L3NhbmRib3gtYWRhcHRlci5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uL0N1c3RvbVNlbGVjdC9zZWxlY3QuanMnXG5pbXBvcnQgeyB1c2VUYWJIZWFkZXJGb2N1cyB9IGZyb20gJy4uL2Rlc2lnbi1zeXN0ZW0vVGFicy5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgb25Db21wbGV0ZTogKFxuICAgIHJlc3VsdD86IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBkaXNwbGF5PzogQ29tbWFuZFJlc3VsdERpc3BsYXkgfSxcbiAgKSA9PiB2b2lkXG59XG5cbnR5cGUgT3ZlcnJpZGVNb2RlID0gJ29wZW4nIHwgJ2Nsb3NlZCdcblxuZXhwb3J0IGZ1bmN0aW9uIFNhbmRib3hPdmVycmlkZXNUYWIoeyBvbkNvbXBsZXRlIH06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgaXNFbmFibGVkID0gU2FuZGJveE1hbmFnZXIuaXNTYW5kYm94aW5nRW5hYmxlZCgpXG4gIGNvbnN0IGlzTG9ja2VkID0gU2FuZGJveE1hbmFnZXIuYXJlU2FuZGJveFNldHRpbmdzTG9ja2VkQnlQb2xpY3koKVxuICBjb25zdCBjdXJyZW50QWxsb3dVbnNhbmRib3hlZCA9IFNhbmRib3hNYW5hZ2VyLmFyZVVuc2FuZGJveGVkQ29tbWFuZHNBbGxvd2VkKClcblxuICBpZiAoIWlzRW5hYmxlZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWT17MX0+XG4gICAgICAgIDxUZXh0IGNvbG9yPVwic3VidGxlXCI+XG4gICAgICAgICAgU2FuZGJveCBpcyBub3QgZW5hYmxlZC4gRW5hYmxlIHNhbmRib3ggdG8gY29uZmlndXJlIG92ZXJyaWRlIHNldHRpbmdzLlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXNMb2NrZWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZ1k9ezF9PlxuICAgICAgICA8VGV4dCBjb2xvcj1cInN1YnRsZVwiPlxuICAgICAgICAgIE92ZXJyaWRlIHNldHRpbmdzIGFyZSBtYW5hZ2VkIGJ5IGEgaGlnaGVyLXByaW9yaXR5IGNvbmZpZ3VyYXRpb24gYW5kXG4gICAgICAgICAgY2Fubm90IGJlIGNoYW5nZWQgbG9jYWxseS5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICBDdXJyZW50IHNldHRpbmc6eycgJ31cbiAgICAgICAgICAgIHtjdXJyZW50QWxsb3dVbnNhbmRib3hlZFxuICAgICAgICAgICAgICA/ICdBbGxvdyB1bnNhbmRib3hlZCBmYWxsYmFjaydcbiAgICAgICAgICAgICAgOiAnU3RyaWN0IHNhbmRib3ggbW9kZSd9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE92ZXJyaWRlc1NlbGVjdFxuICAgICAgb25Db21wbGV0ZT17b25Db21wbGV0ZX1cbiAgICAgIGN1cnJlbnRNb2RlPXtjdXJyZW50QWxsb3dVbnNhbmRib3hlZCA/ICdvcGVuJyA6ICdjbG9zZWQnfVxuICAgIC8+XG4gIClcbn1cblxuLy8gU3BsaXQgc28gdXNlVGFiSGVhZGVyRm9jdXMoKSBvbmx5IHJ1bnMgd2hlbiB0aGUgU2VsZWN0IHJlbmRlcnMuIENhbGxpbmcgaXRcbi8vIGFib3ZlIHRoZSBlYXJseSByZXR1cm5zIHJlZ2lzdGVycyBhIGRvd24tYXJyb3cgb3B0LWluIGV2ZW4gd2hlbiB3ZSByZXR1cm5cbi8vIHN0YXRpYyB0ZXh0IOKAlCBwcmVzc2luZyDihpMgdGhlbiBibHVycyB0aGUgaGVhZGVyIHdpdGggbm8gd2F5IGJhY2suXG5mdW5jdGlvbiBPdmVycmlkZXNTZWxlY3Qoe1xuICBvbkNvbXBsZXRlLFxuICBjdXJyZW50TW9kZSxcbn06IFByb3BzICYgeyBjdXJyZW50TW9kZTogT3ZlcnJpZGVNb2RlIH0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbdGhlbWVdID0gdXNlVGhlbWUoKVxuICBjb25zdCB7IGhlYWRlckZvY3VzZWQsIGZvY3VzSGVhZGVyIH0gPSB1c2VUYWJIZWFkZXJGb2N1cygpXG4gIGNvbnN0IGN1cnJlbnRJbmRpY2F0b3IgPSBjb2xvcignc3VjY2VzcycsIHRoZW1lKShgKGN1cnJlbnQpYClcblxuICBjb25zdCBvcHRpb25zID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOlxuICAgICAgICBjdXJyZW50TW9kZSA9PT0gJ29wZW4nXG4gICAgICAgICAgPyBgQWxsb3cgdW5zYW5kYm94ZWQgZmFsbGJhY2sgJHtjdXJyZW50SW5kaWNhdG9yfWBcbiAgICAgICAgICA6ICdBbGxvdyB1bnNhbmRib3hlZCBmYWxsYmFjaycsXG4gICAgICB2YWx1ZTogJ29wZW4nLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6XG4gICAgICAgIGN1cnJlbnRNb2RlID09PSAnY2xvc2VkJ1xuICAgICAgICAgID8gYFN0cmljdCBzYW5kYm94IG1vZGUgJHtjdXJyZW50SW5kaWNhdG9yfWBcbiAgICAgICAgICA6ICdTdHJpY3Qgc2FuZGJveCBtb2RlJyxcbiAgICAgIHZhbHVlOiAnY2xvc2VkJyxcbiAgICB9LFxuICBdXG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU2VsZWN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2RlID0gdmFsdWUgYXMgT3ZlcnJpZGVNb2RlXG5cbiAgICBhd2FpdCBTYW5kYm94TWFuYWdlci5zZXRTYW5kYm94U2V0dGluZ3Moe1xuICAgICAgYWxsb3dVbnNhbmRib3hlZENvbW1hbmRzOiBtb2RlID09PSAnb3BlbicsXG4gICAgfSlcblxuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgbW9kZSA9PT0gJ29wZW4nXG4gICAgICAgID8gJ+KckyBVbnNhbmRib3hlZCBmYWxsYmFjayBhbGxvd2VkIC0gY29tbWFuZHMgY2FuIHJ1biBvdXRzaWRlIHNhbmRib3ggd2hlbiBuZWNlc3NhcnknXG4gICAgICAgIDogJ+KckyBTdHJpY3Qgc2FuZGJveCBtb2RlIC0gYWxsIGNvbW1hbmRzIG11c3QgcnVuIGluIHNhbmRib3ggb3IgYmUgZXhjbHVkZWQgdmlhIHRoZSBgZXhjbHVkZWRDb21tYW5kc2Agb3B0aW9uJ1xuXG4gICAgb25Db21wbGV0ZShtZXNzYWdlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWT17MX0+XG4gICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgIDxUZXh0IGJvbGQ+Q29uZmlndXJlIE92ZXJyaWRlczo8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICAgIDxTZWxlY3RcbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgb25DYW5jZWw9eygpID0+IG9uQ29tcGxldGUodW5kZWZpbmVkLCB7IGRpc3BsYXk6ICdza2lwJyB9KX1cbiAgICAgICAgb25VcEZyb21GaXJzdEl0ZW09e2ZvY3VzSGVhZGVyfVxuICAgICAgICBpc0Rpc2FibGVkPXtoZWFkZXJGb2N1c2VkfVxuICAgICAgLz5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0gZ2FwPXsxfT5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgPFRleHQgYm9sZCBkaW1Db2xvcj5cbiAgICAgICAgICAgIEFsbG93IHVuc2FuZGJveGVkIGZhbGxiYWNrOlxuICAgICAgICAgIDwvVGV4dD57JyAnfVxuICAgICAgICAgIFdoZW4gYSBjb21tYW5kIGZhaWxzIGR1ZSB0byBzYW5kYm94IHJlc3RyaWN0aW9ucywgQ2xhdWRlIGNhbiByZXRyeVxuICAgICAgICAgIHdpdGggZGFuZ2Vyb3VzbHlEaXNhYmxlU2FuZGJveCB0byBydW4gb3V0c2lkZSB0aGUgc2FuZGJveCAoZmFsbGluZ1xuICAgICAgICAgIGJhY2sgdG8gZGVmYXVsdCBwZXJtaXNzaW9ucykuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgPFRleHQgYm9sZCBkaW1Db2xvcj5cbiAgICAgICAgICAgIFN0cmljdCBzYW5kYm94IG1vZGU6XG4gICAgICAgICAgPC9UZXh0PnsnICd9XG4gICAgICAgICAgQWxsIGJhc2ggY29tbWFuZHMgaW52b2tlZCBieSB0aGUgbW9kZWwgbXVzdCBydW4gaW4gdGhlIHNhbmRib3ggdW5sZXNzXG4gICAgICAgICAgdGhleSBhcmUgZXhwbGljaXRseSBsaXN0ZWQgaW4gZXhjbHVkZWRDb21tYW5kcy5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICBMZWFybiBtb3JlOnsnICd9XG4gICAgICAgICAgPExpbmsgdXJsPVwiaHR0cHM6Ly9jb2RlLmNsYXVkZS5jb20vZG9jcy9lbi9zYW5kYm94aW5nI2NvbmZpZ3VyZS1zYW5kYm94aW5nXCI+XG4gICAgICAgICAgICBjb2RlLmNsYXVkZS5jb20vZG9jcy9lbi9zYW5kYm94aW5nI2NvbmZpZ3VyZS1zYW5kYm94aW5nXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0JveD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxNQUFNLE9BQU87QUFDekIsU0FBU0MsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxRQUFRLFFBQVEsY0FBYztBQUMvRCxjQUFjQyxvQkFBb0IsUUFBUSx3QkFBd0I7QUFDbEUsU0FBU0MsY0FBYyxRQUFRLHdDQUF3QztBQUN2RSxTQUFTQyxNQUFNLFFBQVEsMkJBQTJCO0FBQ2xELFNBQVNDLGlCQUFp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