Files
Netcatty/global.d.ts
陈大猫 ecadc1fc2d
Some checks failed
build-packages / dedupe push run (push) Has been cancelled
build-packages / dedupe result (push) Has been cancelled
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / ${{ needs.dedupe.outputs.skip_heavy_ci == 'true' && 'deduped build-linux-x64' || 'build-linux-x64' }} (push) Has been cancelled
build-packages / ${{ needs.dedupe.outputs.skip_heavy_ci == 'true' && 'deduped build-linux-arm64' || 'build-linux-arm64' }} (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
[codex] Enable sudo fallback for Docker panel (#1466)
* Enable sudo fallback for Docker panel

* Prefer sudo for Docker panel commands

* Use pending saved sudo password immediately

* Try plain Docker before sudo fallback

* Detect Docker before sudo fallback

* Add sudo fallback for Docker popup commands

* Harden Docker popup sudo fallback
2026-06-14 10:47:21 +08:00

214 lines
6.7 KiB
TypeScript

/// <reference path="./types/global/netcatty-bridge-session.d.ts" />
/// <reference path="./types/global/netcatty-bridge-sftp.d.ts" />
/// <reference path="./types/global/netcatty-bridge-sync.d.ts" />
/// <reference path="./types/global/netcatty-bridge-files.d.ts" />
/// <reference path="./types/global/netcatty-bridge-ai.d.ts" />
/// <reference path="./types/global/netcatty-bridge-app.d.ts" />
/// <reference path="./types/global/netcatty-bridge-system.d.ts" />
declare module "*.cjs" {
const value: Record<string, unknown>;
export = value;
}
declare module 'react' {
interface InputHTMLAttributes<T> extends HTMLAttributes<T> {
webkitdirectory?: string | boolean;
}
}
declare global {
// Proxy configuration for SSH connections
interface NetcattyProxyConfig {
type: 'http' | 'socks5' | 'command';
host: string;
port: number;
command?: string;
username?: string;
password?: string;
}
// Discovered local shell (e.g. CMD, PowerShell, WSL, Git Bash)
interface DiscoveredShell {
id: string;
name: string;
command: string;
args?: string[];
icon: string;
isDefault?: boolean;
}
// Jump host configuration for SSH tunneling
interface NetcattyJumpHost {
hostname: string;
port: number;
username: string;
password?: string;
privateKey?: string;
certificate?: string;
passphrase?: string;
publicKey?: string;
keyId?: string;
keySource?: 'generated' | 'imported' | 'reference';
label?: string; // Display label for UI
proxy?: NetcattyProxyConfig;
identityFilePaths?: string[];
// ET server port on this hop, used only when ET tunnels through it as a
// jump host (--jport). Defaults to 2022 in the bridge when omitted.
etPort?: number;
// Resolved keepalive for THIS hop (caller has already applied host
// override / global fallback). interval in seconds, 0 = disabled.
keepaliveInterval?: number;
keepaliveCountMax?: number;
// Per-hop algorithm settings, mirroring the target-host fields. When
// omitted the bridge falls back to the target host's settings so a
// single setting on the leaf still covers the chain (matches the
// pre-existing behavior of `legacyAlgorithms`).
legacyAlgorithms?: boolean;
skipEcdsaHostKey?: boolean;
algorithmOverrides?: import("./domain/models").HostAlgorithmOverrides;
}
// Host key information for verification
// Reserved for future host key verification UI feature
interface _NetcattyHostKeyInfo {
hostname: string;
port: number;
keyType: string;
fingerprint: string;
publicKey?: string;
}
interface NetcattySSHOptions {
sessionId?: string;
hostLabel?: string;
hostname: string;
username: string;
port?: number;
password?: string;
privateKey?: string;
// Optional OpenSSH user certificate
certificate?: string;
publicKey?: string; // OpenSSH public key line
keyId?: string;
keySource?: 'generated' | 'imported' | 'reference';
agentForwarding?: boolean;
x11Forwarding?: boolean;
x11Display?: string;
cols?: number;
rows?: number;
charset?: string;
extraArgs?: string[];
startupCommand?: string;
passphrase?: string;
knownHosts?: import("./domain/models").KnownHost[];
// Environment variables to set in the remote shell
env?: Record<string, string>;
// Proxy configuration
proxy?: NetcattyProxyConfig;
// Jump hosts (bastion chain)
jumpHosts?: NetcattyJumpHost[];
// SSH-level keepalive interval in seconds (0 = disabled)
keepaliveInterval?: number;
// Unanswered keepalives before ssh2 declares the connection dead
keepaliveCountMax?: number;
// Enable legacy SSH algorithms for older network equipment
legacyAlgorithms?: boolean;
// Drop ecdsa-sha2-* from offered host-key algorithms (#1027)
skipEcdsaHostKey?: boolean;
// Per-category algorithm override lists (advanced, see HostAlgorithmOverrides)
algorithmOverrides?: import("./domain/models").HostAlgorithmOverrides;
// Use sudo for SFTP server
sudo?: boolean;
// Saved host password used by background system tools when they need sudo.
sudoAutofillPassword?: string;
// Session log configuration for real-time streaming
sessionLog?: { enabled: boolean; directory: string; format: string; timestampsEnabled?: boolean };
// SSH connection diagnostics. Does not capture terminal output.
sshDebugLogEnabled?: boolean;
// Local SSH key file paths (from SSH config IdentityFile)
identityFilePaths?: string[];
// When set, reuse the already-authenticated SSH connection of this existing
// session by opening a new shell channel on it, instead of dialing a fresh
// connection. Lets a duplicated tab skip a second MFA prompt (issue #1204).
// The bridge falls back to a fresh connection if the source is gone.
sourceSessionId?: string;
}
interface SftpStatResult {
name: string;
type: 'file' | 'directory' | 'symlink';
size: number;
lastModified: number; // timestamp
permissions?: string; // e.g., "rwxr-xr-x"
owner?: string;
group?: string;
}
interface SftpTransferProgress {
transferId: string;
bytesTransferred: number;
totalBytes: number;
speed: number; // bytes per second
}
// Port Forwarding Types
interface PortForwardOptions {
ruleId?: string;
tunnelId: string;
type: 'local' | 'remote' | 'dynamic';
localPort: number;
bindAddress?: string;
remoteHost?: string;
remotePort?: number;
// SSH connection details
hostname: string;
port?: number;
username: string;
password?: string;
privateKey?: string;
certificate?: string;
keyId?: string;
passphrase?: string;
proxy?: NetcattyProxyConfig;
jumpHosts?: NetcattyJumpHost[];
identityFilePaths?: string[];
legacyAlgorithms?: boolean;
skipEcdsaHostKey?: boolean;
algorithmOverrides?: import("./domain/models").HostAlgorithmOverrides;
// Resolved keepalive for the target connection (caller has already
// applied host override / global fallback). interval in seconds.
keepaliveInterval?: number;
keepaliveCountMax?: number;
}
interface PortForwardResult {
tunnelId: string;
success: boolean;
cancelled?: boolean;
error?: string;
}
interface PortForwardStatusResult {
tunnelId: string;
status: 'inactive' | 'connecting' | 'active' | 'error';
type?: 'local' | 'remote' | 'dynamic';
error?: string;
}
interface NetcattyWindowsPtyInfo {
backend: 'conpty' | 'winpty';
buildNumber?: number;
}
type PortForwardStatusCallback = (status: 'inactive' | 'connecting' | 'active' | 'error', error?: string) => void;
interface NetcattyBridge {}
interface Window {
netcatty?: NetcattyBridge;
}
}
export { };