diff --git a/notes/host-context-implementation-checklist.md b/notes/host-context-implementation-checklist.md index a551b6d52a8..b8f743a6c07 100644 --- a/notes/host-context-implementation-checklist.md +++ b/notes/host-context-implementation-checklist.md @@ -140,6 +140,10 @@ Done means: Local, SSH, remote server, and future cloud VMs share one Host model - [~] Integration-test Linear/Jira with explicit source account selection. - [x] Integration-test automations on local host, SSH host, and remote server where supported. - [x] Integration-test disconnected host UX for Tasks, New Workspace modal, sidebar, and automations. + - 2026-06-13 follow-up: verified patched main IPC against a live Docker SSH target. + Connected SSH PTY inspection returned `bash`; after disconnect, PTY inspection returned + `null`/`false` and remote agent detection returned `[]` without repeated main-process + handler errors. - [ ] Integration-test new client with older remote server and older client with newer server where practical. - [x] Electron-test Add Project flows: browse folder, clone URL, and create project from scratch on local and SSH hosts. - [x] Electron-test workspace options and sidebar host filtering. diff --git a/notes/multihost-remote-verification-report.html b/notes/multihost-remote-verification-report.html index 57bc6cb6ddb..56f0903a3c6 100644 --- a/notes/multihost-remote-verification-report.html +++ b/notes/multihost-remote-verification-report.html @@ -273,6 +273,12 @@ Docker SSH target through Orca IPC, added an SSH project, created an SSH worktree, tested disconnected SSH UX, opened Tasks, opened Automations, and captured screenshots below. +
bash, disconnected
+ the host, then verified PTY inspection returned null/false
+ and remote agent detection returned [] without repeated handler errors.
+ src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx,
diff --git a/src/main/ipc/preflight.test.ts b/src/main/ipc/preflight.test.ts
index 1f845f01603..311affa5987 100644
--- a/src/main/ipc/preflight.test.ts
+++ b/src/main/ipc/preflight.test.ts
@@ -589,6 +589,31 @@ describe('preflight', () => {
})
})
+ it('returns no remote agents when the SSH connection is unavailable', async () => {
+ getActiveMultiplexerMock.mockReturnValue(null)
+
+ registerPreflightHandlers()
+
+ await expect(
+ handlers['preflight:detectRemoteAgents'](undefined, { connectionId: 'ssh-1' })
+ ).resolves.toEqual([])
+ })
+
+ it('returns no remote agents when the SSH connection is disposed', async () => {
+ const request = vi.fn()
+ getActiveMultiplexerMock.mockReturnValue({
+ isDisposed: () => true,
+ request
+ })
+
+ registerPreflightHandlers()
+
+ await expect(
+ handlers['preflight:detectRemoteAgents'](undefined, { connectionId: 'ssh-1' })
+ ).resolves.toEqual([])
+ expect(request).not.toHaveBeenCalled()
+ })
+
it('detects agents from the selected WSL distro for a WSL workspace', async () => {
Object.defineProperty(process, 'platform', {
configurable: true,
diff --git a/src/main/ipc/preflight.ts b/src/main/ipc/preflight.ts
index 15591d81750..82981552c5f 100644
--- a/src/main/ipc/preflight.ts
+++ b/src/main/ipc/preflight.ts
@@ -248,7 +248,9 @@ export async function refreshShellPathAndDetectAgents(
export async function detectRemoteAgents(args: { connectionId: string }): Promise