import * as React from 'react' import { Box, Text } from '@anthropic/ink' import { type NetworkHostPattern, shouldAllowManagedSandboxDomainsOnly, } from 'src/utils/sandbox/sandbox-adapter.js' import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent, } from '../../services/analytics/index.js' import { Select } from '../CustomSelect/select.js' import { PermissionDialog } from './PermissionDialog.js' export type SandboxPermissionRequestProps = { hostPattern: NetworkHostPattern onUserResponse: (response: { allow: boolean persistToSettings: boolean }) => void } export function SandboxPermissionRequest({ hostPattern: { host }, onUserResponse, }: SandboxPermissionRequestProps): React.ReactNode { function onSelect(value: string) { // We may want to better unify this dialog with other permission dialogs // and use their logging, but this is slightly different and we don't have // the tool context here. For now, just use basic logging for basic data. if (process.env.USER_TYPE === 'ant') { logEvent('tengu_sandbox_network_dialog_result', { host: host as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, result: value as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, }) } switch (value) { case 'yes': onUserResponse({ allow: true, persistToSettings: false }) break case 'yes-dont-ask-again': onUserResponse({ allow: true, persistToSettings: true }) break case 'no': onUserResponse({ allow: false, persistToSettings: false }) break } } const managedDomainsOnly = shouldAllowManagedSandboxDomainsOnly() const options = [ { label: 'Yes', value: 'yes' }, ...(!managedDomainsOnly ? [ { label: ( Yes, and don't ask again for {host} ), value: 'yes-dont-ask-again', }, ] : []), { label: ( No, and tell Claude what to do differently (esc) ), value: 'no', }, ] return ( Host: {host} Do you want to allow this connection?