[Init] Initial commit - NetMesh terminal manager
Some checks failed
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 / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
Some checks failed
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 / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
This commit is contained in:
724
global.d.ts
vendored
Normal file
724
global.d.ts
vendored
Normal file
@@ -0,0 +1,724 @@
|
||||
/// <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" />
|
||||
/// <reference path="./types/global/netcatty-bridge-script.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;
|
||||
hostId?: string;
|
||||
port: number;
|
||||
username: string;
|
||||
authMethod?: import("./domain/models").HostAuthMethod;
|
||||
requiresMfa?: boolean;
|
||||
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[];
|
||||
useSshAgent?: boolean;
|
||||
agentPublicKeys?: string[];
|
||||
identityAgent?: string;
|
||||
identitiesOnly?: boolean;
|
||||
addKeysToAgent?: string;
|
||||
useKeychain?: boolean;
|
||||
// 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 SSH connection timeouts, resolved from the saved host.
|
||||
sshTcpConnectTimeoutMs?: number;
|
||||
sshAuthReadyTimeoutMs?: number;
|
||||
verifyHostKeys?: boolean;
|
||||
// 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;
|
||||
hostId?: string;
|
||||
hostLabel?: string;
|
||||
hostname: string;
|
||||
username: string;
|
||||
authMethod?: import("./domain/models").HostAuthMethod;
|
||||
requiresMfa?: boolean;
|
||||
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[];
|
||||
verifyHostKeys?: boolean;
|
||||
// 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;
|
||||
// Maximum time to establish the TCP connection
|
||||
sshTcpConnectTimeoutMs?: number;
|
||||
// Maximum time for SSH handshake and authentication
|
||||
sshAuthReadyTimeoutMs?: 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;
|
||||
// Remote file protocol: auto (SFTP then SCP fallback) | sftp | scp
|
||||
fileProtocol?: 'auto' | 'sftp' | 'scp';
|
||||
// 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;
|
||||
// Boot generation for correlating host-key prompts with a terminal start.
|
||||
bootEpoch?: number;
|
||||
// Local SSH key file paths (from SSH config IdentityFile)
|
||||
identityFilePaths?: string[];
|
||||
useSshAgent?: boolean;
|
||||
agentPublicKeys?: string[];
|
||||
identityAgent?: string;
|
||||
identitiesOnly?: boolean;
|
||||
addKeysToAgent?: string;
|
||||
useKeychain?: boolean;
|
||||
// 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;
|
||||
/** Require openSftpForSession to use exactly the requested live session. */
|
||||
requireExactSourceSession?: boolean;
|
||||
// Skip POSIX process discovery when copying a network-device session.
|
||||
skipShellPidDiscovery?: boolean;
|
||||
/**
|
||||
* When false, terminal/SFTP opens must dial a fresh SSH connection and
|
||||
* must not borrow a live, parked, or in-flight registry transport. Used by
|
||||
* connect-time terminal automation and dedicated bulk transfers.
|
||||
* Default true (normal terminal, browse, and MFA-skip reuse).
|
||||
*/
|
||||
reuseTransport?: boolean;
|
||||
}
|
||||
|
||||
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;
|
||||
hostId?: string;
|
||||
port?: number;
|
||||
username: string;
|
||||
authMethod?: import("./domain/models").HostAuthMethod;
|
||||
requiresMfa?: boolean;
|
||||
password?: string;
|
||||
privateKey?: string;
|
||||
certificate?: string;
|
||||
keyId?: string;
|
||||
passphrase?: string;
|
||||
knownHosts?: import("./domain/models").KnownHost[];
|
||||
verifyHostKeys?: boolean;
|
||||
proxy?: NetcattyProxyConfig;
|
||||
jumpHosts?: NetcattyJumpHost[];
|
||||
identityFilePaths?: string[];
|
||||
useSshAgent?: boolean;
|
||||
agentPublicKeys?: string[];
|
||||
identityAgent?: string;
|
||||
identitiesOnly?: boolean;
|
||||
addKeysToAgent?: string;
|
||||
useKeychain?: boolean;
|
||||
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;
|
||||
sshTcpConnectTimeoutMs?: number;
|
||||
sshAuthReadyTimeoutMs?: number;
|
||||
}
|
||||
|
||||
interface PortForwardResult {
|
||||
tunnelId: string;
|
||||
success: boolean;
|
||||
cancelled?: boolean;
|
||||
blockedByCleanup?: boolean;
|
||||
reused?: boolean;
|
||||
status?: 'inactive' | 'connecting' | 'active' | 'error';
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface PortForwardStatusResult {
|
||||
tunnelId: string;
|
||||
status: 'inactive' | 'connecting' | 'active' | 'error';
|
||||
type?: 'local' | 'remote' | 'dynamic';
|
||||
error?: string;
|
||||
}
|
||||
|
||||
type PortForwardRuntimePhase =
|
||||
| 'connecting'
|
||||
| 'active'
|
||||
| 'stopping'
|
||||
| 'error'
|
||||
| 'inactive';
|
||||
|
||||
interface PortForwardRuntimeRecord {
|
||||
ruleId?: string;
|
||||
tunnelId: string;
|
||||
phase: PortForwardRuntimePhase | string;
|
||||
error?: string;
|
||||
cleanupRequired?: boolean;
|
||||
revision: number;
|
||||
updatedAt: number;
|
||||
}
|
||||
|
||||
interface PortForwardRuntimeSnapshot {
|
||||
epoch: string;
|
||||
revision: number;
|
||||
records: PortForwardRuntimeRecord[];
|
||||
}
|
||||
|
||||
type PortForwardRuntimeEvent =
|
||||
| {
|
||||
epoch: string;
|
||||
revision: number;
|
||||
kind: 'upsert';
|
||||
record: PortForwardRuntimeRecord;
|
||||
}
|
||||
| {
|
||||
epoch: string;
|
||||
revision: number;
|
||||
kind: 'remove';
|
||||
tunnelId: string;
|
||||
ruleId?: string;
|
||||
};
|
||||
|
||||
interface NetcattyWindowsPtyInfo {
|
||||
backend: 'conpty' | 'winpty';
|
||||
buildNumber?: number;
|
||||
}
|
||||
|
||||
type PortForwardStatusCallback = (status: 'inactive' | 'connecting' | 'active' | 'error', error?: string) => void;
|
||||
type PortForwardRuntimeEventCallback = (event: PortForwardRuntimeEvent) => void;
|
||||
|
||||
interface NetcattyPluginRuntimeStatus {
|
||||
available: boolean;
|
||||
experimental: true;
|
||||
}
|
||||
|
||||
interface NetcattyInstalledPlugin {
|
||||
id: string;
|
||||
enabled: boolean;
|
||||
activeVersion: string | null;
|
||||
manifest: unknown;
|
||||
runtime: {
|
||||
status: string;
|
||||
kind: 'browser' | 'utility' | null;
|
||||
lastError: string | null;
|
||||
quarantinedAt: number | null;
|
||||
};
|
||||
}
|
||||
|
||||
interface NetcattyExtensionProviderContribution {
|
||||
pluginId: string;
|
||||
pluginVersion: string;
|
||||
pluginDisplayName?: string;
|
||||
provider: import("@netcatty/plugin-contract").ProviderContribution;
|
||||
}
|
||||
|
||||
interface NetcattyExtensionProviderRequest {
|
||||
providerId: string;
|
||||
kind: 'connection' | 'authentication' | 'importer';
|
||||
operation: string;
|
||||
requestId?: string;
|
||||
payload?: import("@netcatty/plugin-contract").JsonValue;
|
||||
deadlineMs?: number;
|
||||
}
|
||||
|
||||
interface NetcattyPluginConnectionStartRequest {
|
||||
requestId?: string;
|
||||
sessionId: string;
|
||||
protocol?: string;
|
||||
hostLabel?: string;
|
||||
hostname?: string;
|
||||
providerId: string;
|
||||
configuration: import("@netcatty/plugin-contract").JsonValue;
|
||||
columns: number;
|
||||
rows: number;
|
||||
credential?: import("@netcatty/plugin-contract").CredentialRef | import("@netcatty/plugin-contract").SecretRef;
|
||||
authenticationProviderId?: string;
|
||||
sessionLog?: { enabled: boolean; directory: string; format: string; timestampsEnabled?: boolean };
|
||||
deadlineMs?: number;
|
||||
}
|
||||
|
||||
interface NetcattyPluginImporterPreview {
|
||||
providerId: string;
|
||||
result: import("@netcatty/plugin-contract").ImporterParseResult;
|
||||
records: ReadonlyArray<import("@netcatty/plugin-contract").ImporterRecord>;
|
||||
}
|
||||
|
||||
interface NetcattyPluginImporterProgressEvent {
|
||||
requestId: string;
|
||||
providerId: string;
|
||||
progress: Extract<import("@netcatty/plugin-contract").ImporterRecord, { type: "progress" }>;
|
||||
}
|
||||
|
||||
interface NetcattyPluginAuthenticationChallengeOpenEvent {
|
||||
requestId: string;
|
||||
challengeRequestId: string;
|
||||
challenge: import("@netcatty/plugin-contract").AuthenticationChallenge;
|
||||
}
|
||||
|
||||
interface NetcattyPluginAuthenticationChallengeCancelEvent {
|
||||
requestId: string;
|
||||
challengeRequestId: string;
|
||||
challengeId?: string;
|
||||
cancelled: true;
|
||||
}
|
||||
|
||||
type NetcattyPluginAuthenticationChallengeEvent =
|
||||
| NetcattyPluginAuthenticationChallengeOpenEvent
|
||||
| NetcattyPluginAuthenticationChallengeCancelEvent;
|
||||
|
||||
interface NetcattyBridge {
|
||||
getPluginRuntimeStatus?(): Promise<NetcattyPluginRuntimeStatus>;
|
||||
listPlugins?(): Promise<NetcattyInstalledPlugin[]>;
|
||||
installPluginPackage?(archivePath: string, options?: { enable?: boolean }): Promise<NetcattyInstalledPlugin>;
|
||||
setPluginEnabled?(pluginId: string, enabled: boolean): Promise<NetcattyInstalledPlugin>;
|
||||
restartPlugin?(pluginId: string): Promise<NetcattyInstalledPlugin>;
|
||||
uninstallPlugin?(pluginId: string): Promise<boolean>;
|
||||
getPluginContributions?(options?: NetcattyPluginContributionQuery): Promise<NetcattyPluginContributionSnapshot>;
|
||||
getPluginContributionIcon?(pluginId: string, icon: Extract<NetcattyPluginIconReference, { kind: 'package' }>): Promise<{ light: string; dark?: string }>;
|
||||
executePluginCommand?(command: string, args?: unknown, context?: Record<string, unknown>): Promise<unknown>;
|
||||
updatePluginSetting?(pluginId: string, settingId: string, value: unknown, scopeId?: string): Promise<{ restartRequired: boolean }>;
|
||||
resetPluginSetting?(pluginId: string, settingId: string, scopeId?: string): Promise<{ restartRequired: boolean }>;
|
||||
setPluginEnvironment?(environment: NetcattyPluginEnvironment): Promise<void>;
|
||||
listPluginTerminalProviders?(options: NetcattyTerminalProviderQuery): Promise<ReadonlyArray<NetcattyTerminalProviderContribution>>;
|
||||
providePluginTerminal?(request: NetcattyTerminalProviderRequest): Promise<ReadonlyArray<NetcattyTerminalProviderResult>>;
|
||||
cancelPluginTerminalRequest?(requestId: string): Promise<boolean>;
|
||||
publishPluginTerminalSessionEvent?(event: NetcattyTerminalSessionEvent): Promise<ReadonlyArray<{ pluginId: string; delivered: boolean }>>;
|
||||
listPluginExtensionProviders?(options: { kind: 'connection' | 'authentication' | 'importer' | 'sync'; locale?: string }): Promise<ReadonlyArray<NetcattyExtensionProviderContribution>>;
|
||||
updatePluginCredentialCatalog?(entries: ReadonlyArray<{ id: string; ciphertext: string }>): Promise<number>;
|
||||
invokePluginExtensionProvider?(request: NetcattyExtensionProviderRequest): Promise<import("@netcatty/plugin-contract").JsonValue>;
|
||||
cancelPluginExtensionRequest?(requestId: string): Promise<boolean>;
|
||||
pluginSyncConnect?(request: {
|
||||
requestId?: string;
|
||||
providerId: string;
|
||||
configuration?: unknown;
|
||||
credential?: unknown;
|
||||
deadlineMs?: number;
|
||||
}): Promise<{ account: { id: string; email?: string; name?: string; avatarUrl?: string } }>;
|
||||
pluginSyncDisconnect?(request: { requestId?: string; providerId: string; deadlineMs?: number }): Promise<null>;
|
||||
pluginSyncGetAccount?(request: { requestId?: string; providerId: string; deadlineMs?: number }): Promise<{
|
||||
account: { id: string; email?: string; name?: string; avatarUrl?: string } | null;
|
||||
}>;
|
||||
pluginSyncGetCapabilities?(request: { requestId?: string; providerId: string; deadlineMs?: number }): Promise<{
|
||||
revisions: boolean;
|
||||
conditionalWrites: boolean;
|
||||
atomicReplacement: boolean;
|
||||
maxObjectBytes?: number;
|
||||
maxObjects?: number;
|
||||
}>;
|
||||
pluginSyncReadObject?(request: {
|
||||
requestId?: string;
|
||||
providerId: string;
|
||||
key: string;
|
||||
preferStream?: boolean;
|
||||
deadlineMs?: number;
|
||||
}): Promise<{
|
||||
found: boolean;
|
||||
key: string;
|
||||
data?: Uint8Array | null;
|
||||
streamed?: boolean;
|
||||
transferId?: string;
|
||||
byteLength?: number;
|
||||
revision?: string;
|
||||
contentType?: string;
|
||||
}>;
|
||||
pluginSyncReadChunk?(request: {
|
||||
requestId: string;
|
||||
transferId: string;
|
||||
maxBytes?: number;
|
||||
}): Promise<{ chunk: Uint8Array; done: boolean }>;
|
||||
pluginSyncWriteObject?(request: {
|
||||
requestId?: string;
|
||||
providerId: string;
|
||||
key: string;
|
||||
data: Uint8Array;
|
||||
expectedRevision?: string | null;
|
||||
preferStream?: boolean;
|
||||
deadlineMs?: number;
|
||||
}): Promise<{ created: boolean; revision?: string }>;
|
||||
pluginSyncWriteBegin?(request: {
|
||||
requestId?: string;
|
||||
providerId: string;
|
||||
key: string;
|
||||
byteLength: number;
|
||||
expectedRevision?: string | null;
|
||||
deadlineMs?: number;
|
||||
}): Promise<{ transferId: string; windowBytes: number }>;
|
||||
pluginSyncWriteChunk?(request: {
|
||||
requestId: string;
|
||||
transferId: string;
|
||||
sequence: number;
|
||||
chunk: Uint8Array;
|
||||
}): Promise<{ accepted: number }>;
|
||||
pluginSyncWriteCommit?(request: {
|
||||
requestId: string;
|
||||
transferId: string;
|
||||
}): Promise<{ created: boolean; revision?: string }>;
|
||||
pluginSyncDeleteObject?(request: {
|
||||
requestId?: string;
|
||||
providerId: string;
|
||||
key: string;
|
||||
expectedRevision?: string;
|
||||
deadlineMs?: number;
|
||||
}): Promise<{ deleted: boolean }>;
|
||||
pluginSyncPutSecret?(request: {
|
||||
providerId: string;
|
||||
key: string;
|
||||
value: string;
|
||||
}): Promise<{ kind: 'secret'; id: string; key: string; created?: boolean }>;
|
||||
pluginSyncDeleteSecrets?(request: {
|
||||
providerId: string;
|
||||
keys?: string[];
|
||||
}): Promise<{ deleted: number }>;
|
||||
pluginSyncRestoreSecrets?(request: {
|
||||
providerId: string;
|
||||
keys: string[];
|
||||
discard?: boolean;
|
||||
}): Promise<{ restored: number; discarded?: number }>;
|
||||
collectPluginSyncSidecars?(): Promise<unknown>;
|
||||
applyPluginSyncSidecars?(bundle: unknown): Promise<{ applied: boolean; count?: number; entries?: unknown }>;
|
||||
pluginHostReady?(): boolean;
|
||||
startPluginConnection?(request: NetcattyPluginConnectionStartRequest): Promise<{ sessionId: string; providerId: string; status: 'connecting' | 'connected'; diagnostics: ReadonlyArray<import("@netcatty/plugin-contract").ProviderValidationIssue> }>;
|
||||
writePluginConnection?(sessionId: string, data: Uint8Array): Promise<void>;
|
||||
controlPluginConnection?(sessionId: string, operation: 'resize' | 'signal' | 'reconnect' | 'close' | 'getStatus', payload?: Record<string, unknown>): Promise<unknown>;
|
||||
detectPluginImporter?(request: { providerId: string; sample: Uint8Array; fileName?: string; mediaType?: string; deadlineMs?: number }): Promise<import("@netcatty/plugin-contract").ImporterDetectResult>;
|
||||
selectPluginImporterFile?(): Promise<{ selectionToken: string; fileName: string; sample: Uint8Array } | null>;
|
||||
releasePluginImporterFile?(selectionToken: string): Promise<boolean>;
|
||||
parsePluginImporterFile?(request: { requestId?: string; providerId: string; selectionToken: string; mediaType?: string; options?: import("@netcatty/plugin-contract").JsonValue; deadlineMs?: number }): Promise<NetcattyPluginImporterPreview>;
|
||||
onPluginImporterProgress?(callback: (event: NetcattyPluginImporterProgressEvent) => void): () => void;
|
||||
respondPluginAuthenticationChallenge?(response: {
|
||||
requestId: string;
|
||||
challengeRequestId: string;
|
||||
challengeId: string;
|
||||
response?: string | boolean | ReadonlyArray<string>;
|
||||
cancelled?: boolean;
|
||||
}): Promise<void>;
|
||||
onPluginAuthenticationChallenge?(callback: (event: NetcattyPluginAuthenticationChallengeEvent) => void): () => void;
|
||||
onPluginConnectionData?(callback: (event: { sessionId: string; data: Uint8Array }) => void): () => void;
|
||||
onPluginConnectionClosed?(callback: (event: { sessionId: string; reason: string }) => void): () => void;
|
||||
openPluginView?(payload: NetcattyPluginViewOpenRequest): Promise<{ instanceId: string }>;
|
||||
closePluginView?(instanceId: string): Promise<void>;
|
||||
setPluginViewBounds?(instanceId: string, bounds: { x: number; y: number; width: number; height: number }): Promise<void>;
|
||||
setPluginViewVisibility?(instanceId: string, visible: boolean): Promise<void>;
|
||||
postPluginViewMessage?(instanceId: string, message: unknown): Promise<void>;
|
||||
onPluginContributionsChanged?(callback: (event: { reason: string; pluginId: string | null; revision: number }) => void): () => void;
|
||||
onPluginViewMessage?(callback: (event: { pluginId: string; viewId: string; message: unknown }) => void): () => void;
|
||||
onPluginViewClosed?(callback: (event: NetcattyPluginViewClosedEvent) => void): () => void;
|
||||
getPluginScopeCatalog?(): Promise<NetcattyPluginScopeCatalog>;
|
||||
setPluginScopeCatalog?(catalog: NetcattyPluginScopeCatalog): Promise<void>;
|
||||
onPluginScopeCatalogChanged?(callback: (catalog: NetcattyPluginScopeCatalog) => void): () => void;
|
||||
}
|
||||
|
||||
interface NetcattyPluginContributionQuery {
|
||||
locale?: string;
|
||||
context?: Record<string, unknown>;
|
||||
menuContexts?: Partial<Record<string, Record<string, unknown>>>;
|
||||
scopeIds?: Partial<Record<'workspace' | 'host' | 'session' | 'device', string>>;
|
||||
}
|
||||
|
||||
interface NetcattyPluginSettingContribution {
|
||||
id: string;
|
||||
label: string;
|
||||
description?: string;
|
||||
placeholder?: string;
|
||||
control: string;
|
||||
scope: string;
|
||||
scopeId: string | null;
|
||||
value?: unknown;
|
||||
secret?: boolean;
|
||||
configured: boolean;
|
||||
visible: boolean;
|
||||
restartRequired?: boolean;
|
||||
required?: boolean;
|
||||
options?: ReadonlyArray<{ value: string; label: string; description?: string }>;
|
||||
minimum?: number;
|
||||
maximum?: number;
|
||||
step?: number;
|
||||
sortable?: boolean;
|
||||
valueSchema?: unknown;
|
||||
}
|
||||
|
||||
type NetcattyPluginIconReference =
|
||||
| { kind: 'theme'; name: string }
|
||||
| { kind: 'package'; light: string; dark?: string };
|
||||
|
||||
interface NetcattyPluginContributionSnapshot {
|
||||
locale: string;
|
||||
plugins: ReadonlyArray<{
|
||||
id: string;
|
||||
version: string;
|
||||
displayName: string;
|
||||
description: string;
|
||||
commands: ReadonlyArray<{ id: string; title: string; category?: string; description?: string; icon?: NetcattyPluginIconReference; enabled: boolean }>;
|
||||
keybindings: ReadonlyArray<{ command: string; key: string; mac?: string; linux?: string; windows?: string; args?: unknown; enabled: boolean }>;
|
||||
menus: ReadonlyArray<{
|
||||
id: string;
|
||||
command: string;
|
||||
alt?: string;
|
||||
location: string;
|
||||
title: string;
|
||||
visible: boolean;
|
||||
enabled: boolean;
|
||||
checked?: boolean;
|
||||
order?: number;
|
||||
group?: string;
|
||||
shortcut?: string;
|
||||
showKeybinding?: boolean;
|
||||
icon?: NetcattyPluginIconReference;
|
||||
}>;
|
||||
settings: ReadonlyArray<NetcattyPluginSettingContribution>;
|
||||
views: ReadonlyArray<{ id: string; title: string; location: string; entry: string; icon?: NetcattyPluginIconReference; order?: number; visible: boolean; retainContextWhenHidden?: boolean }>;
|
||||
}>;
|
||||
}
|
||||
|
||||
interface NetcattyPluginEnvironment {
|
||||
locale: string;
|
||||
theme: string;
|
||||
reducedMotion: boolean;
|
||||
highContrast: boolean;
|
||||
themeTokens?: Record<string, string>;
|
||||
}
|
||||
|
||||
type NetcattyTerminalProviderKind =
|
||||
| 'terminal.completion'
|
||||
| 'terminal.decoration'
|
||||
| 'terminal.link'
|
||||
| 'terminal.hover'
|
||||
| 'terminal.matcher'
|
||||
| 'terminal.semantic'
|
||||
| 'terminal.prompt'
|
||||
| 'terminal.background'
|
||||
| 'terminal.theme';
|
||||
|
||||
interface NetcattyTerminalProviderContribution {
|
||||
pluginId: string;
|
||||
pluginVersion: string;
|
||||
runtimeId?: string;
|
||||
pluginDisplayName: string;
|
||||
provider: {
|
||||
id: string;
|
||||
label: string;
|
||||
description?: string;
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
capabilities?: ReadonlyArray<string>;
|
||||
configurationSchema?: unknown;
|
||||
};
|
||||
}
|
||||
|
||||
interface NetcattyTerminalProviderQuery {
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
locale?: string;
|
||||
preferredProviderIds?: ReadonlyArray<string>;
|
||||
}
|
||||
|
||||
interface NetcattyTerminalSessionSnapshot {
|
||||
sessionId: string;
|
||||
hostId?: string;
|
||||
workspaceId?: string;
|
||||
protocol: string;
|
||||
status: 'connecting' | 'connected' | 'disconnected';
|
||||
cwd?: string;
|
||||
title?: string;
|
||||
shellType?: 'posix' | 'fish' | 'powershell' | 'cmd' | 'unknown';
|
||||
cols?: number;
|
||||
rows?: number;
|
||||
alternateScreen?: boolean;
|
||||
}
|
||||
|
||||
interface NetcattyTerminalSessionEvent {
|
||||
type:
|
||||
| 'snapshot'
|
||||
| 'created'
|
||||
| 'connected'
|
||||
| 'reconnected'
|
||||
| 'cwdChanged'
|
||||
| 'titleChanged'
|
||||
| 'resized'
|
||||
| 'alternateScreenChanged'
|
||||
| 'commandSubmitted'
|
||||
| 'commandCompleted'
|
||||
| 'disconnected'
|
||||
| 'disposed';
|
||||
session: NetcattyTerminalSessionSnapshot;
|
||||
exitCode?: number;
|
||||
}
|
||||
|
||||
interface NetcattyTerminalProviderRequest {
|
||||
requestId: string;
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
operation: string;
|
||||
session: NetcattyTerminalSessionSnapshot;
|
||||
payload?: unknown;
|
||||
locale?: string;
|
||||
preferredProviderIds?: ReadonlyArray<string>;
|
||||
deadlineMs?: number;
|
||||
}
|
||||
|
||||
type NetcattyTerminalProviderResult = {
|
||||
pluginId: string;
|
||||
pluginVersion: string;
|
||||
runtimeId?: string;
|
||||
providerId: string;
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
requestId: string;
|
||||
status: 'ok';
|
||||
result: unknown;
|
||||
} | {
|
||||
pluginId: string;
|
||||
pluginVersion: string;
|
||||
runtimeId?: string;
|
||||
providerId: string;
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
requestId: string;
|
||||
status: 'cancelled';
|
||||
} | {
|
||||
pluginId: string;
|
||||
pluginVersion: string;
|
||||
providerId: string;
|
||||
kind: NetcattyTerminalProviderKind;
|
||||
requestId: string;
|
||||
status: 'failed';
|
||||
error: { code: number; message: string; data?: unknown };
|
||||
};
|
||||
|
||||
interface NetcattyPluginViewOpenRequest {
|
||||
viewId: string;
|
||||
instanceId?: string;
|
||||
scopeId: string;
|
||||
bounds?: { x: number; y: number; width: number; height: number };
|
||||
context?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
interface NetcattyPluginViewClosedEvent {
|
||||
instanceId: string;
|
||||
pluginId: string;
|
||||
viewId: string;
|
||||
reason: string;
|
||||
}
|
||||
|
||||
type NetcattyPluginSettingScopeKind = 'workspace' | 'host' | 'session' | 'device';
|
||||
|
||||
type NetcattyPluginScopeCatalog = Record<
|
||||
NetcattyPluginSettingScopeKind,
|
||||
ReadonlyArray<{ id: string; label: string }>
|
||||
>;
|
||||
|
||||
interface Window {
|
||||
netcatty?: NetcattyBridge;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export { };
|
||||
Reference in New Issue
Block a user