@nanocollective/nanocoder
Version:
A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter
139 lines • 4.3 kB
TypeScript
/**
* WebSocket server for VS Code extension communication
*/
import { ClientMessage, DiagnosticInfo, PendingChange } from './protocol.js';
export type MessageHandler = (message: ClientMessage) => void;
export type PromptHandler = (prompt: string, context?: {
filePath?: string;
selection?: string;
cursorPosition?: {
line: number;
character: number;
};
}) => void;
export interface VSCodeServerCallbacks {
onPrompt?: PromptHandler;
onChangeApplied?: (id: string) => void;
onChangeRejected?: (id: string) => void;
onContext?: (context: {
workspaceFolder?: string;
openFiles?: string[];
activeFile?: string;
diagnostics?: DiagnosticInfo[];
}) => void;
onDiagnosticsResponse?: (diagnostics: DiagnosticInfo[]) => void;
onConnect?: () => void;
onDisconnect?: () => void;
}
export declare class VSCodeServer {
private port;
private wss;
private clients;
private pendingChanges;
private callbacks;
private currentModel?;
private currentProvider?;
private cliVersion;
constructor(port?: number);
/**
* Get the actual port the server is listening on
*/
getPort(): number;
/**
* Try to start the WebSocket server on a specific port
*/
private tryStartOnPort;
/**
* Start the WebSocket server with automatic port fallback
* If the requested port is in use, tries up to 10 alternative ports
*/
start(): Promise<boolean>;
/**
* Stop the WebSocket server
*/
stop(): Promise<void>;
/**
* Register callbacks for client messages
*/
onCallbacks(callbacks: VSCodeServerCallbacks): void;
/**
* Check if any clients are connected
*/
hasConnections(): boolean;
/**
* Get number of connected clients
*/
getConnectionCount(): number;
/**
* Send a file change notification to VS Code
*/
sendFileChange(filePath: string, originalContent: string, newContent: string, toolName: string, toolArgs: Record<string, unknown>): string;
/**
* Send an assistant message to VS Code
*/
sendAssistantMessage(content: string, isGenerating?: boolean): void;
/**
* Send status update to VS Code
*/
sendStatus(model?: string, provider?: string): void;
/**
* Request diagnostics from VS Code
*/
requestDiagnostics(filePath?: string): void;
/**
* Close diff preview in VS Code (when tool is confirmed/rejected in CLI)
*/
closeDiff(id: string): void;
/**
* Close all pending diff previews
*/
closeAllDiffs(): void;
/**
* Open a file in VS Code editor
*/
openFileInVSCode(filePath: string): void;
/**
* Get a pending change by ID
*/
getPendingChange(id: string): PendingChange | undefined;
/**
* Remove a pending change
*/
removePendingChange(id: string): void;
/**
* Get all pending changes
*/
getAllPendingChanges(): PendingChange[];
private handleConnection;
private handleMessage;
private broadcast;
}
/**
* Get or create the VS Code server singleton
* Uses promise-based initialization to prevent race conditions
*/
export declare function getVSCodeServer(port?: number): Promise<VSCodeServer>;
/**
* Get the VS Code server instance if it exists (synchronous)
* Returns null if not yet initialized
* Use this when you need synchronous access and the server may not be initialized
*/
export declare function getVSCodeServerSync(): VSCodeServer | null;
/**
* Check if VS Code server is active and has connections
*/
export declare function isVSCodeConnected(): boolean;
/**
* Send a file change to VS Code for preview/approval
* This is the main entry point for tools to integrate with VS Code
*/
export declare function sendFileChangeToVSCode(filePath: string, originalContent: string, newContent: string, toolName: string, toolArgs: Record<string, unknown>): string | null;
/**
* Close a diff preview in VS Code (when tool confirmed/rejected in CLI)
*/
export declare function closeDiffInVSCode(id: string | null): void;
/**
* Close all pending diff previews in VS Code
*/
export declare function closeAllDiffsInVSCode(): void;
//# sourceMappingURL=vscode-server.d.ts.map