πŸ“„ File detail

components/sandbox/SandboxConfigTab.tsx

🧩 .tsxπŸ“ 45 linesπŸ’Ύ 16,895 bytesπŸ“ text
← Back to All Files

🎯 Use case

This file lives under β€œcomponents/”, which covers shared React UI pieces. On the API surface it exposes SandboxConfigTab β€” mainly types, interfaces, or factory objects. Dependencies touch React UI. It composes internal code from ink and utils (relative imports).

Generated from folder role, exports, dependency roots, and inline comments β€” not hand-reviewed for every path.

🧠 Inline summary

import { c as _c } from "react/compiler-runtime"; import * as React from 'react'; import { Box, Text } from '../../ink.js'; import { SandboxManager, shouldAllowManagedSandboxDomainsOnly } from '../../utils/sandbox/sandbox-adapter.js'; export function SandboxConfigTab() {

πŸ“€ Exports (heuristic)

  • SandboxConfigTab

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import * as React from 'react';
import { Box, Text } from '../../ink.js';
import { SandboxManager, shouldAllowManagedSandboxDomainsOnly } from '../../utils/sandbox/sandbox-adapter.js';
export function SandboxConfigTab() {
  const $ = _c(3);
  const isEnabled = SandboxManager.isSandboxingEnabled();
  let t0;
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
    const depCheck = SandboxManager.checkDependencies();
    t0 = depCheck.warnings.length > 0 ? <Box marginTop={1} flexDirection="column">{depCheck.warnings.map(_temp)}</Box> : null;
    $[0] = t0;
  } else {
    t0 = $[0];
  }
  const warningsNote = t0;
  if (!isEnabled) {
    let t1;
    if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
      t1 = <Box flexDirection="column" paddingY={1}><Text color="subtle">Sandbox is not enabled</Text>{warningsNote}</Box>;
      $[1] = t1;
    } else {
      t1 = $[1];
    }
    return t1;
  }
  let t1;
  if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
    const fsReadConfig = SandboxManager.getFsReadConfig();
    const fsWriteConfig = SandboxManager.getFsWriteConfig();
    const networkConfig = SandboxManager.getNetworkRestrictionConfig();
    const allowUnixSockets = SandboxManager.getAllowUnixSockets();
    const excludedCommands = SandboxManager.getExcludedCommands();
    const globPatternWarnings = SandboxManager.getLinuxGlobPatternWarnings();
    t1 = <Box flexDirection="column" paddingY={1}><Box flexDirection="column"><Text bold={true} color="permission">Excluded Commands:</Text><Text dimColor={true}>{excludedCommands.length > 0 ? excludedCommands.join(", ") : "None"}</Text></Box>{fsReadConfig.denyOnly.length > 0 && <Box marginTop={1} flexDirection="column"><Text bold={true} color="permission">Filesystem Read Restrictions:</Text><Text dimColor={true}>Denied: {fsReadConfig.denyOnly.join(", ")}</Text>{fsReadConfig.allowWithinDeny && fsReadConfig.allowWithinDeny.length > 0 && <Text dimColor={true}>Allowed within denied: {fsReadConfig.allowWithinDeny.join(", ")}</Text>}</Box>}{fsWriteConfig.allowOnly.length > 0 && <Box marginTop={1} flexDirection="column"><Text bold={true} color="permission">Filesystem Write Restrictions:</Text><Text dimColor={true}>Allowed: {fsWriteConfig.allowOnly.join(", ")}</Text>{fsWriteConfig.denyWithinAllow.length > 0 && <Text dimColor={true}>Denied within allowed: {fsWriteConfig.denyWithinAllow.join(", ")}</Text>}</Box>}{(networkConfig.allowedHosts && networkConfig.allowedHosts.length > 0 || networkConfig.deniedHosts && networkConfig.deniedHosts.length > 0) && <Box marginTop={1} flexDirection="column"><Text bold={true} color="permission">Network Restrictions{shouldAllowManagedSandboxDomainsOnly() ? " (Managed)" : ""}:</Text>{networkConfig.allowedHosts && networkConfig.allowedHosts.length > 0 && <Text dimColor={true}>Allowed: {networkConfig.allowedHosts.join(", ")}</Text>}{networkConfig.deniedHosts && networkConfig.deniedHosts.length > 0 && <Text dimColor={true}>Denied: {networkConfig.deniedHosts.join(", ")}</Text>}</Box>}{allowUnixSockets && allowUnixSockets.length > 0 && <Box marginTop={1} flexDirection="column"><Text bold={true} color="permission">Allowed Unix Sockets:</Text><Text dimColor={true}>{allowUnixSockets.join(", ")}</Text></Box>}{globPatternWarnings.length > 0 && <Box marginTop={1} flexDirection="column"><Text bold={true} color="warning">⚠ Warning: Glob patterns not fully supported on Linux</Text><Text dimColor={true}>The following patterns will be ignored:{" "}{globPatternWarnings.slice(0, 3).join(", ")}{globPatternWarnings.length > 3 && ` (${globPatternWarnings.length - 3} more)`}</Text></Box>}{warningsNote}</Box>;
    $[2] = t1;
  } else {
    t1 = $[2];
  }
  return t1;
}
function _temp(w, i) {
  return <Text key={i} dimColor={true}>{w}</Text>;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkJveCIsIlRleHQiLCJTYW5kYm94TWFuYWdlciIsInNob3VsZEFsbG93TWFuYWdlZFNhbmRib3hEb21haW5zT25seSIsIlNhbmRib3hDb25maWdUYWIiLCIkIiwiX2MiLCJpc0VuYWJsZWQiLCJpc1NhbmRib3hpbmdFbmFibGVkIiwidDAiLCJTeW1ib2wiLCJmb3IiLCJkZXBDaGVjayIsImNoZWNrRGVwZW5kZW5jaWVzIiwid2FybmluZ3MiLCJsZW5ndGgiLCJtYXAiLCJfdGVtcCIsIndhcm5pbmdzTm90ZSIsInQxIiwiZnNSZWFkQ29uZmlnIiwiZ2V0RnNSZWFkQ29uZmlnIiwiZnNXcml0ZUNvbmZpZyIsImdldEZzV3JpdGVDb25maWciLCJuZXR3b3JrQ29uZmlnIiwiZ2V0TmV0d29ya1Jlc3RyaWN0aW9uQ29uZmlnIiwiYWxsb3dVbml4U29ja2V0cyIsImdldEFsbG93VW5peFNvY2tldHMiLCJleGNsdWRlZENvbW1hbmRzIiwiZ2V0RXhjbHVkZWRDb21tYW5kcyIsImdsb2JQYXR0ZXJuV2FybmluZ3MiLCJnZXRMaW51eEdsb2JQYXR0ZXJuV2FybmluZ3MiLCJqb2luIiwiZGVueU9ubHkiLCJhbGxvd1dpdGhpbkRlbnkiLCJhbGxvd09ubHkiLCJkZW55V2l0aGluQWxsb3ciLCJhbGxvd2VkSG9zdHMiLCJkZW5pZWRIb3N0cyIsInNsaWNlIiwidyIsImkiXSwic291cmNlcyI6WyJTYW5kYm94Q29uZmlnVGFiLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7XG4gIFNhbmRib3hNYW5hZ2VyLFxuICBzaG91bGRBbGxvd01hbmFnZWRTYW5kYm94RG9tYWluc09ubHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3NhbmRib3gvc2FuZGJveC1hZGFwdGVyLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gU2FuZGJveENvbmZpZ1RhYigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBpc0VuYWJsZWQgPSBTYW5kYm94TWFuYWdlci5pc1NhbmRib3hpbmdFbmFibGVkKClcblxuICAvLyBTaG93IHdhcm5pbmdzIChlLmcuLCBzZWNjb21wIG5vdCBhdmFpbGFibGUgb24gTGludXgpXG4gIGNvbnN0IGRlcENoZWNrID0gU2FuZGJveE1hbmFnZXIuY2hlY2tEZXBlbmRlbmNpZXMoKVxuICBjb25zdCB3YXJuaW5nc05vdGUgPVxuICAgIGRlcENoZWNrLndhcm5pbmdzLmxlbmd0aCA+IDAgPyAoXG4gICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICB7ZGVwQ2hlY2sud2FybmluZ3MubWFwKCh3LCBpKSA9PiAoXG4gICAgICAgICAgPFRleHQga2V5PXtpfSBkaW1Db2xvcj5cbiAgICAgICAgICAgIHt3fVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L0JveD5cbiAgICApIDogbnVsbFxuXG4gIGlmICghaXNFbmFibGVkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdZPXsxfT5cbiAgICAgICAgPFRleHQgY29sb3I9XCJzdWJ0bGVcIj5TYW5kYm94IGlzIG5vdCBlbmFibGVkPC9UZXh0PlxuICAgICAgICB7d2FybmluZ3NOb3RlfVxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgZnNSZWFkQ29uZmlnID0gU2FuZGJveE1hbmFnZXIuZ2V0RnNSZWFkQ29uZmlnKClcbiAgY29uc3QgZnNXcml0ZUNvbmZpZyA9IFNhbmRib3hNYW5hZ2VyLmdldEZzV3JpdGVDb25maWcoKVxuICBjb25zdCBuZXR3b3JrQ29uZmlnID0gU2FuZGJveE1hbmFnZXIuZ2V0TmV0d29ya1Jlc3RyaWN0aW9uQ29uZmlnKClcbiAgY29uc3QgYWxsb3dVbml4U29ja2V0cyA9IFNhbmRib3hNYW5hZ2VyLmdldEFsbG93VW5peFNvY2tldHMoKVxuICBjb25zdCBleGNsdWRlZENvbW1hbmRzID0gU2FuZGJveE1hbmFnZXIuZ2V0RXhjbHVkZWRDb21tYW5kcygpXG4gIGNvbnN0IGdsb2JQYXR0ZXJuV2FybmluZ3MgPSBTYW5kYm94TWFuYWdlci5nZXRMaW51eEdsb2JQYXR0ZXJuV2FybmluZ3MoKVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZ1k9ezF9PlxuICAgICAgey8qIEV4Y2x1ZGVkIENvbW1hbmRzICovfVxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIDxUZXh0IGJvbGQgY29sb3I9XCJwZXJtaXNzaW9uXCI+XG4gICAgICAgICAgRXhjbHVkZWQgQ29tbWFuZHM6XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAge2V4Y2x1ZGVkQ29tbWFuZHMubGVuZ3RoID4gMCA/IGV4Y2x1ZGVkQ29tbWFuZHMuam9pbignLCAnKSA6ICdOb25lJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Cb3g+XG5cbiAgICAgIHsvKiBGaWxlc3lzdGVtIFJlYWQgUmVzdHJpY3Rpb25zICovfVxuICAgICAge2ZzUmVhZENvbmZpZy5kZW55T25seS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwicGVybWlzc2lvblwiPlxuICAgICAgICAgICAgRmlsZXN5c3RlbSBSZWFkIFJlc3RyaWN0aW9uczpcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+RGVuaWVkOiB7ZnNSZWFkQ29uZmlnLmRlbnlPbmx5LmpvaW4oJywgJyl9PC9UZXh0PlxuICAgICAgICAgIHtmc1JlYWRDb25maWcuYWxsb3dXaXRoaW5EZW55ICYmXG4gICAgICAgICAgICBmc1JlYWRDb25maWcuYWxsb3dXaXRoaW5EZW55Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICBBbGxvd2VkIHdpdGhpbiBkZW5pZWQ6IHtmc1JlYWRDb25maWcuYWxsb3dXaXRoaW5EZW55LmpvaW4oJywgJyl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cblxuICAgICAgey8qIEZpbGVzeXN0ZW0gV3JpdGUgUmVzdHJpY3Rpb25zICovfVxuICAgICAge2ZzV3JpdGVDb25maWcuYWxsb3dPbmx5Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0IGJvbGQgY29sb3I9XCJwZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICBGaWxlc3lzdGVtIFdyaXRlIFJlc3RyaWN0aW9uczpcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+QWxsb3dlZDoge2ZzV3JpdGVDb25maWcuYWxsb3dPbmx5LmpvaW4oJywgJyl9PC9UZXh0PlxuICAgICAgICAgIHtmc1dyaXRlQ29uZmlnLmRlbnlXaXRoaW5BbGxvdy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICBEZW5pZWQgd2l0aGluIGFsbG93ZWQ6IHtmc1dyaXRlQ29uZmlnLmRlbnlXaXRoaW5BbGxvdy5qb2luKCcsICcpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cblxuICAgICAgey8qIE5ldHdvcmsgUmVzdHJpY3Rpb25zICovfVxuICAgICAgeygobmV0d29ya0NvbmZpZy5hbGxvd2VkSG9zdHMgJiYgbmV0d29ya0NvbmZpZy5hbGxvd2VkSG9zdHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgKG5ldHdvcmtDb25maWcuZGVuaWVkSG9zdHMgJiZcbiAgICAgICAgICBuZXR3b3JrQ29uZmlnLmRlbmllZEhvc3RzLmxlbmd0aCA+IDApKSAmJiAoXG4gICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cInBlcm1pc3Npb25cIj5cbiAgICAgICAgICAgIE5ldHdvcmsgUmVzdHJpY3Rpb25zXG4gICAgICAgICAgICB7c2hvdWxkQWxsb3dNYW5hZ2VkU2FuZGJveERvbWFpbnNPbmx5KCkgPyAnIChNYW5hZ2VkKScgOiAnJ306XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHtuZXR3b3JrQ29uZmlnLmFsbG93ZWRIb3N0cyAmJlxuICAgICAgICAgICAgbmV0d29ya0NvbmZpZy5hbGxvd2VkSG9zdHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgIEFsbG93ZWQ6IHtuZXR3b3JrQ29uZmlnLmFsbG93ZWRIb3N0cy5qb2luKCcsICcpfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIHtuZXR3b3JrQ29uZmlnLmRlbmllZEhvc3RzICYmXG4gICAgICAgICAgICBuZXR3b3JrQ29uZmlnLmRlbmllZEhvc3RzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICBEZW5pZWQ6IHtuZXR3b3JrQ29uZmlnLmRlbmllZEhvc3RzLmpvaW4oJywgJyl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cblxuICAgICAgey8qIFVuaXggU29ja2V0cyAqL31cbiAgICAgIHthbGxvd1VuaXhTb2NrZXRzICYmIGFsbG93VW5peFNvY2tldHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cInBlcm1pc3Npb25cIj5cbiAgICAgICAgICAgIEFsbG93ZWQgVW5peCBTb2NrZXRzOlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57YWxsb3dVbml4U29ja2V0cy5qb2luKCcsICcpfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuXG4gICAgICB7LyogTGludXggR2xvYiBQYXR0ZXJuIFdhcm5pbmcgKi99XG4gICAgICB7Z2xvYlBhdHRlcm5XYXJuaW5ncy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwid2FybmluZ1wiPlxuICAgICAgICAgICAg4pqgIFdhcm5pbmc6IEdsb2IgcGF0dGVybnMgbm90IGZ1bGx5IHN1cHBvcnRlZCBvbiBMaW51eFxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgd2lsbCBiZSBpZ25vcmVkOnsnICd9XG4gICAgICAgICAgICB7Z2xvYlBhdHRlcm5XYXJuaW5ncy5zbGljZSgwLCAzKS5qb2luKCcsICcpfVxuICAgICAgICAgICAge2dsb2JQYXR0ZXJuV2FybmluZ3MubGVuZ3RoID4gMyAmJlxuICAgICAgICAgICAgICBgICgke2dsb2JQYXR0ZXJuV2FybmluZ3MubGVuZ3RoIC0gM30gbW9yZSlgfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuXG4gICAgICB7d2FybmluZ3NOb3RlfVxuICAgIDwvQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtB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