mirror of
https://github.com/stablyai/orca.git
synced 2026-11-01 09:37:33 +00:00
* Add CLI commands to manage and find workspace references * Fix reference review findings: source-context twins, legacy link collapse, closed chats, old-host errors - Keep same-URL links with different source contexts separate; CLI add/remove no longer drops a twin - Restore merging a bare legacy link into its single matching URL link (no duplicate PR rows, no resurrection on older-client removal) - Carry absorbed data through collapse chains; resolve repoId conflicts deterministically - Identity: ignore www., case-insensitive GitHub/GitLab/Gitea paths (stored URL keeps case), no Jira match on git hosts; find accepts self-hosted issue URLs - reference find: skip closed native chats, require a session id for linked, include an explicitly named archived workspace, warm-cache fallback for --worktree - Selector parity: collapse same-host duplicate paths, issue: ignores unlinked rows - CLI: clear update-host error for hosts without reference.*, local flag checks before host probe, help text fixes * Fix CI: add reference rm alias for verb policy; expect linkedItems in worktree ps summary * Simplify reference CLI: share identifier/legacy-match helpers, drop redundant dedupe
177 lines
5.3 KiB
TypeScript
177 lines
5.3 KiB
TypeScript
import type { AgentStatusState, AgentType, AgentWorkingMode } from './agent-status-types'
|
|
import type { AgentMainAgentStatus } from './main-agent-status'
|
|
import type { BaseRefSearchResult, Repo } from './repo-types'
|
|
import type { CreateWorktreeResult, RemoveWorktreeResult } from './worktree/create-types'
|
|
import type {
|
|
WorkspaceLineage,
|
|
WorktreeLineage,
|
|
WorktreeLineageWarning
|
|
} from './worktree/lineage-types'
|
|
import type { RuntimeListingHostScope } from './runtime-listing-host-scope'
|
|
import type { GitWorktreeInfo, Worktree } from './worktree/types'
|
|
|
|
export type RuntimeWorktreeAgentRow = {
|
|
paneKey: string
|
|
parentPaneKey: string | null
|
|
state: AgentStatusState
|
|
workingMode?: AgentWorkingMode
|
|
agentType: AgentType | null
|
|
prompt: string
|
|
taskTitle: string | null
|
|
displayName: string | null
|
|
lastAssistantMessage: string | null
|
|
toolName: string | null
|
|
toolInput: string | null
|
|
interrupted: boolean
|
|
/** The main agent's own state, verdict and clock, sent whenever the host row has one, including
|
|
* while subagents hold the row `working`. Optional on the wire: old hosts never send it, and a
|
|
* reader without it falls back to `interrupted`. */
|
|
mainAgent?: AgentMainAgentStatus
|
|
stateStartedAt: number
|
|
updatedAt: number
|
|
restoredUnconfirmed?: boolean
|
|
/** The structured session host still runs this row's provider child, so it is fresh regardless
|
|
* of age. Optional on the wire: old hosts never send it. */
|
|
structuredHostOwned?: true
|
|
}
|
|
|
|
export type RuntimeWorktreePsSummary = {
|
|
workspaceKind?: 'git' | 'folder-workspace'
|
|
worktreeId: string
|
|
repoId: string
|
|
hostId?: Worktree['hostId']
|
|
terminalPlatform?: NodeJS.Platform
|
|
repo: string
|
|
path: string
|
|
branch: string
|
|
isArchived: boolean
|
|
isMainWorktree: boolean
|
|
hasHostSidebarActivity: boolean
|
|
worktreeInstanceId?: string
|
|
lineageWorktreeInstanceId?: string
|
|
parentWorktreeInstanceId?: string
|
|
parentWorktreeId: string | null
|
|
childWorktreeIds: string[]
|
|
displayName: string
|
|
workspaceStatus: string
|
|
sortOrder: number
|
|
manualOrder?: number
|
|
lastActivityAt?: number
|
|
createdAt?: number
|
|
creatorProvenance?: Worktree['creatorProvenance']
|
|
linkedIssue: number | null
|
|
linkedPR: { number: number; state: string } | null
|
|
linkedLinearIssue: string | null
|
|
linkedGitLabMR: number | null
|
|
linkedGitLabIssue: number | null
|
|
linkedItems?: Worktree['linkedItems']
|
|
comment: string
|
|
isPinned: boolean
|
|
isActive: boolean
|
|
unread: boolean
|
|
liveTerminalCount: number
|
|
hasAttachedPty: boolean
|
|
/**
|
|
* Terminals whose host lost contact; they are not in `liveTerminalCount`, and not exited either.
|
|
* Always sent by current hosts, 0 included; absent only from hosts that predate the field.
|
|
*/
|
|
unverifiableTerminalCount?: number
|
|
lastOutputAt: number | null
|
|
preview: string
|
|
status: RuntimeWorktreeStatus
|
|
/** Optional discriminator for a working workspace; older clients fall back to ordinary working. */
|
|
workingMode?: AgentWorkingMode
|
|
agents: RuntimeWorktreeAgentRow[]
|
|
/** See `Worktree.removing`; sent only to clients that advertise background removal. */
|
|
removing?: true
|
|
/** See `GitWorktreeInfo.removalError`. */
|
|
removalError?: string
|
|
}
|
|
|
|
export type RuntimeGitLocalBranches = {
|
|
current: string | null
|
|
branches: string[]
|
|
}
|
|
|
|
export type RuntimeSpeechModelSummary = {
|
|
id: string
|
|
label: string
|
|
provider: 'local' | 'openai'
|
|
sizeBytes: number | null
|
|
recommended: boolean
|
|
status: 'ready' | 'not-downloaded' | 'downloading' | 'extracting' | 'error'
|
|
progress: number | null
|
|
}
|
|
|
|
export type RuntimeSpeechSetupState = {
|
|
enabled: boolean
|
|
selectedModelId: string
|
|
dictationMode: 'toggle' | 'hold'
|
|
models: RuntimeSpeechModelSummary[]
|
|
}
|
|
|
|
export type RuntimeGitCheckoutResult = {
|
|
ok: true
|
|
branch: string
|
|
}
|
|
|
|
export type RuntimeWorktreeStatus = 'active' | 'working' | 'permission' | 'done' | 'inactive'
|
|
|
|
export type RuntimeWorktreeRecord = Worktree & {
|
|
parentWorktreeId: string | null
|
|
childWorktreeIds: string[]
|
|
lineage: WorktreeLineage | null
|
|
workspaceLineage?: WorkspaceLineage | null
|
|
git: GitWorktreeInfo
|
|
}
|
|
|
|
export type RuntimeWorktreeCreateResult = {
|
|
worktree: RuntimeWorktreeRecord
|
|
lineage: WorktreeLineage | null
|
|
workspaceLineage?: WorkspaceLineage | null
|
|
warnings: WorktreeLineageWarning[]
|
|
warning?: string
|
|
startupTerminal?: CreateWorktreeResult['startupTerminal']
|
|
agentTerminalHandle?: string
|
|
}
|
|
|
|
export type RuntimeWorktreeRemoveResult = RemoveWorktreeResult & {
|
|
removed: boolean
|
|
warning?: string
|
|
}
|
|
|
|
export type RuntimeWorktreePsResult = {
|
|
worktrees: RuntimeWorktreePsSummary[]
|
|
totalCount: number
|
|
truncated: boolean
|
|
/** Absent from hosts that predate the field; treat that scope as unverifiable. */
|
|
hostScope?: RuntimeListingHostScope
|
|
}
|
|
|
|
export type RuntimeWorktreePsSnapshotResult = RuntimeWorktreePsResult & { snapshotId: string }
|
|
|
|
export type RuntimeWorktreePsUnchangedResult = {
|
|
unchanged: true
|
|
snapshotId: string
|
|
}
|
|
|
|
export type RuntimeWorktreePsConditionalResult =
|
|
| RuntimeWorktreePsSnapshotResult
|
|
| RuntimeWorktreePsUnchangedResult
|
|
|
|
export type RuntimeRepoList = { repos: Repo[] }
|
|
|
|
export type RuntimeRepoSearchRefs = {
|
|
refs: string[]
|
|
refDetails?: BaseRefSearchResult[]
|
|
truncated: boolean
|
|
}
|
|
|
|
export type RuntimeWorktreeListResult = {
|
|
worktrees: RuntimeWorktreeRecord[]
|
|
totalCount: number
|
|
truncated: boolean
|
|
/** Absent from hosts that predate the field; treat that scope as unverifiable. */
|
|
hostScope?: RuntimeListingHostScope
|
|
}
|