mirror of
https://github.com/stablyai/orca.git
synced 2026-10-03 16:02:11 +00:00
* Keep running-agent workspaces visible under "Hide sleeping" (#7197) The "Hide sleeping" sidebar filter judged a workspace active only when it had a live PTY (or a browser tab), so a workspace with a running agent whose live-PTY entry was momentarily absent — an SSH reconnect grace window, an unmounted pane, a remote surface not yet `ready`, or an orchestration worker reporting before its tab is mirrored — was classified as "sleeping" and hidden while its session was still open. The smart sort already treats a fresh `agentStatusByPaneKey` entry as "working" independent of live-PTY, so the filter and sort disagreed. Add `getWorktreeIdsWithLiveAgent`, which derives the worktrees with an open agent session from the live agent-status map (sleep/teardown drop those entries via dropAgentStatusByWorktree, so slept/hibernated workspaces still hide), and consult it in `hasActiveWorkspaceActivity`. Wire it through the sidebar list, Cmd+J jump palette, and kanban board. * fix(agent-status): align live workspace attribution * fix(mobile): preserve live-agent workspace activity * fix(mobile): prefer newest agent status source * chore: restore unrelated benchmark formatting * fix(mobile): resolve projected agent worktree ids * perf(mobile): index projected worktree summaries * fix(mobile): preserve projected activity under limits * fix(mobile): preserve POSIX path identity * perf(mobile): cache projected summary fallbacks * fix(mobile): preserve remote path and priority contracts * perf(mobile): index projected paths by host flavor * test(mobile): prove projected path index keys * perf(mobile): bound projected path fallback * perf(mobile): reuse projected repo platforms * test(mobile): enforce projected lookup bounds * chore(runtime): remove review instrumentation * perf(mobile): skip unresolved repo platform scans * perf(mobile): batch represented project runtimes * perf(mobile): batch cold project runtime scans * fix(mobile): couple worktree platform snapshots * fix(sidebar): prioritize attributed headless agents * fix(sidebar): activate smart sort for headless agents * fix(sidebar): prefer mirrored agent ownership * fix(mobile): follow mirrored agent ownership * fix(sidebar): resolve mirrored unstamped agents --------- Co-authored-by: Brennan Benson <brennanbenson@Brennans-MacBook-Pro.local>
67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
import type { Store } from './persistence'
|
|
import type { Repo } from '../shared/types'
|
|
import { resolveLocalProjectRuntimeForRepo } from './local-project-runtime-resolution'
|
|
import type { ProjectExecutionRuntimeResolution } from '../shared/project-execution-runtime'
|
|
|
|
export {
|
|
resolveLocalProjectRuntimeForRepo,
|
|
resolveLocalProjectRuntimesForRepos
|
|
} from './local-project-runtime-resolution'
|
|
|
|
export type LocalProjectGitExecOptions = {
|
|
cwd: string
|
|
wslDistro?: string
|
|
}
|
|
|
|
export type LocalProjectWorktreeGitOptions = {
|
|
wslDistro?: string
|
|
}
|
|
|
|
export function getLocalProjectGitExecOptions(
|
|
store: Store,
|
|
repo: Repo
|
|
): LocalProjectGitExecOptions {
|
|
// Why: local git must run in the same resolved project runtime as agents,
|
|
// terminals, and preflight; repair states must not silently fall back to host git.
|
|
return getLocalProjectGitExecOptionsForRuntime(
|
|
repo,
|
|
resolveLocalProjectRuntimeForRepo(store, repo)
|
|
)
|
|
}
|
|
|
|
function getLocalProjectGitExecOptionsForRuntime(
|
|
repo: Repo,
|
|
projectRuntime: ProjectExecutionRuntimeResolution | undefined
|
|
): LocalProjectGitExecOptions {
|
|
if (!projectRuntime) {
|
|
return { cwd: repo.path }
|
|
}
|
|
if (projectRuntime.status === 'repair-required') {
|
|
throw new Error(
|
|
`Project runtime requires repair before git execution: ${projectRuntime.repair.reason}`
|
|
)
|
|
}
|
|
if (projectRuntime.runtime.kind === 'wsl') {
|
|
return { cwd: repo.path, wslDistro: projectRuntime.runtime.distro }
|
|
}
|
|
return { cwd: repo.path }
|
|
}
|
|
|
|
export function getLocalProjectWorktreeGitOptions(
|
|
store: Store,
|
|
repo: Repo
|
|
): LocalProjectWorktreeGitOptions {
|
|
const { wslDistro } = getLocalProjectGitExecOptions(store, repo)
|
|
return wslDistro ? { wslDistro } : {}
|
|
}
|
|
|
|
export function getLocalProjectWorktreeGitOptionsForRuntime(
|
|
repo: Repo,
|
|
projectRuntime: ProjectExecutionRuntimeResolution | undefined
|
|
): LocalProjectWorktreeGitOptions {
|
|
// Why: callers that already batch-resolved project runtimes must not rescan
|
|
// every project once per repo on a polling path.
|
|
const { wslDistro } = getLocalProjectGitExecOptionsForRuntime(repo, projectRuntime)
|
|
return wslDistro ? { wslDistro } : {}
|
|
}
|