mirror of
https://github.com/stablyai/orca.git
synced 2026-10-18 08:03:22 +00:00
@@ -42,6 +42,7 @@ import type { SshConnectionStatus } from '../../../shared/ssh-types'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
type RepoOption = React.ComponentProps<typeof RepoCombobox>['repos'][number]
|
||||
const EMPTY_PROJECT_HOST_SETUP_OPTIONS: ProjectHostSetupOption[] = []
|
||||
|
||||
type NewWorkspaceComposerCardProps = {
|
||||
contextualTourSource?: string
|
||||
@@ -245,8 +246,8 @@ export default function NewWorkspaceComposerCard({
|
||||
repoId,
|
||||
selectedRepoIsGit,
|
||||
onRepoChange,
|
||||
projectHostSetupOptions,
|
||||
selectedProjectHostSetupId,
|
||||
projectHostSetupOptions = EMPTY_PROJECT_HOST_SETUP_OPTIONS,
|
||||
selectedProjectHostSetupId = null,
|
||||
onProjectHostSetupChange,
|
||||
primaryActionLabel,
|
||||
projectLabel,
|
||||
@@ -500,7 +501,7 @@ export default function NewWorkspaceComposerCard({
|
||||
</label>
|
||||
<ProjectHostSetupCombobox
|
||||
options={readyProjectHostSetupOptions}
|
||||
value={selectedProjectHostSetupId}
|
||||
value={selectedProjectHostSetupId ?? null}
|
||||
onValueChange={handleProjectHostSetupChange}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,6 @@ import {
|
||||
promptForSetupGuideProject,
|
||||
useSetupTargetWorktree
|
||||
} from './FeatureWallSetupWorkflowActions'
|
||||
import { translate } from '@/i18n/i18n'
|
||||
|
||||
export function BrowserAction(props: { done: boolean }): React.JSX.Element {
|
||||
const targetWorktree = useSetupTargetWorktree()
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
FolderInput,
|
||||
FolderPlus,
|
||||
FolderX,
|
||||
Loader2,
|
||||
Plus,
|
||||
Server,
|
||||
ServerOff,
|
||||
@@ -180,7 +181,7 @@ import {
|
||||
pruneWorktreeSelection,
|
||||
updateWorktreeSelection
|
||||
} from './worktree-multi-selection'
|
||||
import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client'
|
||||
import { callRuntimeRpc } from '@/runtime/runtime-rpc-client'
|
||||
import { splitWorktreeSortOrderByHost } from '@/lib/worktree-sort-order-host-split'
|
||||
import {
|
||||
getSettingsFocusedExecutionHostId,
|
||||
|
||||
@@ -67,7 +67,9 @@ export async function submitFolderWorkspaceCreate({
|
||||
return
|
||||
}
|
||||
|
||||
const linkedPromptContext = getLinkedWorkItemPromptContext(linkedWorkItem)
|
||||
const linkedPromptContext = getLinkedWorkItemPromptContext(linkedWorkItem, {
|
||||
cliAvailable: false
|
||||
})
|
||||
const startupPrompt = buildAgentPromptWithContext(
|
||||
note,
|
||||
[],
|
||||
|
||||
@@ -59,6 +59,8 @@ function getRowHostId(row: Row, defaultHostId: ExecutionHostId): ExecutionHostId
|
||||
case 'pending-creation':
|
||||
case 'imported-worktrees-card':
|
||||
return getRepoHostId(row.repo, defaultHostId)
|
||||
case 'folder-workspace':
|
||||
return getRepoHostId(undefined, defaultHostId)
|
||||
case 'header':
|
||||
return row.repo ? getRepoHostId(row.repo, defaultHostId) : null
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ describe('useCreateRepo default-checkout handoff', () => {
|
||||
const repo = makeRepo({ connectionId: 'ssh-1', path: '/srv/created' })
|
||||
mocks.createRemoteRepo.mockResolvedValue({ repo })
|
||||
mocks.fetchWorktrees.mockResolvedValue(true)
|
||||
const { useCreateRepo } = await import('./AddRepoCreateStep')
|
||||
const { useCreateRepo } = await import('./useCreateRepo')
|
||||
|
||||
const result = useCreateRepo(mocks.fetchWorktrees, vi.fn(), mocks.onGitRepoReady, {
|
||||
sshTargetId: 'ssh-1'
|
||||
|
||||
@@ -1529,6 +1529,7 @@ describe('project groups', () => {
|
||||
new Set(),
|
||||
new Map(),
|
||||
[],
|
||||
undefined,
|
||||
[folderWorkspace]
|
||||
)
|
||||
|
||||
@@ -1605,6 +1606,7 @@ describe('project groups', () => {
|
||||
new Set(),
|
||||
new Map(),
|
||||
[],
|
||||
undefined,
|
||||
[folderWorkspace]
|
||||
)
|
||||
|
||||
@@ -1673,6 +1675,7 @@ describe('project groups', () => {
|
||||
new Set(),
|
||||
new Map(),
|
||||
[],
|
||||
undefined,
|
||||
[folderWorkspace]
|
||||
)
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ const FIELD_OWNERSHIP = {
|
||||
activeGroupIdByWorktree: 'worktreeKeyed',
|
||||
lastVisitedAtByWorktreeId: 'worktreeKeyed',
|
||||
defaultTerminalTabsAppliedByWorktreeId: 'worktreeKeyed',
|
||||
activeWorkspaceKey: 'global',
|
||||
activeWorktreeIdsOnShutdown: 'worktreeArray',
|
||||
terminalLayoutsByTabId: 'tabKeyed',
|
||||
remoteSessionIdsByTabId: 'tabKeyed',
|
||||
|
||||
@@ -1016,6 +1016,11 @@ function createReposApi(): NonNullable<Partial<PreloadApi>['repos']> {
|
||||
// clients must not pretend they can run that local IPC path directly.
|
||||
throw new Error('SSH clone is unavailable in paired web clients.')
|
||||
},
|
||||
createRemote: async () => {
|
||||
// Why: SSH relay project creation is owned by the desktop main process;
|
||||
// paired web clients cannot create folders through local SSH IPC.
|
||||
throw new Error('SSH project creation is unavailable in paired web clients.')
|
||||
},
|
||||
cloneAbort: () => Promise.resolve(),
|
||||
addRemote: async ({ remotePath, displayName, kind }) => {
|
||||
invalidateRuntimeWorktreeCaches()
|
||||
|
||||
Reference in New Issue
Block a user