71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
import type {
|
|
CreateWorktreeResult,
|
|
WorktreeDefaultTabsLaunch,
|
|
WorktreeSetupLaunch,
|
|
WorktreeStartupLaunch
|
|
} from './types'
|
|
import type { SshConnectionState } from './ssh-types'
|
|
import type { TerminalSideEffectBatch } from './terminal-side-effect-facts'
|
|
import type { RuntimeNativeChatLaunchDraftResolution } from './runtime-types'
|
|
|
|
export type RuntimeClientEvent =
|
|
| { type: 'reposChanged' }
|
|
| { type: 'worktreesChanged'; repoId: string }
|
|
| ({ type: 'nativeChatLaunchDraftResolved' } & RuntimeNativeChatLaunchDraftResolution)
|
|
| { type: 'terminalSideEffects'; batch: TerminalSideEffectBatch }
|
|
// Why: SSH connections live on the runtime host; paired clients have no IPC
|
|
// channel for ssh:state-changed, so without this event their reconnect
|
|
// overlays never learn the host connected (STA-1468).
|
|
| { type: 'sshStateChanged'; targetId: string; state: SshConnectionState }
|
|
| {
|
|
type: 'worktreeTerminalSleepState'
|
|
worktreeId: string
|
|
generation: number
|
|
phase: 'started' | 'committed' | 'cancelled' | 'woken'
|
|
ptyIds: string[]
|
|
terminalHandles: string[]
|
|
}
|
|
| {
|
|
type: 'linearLinkedIssueUpdated'
|
|
worktreeId: string
|
|
identifier: string
|
|
workspaceId: string
|
|
}
|
|
| {
|
|
type: 'activateWorktree'
|
|
repoId: string
|
|
worktreeId: string
|
|
setup?: WorktreeSetupLaunch
|
|
startup?: WorktreeStartupLaunch
|
|
defaultTabs?: WorktreeDefaultTabsLaunch
|
|
}
|
|
|
|
export type RuntimeClientEventStreamMessage =
|
|
| ({ type: 'ready'; subscriptionId: string } & {
|
|
snapshot?: {
|
|
repos?: unknown[]
|
|
sshStates?: { targetId: string; state: SshConnectionState }[]
|
|
}
|
|
})
|
|
| RuntimeClientEvent
|
|
| { type: 'end' }
|
|
|
|
export type RuntimeActivateWorktreeEvent = Extract<RuntimeClientEvent, { type: 'activateWorktree' }>
|
|
|
|
export function toRuntimeActivateWorktreeEvent(
|
|
repoId: string,
|
|
worktreeId: string,
|
|
setup?: CreateWorktreeResult['setup'],
|
|
startup?: WorktreeStartupLaunch,
|
|
defaultTabs?: CreateWorktreeResult['defaultTabs']
|
|
): RuntimeActivateWorktreeEvent {
|
|
return {
|
|
type: 'activateWorktree',
|
|
repoId,
|
|
worktreeId,
|
|
...(setup ? { setup } : {}),
|
|
...(startup ? { startup } : {}),
|
|
...(defaultTabs ? { defaultTabs } : {})
|
|
}
|
|
}
|