diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 4f36b83972d..d06bbeb298b 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -244,8 +244,12 @@ jobs: if printf '%s\n' "${TEST_FILES[@]}" | grep -qx 'tests/e2e/ephemeral-vm-provisioned-root.spec.ts'; then E2E_ENV+=(ORCA_E2E_SSH_DOCKER=1) fi + E2E_PROJECT_ARGS=() + if grep -l '@headful' "${TEST_FILES[@]}" >/dev/null; then + E2E_PROJECT_ARGS+=(--project=electron-headful) + fi xvfb-run --auto-servernum env "${E2E_ENV[@]}" \ - pnpm run test:e2e "${TEST_FILES[@]}" --workers=1 + pnpm run test:e2e "${TEST_FILES[@]}" --workers=1 "${E2E_PROJECT_ARGS[@]}" - name: Upload Playwright traces if: failure() diff --git a/config/reliability-gates.jsonc b/config/reliability-gates.jsonc index 8d20a00df05..45c7aed8242 100644 --- a/config/reliability-gates.jsonc +++ b/config/reliability-gates.jsonc @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "updatedAt": "2026-08-12", + "updatedAt": "2026-08-13", "policy": { "maturityLevels": ["experimental", "soak", "blocking", "accepted-gap", "deprecated"], "blockingPromotion": { @@ -1817,19 +1817,24 @@ "providers": ["remote-runtime"], "coveredPlatforms": ["macos"], "coveredProviders": ["remote-runtime"], - "coverageNotes": "A headed macOS desktop host and separate paired client exercise the Explorer eye-button path with a real remote file URL, host browser DOM, renderer split layout, background preview creation, explicit browser activation, browser close, forced capability rejection after caller preflight, and a forced post-create reconciliation timeout. The same fault oracles pass against a live headless server. Unit contracts cover absent, unknown, and mixed-version capabilities, visible rejection, empty-split cleanup, owning-runtime routing, exact client materialization, confirmed rollback, ambiguous cleanup, and teardown. Linux and Windows live journeys remain gaps.", + "coverageNotes": "A headed macOS desktop host and separate paired client exercise the Explorer eye-button path with a real remote file URL, host browser DOM, renderer split layout, background preview creation, explicit browser activation, browser close, forced capability rejection after caller preflight, a forced post-create reconciliation timeout, and navigation held beyond the client create deadline. The same reconciliation fault oracles pass against a live headless server. Unit contracts cover absent, unknown, and mixed-version capabilities, visible rejection, empty-split cleanup, owning-runtime routing, canonical preallocated page identity, navigation-independent acknowledgement, exact client materialization, confirmed rollback, ambiguous cleanup, and teardown. Linux and Windows live journeys remain gaps.", "motivatingLinks": [ "https://linear.app/stably/issue/STA-3872/unable-to-open-html-files-in-remote-server", "https://linear.app/stably/issue/STA-4025/p1-browser-create-reports-success-when-tab-reconcile-fails-after-pr", "https://linear.app/stably/issue/STA-4063/p1-paired-html-preview-rejects-outside-cleanup-after-pr-13909", + "https://linear.app/stably/issue/STA-4231/p1-owner-pinned-paired-browser-create-can-time-out-after-host-tab", + "https://github.com/stablyai/orca/pull/14363", "https://github.com/stablyai/orca/pull/13876" ], - "invariant": "Opening one HTML preview from a paired client succeeds only after exactly one browser page on the worktree-owning runtime materializes as exactly one client browser workspace and unified tab in the requested group. Capability rejection before host mutation must preserve the original error, issue no RPC, surface a failure toast, and remove only a caller-declared newly-created empty split. Post-create reconciliation failure requires exact rollback; ambiguous rollback rejects without local fallback. Preview focus and close preserve the source editor and terminal.", - "oracle": "Run one unchanged contract oracle for direct create and side-preview callers with absent status, unknown capabilities, and a mixed-version host. Require the original unsupported error or visible toast, zero RPCs, and no retained new split. Run it on the scan target, latest main, candidate, and candidate with the cleanup boundary disabled. In headed paired Electron, arm capability rejection after the caller preflight, invoke the visible HTML side-preview action, require the failure toast, and compare exact host/client browser, editor, terminal, and group inventories to baseline. Repeat against headless serve. Retain the separate exact-page reconciliation rollback oracle.", + "invariant": "Opening one HTML preview from a paired client succeeds only after exactly one browser page on the worktree-owning runtime materializes as exactly one client browser workspace and unified tab in the requested group. Owner-pinned creation returns the canonical host page identity before navigation readiness; delayed navigation cannot turn a created page into an unidentifiable failure or a duplicate retry. Capability rejection before host mutation must preserve the original error, issue no RPC, surface a failure toast, and remove only a caller-declared newly-created empty split. Post-create reconciliation failure requires exact rollback; ambiguous rollback rejects without local fallback. Preview focus and close preserve the source editor and terminal.", + "oracle": "Run one unchanged contract oracle for direct create and side-preview callers with absent status, unknown capabilities, and a mixed-version host. Require the original unsupported error or visible toast, zero RPCs, and no retained new split. Run it on the scan target, latest main, candidate, and candidate with the cleanup boundary disabled. In headed paired Electron, arm capability rejection after the caller preflight, invoke the visible HTML side-preview action, require the failure toast, and compare exact host/client browser, editor, terminal, and group inventories to baseline. Hold a real navigation response beyond the 15-second client deadline after host creation; require the first RPC to return the exact host inventory page ID, one host page, and no retry. Repeat reconciliation faults against headless serve. Retain the separate exact-page reconciliation rollback oracle.", "commands": [ "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime-browser.test.ts src/main/runtime/rpc/methods/browser.test.ts src/renderer/src/lib/file-preview.test.ts src/renderer/src/runtime/web-session-browser-placement.test.ts src/renderer/src/runtime/web-runtime-session.test.ts src/renderer/src/runtime/web-session-tabs-sync.test.ts src/renderer/src/runtime/remote-server-parity.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/runtime/web-runtime-browser-materialization.test.ts", "pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/runtime/web-runtime-browser-capability-cleanup.test.ts src/renderer/src/lib/file-preview-capability-cleanup.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime-browser.test.ts src/renderer/src/runtime/web-runtime-session.test.ts", + "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/orca-runtime-browser.test.ts src/renderer/src/hooks/useIpcEvents.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/runtime/web-runtime-session.test.ts", + "SKIP_BUILD=1 pnpm exec playwright test tests/e2e/paired-browser-create-navigation-deadline.spec.ts --config tests/playwright.config.ts --project electron-headful --workers=1", "ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 ORCA_E2E_FORWARD_APP_LOGS=1 pnpm exec playwright test tests/e2e/paired-remote-html-browser-focus.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1", "ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 ORCA_E2E_FORWARD_APP_LOGS=1 pnpm exec playwright test tests/e2e/paired-remote-html-browser-focus.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1 --repeat-each=3", "SKIP_BUILD=1 ORCA_E2E_WEB_CLIENT=1 ORCA_E2E_FORCE_HEADFUL=1 pnpm exec playwright test tests/e2e/paired-remote-html-browser-focus.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1", @@ -1848,7 +1853,10 @@ "src/renderer/src/runtime/web-runtime-session.test.ts", "src/renderer/src/runtime/web-session-tabs-sync.test.ts", "src/renderer/src/runtime/remote-server-parity.test.ts", + "src/renderer/src/hooks/useIpcEvents.test.ts", + "src/renderer/src/store/slices/browser.test.ts", "tests/e2e/paired-remote-html-browser-focus.spec.ts", + "tests/e2e/paired-browser-create-navigation-deadline.spec.ts", "tests/e2e/paired-browser-creation-reconciliation-failure.spec.ts" ], "assertionRefs": [ @@ -1884,12 +1892,36 @@ "file": "src/renderer/src/runtime/web-runtime-session.test.ts", "assertions": [ "a post-create timeout returns false only after exact host close and a confirming snapshot", + "owner-pinned creation launches navigation separately and materializes without awaiting it", + "a lost create acknowledgement cleans the capability-gated canonical page ID", "unconfirmed cleanup rejects so callers cannot create a competing local fallback", "the canonical placement and a newly-created empty split are released on rollback", "one failed preview cannot remove a shared split still reserved after an environment ownership change", "if every overlapping creation fails, the last reservation closes the caller-created empty split" ] }, + { + "file": "src/main/runtime/orca-runtime-browser.test.ts", + "assertions": [ + "explicit renderer cleanup bypasses guest registration while retaining typed missing-page behavior", + "offscreen cleanup rejects a page outside the requested worktree" + ] + }, + { + "file": "src/renderer/src/hooks/useIpcEvents.test.ts", + "assertions": [ + "renderer-backed creation preserves the requested canonical page ID while keeping its workspace identity independent", + "closing an absent renderer page returns browser_tab_not_found instead of an untyped failure", + "explicit cleanup cannot close a page owned by another worktree" + ] + }, + { + "file": "src/renderer/src/store/slices/browser.test.ts", + "assertions": [ + "a requested canonical page ID is stored on the page rather than reused as its workspace ID", + "duplicate canonical page IDs are rejected before a second tab can materialize" + ] + }, { "file": "src/renderer/src/runtime/web-session-browser-placement.test.ts", "assertions": [ @@ -1921,6 +1953,13 @@ "preview creation leaves the editor active, an explicit browser click is authoritative, and close preserves the editor and terminal" ] }, + { + "file": "tests/e2e/paired-browser-create-navigation-deadline.spec.ts", + "assertions": [ + "a held navigation exceeds the former create deadline while the first RPC returns the exact authoritative host page ID", + "host inventory contains exactly one new page and the user retry branch is never entered" + ] + }, { "file": "tests/e2e/paired-browser-creation-reconciliation-failure.spec.ts", "assertions": [ @@ -2075,6 +2114,24 @@ "result": "failed", "durationSeconds": 12.3, "summary": "Candidate d05217c40d with only the side-preview focusOnCreate:false call disabled failed the byte-identical 2ec1dcf1 oracle because preview creation activated the browser instead of preserving editor focus." + }, + { + "date": "2026-08-13", + "runner": "local", + "platform": "macos", + "command": "pnpm exec vitest run --config config/vitest.config.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/orca-runtime-browser.test.ts src/renderer/src/hooks/useIpcEvents.test.ts src/renderer/src/store/slices/browser.test.ts src/renderer/src/runtime/web-runtime-session.test.ts", + "result": "passed", + "durationSeconds": 10.83, + "summary": "Five post-review host, IPC, store, and client lifecycle files passed 1,356 tests with one pre-existing skip, including both shards that failed before the canonical page/workspace identity and typed missing-page cleanup corrections." + }, + { + "date": "2026-08-13", + "runner": "local", + "platform": "macos", + "command": "SKIP_BUILD=1 pnpm exec playwright test tests/e2e/paired-browser-create-navigation-deadline.spec.ts --config tests/playwright.config.ts --project electron-headful --workers=1", + "result": "passed", + "durationSeconds": 18.1, + "summary": "Two isolated headed Electron/CDP journeys passed: the direct owner-pinned call returned one canonical host ID before held navigation, and the real remote-pane context-menu route materialized that one page without retry or duplicate." } ], "runtimeBudget": { @@ -2087,11 +2144,11 @@ }, "redGreenEvidence": { "status": "complete", - "evidence": "The unchanged STA-4063 five-assertion oracle is red 5/5 on scan e4c278eb52 and latest main bc2e30000b, partially green 2/5 on pre-fix PR #14100, green 5/5 on candidate 14b5877a75, and red 3/5 when only the new transaction cleanup boundary is disabled on final candidate a9e6fb7716. The earlier STA-4025 transaction oracle remains red on the post-#13909 base and green on this candidate. The byte-identical 2ec1dcf1 Electron oracle remains red on latest main 346e59c879, green on candidate d05217c40d, and red with only side-preview focus disabled; historical 5806b23f evidence separately proves owning-runtime routing." + "evidence": "The unchanged STA-4063 five-assertion oracle is red 5/5 on scan e4c278eb52 and latest main bc2e30000b, partially green 2/5 on pre-fix PR #14100, green 5/5 on candidate 14b5877a75, and red 3/5 when only the new transaction cleanup boundary is disabled on final candidate a9e6fb7716. The earlier STA-4025 transaction oracle remains red on the post-#13909 base and green on this candidate. The byte-identical STA-4231 headed oracle is red on latest-main b19d99bd00: both 15-second creates return runtime_timeout without a page ID while the host retains two distinct pages after retry. The relevant behavior is unchanged through 0a0ae974d4. The candidate is green with one returned canonical ID, one host/client page, and no retry; disabling only the navigation-independent acknowledgement is red with the same two orphaned pages. The byte-identical 2ec1dcf1 Electron oracle remains red on latest main 346e59c879, green on candidate d05217c40d, and red with only side-preview focus disabled; historical 5806b23f evidence separately proves owning-runtime routing." }, "performanceBudget": { "required": true, - "evidence": "The transaction adds no timer, polling, retry, subprocess, RPC method, stream opcode, or host publication. Capability rejection performs zero RPCs and one bounded empty-group close. Successful creation adds one post-operation list; known-page failure adds one exact close and one confirming list. The E2E-only one-shot faults are build-gated, retain one promise/flag and a bounded page-id set, and reset after each run. Pending client placements remain capped at 128 and clear on adoption, failure, or teardown." + "evidence": "The transaction adds no timer, polling, retry, subprocess, RPC method, stream opcode, or global host publication. Owner-pinned success performs one create RPC followed by one asynchronous goto, retains one page, and performs zero retry or cleanup calls. A lost create acknowledgement performs one exact close by the preallocated canonical ID and at most one confirming snapshot. Headless goto publishes one worktree-scoped session snapshot after navigation. Capability rejection performs zero RPCs and one bounded empty-group close. The E2E-only one-shot faults are build-gated, retain one promise/flag and a bounded page-id set, and reset after each run. Pending client placements remain capped at 128 and clear on adoption, failure, or teardown." }, "promotionCriteria": [ "Collect Linux and physical Windows paired-server evidence.", diff --git a/config/scripts/pr-e2e-gate-contract.test.mjs b/config/scripts/pr-e2e-gate-contract.test.mjs index d44039a2ca8..c600d233437 100644 --- a/config/scripts/pr-e2e-gate-contract.test.mjs +++ b/config/scripts/pr-e2e-gate-contract.test.mjs @@ -75,7 +75,11 @@ describe('PR E2E gate contract', () => { expect(changedRun.run).toContain('. != "tests/e2e/ssh-startup-exec-readiness.spec.ts"') expect(changedRun.run).toContain('. != "tests/e2e/paired-startup-exec-readiness.spec.ts"') expect(changedRun.run).toContain('if [ "${#TEST_FILES[@]}" -eq 0 ]') - expect(changedRun.run).toContain('pnpm run test:e2e "${TEST_FILES[@]}" --workers=1') + expect(changedRun.run).toContain('grep -l \'@headful\' "${TEST_FILES[@]}"') + expect(changedRun.run).toContain('E2E_PROJECT_ARGS+=(--project=electron-headful)') + expect(changedRun.run).toContain( + 'pnpm run test:e2e "${TEST_FILES[@]}" --workers=1 "${E2E_PROJECT_ARGS[@]}"' + ) }) it('keeps startup-exec live parity in the isolated SSH lane', () => { diff --git a/config/scripts/remote-shared-control-retirement-probe.ts b/config/scripts/remote-shared-control-retirement-probe.ts index 30edeb9802a..629ba1fddde 100644 --- a/config/scripts/remote-shared-control-retirement-probe.ts +++ b/config/scripts/remote-shared-control-retirement-probe.ts @@ -5,7 +5,7 @@ import { resolveEnvironment, resolveEnvironmentPairingOffer } from '../../src/shared/runtime-environment-store' -import type { MemorySnapshot } from '../../src/shared/types' +import type { MemorySnapshot } from '../../src/shared/process-stats-types' import type { RuntimeStatus } from '../../src/shared/runtime-types' async function main(): Promise { diff --git a/mobile/app/h/[hostId]/index.tsx b/mobile/app/h/[hostId]/index.tsx index 5fd6fb39d43..9cf10c94356 100644 --- a/mobile/app/h/[hostId]/index.tsx +++ b/mobile/app/h/[hostId]/index.tsx @@ -96,7 +96,7 @@ import { WORKSPACE_SORT_OPTIONS as SORT_OPTIONS } from '../../../src/worktree/workspace-list-picker-options' import type { RepoSummary } from '../../../src/worktree/host-worktree-rpc-types' -import type { WorkspaceStatusDefinition } from '../../../../src/shared/types' +import type { WorkspaceStatusDefinition } from '../../../../src/shared/worktree/types' import { DEFAULT_MOBILE_WORKSPACE_STATUSES } from '../../../src/worktree/mobile-workspace-statuses' function isErrorVerdict(v: ConnectionVerdict): boolean { diff --git a/mobile/app/h/[hostId]/session/[worktreeId].tsx b/mobile/app/h/[hostId]/session/[worktreeId].tsx index c0bcca64b98..0ef8a42ee92 100644 --- a/mobile/app/h/[hostId]/session/[worktreeId].tsx +++ b/mobile/app/h/[hostId]/session/[worktreeId].tsx @@ -277,7 +277,8 @@ import { import { colors } from '../../../../src/theme/mobile-theme' import { QuickCommandsTabButton } from '../../../../src/session/QuickCommandsTabButton' import { styles } from '../../../../src/session/mobile-session-styles' -import type { DiffComment, TerminalQuickCommand } from '../../../../../src/shared/types' +import type { DiffComment } from '../../../../../src/shared/diff-comment-types' +import type { TerminalQuickCommand } from '../../../../../src/shared/terminal-quick-command-types' import type { DiffCommentActions, DiffNotesDelivery, diff --git a/mobile/app/h/[hostId]/tasks.tsx b/mobile/app/h/[hostId]/tasks.tsx index 7ef451df8aa..717e4640516 100644 --- a/mobile/app/h/[hostId]/tasks.tsx +++ b/mobile/app/h/[hostId]/tasks.tsx @@ -149,13 +149,13 @@ import { scheduleMobileTaskCopyFeedbackReset } from '../../../src/tasks/mobile-task-copy-feedback-timer' import type { - BaseRefSearchResult, GitHubOwnerRepo, - ProviderCheckSummary, - PersistedTrustedOrcaHooks, - SparsePreset, - TuiAgent -} from '../../../../src/shared/types' + ProviderCheckSummary +} from '../../../../src/shared/github/pull-request-types' +import type { PersistedTrustedOrcaHooks } from '../../../../src/shared/orca-yaml-hook-types' +import type { BaseRefSearchResult } from '../../../../src/shared/repo-types' +import type { TuiAgent } from '../../../../src/shared/tui-agent' +import type { SparsePreset } from '../../../../src/shared/worktree/create-types' import type { SshConnectionState } from '../../../../src/shared/ssh-types' import type { HostedReviewDecision } from '../../../../src/shared/hosted-review' import { diff --git a/mobile/scripts/mock-server-rpc-handlers.ts b/mobile/scripts/mock-server-rpc-handlers.ts index 5971b9dee94..f67db5bc2f2 100644 --- a/mobile/scripts/mock-server-rpc-handlers.ts +++ b/mobile/scripts/mock-server-rpc-handlers.ts @@ -7,7 +7,7 @@ import { applyTerminalQuickCommandMutation, type TerminalQuickCommandMutation } from '../../src/shared/terminal-quick-commands' -import type { TerminalQuickCommand } from '../../src/shared/types' +import type { TerminalQuickCommand } from '../../src/shared/terminal-quick-command-types' import { handleMockFilePreviewRequest } from './mock-server-file-preview-data' import { handleMockGitRequest } from './mock-server-git-state' import { handleMockAccountRequest } from './mock-server-account-rpc' diff --git a/mobile/src/components/MobileAgentIcon.tsx b/mobile/src/components/MobileAgentIcon.tsx index c5557ab3934..7f0cf0e0f91 100644 --- a/mobile/src/components/MobileAgentIcon.tsx +++ b/mobile/src/components/MobileAgentIcon.tsx @@ -1,7 +1,7 @@ import { Image, StyleSheet, Text, View } from 'react-native' import type { ImageSourcePropType } from 'react-native' import { Terminal } from 'lucide-react-native' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import Svg, { Defs, G, LinearGradient, Path, Stop } from 'react-native-svg' import { colors } from '../theme/mobile-theme' import { MOBILE_AGENT_CATALOG } from '../tasks/mobile-agent-catalog' diff --git a/mobile/src/components/MobileDiffReviewBody.tsx b/mobile/src/components/MobileDiffReviewBody.tsx index 76555aeadc6..cc0a7aa95bd 100644 --- a/mobile/src/components/MobileDiffReviewBody.tsx +++ b/mobile/src/components/MobileDiffReviewBody.tsx @@ -1,7 +1,7 @@ import { ActivityIndicator, FlatList, Pressable, Text, View } from 'react-native' import { RefreshCw } from 'lucide-react-native' import type { RefObject } from 'react' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import { colors } from '../theme/mobile-theme' import { MobileDiffReviewLine } from './MobileDiffReviewLine' import type { diff --git a/mobile/src/components/MobileDiffReviewDrawers.tsx b/mobile/src/components/MobileDiffReviewDrawers.tsx index c6e05b1cd0a..1ff763fc9b8 100644 --- a/mobile/src/components/MobileDiffReviewDrawers.tsx +++ b/mobile/src/components/MobileDiffReviewDrawers.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react' import { KeyboardAvoidingView, Platform, Pressable, Text, TextInput, View } from 'react-native' import { Check, Copy, FileText, Plus, Send, Trash2, X } from 'lucide-react-native' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import { colors } from '../theme/mobile-theme' import type { ActionSheetAction } from './ActionSheetModal' import { ActionSheetModal } from './ActionSheetModal' diff --git a/mobile/src/components/MobileDiffReviewFileSummary.tsx b/mobile/src/components/MobileDiffReviewFileSummary.tsx index a27910f4d6f..3645ed60161 100644 --- a/mobile/src/components/MobileDiffReviewFileSummary.tsx +++ b/mobile/src/components/MobileDiffReviewFileSummary.tsx @@ -1,6 +1,6 @@ import { Pressable, Text, View } from 'react-native' import { ArrowDown, ArrowUp } from 'lucide-react-native' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import { colors } from '../theme/mobile-theme' import type { MobileDiffReviewQueueItem } from '../session/mobile-diff-review-queue' import { MOBILE_GIT_STATUS_LABELS } from '../source-control/mobile-git-status' diff --git a/mobile/src/components/MobileDiffReviewLine.tsx b/mobile/src/components/MobileDiffReviewLine.tsx index 1c1008321f6..ae882d56525 100644 --- a/mobile/src/components/MobileDiffReviewLine.tsx +++ b/mobile/src/components/MobileDiffReviewLine.tsx @@ -1,6 +1,6 @@ import { Pressable, StyleSheet, Text, View } from 'react-native' import { MessageSquare } from 'lucide-react-native' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import type { MobileDiffLine } from '../session/mobile-diff-lines' import type { MobileHighlightedDiffLine } from '../session/mobile-file-syntax' import { mobileDiffLineNumber, mobileDiffLinePrefix } from '../source-control/mobile-diff-format' diff --git a/mobile/src/components/NewWorktreeModal.tsx b/mobile/src/components/NewWorktreeModal.tsx index f10a96f17c0..24a7e1d56a9 100644 --- a/mobile/src/components/NewWorktreeModal.tsx +++ b/mobile/src/components/NewWorktreeModal.tsx @@ -30,7 +30,8 @@ import { type SetupHookTrust } from '../tasks/setup-hook-trust' import { isMobileTuiAgentEnabled } from '../tasks/mobile-tui-agents' -import type { PersistedTrustedOrcaHooks, TuiAgent } from '../../../src/shared/types' +import type { PersistedTrustedOrcaHooks } from '../../../src/shared/orca-yaml-hook-types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import type { SshConnectionState } from '../../../src/shared/ssh-types' import { NEW_WORKTREE_AGENT_OPTIONS as AGENT_OPTIONS, diff --git a/mobile/src/components/mobile-agent-icon-assets.test.ts b/mobile/src/components/mobile-agent-icon-assets.test.ts index edbe71760c7..f4f6325d806 100644 --- a/mobile/src/components/mobile-agent-icon-assets.test.ts +++ b/mobile/src/components/mobile-agent-icon-assets.test.ts @@ -1,7 +1,7 @@ import { existsSync, readFileSync } from 'node:fs' import path from 'node:path' import { describe, expect, it } from 'vitest' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { MOBILE_TUI_AGENT_FAVICON_DOMAINS } from '../tasks/mobile-tui-agents' // Agents that render a hand-authored glyph in MobileAgentIcon and therefore diff --git a/mobile/src/components/mobile-agent-icon-assets.ts b/mobile/src/components/mobile-agent-icon-assets.ts index 3f93b3dfaeb..38a48373734 100644 --- a/mobile/src/components/mobile-agent-icon-assets.ts +++ b/mobile/src/components/mobile-agent-icon-assets.ts @@ -1,5 +1,5 @@ import type { ImageSourcePropType } from 'react-native' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' // Why: mobile previously rendered these agent icons from Google's favicon // service, which is unreachable in some regions (e.g. mainland China) and diff --git a/mobile/src/components/new-worktree-agent-selection.ts b/mobile/src/components/new-worktree-agent-selection.ts index 22101c00a30..1e8836a5fed 100644 --- a/mobile/src/components/new-worktree-agent-selection.ts +++ b/mobile/src/components/new-worktree-agent-selection.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { MOBILE_AGENT_CATALOG } from '../tasks/mobile-agent-catalog' import { isMobileTuiAgentEnabled } from '../tasks/mobile-tui-agents' import { pickWorkspaceAgent } from '../tasks/workspace-agent-selection' diff --git a/mobile/src/components/pr-sidebar/PRActionsSection.tsx b/mobile/src/components/pr-sidebar/PRActionsSection.tsx index 5fae6803889..8f331ef11ba 100644 --- a/mobile/src/components/pr-sidebar/PRActionsSection.tsx +++ b/mobile/src/components/pr-sidebar/PRActionsSection.tsx @@ -2,7 +2,7 @@ import { useCallback, useState } from 'react' import { ActivityIndicator, Pressable, Text, View } from 'react-native' import { GitMerge, Link2Off } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { GitHubPRMergeMethod, PRInfo } from '../../../../src/shared/types' +import type { GitHubPRMergeMethod, PRInfo } from '../../../../src/shared/github/pull-request-types' import type { RpcClient } from '../../transport/rpc-client' import type { MobilePrActions } from '../../session/use-mobile-pr-actions' import { unlinkMobilePr } from '../../source-control/mobile-pr-link' diff --git a/mobile/src/components/pr-sidebar/PRCheckDetail.tsx b/mobile/src/components/pr-sidebar/PRCheckDetail.tsx index 7086681c434..3023cdce72c 100644 --- a/mobile/src/components/pr-sidebar/PRCheckDetail.tsx +++ b/mobile/src/components/pr-sidebar/PRCheckDetail.tsx @@ -1,6 +1,6 @@ import { ActivityIndicator, ScrollView, Text, View } from 'react-native' import { colors } from '../../theme/mobile-theme' -import type { PRCheckRunDetails } from '../../../../src/shared/types' +import type { PRCheckRunDetails } from '../../../../src/shared/github/check-types' import { presentCheckDetail, type CheckDetailJob } from './pr-check-detail-content' import { mobilePrSidebarStyles as styles } from './mobile-pr-sidebar-styles' diff --git a/mobile/src/components/pr-sidebar/PRChecksSection.tsx b/mobile/src/components/pr-sidebar/PRChecksSection.tsx index 53ac41655c5..12c08929c41 100644 --- a/mobile/src/components/pr-sidebar/PRChecksSection.tsx +++ b/mobile/src/components/pr-sidebar/PRChecksSection.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { ActivityIndicator, Linking, Pressable, Text, View } from 'react-native' import { ChevronDown, ChevronRight, ExternalLink, RotateCw, Sparkles } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { PRCheckDetail } from '../../../../src/shared/types' +import type { PRCheckDetail } from '../../../../src/shared/github/check-types' import type { RpcClient } from '../../transport/rpc-client' import { fetchPRCheckDetails, type GitHubPrRepoSlug } from '../../session/github-pr-rpc' import type { MobilePrActions } from '../../session/use-mobile-pr-actions' diff --git a/mobile/src/components/pr-sidebar/PRCommentCard.tsx b/mobile/src/components/pr-sidebar/PRCommentCard.tsx index 23d768b7814..5aee8cc0a00 100644 --- a/mobile/src/components/pr-sidebar/PRCommentCard.tsx +++ b/mobile/src/components/pr-sidebar/PRCommentCard.tsx @@ -1,7 +1,11 @@ import { memo, useState } from 'react' import { Image, Linking, Pressable, Text, View } from 'react-native' import { Check, CornerDownRight, ExternalLink, Pencil, Trash2, Undo2 } from 'lucide-react-native' -import type { GitHubReaction, GitHubReactionContent, PRComment } from '../../../../src/shared/types' +import type { + GitHubReaction, + GitHubReactionContent, + PRComment +} from '../../../../src/shared/github/comment-types' import { colors } from '../../theme/mobile-theme' import { canEditComment, isResolvableComment } from '../../session/pr-comment-actions' import { ConfirmModal } from '../ConfirmModal' diff --git a/mobile/src/components/pr-sidebar/PRCommentsSection.test.ts b/mobile/src/components/pr-sidebar/PRCommentsSection.test.ts index 08fc02c357b..e01b251ce05 100644 --- a/mobile/src/components/pr-sidebar/PRCommentsSection.test.ts +++ b/mobile/src/components/pr-sidebar/PRCommentsSection.test.ts @@ -1,7 +1,8 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { GitHubWorkItemDetails, PRComment } from '../../../../src/shared/types' +import type { PRComment } from '../../../../src/shared/github/comment-types' +import type { GitHubWorkItemDetails } from '../../../../src/shared/github/work-item-types' import { PRCommentsSection } from './PRCommentsSection' vi.mock('react-native', () => ({ diff --git a/mobile/src/components/pr-sidebar/PRCommentsSection.tsx b/mobile/src/components/pr-sidebar/PRCommentsSection.tsx index 8fb5de31037..b8ce48362f2 100644 --- a/mobile/src/components/pr-sidebar/PRCommentsSection.tsx +++ b/mobile/src/components/pr-sidebar/PRCommentsSection.tsx @@ -1,7 +1,8 @@ import { useMemo, useState } from 'react' import { ActivityIndicator, Pressable, Text, View } from 'react-native' import { ChevronDown, ChevronRight } from 'lucide-react-native' -import type { GitHubWorkItemDetails, PRState } from '../../../../src/shared/types' +import type { PRState } from '../../../../src/shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../../src/shared/github/work-item-types' import type { GitHubPrRepoSlug } from '../../session/github-pr-rpc' import { colors } from '../../theme/mobile-theme' import { canAddRootComment } from '../../session/pr-comment-actions' diff --git a/mobile/src/components/pr-sidebar/PRConflictingFilesSection.tsx b/mobile/src/components/pr-sidebar/PRConflictingFilesSection.tsx index 95c95d30573..0a95854d4fd 100644 --- a/mobile/src/components/pr-sidebar/PRConflictingFilesSection.tsx +++ b/mobile/src/components/pr-sidebar/PRConflictingFilesSection.tsx @@ -3,7 +3,7 @@ import { ActivityIndicator, Pressable, ScrollView, Text, View } from 'react-nati import * as Clipboard from 'expo-clipboard' import { Check, Copy, FileWarning, Sparkles } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { PRInfo } from '../../../../src/shared/types' +import type { PRInfo } from '../../../../src/shared/github/pull-request-types' import { PRSection } from './PRSection' import { resolveConflictDisplay } from './pr-conflict-presentation' import { prConflictStyles as styles } from './pr-conflict-styles' diff --git a/mobile/src/components/pr-sidebar/PRReviewersSection.tsx b/mobile/src/components/pr-sidebar/PRReviewersSection.tsx index bc09ecd3502..d374dd629c8 100644 --- a/mobile/src/components/pr-sidebar/PRReviewersSection.tsx +++ b/mobile/src/components/pr-sidebar/PRReviewersSection.tsx @@ -2,7 +2,7 @@ import { useMemo, useState } from 'react' import { ActivityIndicator, Pressable, Text, View } from 'react-native' import { UserPlus, X } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { GitHubWorkItemDetails } from '../../../../src/shared/types' +import type { GitHubWorkItemDetails } from '../../../../src/shared/github/work-item-types' import type { RpcClient } from '../../transport/rpc-client' import type { MobilePrActions } from '../../session/use-mobile-pr-actions' import { isPrSidebarDetailsPlaceholder } from '../../session/mobile-pr-sidebar-state' diff --git a/mobile/src/components/pr-sidebar/PRSidebarHeader.tsx b/mobile/src/components/pr-sidebar/PRSidebarHeader.tsx index 335108e07ae..c053e9b2a65 100644 --- a/mobile/src/components/pr-sidebar/PRSidebarHeader.tsx +++ b/mobile/src/components/pr-sidebar/PRSidebarHeader.tsx @@ -2,7 +2,8 @@ import { useState } from 'react' import { ActivityIndicator, Pressable, Text, TextInput, View } from 'react-native' import { ArrowRight, ExternalLink, Pencil } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { GitHubWorkItemDetails, PRInfo } from '../../../../src/shared/types' +import type { PRInfo } from '../../../../src/shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../../src/shared/github/work-item-types' import type { MobilePrTitleAction } from '../../session/use-mobile-pr-title-action' import { prStateBadge } from './pr-checks-presentation' import { statusColor } from './pr-sidebar-status-color' diff --git a/mobile/src/components/pr-sidebar/ReviewerPickerDrawer.tsx b/mobile/src/components/pr-sidebar/ReviewerPickerDrawer.tsx index 8a3a161f358..6cdb63ca38e 100644 --- a/mobile/src/components/pr-sidebar/ReviewerPickerDrawer.tsx +++ b/mobile/src/components/pr-sidebar/ReviewerPickerDrawer.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from 'react' import { ActivityIndicator, Pressable, Text, TextInput, View } from 'react-native' import { Check } from 'lucide-react-native' import { colors } from '../../theme/mobile-theme' -import type { GitHubAssignableUser } from '../../../../src/shared/types' +import type { GitHubAssignableUser } from '../../../../src/shared/github/pull-request-types' import type { RpcClient } from '../../transport/rpc-client' import { fetchAssignableUsers } from '../../session/github-pr-rpc' import { BottomDrawer } from '../BottomDrawer' diff --git a/mobile/src/components/pr-sidebar/pr-actions-state.ts b/mobile/src/components/pr-sidebar/pr-actions-state.ts index 7aa1456bc55..f2bd679af1a 100644 --- a/mobile/src/components/pr-sidebar/pr-actions-state.ts +++ b/mobile/src/components/pr-sidebar/pr-actions-state.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod, PRState } from '../../../../src/shared/types' +import type { GitHubPRMergeMethod, PRState } from '../../../../src/shared/github/pull-request-types' // Which actions the PR actions section may offer for a given PR state. Merged PRs // expose only unlink (+ open-on-host elsewhere); closed PRs add reopen; open/draft diff --git a/mobile/src/components/pr-sidebar/pr-auto-merge-availability.ts b/mobile/src/components/pr-sidebar/pr-auto-merge-availability.ts index 5453a0209b6..166e6e0c189 100644 --- a/mobile/src/components/pr-sidebar/pr-auto-merge-availability.ts +++ b/mobile/src/components/pr-sidebar/pr-auto-merge-availability.ts @@ -1,4 +1,4 @@ -import type { PRInfo } from '../../../../src/shared/types' +import type { PRInfo } from '../../../../src/shared/github/pull-request-types' type MobilePRAutoMergeAvailabilityInput = Pick< PRInfo, diff --git a/mobile/src/components/pr-sidebar/pr-check-detail-content.test.ts b/mobile/src/components/pr-sidebar/pr-check-detail-content.test.ts index 8956a90b4b8..5876405d1bb 100644 --- a/mobile/src/components/pr-sidebar/pr-check-detail-content.test.ts +++ b/mobile/src/components/pr-sidebar/pr-check-detail-content.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckRunDetails } from '../../../../src/shared/types' +import type { PRCheckRunDetails } from '../../../../src/shared/github/check-types' import { presentCheckDetail } from './pr-check-detail-content' function details(over: Partial): PRCheckRunDetails { diff --git a/mobile/src/components/pr-sidebar/pr-check-detail-content.ts b/mobile/src/components/pr-sidebar/pr-check-detail-content.ts index b1f63cbd370..0a99fc23709 100644 --- a/mobile/src/components/pr-sidebar/pr-check-detail-content.ts +++ b/mobile/src/components/pr-sidebar/pr-check-detail-content.ts @@ -3,7 +3,7 @@ import type { PRCheckJob, PRCheckRunDetails, PRCheckStep -} from '../../../../src/shared/types' +} from '../../../../src/shared/github/check-types' // Pure mapping from the github.prCheckDetails payload to the rows the mobile // expanded check detail renders. No React/native imports so it stays unit-testable diff --git a/mobile/src/components/pr-sidebar/pr-checks-presentation.test.ts b/mobile/src/components/pr-sidebar/pr-checks-presentation.test.ts index 044644b7dc4..cf40a6b323e 100644 --- a/mobile/src/components/pr-sidebar/pr-checks-presentation.test.ts +++ b/mobile/src/components/pr-sidebar/pr-checks-presentation.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail } from '../../../../src/shared/types' +import type { PRCheckDetail } from '../../../../src/shared/github/check-types' import { checkOutcome, firstFailingCheckKey, diff --git a/mobile/src/components/pr-sidebar/pr-checks-presentation.ts b/mobile/src/components/pr-sidebar/pr-checks-presentation.ts index e929a13bf40..277680fb9a5 100644 --- a/mobile/src/components/pr-sidebar/pr-checks-presentation.ts +++ b/mobile/src/components/pr-sidebar/pr-checks-presentation.ts @@ -1,4 +1,8 @@ -import type { PRCheckDetail, PRState, ProviderCheckSummary } from '../../../../src/shared/types' +import type { PRCheckDetail } from '../../../../src/shared/github/check-types' +import type { + PRState, + ProviderCheckSummary +} from '../../../../src/shared/github/pull-request-types' import { classifyCheckOutcome, summarizeProviderChecks, diff --git a/mobile/src/components/pr-sidebar/pr-conflict-presentation.test.ts b/mobile/src/components/pr-sidebar/pr-conflict-presentation.test.ts index 07172a52ae3..8f68ead0d6f 100644 --- a/mobile/src/components/pr-sidebar/pr-conflict-presentation.test.ts +++ b/mobile/src/components/pr-sidebar/pr-conflict-presentation.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRInfo } from '../../../../src/shared/types' +import type { PRInfo } from '../../../../src/shared/github/pull-request-types' import { buildMergeabilityRefreshCommands, hasMergeConflicts, diff --git a/mobile/src/components/pr-sidebar/pr-conflict-presentation.ts b/mobile/src/components/pr-sidebar/pr-conflict-presentation.ts index 0b227806519..54d2e33cb80 100644 --- a/mobile/src/components/pr-sidebar/pr-conflict-presentation.ts +++ b/mobile/src/components/pr-sidebar/pr-conflict-presentation.ts @@ -1,4 +1,4 @@ -import type { PRInfo } from '../../../../src/shared/types' +import type { PRInfo } from '../../../../src/shared/github/pull-request-types' // Pure presentation logic for the PR sidebar's conflicting-files section. No // React/native imports so it is unit-testable under the node Vitest config (KTD5). diff --git a/mobile/src/session/QuickCommandRow.tsx b/mobile/src/session/QuickCommandRow.tsx index 401305b298c..8815d4da5f0 100644 --- a/mobile/src/session/QuickCommandRow.tsx +++ b/mobile/src/session/QuickCommandRow.tsx @@ -4,7 +4,7 @@ import * as Clipboard from 'expo-clipboard' import { Check, Copy, Pencil, Play, Trash2 } from 'lucide-react-native' import { colors, spacing, typography } from '../theme/mobile-theme' import { MobileAgentIcon } from '../components/MobileAgentIcon' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import { getQuickCommandDisplayPreview, getTerminalQuickCommandBody, diff --git a/mobile/src/session/QuickCommandsList.tsx b/mobile/src/session/QuickCommandsList.tsx index e8781163691..02a6809bb60 100644 --- a/mobile/src/session/QuickCommandsList.tsx +++ b/mobile/src/session/QuickCommandsList.tsx @@ -3,7 +3,8 @@ import { Check, Plus, Search } from 'lucide-react-native' import { colors, spacing } from '../theme/mobile-theme' import { MobileAgentIcon } from '../components/MobileAgentIcon' import { MOBILE_AGENT_CATALOG } from '../tasks/mobile-agent-catalog' -import type { TerminalQuickCommand, TuiAgent } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { supportsTerminalAgentQuickCommand } from '../terminal/quick-commands' import { QuickCommandRow } from './QuickCommandRow' diff --git a/mobile/src/session/QuickCommandsSheet.test.ts b/mobile/src/session/QuickCommandsSheet.test.ts index 9951742b64f..2ce520a4eaf 100644 --- a/mobile/src/session/QuickCommandsSheet.test.ts +++ b/mobile/src/session/QuickCommandsSheet.test.ts @@ -1,7 +1,7 @@ import { createElement, type ReactNode } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import type { RpcClient } from '../transport/rpc-client' import { MAX_QUICK_COMMANDS } from '../terminal/quick-commands' import { QuickCommandsSheet } from './QuickCommandsSheet' diff --git a/mobile/src/session/QuickCommandsSheet.tsx b/mobile/src/session/QuickCommandsSheet.tsx index c4dbff9473d..3342f122665 100644 --- a/mobile/src/session/QuickCommandsSheet.tsx +++ b/mobile/src/session/QuickCommandsSheet.tsx @@ -4,7 +4,7 @@ import { ChevronLeft } from 'lucide-react-native' import { colors, spacing } from '../theme/mobile-theme' import { BottomDrawer } from '../components/BottomDrawer' import type { RpcClient } from '../transport/rpc-client' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import { getQuickCommandPreview, MAX_QUICK_COMMANDS, diff --git a/mobile/src/session/ai-vault-resume-launch.ts b/mobile/src/session/ai-vault-resume-launch.ts index aa8c1bf98a6..a1a21565037 100644 --- a/mobile/src/session/ai-vault-resume-launch.ts +++ b/mobile/src/session/ai-vault-resume-launch.ts @@ -13,7 +13,7 @@ import { resolveTuiAgentLaunchEnv } from '../../../src/shared/tui-agent-launch-defaults' import { normalizeAiVaultResumeFilePath } from '../../../src/shared/ai-vault-resume-path' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { parseWslUncPath } from '../../../src/shared/wsl-paths' import { resolveWindowsShellStartupFamily } from '../../../src/shared/windows-terminal-shell' import type { RpcClient } from '../transport/rpc-client' diff --git a/mobile/src/session/github-pr-comment-parsers.ts b/mobile/src/session/github-pr-comment-parsers.ts index 93f6eab6f31..5d5d49b746f 100644 --- a/mobile/src/session/github-pr-comment-parsers.ts +++ b/mobile/src/session/github-pr-comment-parsers.ts @@ -1,4 +1,8 @@ -import type { GitHubReaction, GitHubReactionContent, PRComment } from '../../../src/shared/types' +import type { + GitHubReaction, + GitHubReactionContent, + PRComment +} from '../../../src/shared/github/comment-types' import { isRecord, readBoolean, readNumber, readString } from './github-pr-value-readers' // Defensive parsers for the PR conversation comments carried by diff --git a/mobile/src/session/github-pr-mutations.ts b/mobile/src/session/github-pr-mutations.ts index d9fa04ce06a..bd1d9c423b9 100644 --- a/mobile/src/session/github-pr-mutations.ts +++ b/mobile/src/session/github-pr-mutations.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod } from '../../../src/shared/types' +import type { GitHubPRMergeMethod } from '../../../src/shared/github/pull-request-types' import type { RpcClient } from '../transport/rpc-client' import { buildGithubPrParams, githubPrRepoSlugParam, type GitHubPrRepoSlug } from './github-pr-rpc' diff --git a/mobile/src/session/github-pr-parsers.ts b/mobile/src/session/github-pr-parsers.ts index 25c516f7106..05a59200d1c 100644 --- a/mobile/src/session/github-pr-parsers.ts +++ b/mobile/src/session/github-pr-parsers.ts @@ -1,15 +1,19 @@ import type { - GitHubAssignableUser, - GitHubPRReviewSummary, - GitHubWorkItem, - GitHubWorkItemDetails, PRCheckAnnotation, PRCheckDetail, PRCheckJob, PRCheckRunDetails, - PRCheckStep, + PRCheckStep +} from '../../../src/shared/github/check-types' +import type { + GitHubAssignableUser, + GitHubPRReviewSummary, PRInfo -} from '../../../src/shared/types' +} from '../../../src/shared/github/pull-request-types' +import type { + GitHubWorkItem, + GitHubWorkItemDetails +} from '../../../src/shared/github/work-item-types' import { readPRComments } from './github-pr-comment-parsers' import type { HostedReviewInfo } from '../../../src/shared/hosted-review' import { diff --git a/mobile/src/session/github-pr-rpc.ts b/mobile/src/session/github-pr-rpc.ts index a34ed49581c..485184993ec 100644 --- a/mobile/src/session/github-pr-rpc.ts +++ b/mobile/src/session/github-pr-rpc.ts @@ -1,10 +1,6 @@ -import type { - GitHubAssignableUser, - GitHubWorkItemDetails, - PRCheckDetail, - PRCheckRunDetails, - PRInfo -} from '../../../src/shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../src/shared/github/check-types' +import type { GitHubAssignableUser, PRInfo } from '../../../src/shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../src/shared/github/work-item-types' import type { HostedReviewInfo } from '../../../src/shared/hosted-review' import { normalizeGitHubPRForBranchOutcome, diff --git a/mobile/src/session/github-pr-value-readers.ts b/mobile/src/session/github-pr-value-readers.ts index 9074d94142c..083601923b8 100644 --- a/mobile/src/session/github-pr-value-readers.ts +++ b/mobile/src/session/github-pr-value-readers.ts @@ -1,16 +1,16 @@ +import type { PRCheckDetail } from '../../../src/shared/github/check-types' import type { CheckStatus, GitHubAssignableUser, - ProviderCheckSummary, GitHubPRMergeMethod, GitHubPRMergeMethodSettings, GitHubPRReviewSummary, GitHubRepositoryIdentity, - PRCheckDetail, PRMergeableState, PRReviewDecision, - PRState -} from '../../../src/shared/types' + PRState, + ProviderCheckSummary +} from '../../../src/shared/github/pull-request-types' import type { HostedReviewProvider } from '../../../src/shared/hosted-review' // Primitive + enum value readers shared by the github.* PR parsers. Each narrows diff --git a/mobile/src/session/mobile-diff-comment-edit.test.ts b/mobile/src/session/mobile-diff-comment-edit.test.ts index 8e6482d8bb0..49328064cd5 100644 --- a/mobile/src/session/mobile-diff-comment-edit.test.ts +++ b/mobile/src/session/mobile-diff-comment-edit.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import { clearSentMobileDiffComments, countUnsentMobileDiffComments, diff --git a/mobile/src/session/mobile-diff-comment-edit.ts b/mobile/src/session/mobile-diff-comment-edit.ts index 3da63af3e1e..93ba15c0844 100644 --- a/mobile/src/session/mobile-diff-comment-edit.ts +++ b/mobile/src/session/mobile-diff-comment-edit.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' export type UpdateMobileDiffCommentInput = { id: string diff --git a/mobile/src/session/mobile-diff-comments.test.ts b/mobile/src/session/mobile-diff-comments.test.ts index e86d6e81bab..8897b5e32e4 100644 --- a/mobile/src/session/mobile-diff-comments.test.ts +++ b/mobile/src/session/mobile-diff-comments.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import { addMobileDiffComment, formatDiffComments, diff --git a/mobile/src/session/mobile-diff-comments.ts b/mobile/src/session/mobile-diff-comments.ts index 7fc7140fd42..333895ea95a 100644 --- a/mobile/src/session/mobile-diff-comments.ts +++ b/mobile/src/session/mobile-diff-comments.ts @@ -1,4 +1,4 @@ -import type { DiffComment, DiffReviewScope } from '../../../src/shared/types' +import type { DiffComment, DiffReviewScope } from '../../../src/shared/diff-comment-types' import { formatDiffComment, formatDiffComments } from '../../../src/shared/diff-comments-format' export { formatDiffComment, formatDiffComments } diff --git a/mobile/src/session/mobile-diff-review-positioning.ts b/mobile/src/session/mobile-diff-review-positioning.ts index afb03381a2d..63932310767 100644 --- a/mobile/src/session/mobile-diff-review-positioning.ts +++ b/mobile/src/session/mobile-diff-review-positioning.ts @@ -1,4 +1,4 @@ -import type { DiffReviewScope } from '../../../src/shared/types' +import type { DiffReviewScope } from '../../../src/shared/diff-comment-types' import type { MobileGitStagingArea } from '../source-control/mobile-git-status' import { createMobileDiffReviewFileKey, diff --git a/mobile/src/session/mobile-diff-review-queue.test.ts b/mobile/src/session/mobile-diff-review-queue.test.ts index 551f378d142..1286e22cce4 100644 --- a/mobile/src/session/mobile-diff-review-queue.test.ts +++ b/mobile/src/session/mobile-diff-review-queue.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/types' +import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/diff-comment-types' import type { MobileGitBranchChangeEntry } from '../source-control/mobile-branch-compare' import type { MobileGitStatusEntry } from '../source-control/mobile-git-status' import { diff --git a/mobile/src/session/mobile-diff-review-queue.ts b/mobile/src/session/mobile-diff-review-queue.ts index a87c56dab3b..f66c7c04bb7 100644 --- a/mobile/src/session/mobile-diff-review-queue.ts +++ b/mobile/src/session/mobile-diff-review-queue.ts @@ -1,4 +1,8 @@ -import type { DiffComment, DiffReviewScope, MobileDiffReviewState } from '../../../src/shared/types' +import type { + DiffComment, + DiffReviewScope, + MobileDiffReviewState +} from '../../../src/shared/diff-comment-types' import type { MobileGitBranchChangeEntry } from '../source-control/mobile-branch-compare' import { isMobileGitDiscardableEntry, diff --git a/mobile/src/session/mobile-diff-review-screen-model.ts b/mobile/src/session/mobile-diff-review-screen-model.ts index f8f1ceedf99..ecf09bf3efb 100644 --- a/mobile/src/session/mobile-diff-review-screen-model.ts +++ b/mobile/src/session/mobile-diff-review-screen-model.ts @@ -1,4 +1,4 @@ -import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/types' +import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/diff-comment-types' import type { MobileGitBranchCompareResult } from '../source-control/mobile-branch-compare' import type { MobileGitStatusResult } from '../source-control/mobile-git-status' import type { MobileDiffLine } from './mobile-diff-lines' diff --git a/mobile/src/session/mobile-diff-review-state.ts b/mobile/src/session/mobile-diff-review-state.ts index a9680a66df5..01361b9dfb9 100644 --- a/mobile/src/session/mobile-diff-review-state.ts +++ b/mobile/src/session/mobile-diff-review-state.ts @@ -2,7 +2,7 @@ import type { DiffReviewScope, MobileDiffReviewFileState, MobileDiffReviewState -} from '../../../src/shared/types' +} from '../../../src/shared/diff-comment-types' export type MobileDiffReviewFileDescriptor = { key: string diff --git a/mobile/src/session/mobile-new-tab-agent-options.ts b/mobile/src/session/mobile-new-tab-agent-options.ts index 51de5b610f2..82e06bd8f30 100644 --- a/mobile/src/session/mobile-new-tab-agent-options.ts +++ b/mobile/src/session/mobile-new-tab-agent-options.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { filterEnabledMobileTuiAgents, isMobileTuiAgent, diff --git a/mobile/src/session/mobile-pr-sidebar-state.ts b/mobile/src/session/mobile-pr-sidebar-state.ts index 1b4d9a1b50b..4ec65a7e2d7 100644 --- a/mobile/src/session/mobile-pr-sidebar-state.ts +++ b/mobile/src/session/mobile-pr-sidebar-state.ts @@ -1,4 +1,6 @@ -import type { GitHubWorkItemDetails, PRCheckDetail, PRInfo } from '../../../src/shared/types' +import type { PRCheckDetail } from '../../../src/shared/github/check-types' +import type { PRInfo } from '../../../src/shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../src/shared/github/work-item-types' import type { GitHubPrReadOutcome, GitHubPrRepoSlug } from './github-pr-rpc' import { resolveLinkedPrNumber } from './mobile-pr-sidebar-resolve' diff --git a/mobile/src/session/mobile-session-route-types.ts b/mobile/src/session/mobile-session-route-types.ts index 7e74a5d04c0..65d4d14d3fe 100644 --- a/mobile/src/session/mobile-session-route-types.ts +++ b/mobile/src/session/mobile-session-route-types.ts @@ -1,4 +1,5 @@ -import type { DiffComment, TuiAgent } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import type { AgentStatusEntry } from '../../../src/shared/agent-status-types' import type { MobileBrowserTab } from '../browser/MobileBrowserPane' import type { MobileTerminalTheme } from '../terminal/terminal-webview-contract' diff --git a/mobile/src/session/mobile-terminal-tab-agent.test.ts b/mobile/src/session/mobile-terminal-tab-agent.test.ts index 8449f988e24..db6d95c228e 100644 --- a/mobile/src/session/mobile-terminal-tab-agent.test.ts +++ b/mobile/src/session/mobile-terminal-tab-agent.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../src/shared/agent-status-types' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import type { MobileSessionTab } from './mobile-session-route-types' import { getMobileSessionTabTitle, diff --git a/mobile/src/session/mobile-terminal-tab-agent.ts b/mobile/src/session/mobile-terminal-tab-agent.ts index 731d5bf4a24..f28d9b3fd98 100644 --- a/mobile/src/session/mobile-terminal-tab-agent.ts +++ b/mobile/src/session/mobile-terminal-tab-agent.ts @@ -1,7 +1,7 @@ import { stripLeadingAgentTitleDecorationOrEmpty } from '../../../src/shared/agent-title-decoration' import { resolveExplicitTerminalTitleAgentType } from '../../../src/shared/terminal-title-agent-type' import type { AgentStatusEntry } from '../../../src/shared/agent-status-types' -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { isBlankBrowserUrl } from '../browser/browser-url' import type { MobileSessionTab } from './mobile-session-route-types' diff --git a/mobile/src/session/pr-action-mutation-contract.ts b/mobile/src/session/pr-action-mutation-contract.ts index a2fcdb271df..0cc8b29b109 100644 --- a/mobile/src/session/pr-action-mutation-contract.ts +++ b/mobile/src/session/pr-action-mutation-contract.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod } from '../../../src/shared/types' +import type { GitHubPRMergeMethod } from '../../../src/shared/github/pull-request-types' import type { GitHubPrMutationOutcome } from './github-pr-mutations' import type { GitHubPrRepoSlug } from './github-pr-rpc' diff --git a/mobile/src/session/pr-actions-engine.ts b/mobile/src/session/pr-actions-engine.ts index cc5bfde80a3..18058c71c26 100644 --- a/mobile/src/session/pr-actions-engine.ts +++ b/mobile/src/session/pr-actions-engine.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod, PRState } from '../../../src/shared/types' +import type { GitHubPRMergeMethod, PRState } from '../../../src/shared/github/pull-request-types' import { githubRepoIdentityKey } from '../../../src/shared/github/repository-identity-key' import { classifyPrSidebarFailure } from './mobile-pr-sidebar-state' import { createOptimisticField, type OptimisticField } from './optimistic-write-sequence' diff --git a/mobile/src/session/pr-ai-triage-prompt.test.ts b/mobile/src/session/pr-ai-triage-prompt.test.ts index 0ebd02f6a57..4ed8af5ff23 100644 --- a/mobile/src/session/pr-ai-triage-prompt.test.ts +++ b/mobile/src/session/pr-ai-triage-prompt.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail } from '../../../src/shared/types' +import type { PRCheckDetail } from '../../../src/shared/github/check-types' import { buildFixChecksPrompt, buildResolveConflictsPrompt, diff --git a/mobile/src/session/pr-ai-triage-prompt.ts b/mobile/src/session/pr-ai-triage-prompt.ts index b1dad03d82c..45fde38daa4 100644 --- a/mobile/src/session/pr-ai-triage-prompt.ts +++ b/mobile/src/session/pr-ai-triage-prompt.ts @@ -3,7 +3,7 @@ import { getBrokenChecks } from '../../../src/shared/pr-checks-fix-prompt' import { buildResolvePullRequestConflictsPrompt } from '../../../src/shared/source-control-conflict-prompts' -import type { PRCheckDetail } from '../../../src/shared/types' +import type { PRCheckDetail } from '../../../src/shared/github/check-types' // Pure prompt builders for the mobile PR sidebar's "Fix checks with AI" / // "Resolve conflicts with AI" triage actions. Kept free of React/native imports diff --git a/mobile/src/session/pr-comment-actions.test.ts b/mobile/src/session/pr-comment-actions.test.ts index bb6f1758b24..6f5d5778084 100644 --- a/mobile/src/session/pr-comment-actions.test.ts +++ b/mobile/src/session/pr-comment-actions.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from '../../../src/shared/types' +import type { PRComment } from '../../../src/shared/github/comment-types' import { buildAddRootCommentParams, buildDeleteCommentParams, diff --git a/mobile/src/session/pr-comment-actions.ts b/mobile/src/session/pr-comment-actions.ts index 012500c62da..0e4e8b8c39b 100644 --- a/mobile/src/session/pr-comment-actions.ts +++ b/mobile/src/session/pr-comment-actions.ts @@ -1,4 +1,5 @@ -import type { GitHubOwnerRepo, PRComment, PRState } from '../../../src/shared/types' +import type { PRComment } from '../../../src/shared/github/comment-types' +import type { GitHubOwnerRepo, PRState } from '../../../src/shared/github/pull-request-types' // Pure helpers for the interactive PR comment timeline (reply / resolve / add // root comment). Kept free of React/native imports so they unit-test under the diff --git a/mobile/src/session/pr-title-edit.ts b/mobile/src/session/pr-title-edit.ts index 9d62b5a0dcd..57cf0b28ac5 100644 --- a/mobile/src/session/pr-title-edit.ts +++ b/mobile/src/session/pr-title-edit.ts @@ -1,4 +1,4 @@ -import type { PRState } from '../../../src/shared/types' +import type { PRState } from '../../../src/shared/github/pull-request-types' // Pure helpers for the inline PR-title edit affordance. Kept free of React/native // imports so they unit-test under the node Vitest config, mirroring the other diff --git a/mobile/src/session/quick-command-draft.ts b/mobile/src/session/quick-command-draft.ts index 2afdcf74620..c1bf3fb5e35 100644 --- a/mobile/src/session/quick-command-draft.ts +++ b/mobile/src/session/quick-command-draft.ts @@ -1,9 +1,9 @@ import type { TerminalQuickCommand, TerminalQuickCommandAction, - TerminalQuickCommandScope, - TuiAgent -} from '../../../src/shared/types' + TerminalQuickCommandScope +} from '../../../src/shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { isAgentQuickCommand, MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH, diff --git a/mobile/src/session/use-mobile-diff-review-comment-actions.ts b/mobile/src/session/use-mobile-diff-review-comment-actions.ts index 252eaf0843e..730f1e83354 100644 --- a/mobile/src/session/use-mobile-diff-review-comment-actions.ts +++ b/mobile/src/session/use-mobile-diff-review-comment-actions.ts @@ -1,5 +1,5 @@ import { useCallback, type Dispatch, type SetStateAction } from 'react' -import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/types' +import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/diff-comment-types' import { triggerError, triggerSuccess } from '../platform/haptics' import type { ConnectionState } from '../transport/types' import type { RpcClient } from '../transport/rpc-client' diff --git a/mobile/src/session/use-mobile-diff-review-controller.ts b/mobile/src/session/use-mobile-diff-review-controller.ts index d57276f1f43..03f4b5711a9 100644 --- a/mobile/src/session/use-mobile-diff-review-controller.ts +++ b/mobile/src/session/use-mobile-diff-review-controller.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import type { FlatList } from 'react-native' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import type { ConnectionState } from '../transport/types' import type { RpcClient } from '../transport/rpc-client' import { getWorktreeLabel } from './worktree-label' diff --git a/mobile/src/session/use-mobile-diff-review-send-actions.test.ts b/mobile/src/session/use-mobile-diff-review-send-actions.test.ts index 1d06190948c..d84fa008be4 100644 --- a/mobile/src/session/use-mobile-diff-review-send-actions.test.ts +++ b/mobile/src/session/use-mobile-diff-review-send-actions.test.ts @@ -1,7 +1,7 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { DiffComment } from '../../../src/shared/types' +import type { DiffComment } from '../../../src/shared/diff-comment-types' import type { RpcClient } from '../transport/rpc-client' import type { ReviewScreenState } from './mobile-diff-review-screen-model' import { diff --git a/mobile/src/session/use-mobile-diff-review-send-actions.ts b/mobile/src/session/use-mobile-diff-review-send-actions.ts index 0867a3884b3..40423f95664 100644 --- a/mobile/src/session/use-mobile-diff-review-send-actions.ts +++ b/mobile/src/session/use-mobile-diff-review-send-actions.ts @@ -1,6 +1,6 @@ import { useCallback, type Dispatch, type SetStateAction } from 'react' import * as Clipboard from 'expo-clipboard' -import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/types' +import type { DiffComment, MobileDiffReviewState } from '../../../src/shared/diff-comment-types' import type { ConnectionState } from '../transport/types' import type { RpcClient } from '../transport/rpc-client' import { triggerSuccess } from '../platform/haptics' diff --git a/mobile/src/session/use-mobile-pr-comment-actions.ts b/mobile/src/session/use-mobile-pr-comment-actions.ts index 38096bad833..187dc32dbdb 100644 --- a/mobile/src/session/use-mobile-pr-comment-actions.ts +++ b/mobile/src/session/use-mobile-pr-comment-actions.ts @@ -1,5 +1,5 @@ import { useCallback, useMemo, useRef, useState } from 'react' -import type { PRComment } from '../../../src/shared/types' +import type { PRComment } from '../../../src/shared/github/comment-types' import type { ConnectionState } from '../transport/types' import type { RpcClient } from '../transport/rpc-client' import type { GitHubPrRepoSlug } from './github-pr-rpc' diff --git a/mobile/src/session/use-mobile-pr-sidebar-controller.test.ts b/mobile/src/session/use-mobile-pr-sidebar-controller.test.ts index f402f7b58ad..daf4d241fcc 100644 --- a/mobile/src/session/use-mobile-pr-sidebar-controller.test.ts +++ b/mobile/src/session/use-mobile-pr-sidebar-controller.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it, vi } from 'vitest' -import type { GitHubWorkItemDetails, PRCheckDetail, PRInfo } from '../../../src/shared/types' +import type { PRCheckDetail } from '../../../src/shared/github/check-types' +import type { PRInfo } from '../../../src/shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../src/shared/github/work-item-types' import type { HostedReviewInfo } from '../../../src/shared/hosted-review' import type { GitHubPrReadOutcome } from './github-pr-rpc' import { diff --git a/mobile/src/session/use-quick-commands.test.ts b/mobile/src/session/use-quick-commands.test.ts index a4f93b326fc..b375a20bd97 100644 --- a/mobile/src/session/use-quick-commands.test.ts +++ b/mobile/src/session/use-quick-commands.test.ts @@ -1,7 +1,7 @@ import { createElement } from 'react' import { act, create, type ReactTestRenderer } from 'react-test-renderer' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import type { RpcClient } from '../transport/rpc-client' import { LogicalClientCutoverError } from '../transport/stable-logical-rpc-client' import type { RpcResponse } from '../transport/types' diff --git a/mobile/src/session/use-quick-commands.ts b/mobile/src/session/use-quick-commands.ts index 6a6604a5c6f..6537551be7a 100644 --- a/mobile/src/session/use-quick-commands.ts +++ b/mobile/src/session/use-quick-commands.ts @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import type { RpcClient } from '../transport/rpc-client' import { isLogicalClientCutoverError } from '../transport/stable-logical-rpc-client' import type { RpcFailure, RpcResponse, RpcSuccess } from '../transport/types' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import { applyTerminalQuickCommandMutation, parseNormalizedTerminalQuickCommands, diff --git a/mobile/src/source-control/MobileGitHistoryList.tsx b/mobile/src/source-control/MobileGitHistoryList.tsx index dd1a626fdfb..457f0580156 100644 --- a/mobile/src/source-control/MobileGitHistoryList.tsx +++ b/mobile/src/source-control/MobileGitHistoryList.tsx @@ -11,7 +11,7 @@ import { type MobileCommitRow } from './mobile-git-history' import { resolveMobileHistoryScreenView } from './mobile-history-screen-state' -import type { GitBranchChangeEntry } from '../../../src/shared/types' +import type { GitBranchChangeEntry } from '../../../src/shared/git-diff-compare-types' type Props = { client: RpcClient | null diff --git a/mobile/src/source-control/mobile-branch-compare.test.ts b/mobile/src/source-control/mobile-branch-compare.test.ts index b96090faece..cb7a5d7e86a 100644 --- a/mobile/src/source-control/mobile-branch-compare.test.ts +++ b/mobile/src/source-control/mobile-branch-compare.test.ts @@ -1,5 +1,5 @@ import { describe, expect, expectTypeOf, it } from 'vitest' -import type { GitBranchCompareResult } from '../../../src/shared/types' +import type { GitBranchCompareResult } from '../../../src/shared/git-diff-compare-types' import { buildMobileBranchCompareSection, canOpenMobileBranchCompareDiff, diff --git a/mobile/src/source-control/mobile-branch-compare.ts b/mobile/src/source-control/mobile-branch-compare.ts index 060ee768ec4..228156b18b7 100644 --- a/mobile/src/source-control/mobile-branch-compare.ts +++ b/mobile/src/source-control/mobile-branch-compare.ts @@ -2,7 +2,7 @@ import type { GitBranchChangeEntry, GitBranchCompareResult, GitBranchCompareSummary -} from '../../../src/shared/types' +} from '../../../src/shared/git-diff-compare-types' export type MobileGitBranchChangeEntry = GitBranchChangeEntry export type MobileGitBranchCompareSummary = GitBranchCompareSummary diff --git a/mobile/src/source-control/mobile-pr-chip-summary.test.ts b/mobile/src/source-control/mobile-pr-chip-summary.test.ts index f9e21b31d73..36f04eb832c 100644 --- a/mobile/src/source-control/mobile-pr-chip-summary.test.ts +++ b/mobile/src/source-control/mobile-pr-chip-summary.test.ts @@ -1,5 +1,7 @@ import { describe, it, expect } from 'vitest' -import type { PRCheckDetail, PRComment, PRInfo } from '../../../src/shared/types' +import type { PRCheckDetail } from '../../../src/shared/github/check-types' +import type { PRComment } from '../../../src/shared/github/comment-types' +import type { PRInfo } from '../../../src/shared/github/pull-request-types' import type { PrSidebarState } from '../session/mobile-pr-sidebar-state' import { buildMobilePrChipSummary, countUnresolvedReviewThreads } from './mobile-pr-chip-summary' diff --git a/mobile/src/source-control/mobile-pr-chip-summary.ts b/mobile/src/source-control/mobile-pr-chip-summary.ts index c281d882b1c..d1d7adf7acf 100644 --- a/mobile/src/source-control/mobile-pr-chip-summary.ts +++ b/mobile/src/source-control/mobile-pr-chip-summary.ts @@ -1,4 +1,4 @@ -import type { PRComment } from '../../../src/shared/types' +import type { PRComment } from '../../../src/shared/github/comment-types' import type { PrSidebarState } from '../session/mobile-pr-sidebar-state' import { summarizeProviderChecks } from '../../../src/shared/provider-check-summary' import { diff --git a/mobile/src/tasks/blank-workspace-create.ts b/mobile/src/tasks/blank-workspace-create.ts index 14c095a777e..a84ac55a3a1 100644 --- a/mobile/src/tasks/blank-workspace-create.ts +++ b/mobile/src/tasks/blank-workspace-create.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import type { RpcClient } from '../transport/rpc-client' import { createWorktreeWithNameRetry, type WorktreeCreateResult } from './worktree-create-retry' import { diff --git a/mobile/src/tasks/composer-linked-work-item.test.ts b/mobile/src/tasks/composer-linked-work-item.test.ts index d08d1388a0e..f3ce9299e92 100644 --- a/mobile/src/tasks/composer-linked-work-item.test.ts +++ b/mobile/src/tasks/composer-linked-work-item.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { GitHubWorkItem, GitLabWorkItem, LinearIssue } from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' +import type { LinearIssue } from '../../../src/shared/linear/issue-types' import { buildGitHubLinkedWorkItem, buildGitLabLinkedWorkItem, diff --git a/mobile/src/tasks/composer-linked-work-item.ts b/mobile/src/tasks/composer-linked-work-item.ts index ed2bc4dbf2d..13d5c845b37 100644 --- a/mobile/src/tasks/composer-linked-work-item.ts +++ b/mobile/src/tasks/composer-linked-work-item.ts @@ -1,4 +1,6 @@ -import type { GitHubWorkItem, GitLabWorkItem, LinearIssue } from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' +import type { LinearIssue } from '../../../src/shared/linear/issue-types' import { getLinearIssueWorkspaceName } from '../../../src/shared/workspace-name' import { buildGitHubWorkspaceSource, diff --git a/mobile/src/tasks/composer-source-base-resolve.ts b/mobile/src/tasks/composer-source-base-resolve.ts index 73c7eaa1839..423c3b05294 100644 --- a/mobile/src/tasks/composer-source-base-resolve.ts +++ b/mobile/src/tasks/composer-source-base-resolve.ts @@ -1,6 +1,6 @@ import type { RpcClient } from '../transport/rpc-client' import type { RpcSuccess } from '../transport/types' -import type { GitHubPrStartPoint } from '../../../src/shared/types' +import type { GitHubPrStartPoint } from '../../../src/shared/worktree/types' // The resolved start point for a linked PR/MR: the base branch to create from // plus the optional review-compare ref, push target, and exact branch name. diff --git a/mobile/src/tasks/github-check-summary.test.ts b/mobile/src/tasks/github-check-summary.test.ts index 3eafcc7661d..8abdee4c7dd 100644 --- a/mobile/src/tasks/github-check-summary.test.ts +++ b/mobile/src/tasks/github-check-summary.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { buildGitHubCheckSummary, type GitHubCheckLike } from './github-check-summary' import { buildGitLabCheckSummary } from './gitlab-check-summary' import { summarizeProviderChecks } from '../../../src/shared/provider-check-summary' -import type { ProviderCheckSummary } from '../../../src/shared/types' +import type { ProviderCheckSummary } from '../../../src/shared/github/pull-request-types' describe('buildGitHubCheckSummary', () => { it('returns none for empty check lists', () => { diff --git a/mobile/src/tasks/github-check-summary.ts b/mobile/src/tasks/github-check-summary.ts index 8a69db32291..413c41c7c31 100644 --- a/mobile/src/tasks/github-check-summary.ts +++ b/mobile/src/tasks/github-check-summary.ts @@ -1,5 +1,5 @@ import { summarizeProviderChecks } from '../../../src/shared/provider-check-summary' -import type { ProviderCheckSummary } from '../../../src/shared/types' +import type { ProviderCheckSummary } from '../../../src/shared/github/pull-request-types' export type GitHubCheckLike = { status: string diff --git a/mobile/src/tasks/gitlab-check-summary.ts b/mobile/src/tasks/gitlab-check-summary.ts index b5834a1d8b9..cdb82d543cd 100644 --- a/mobile/src/tasks/gitlab-check-summary.ts +++ b/mobile/src/tasks/gitlab-check-summary.ts @@ -3,7 +3,7 @@ import { mapGitLabPipelineJobStatusToConclusion } from '../../../src/shared/gitlab-pipeline-checks' import { summarizeProviderChecks } from '../../../src/shared/provider-check-summary' -import type { ProviderCheckSummary } from '../../../src/shared/types' +import type { ProviderCheckSummary } from '../../../src/shared/github/pull-request-types' type GitLabPipelineJobLike = { status: string } diff --git a/mobile/src/tasks/mobile-agent-catalog.ts b/mobile/src/tasks/mobile-agent-catalog.ts index 0f6e0e370a3..c5da71ee272 100644 --- a/mobile/src/tasks/mobile-agent-catalog.ts +++ b/mobile/src/tasks/mobile-agent-catalog.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { MOBILE_TUI_AGENT_AUTO_PICK_ORDER, MOBILE_TUI_AGENT_FAVICON_DOMAINS, diff --git a/mobile/src/tasks/mobile-hosted-check-status.ts b/mobile/src/tasks/mobile-hosted-check-status.ts index c1b6076c969..141e830dec1 100644 --- a/mobile/src/tasks/mobile-hosted-check-status.ts +++ b/mobile/src/tasks/mobile-hosted-check-status.ts @@ -1,4 +1,7 @@ -import type { ProviderCheckSummary, PRMergeableState } from '../../../src/shared/types' +import type { + PRMergeableState, + ProviderCheckSummary +} from '../../../src/shared/github/pull-request-types' import { getProviderChecksLabel } from '../../../src/shared/provider-check-summary' export type MobileHostedReviewStatus = { diff --git a/mobile/src/tasks/mobile-tui-agents.ts b/mobile/src/tasks/mobile-tui-agents.ts index 2da0184e0e7..598e762aa77 100644 --- a/mobile/src/tasks/mobile-tui-agents.ts +++ b/mobile/src/tasks/mobile-tui-agents.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' // Why: mobile tests run from the mobile package only, so runtime imports of // desktop shared modules can break Vitest transforms in CI. Keep this list diff --git a/mobile/src/tasks/setup-hook-trust.test.ts b/mobile/src/tasks/setup-hook-trust.test.ts index 0e2d91bb7ac..81222ce16ee 100644 --- a/mobile/src/tasks/setup-hook-trust.test.ts +++ b/mobile/src/tasks/setup-hook-trust.test.ts @@ -6,7 +6,7 @@ import { trustedOrcaHooksWithSetupApproval, wasSetupHookPreviouslyApproved } from './setup-hook-trust' -import type { PersistedTrustedOrcaHooks } from '../../../src/shared/types' +import type { PersistedTrustedOrcaHooks } from '../../../src/shared/orca-yaml-hook-types' import type { RpcClient } from '../transport/rpc-client' describe('setup hook trust', () => { diff --git a/mobile/src/tasks/setup-hook-trust.ts b/mobile/src/tasks/setup-hook-trust.ts index 04c52152f45..72381393989 100644 --- a/mobile/src/tasks/setup-hook-trust.ts +++ b/mobile/src/tasks/setup-hook-trust.ts @@ -1,4 +1,4 @@ -import type { PersistedTrustedOrcaHooks } from '../../../src/shared/types' +import type { PersistedTrustedOrcaHooks } from '../../../src/shared/orca-yaml-hook-types' import type { RpcClient } from '../transport/rpc-client' export type SetupHookTrust = { diff --git a/mobile/src/tasks/smart-source-fan-out.ts b/mobile/src/tasks/smart-source-fan-out.ts index e2217597ab9..3050effb7fc 100644 --- a/mobile/src/tasks/smart-source-fan-out.ts +++ b/mobile/src/tasks/smart-source-fan-out.ts @@ -1,9 +1,7 @@ -import type { - BaseRefSearchResult, - GitHubWorkItem, - GitLabWorkItem, - LinearIssue -} from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' +import type { LinearIssue } from '../../../src/shared/linear/issue-types' +import type { BaseRefSearchResult } from '../../../src/shared/repo-types' import { isSmartWorkspaceSourceQueryWithinLimit, type SmartNameMode diff --git a/mobile/src/tasks/smart-source-paste-intent.ts b/mobile/src/tasks/smart-source-paste-intent.ts index 534d36fd0f4..21afd4157de 100644 --- a/mobile/src/tasks/smart-source-paste-intent.ts +++ b/mobile/src/tasks/smart-source-paste-intent.ts @@ -1,4 +1,5 @@ -import type { GitHubWorkItem, GitLabWorkItem } from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' import { normalizeGitHubLinkQuery, parseGitHubIssueOrPRLink, diff --git a/mobile/src/tasks/smart-source-search-requests.ts b/mobile/src/tasks/smart-source-search-requests.ts index 5875cd4d642..876e2ef1a20 100644 --- a/mobile/src/tasks/smart-source-search-requests.ts +++ b/mobile/src/tasks/smart-source-search-requests.ts @@ -1,9 +1,7 @@ -import type { - BaseRefSearchResult, - GitHubWorkItem, - GitLabWorkItem, - LinearIssue -} from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' +import type { LinearIssue } from '../../../src/shared/linear/issue-types' +import type { BaseRefSearchResult } from '../../../src/shared/repo-types' import type { RpcClient } from '../transport/rpc-client' import type { RpcSuccess } from '../transport/types' import { extractLinearIssueReadItems } from './linear-mobile-issue-read' diff --git a/mobile/src/tasks/use-mobile-composer-source.ts b/mobile/src/tasks/use-mobile-composer-source.ts index 6785e2fe30b..5d6c373d454 100644 --- a/mobile/src/tasks/use-mobile-composer-source.ts +++ b/mobile/src/tasks/use-mobile-composer-source.ts @@ -1,5 +1,7 @@ import { useCallback, useMemo, useRef, useState } from 'react' -import type { GitHubWorkItem, GitLabWorkItem, LinearIssue } from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' +import type { LinearIssue } from '../../../src/shared/linear/issue-types' import { resolveComposerManualBranchNameChange } from '../../../src/shared/composer-branch-selection' import { resolveGitHubWorkItemIdentity } from '../../../src/shared/new-workspace/github-work-item-identity' import { getForkPushWarning } from '../../../src/shared/new-workspace/fork-push-warning' diff --git a/mobile/src/tasks/use-smart-workspace-source.ts b/mobile/src/tasks/use-smart-workspace-source.ts index 42edcd48e8a..86c6ca2204a 100644 --- a/mobile/src/tasks/use-smart-workspace-source.ts +++ b/mobile/src/tasks/use-smart-workspace-source.ts @@ -1,5 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import type { GitHubWorkItem, GitLabWorkItem } from '../../../src/shared/types' +import type { GitHubWorkItem } from '../../../src/shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../src/shared/gitlab-types' import { buildSmartWorkspaceSourceRows, getSmartWorkspaceEmptyHint, diff --git a/mobile/src/tasks/workspace-agent-selection.ts b/mobile/src/tasks/workspace-agent-selection.ts index da406452882..24dc376a663 100644 --- a/mobile/src/tasks/workspace-agent-selection.ts +++ b/mobile/src/tasks/workspace-agent-selection.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../src/shared/types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { filterEnabledMobileTuiAgents, isMobileTuiAgent, diff --git a/mobile/src/tasks/workspace-create-params.ts b/mobile/src/tasks/workspace-create-params.ts index 546f15efe75..8693944230a 100644 --- a/mobile/src/tasks/workspace-create-params.ts +++ b/mobile/src/tasks/workspace-create-params.ts @@ -1,9 +1,9 @@ +import type { TuiAgent } from '../../../src/shared/tui-agent' import type { CreateSparseCheckoutRequest, - GitPushTarget, - SetupDecision, - TuiAgent -} from '../../../src/shared/types' + SetupDecision +} from '../../../src/shared/worktree/create-types' +import type { GitPushTarget } from '../../../src/shared/worktree/types' import { getWorkspaceSourceName } from '../../../src/shared/new-workspace/workspace-source' import { resolveMobileWorkspaceCreateName } from './mobile-workspace-name' import type { WorkspaceAgentChoice } from './workspace-agent-selection' diff --git a/mobile/src/terminal/quick-commands.test.ts b/mobile/src/terminal/quick-commands.test.ts index 964fbc9b4d2..584dd8f4812 100644 --- a/mobile/src/terminal/quick-commands.test.ts +++ b/mobile/src/terminal/quick-commands.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalQuickCommand } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' import { buildMobileQuickCommandLaunch, getQuickCommandDisplayPreview, diff --git a/mobile/src/terminal/quick-commands.ts b/mobile/src/terminal/quick-commands.ts index d6e6b86caf3..625d2702bc7 100644 --- a/mobile/src/terminal/quick-commands.ts +++ b/mobile/src/terminal/quick-commands.ts @@ -1,4 +1,5 @@ -import type { TerminalQuickCommand, TuiAgent } from '../../../src/shared/types' +import type { TerminalQuickCommand } from '../../../src/shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../src/shared/tui-agent' import { applyTerminalQuickCommandMutation, flattenTerminalQuickCommand, diff --git a/mobile/src/worktree/mobile-workspace-statuses.ts b/mobile/src/worktree/mobile-workspace-statuses.ts index 2c1322d8258..1fedbb6ef73 100644 --- a/mobile/src/worktree/mobile-workspace-statuses.ts +++ b/mobile/src/worktree/mobile-workspace-statuses.ts @@ -1,4 +1,4 @@ -import type { WorkspaceStatusDefinition } from '../../../src/shared/types' +import type { WorkspaceStatusDefinition } from '../../../src/shared/worktree/types' export const DEFAULT_MOBILE_WORKSPACE_STATUS_ID = 'in-progress' diff --git a/mobile/src/worktree/use-workspace-sections.ts b/mobile/src/worktree/use-workspace-sections.ts index bc30bc3f91e..d28546b80bb 100644 --- a/mobile/src/worktree/use-workspace-sections.ts +++ b/mobile/src/worktree/use-workspace-sections.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import type { WorkspaceStatusDefinition } from '../../../src/shared/types' +import type { WorkspaceStatusDefinition } from '../../../src/shared/worktree/types' import type { MobileGroupMode, MobileSortMode } from './workspace-view-settings' import { buildSections, diff --git a/mobile/src/worktree/workspace-list-sections.ts b/mobile/src/worktree/workspace-list-sections.ts index d798a7fe5fa..2ff06f4fee3 100644 --- a/mobile/src/worktree/workspace-list-sections.ts +++ b/mobile/src/worktree/workspace-list-sections.ts @@ -1,4 +1,4 @@ -import type { WorkspaceStatusDefinition } from '../../../src/shared/types' +import type { WorkspaceStatusDefinition } from '../../../src/shared/worktree/types' import { DEFAULT_MOBILE_WORKSPACE_STATUSES, coerceMobileWorkspaceStatuses, diff --git a/mobile/src/worktree/workspace-view-settings.ts b/mobile/src/worktree/workspace-view-settings.ts index 32a4ac73a63..a90b54590d9 100644 --- a/mobile/src/worktree/workspace-view-settings.ts +++ b/mobile/src/worktree/workspace-view-settings.ts @@ -3,7 +3,7 @@ // RPCs). Keeping these settings in the same global store is what lets a grouping // or filter change on the phone show up on desktop and vice-versa. -import type { WorkspaceStatusDefinition } from '../../../src/shared/types' +import type { WorkspaceStatusDefinition } from '../../../src/shared/worktree/types' import { coerceMobileWorkspaceStatuses } from './mobile-workspace-statuses' export type MobileGroupMode = 'none' | 'workspaceStatus' | 'repo' | 'prStatus' diff --git a/src/cli/handlers/account.ts b/src/cli/handlers/account.ts index fd2c7b20402..0f7f95bc17e 100644 --- a/src/cli/handlers/account.ts +++ b/src/cli/handlers/account.ts @@ -23,7 +23,10 @@ import { } from '../../shared/windows-batch-spawn' import { ACCOUNT_IMPORT_RUNTIME_CAPABILITY } from '../../shared/protocol-version' import type { RuntimeStatus } from '../../shared/runtime-types' -import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState } from '../../shared/types' +import type { + ClaudeRateLimitAccountsState, + CodexRateLimitAccountsState +} from '../../shared/managed-account-types' import { type InteractiveLoginSession, withInteractiveLoginCleanup diff --git a/src/cli/handlers/agent-hooks.test.ts b/src/cli/handlers/agent-hooks.test.ts index c7f62461303..c42531364a8 100644 --- a/src/cli/handlers/agent-hooks.test.ts +++ b/src/cli/handlers/agent-hooks.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultPersistedState } from '../../shared/constants' -import type { PersistedState } from '../../shared/types' +import type { PersistedState } from '../../shared/persisted-state-types' const { applyAgentStatusHooksEnabledMock, diff --git a/src/cli/handlers/agent-hooks.ts b/src/cli/handlers/agent-hooks.ts index 800493f53c5..7e21c4973a2 100644 --- a/src/cli/handlers/agent-hooks.ts +++ b/src/cli/handlers/agent-hooks.ts @@ -13,7 +13,8 @@ import { import type { AgentHookInstallStatus } from '../../shared/agent-hook-types' import { getDefaultPersistedState } from '../../shared/constants' import { normalizeDisabledTuiAgents } from '../../shared/tui-agent-selection' -import type { GlobalSettings, PersistedState } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { PersistedState } from '../../shared/persisted-state-types' import { applyAgentStatusHooksEnabled, getManagedAgentHookStatuses, diff --git a/src/cli/handlers/automations.ts b/src/cli/handlers/automations.ts index cbbe7517a06..ab592504c00 100644 --- a/src/cli/handlers/automations.ts +++ b/src/cli/handlers/automations.ts @@ -13,7 +13,8 @@ import { type TaskSourceContext, type WorkspaceRunContext } from '../../shared/task-source-context' -import type { ProjectHostSetup, TuiAgent } from '../../shared/types' +import type { ProjectHostSetup } from '../../shared/project-types' +import type { TuiAgent } from '../../shared/tui-agent' import { DEFAULT_AUTOMATION_PRECHECK_TIMEOUT_SECONDS, MAX_AUTOMATION_PRECHECK_TIMEOUT_SECONDS diff --git a/src/cli/handlers/diagnostics.ts b/src/cli/handlers/diagnostics.ts index ca2ffc36855..340bd6afa16 100644 --- a/src/cli/handlers/diagnostics.ts +++ b/src/cli/handlers/diagnostics.ts @@ -1,4 +1,4 @@ -import type { MemorySnapshot } from '../../shared/types' +import type { MemorySnapshot } from '../../shared/process-stats-types' import type { CommandHandler } from '../dispatch' import { formatMemorySnapshot, printResult } from '../format' diff --git a/src/cli/handlers/project.ts b/src/cli/handlers/project.ts index cc5f32e2cd2..c3868001f4c 100644 --- a/src/cli/handlers/project.ts +++ b/src/cli/handlers/project.ts @@ -8,9 +8,9 @@ import type { ProjectHostSetupExistingFolderArgs, ProjectHostSetupResult, ProjectHostSetupUpdateArgs, - ProjectHostSetupUpdateResult, - RepoKind -} from '../../shared/types' + ProjectHostSetupUpdateResult +} from '../../shared/project-types' +import type { RepoKind } from '../../shared/repo-types' import type { CommandHandler } from '../dispatch' import { formatProjectHostSetupCreateResult, diff --git a/src/cli/handlers/vm.ts b/src/cli/handlers/vm.ts index e000ec15afe..1bffd99f00e 100644 --- a/src/cli/handlers/vm.ts +++ b/src/cli/handlers/vm.ts @@ -19,7 +19,7 @@ import { runEphemeralVmRecipeCleanup, runEphemeralVmRecipeStart } from '../../shared/ephemeral-vm-recipe-runner' -import type { OrcaVmRecipe } from '../../shared/types' +import type { OrcaVmRecipe } from '../../shared/orca-yaml-hook-types' export const VM_HANDLERS: Record = { 'vm recipe doctor': async ({ flags, cwd, json }) => { diff --git a/src/cli/project-format.ts b/src/cli/project-format.ts index d5569a0306b..82265411146 100644 --- a/src/cli/project-format.ts +++ b/src/cli/project-format.ts @@ -5,7 +5,7 @@ import type { ProjectHostSetupDeleteResult, ProjectHostSetupResult, ProjectHostSetupUpdateResult -} from '../shared/types' +} from '../shared/project-types' export function formatProjectList(result: { projects: Project[] }): string { if (result.projects.length === 0) { diff --git a/src/cli/workspace-format.ts b/src/cli/workspace-format.ts index 613e6f1ee7e..01dd0dbabcf 100644 --- a/src/cli/workspace-format.ts +++ b/src/cli/workspace-format.ts @@ -10,7 +10,7 @@ import type { RuntimeWorktreePsResult, RuntimeWorktreeRecord } from '../shared/runtime-types' -import type { MemorySnapshot, WorktreeMemory } from '../shared/types' +import type { MemorySnapshot, WorktreeMemory } from '../shared/process-stats-types' export function formatMemorySnapshot(snapshot: MemorySnapshot): string { const topWorktrees = [...snapshot.worktrees].sort((a, b) => b.memory - a.memory).slice(0, 10) diff --git a/src/cli/worktree-project-target.ts b/src/cli/worktree-project-target.ts index 6626270655a..6f4541f3783 100644 --- a/src/cli/worktree-project-target.ts +++ b/src/cli/worktree-project-target.ts @@ -1,4 +1,4 @@ -import type { ProjectHostSetup } from '../shared/types' +import type { ProjectHostSetup } from '../shared/project-types' import type { RuntimeClient } from './runtime-client' import { RuntimeClientError } from './runtime-client' diff --git a/src/main/active-view-preference.ts b/src/main/active-view-preference.ts index 5bd78b14713..eb6098f8c1d 100644 --- a/src/main/active-view-preference.ts +++ b/src/main/active-view-preference.ts @@ -1,7 +1,7 @@ import { mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs' import { mkdir, rename, rm, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' -import type { TopLevelView } from '../shared/types' +import type { TopLevelView } from '../shared/ui-chrome-types' import { isTopLevelView } from '../shared/top-level-view' const ACTIVE_VIEW_FILE_NAME = 'active-view.json' diff --git a/src/main/agent-hooks/first-work-branch-rename-test-harness.ts b/src/main/agent-hooks/first-work-branch-rename-test-harness.ts index 427e2539722..86276a038f5 100644 --- a/src/main/agent-hooks/first-work-branch-rename-test-harness.ts +++ b/src/main/agent-hooks/first-work-branch-rename-test-harness.ts @@ -1,5 +1,6 @@ import type { vi } from 'vitest' -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' import type { FirstWorkBranchRenameDeps, diff --git a/src/main/agent-hooks/first-work-branch-rename.test.ts b/src/main/agent-hooks/first-work-branch-rename.test.ts index 7690215eedb..cb1107a8622 100644 --- a/src/main/agent-hooks/first-work-branch-rename.test.ts +++ b/src/main/agent-hooks/first-work-branch-rename.test.ts @@ -1,5 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' const { diff --git a/src/main/agent-hooks/first-work-branch-rename.ts b/src/main/agent-hooks/first-work-branch-rename.ts index ea2614a344a..45f78e75e8a 100644 --- a/src/main/agent-hooks/first-work-branch-rename.ts +++ b/src/main/agent-hooks/first-work-branch-rename.ts @@ -1,5 +1,6 @@ // On first agent work in a fresh workspace, replace the auto-generated creature branch (e.g. `you/Nautilus`) with a short work-derived name. -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { getRepoIdFromWorktreeId, splitWorktreeIdForFilesystem } from '../../shared/worktree/id' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { parsePaneKey } from '../../shared/stable-pane-id' diff --git a/src/main/agent-hooks/first-work-folder-rename.test.ts b/src/main/agent-hooks/first-work-folder-rename.test.ts index e9a88921943..d8a8a54161e 100644 --- a/src/main/agent-hooks/first-work-folder-rename.test.ts +++ b/src/main/agent-hooks/first-work-folder-rename.test.ts @@ -1,5 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { renameWorktreeFolderOnFirstWork, type FirstWorkFolderRenameDeps diff --git a/src/main/agent-hooks/first-work-folder-rename.ts b/src/main/agent-hooks/first-work-folder-rename.ts index 79b3f98493e..df1a46b53ee 100644 --- a/src/main/agent-hooks/first-work-folder-rename.ts +++ b/src/main/agent-hooks/first-work-folder-rename.ts @@ -5,7 +5,8 @@ // worktree identity so meta, tabs, and the live PTY session carry over. It is // best-effort and local-only — remote/Windows/locked/dest-taken all degrade to // "folder kept" without disturbing the rename that already succeeded. -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR, getRepoIdFromWorktreeId, diff --git a/src/main/agent-hooks/local-agent-cli-presence.ts b/src/main/agent-hooks/local-agent-cli-presence.ts index 256e6520456..5810362c27a 100644 --- a/src/main/agent-hooks/local-agent-cli-presence.ts +++ b/src/main/agent-hooks/local-agent-cli-presence.ts @@ -9,7 +9,7 @@ import { isSafeExecutableBasename } from '../../shared/managed-agent-command-token' import type { ManagedAgentHookTarget } from '../../shared/managed-agent-hook-targets' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { hydrateShellPath, mergePathSegments } from '../startup/hydrate-shell-path' export type LocalCliPresenceState = 'found' | 'missing' | 'unknown' diff --git a/src/main/agent-hooks/managed-agent-hook-controls.ts b/src/main/agent-hooks/managed-agent-hook-controls.ts index e99f5659339..6f9f969668c 100644 --- a/src/main/agent-hooks/managed-agent-hook-controls.ts +++ b/src/main/agent-hooks/managed-agent-hook-controls.ts @@ -4,7 +4,7 @@ import { isManagedAgentHookTarget } from '../../shared/managed-agent-hook-targets' import { normalizeDisabledTuiAgents } from '../../shared/tui-agent-selection' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { detectLocalManagedAgentCliPresence } from './local-agent-cli-presence' import { MANAGED_AGENT_HOOK_INSTALLERS, diff --git a/src/main/agent-hooks/managed-hook-detection-commands.ts b/src/main/agent-hooks/managed-hook-detection-commands.ts index b7358807801..2200d183c2e 100644 --- a/src/main/agent-hooks/managed-hook-detection-commands.ts +++ b/src/main/agent-hooks/managed-hook-detection-commands.ts @@ -5,7 +5,7 @@ import { } from '../../shared/managed-agent-command-token' import { MANAGED_AGENT_HOOK_TARGETS } from '../../shared/managed-agent-hook-targets' import { normalizeDisabledTuiAgents } from '../../shared/tui-agent-selection' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { TuiAgentDetectionCommand } from '../ipc/tui-agent-detection-commands' export type ManagedHookDetectionSettings = Partial< diff --git a/src/main/agent-hooks/restored-subagent-liveness-sweep.ts b/src/main/agent-hooks/restored-subagent-liveness-sweep.ts index e44a47f11d0..3402ab7bf5b 100644 --- a/src/main/agent-hooks/restored-subagent-liveness-sweep.ts +++ b/src/main/agent-hooks/restored-subagent-liveness-sweep.ts @@ -4,7 +4,8 @@ import { toSshExecutionHostId, type ExecutionHostId } from '../../shared/execution-host' -import type { FolderWorkspace, ProjectGroup } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { parseWorkspaceKey } from '../../shared/workspace-scope' diff --git a/src/main/agent-hooks/server.ts b/src/main/agent-hooks/server.ts index 8a10080168c..71495245bb1 100644 --- a/src/main/agent-hooks/server.ts +++ b/src/main/agent-hooks/server.ts @@ -76,7 +76,7 @@ import { type AgentQuestionAnsweredInferenceRequest } from '../../shared/agent-question-answered-intent' import { parseLegacyNumericPaneKey, parsePaneKey } from '../../shared/stable-pane-id' -import type { LegacyPaneKeyAliasEntry } from '../../shared/types' +import type { LegacyPaneKeyAliasEntry } from '../../shared/persisted-state-types' import { getAgentResumeArgv, normalizeAgentProviderSession, diff --git a/src/main/ai-vault/remote-session-scanner-test-fixtures.ts b/src/main/ai-vault/remote-session-scanner-test-fixtures.ts index c3496590168..b113a298f84 100644 --- a/src/main/ai-vault/remote-session-scanner-test-fixtures.ts +++ b/src/main/ai-vault/remote-session-scanner-test-fixtures.ts @@ -1,4 +1,4 @@ -import type { DirEntry } from '../../shared/types' +import type { DirEntry } from '../../shared/filesystem-entry-types' import type { FileReadResult, FileStat, IFilesystemProvider } from '../providers/types' // Shared by the remote AI Vault scanner suites: an in-memory filesystem whose diff --git a/src/main/automations/headless-workspace-create.test.ts b/src/main/automations/headless-workspace-create.test.ts index b29496eb283..3e25ad87440 100644 --- a/src/main/automations/headless-workspace-create.test.ts +++ b/src/main/automations/headless-workspace-create.test.ts @@ -1,7 +1,7 @@ import path from 'node:path' import { describe, expect, it } from 'vitest' import type { Automation } from '../../shared/automations-types' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { buildHeadlessAutomationWorktreeCreateArgs } from './headless-workspace-create' const repoPath = path.join('tmp', 'orca') diff --git a/src/main/automations/headless-workspace-create.ts b/src/main/automations/headless-workspace-create.ts index 7e6e2f43e18..2047a105c44 100644 --- a/src/main/automations/headless-workspace-create.ts +++ b/src/main/automations/headless-workspace-create.ts @@ -1,6 +1,6 @@ import type { Automation, AutomationRun } from '../../shared/automations-types' import { buildAutomationWorkspaceProvenance } from '../../shared/automation-workspace-provenance' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { OrcaRuntimeService } from '../runtime/orca-runtime' type HeadlessAutomationRunForWorkspace = Pick diff --git a/src/main/automations/run-target-resolution.test.ts b/src/main/automations/run-target-resolution.test.ts index 6e48fb0aac0..73820e316c8 100644 --- a/src/main/automations/run-target-resolution.test.ts +++ b/src/main/automations/run-target-resolution.test.ts @@ -2,7 +2,8 @@ import { describe, expect, it } from 'vitest' import type { Store } from '../persistence' import type { Automation } from '../../shared/automations-types' import type { WorkspaceRunContext } from '../../shared/task-source-context' -import type { ProjectHostSetup, Repo } from '../../shared/types' +import type { ProjectHostSetup } from '../../shared/project-types' +import type { Repo } from '../../shared/repo-types' import { resolveAutomationRunTarget } from './run-target-resolution' function makeRepo(overrides: Partial = {}): Repo { diff --git a/src/main/automations/run-target-resolution.ts b/src/main/automations/run-target-resolution.ts index 1168bf8fb6a..fcd96007ea0 100644 --- a/src/main/automations/run-target-resolution.ts +++ b/src/main/automations/run-target-resolution.ts @@ -2,7 +2,8 @@ import type { Store } from '../persistence' import type { Automation } from '../../shared/automations-types' import { getAutomationLegacyRepoId } from '../../shared/automation-run-identity' import { getRepoExecutionHostId, parseExecutionHostId } from '../../shared/execution-host' -import type { ProjectHostSetup, Repo } from '../../shared/types' +import type { ProjectHostSetup } from '../../shared/project-types' +import type { Repo } from '../../shared/repo-types' import { splitWorktreeIdForFilesystem } from '../../shared/worktree/id' export type AutomationRunTargetResult = diff --git a/src/main/automations/service-precheck.test.ts b/src/main/automations/service-precheck.test.ts index 49122511184..a9f7d336b78 100644 --- a/src/main/automations/service-precheck.test.ts +++ b/src/main/automations/service-precheck.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { mkdtempSync, rmSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { AutomationService } from './service' const runAutomationPrecheckMock = vi.hoisted(() => vi.fn()) diff --git a/src/main/automations/service.test.ts b/src/main/automations/service.test.ts index 1c9c314b41b..27f96400258 100644 --- a/src/main/automations/service.test.ts +++ b/src/main/automations/service.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { mkdtempSync, rmSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { toRuntimeExecutionHostId } from '../../shared/execution-host' import { AutomationService } from './service' diff --git a/src/main/automations/workspace-provenance.ts b/src/main/automations/workspace-provenance.ts index 44936edc888..8174ca11293 100644 --- a/src/main/automations/workspace-provenance.ts +++ b/src/main/automations/workspace-provenance.ts @@ -2,11 +2,11 @@ import { z } from 'zod' import type { Automation, AutomationRun } from '../../shared/automations-types' import { getAutomationRunRepoId } from '../../shared/automation-run-identity' import { buildAutomationWorkspaceProvenance } from '../../shared/automation-workspace-provenance' +import type { Repo } from '../../shared/repo-types' import type { AutomationWorkspaceProvenance, - AutomationWorkspaceProvenanceRequest, - Repo -} from '../../shared/types' + AutomationWorkspaceProvenanceRequest +} from '../../shared/worktree/types' import { beginAutomationDispatchTokenUse, finishAutomationDispatchTokenUse, diff --git a/src/main/azure-devops/pull-request-mappers.ts b/src/main/azure-devops/pull-request-mappers.ts index 062a99fa0b4..132f98260cf 100644 --- a/src/main/azure-devops/pull-request-mappers.ts +++ b/src/main/azure-devops/pull-request-mappers.ts @@ -1,4 +1,4 @@ -import type { CheckStatus, PRMergeableState } from '../../shared/types' +import type { CheckStatus, PRMergeableState } from '../../shared/github/pull-request-types' export type RawAzureDevOpsStatus = { state?: string | null diff --git a/src/main/bitbucket/client.ts b/src/main/bitbucket/client.ts index deb856a66d1..86c22aeb193 100644 --- a/src/main/bitbucket/client.ts +++ b/src/main/bitbucket/client.ts @@ -1,4 +1,4 @@ -import type { CheckStatus } from '../../shared/types' +import type { CheckStatus } from '../../shared/github/pull-request-types' import { deriveBitbucketBuildStatus, mapBitbucketPullRequest, diff --git a/src/main/bitbucket/pull-request-mappers.ts b/src/main/bitbucket/pull-request-mappers.ts index 4f68c320235..7b9c5a07e84 100644 --- a/src/main/bitbucket/pull-request-mappers.ts +++ b/src/main/bitbucket/pull-request-mappers.ts @@ -1,4 +1,4 @@ -import type { CheckStatus, PRMergeableState } from '../../shared/types' +import type { CheckStatus, PRMergeableState } from '../../shared/github/pull-request-types' export type RawBitbucketPullRequest = { id?: number diff --git a/src/main/browser/browser-backend.ts b/src/main/browser/browser-backend.ts index 697eb7c178f..939684e49b3 100644 --- a/src/main/browser/browser-backend.ts +++ b/src/main/browser/browser-backend.ts @@ -10,6 +10,7 @@ export type BrowserBackendCreateTab = { url: string worktreeId?: string profileId?: string + browserPageId?: string } export type BrowserBackend = { diff --git a/src/main/browser/browser-certificate-challenge.ts b/src/main/browser/browser-certificate-challenge.ts index 2e49685b5d3..94c1192a887 100644 --- a/src/main/browser/browser-certificate-challenge.ts +++ b/src/main/browser/browser-certificate-challenge.ts @@ -1,4 +1,4 @@ -import type { BrowserCertificateFailure } from '../../shared/types' +import type { BrowserCertificateFailure } from '../../shared/browser-workspace-types' import { SUPPORTED_CERTIFICATE_ERROR_CODE } from './browser-certificate-identity' export const CERTIFICATE_CHALLENGE_TTL_MS = 5 * 60_000 diff --git a/src/main/browser/browser-certificate-trust-controller.ts b/src/main/browser/browser-certificate-trust-controller.ts index 53d4810e169..9a2fad879ed 100644 --- a/src/main/browser/browser-certificate-trust-controller.ts +++ b/src/main/browser/browser-certificate-trust-controller.ts @@ -1,5 +1,8 @@ import { randomUUID } from 'node:crypto' -import type { BrowserCertificateFailure, BrowserCertificateProceedResult } from '../../shared/types' +import type { + BrowserCertificateFailure, + BrowserCertificateProceedResult +} from '../../shared/browser-workspace-types' import { isEligibleLocalCertificateHost, toSecureCertificateEndpoint diff --git a/src/main/browser/browser-cookie-import.ts b/src/main/browser/browser-cookie-import.ts index e841f3168d8..b54badd0593 100644 --- a/src/main/browser/browser-cookie-import.ts +++ b/src/main/browser/browser-cookie-import.ts @@ -72,7 +72,7 @@ import type { BrowserCookieImportResult, BrowserCookieImportSummary, BrowserSessionProfileSource -} from '../../shared/types' +} from '../../shared/browser-workspace-types' import { browserSessionRegistry } from './browser-session-registry' import { isGoogleSourceBoundCookie, diff --git a/src/main/browser/browser-manager.ts b/src/main/browser/browser-manager.ts index fbcac378412..0b10e9e189c 100644 --- a/src/main/browser/browser-manager.ts +++ b/src/main/browser/browser-manager.ts @@ -47,11 +47,11 @@ import { getBrowserSessionUserAgentMode } from './browser-session-user-agent-mod import { googleAuthUserAgent, isGoogleAuthUrl } from './browser-google-auth-ua' import { buildViewportUserAgentOverride } from './browser-viewport-user-agent' import type { - BrowserViewportOverride, BrowserCertificateFailure, BrowserLoadError, - BrowserSessionUserAgentMode -} from '../../shared/types' + BrowserSessionUserAgentMode, + BrowserViewportOverride +} from '../../shared/browser-workspace-types' import { type BrowserAnnotationViewportBridgeOptions, BROWSER_ANNOTATION_VIEWPORT_BRIDGE_WORLD_ID, diff --git a/src/main/browser/browser-session-registry.ts b/src/main/browser/browser-session-registry.ts index b0b477a8ef8..79296a0cdbf 100644 --- a/src/main/browser/browser-session-registry.ts +++ b/src/main/browser/browser-session-registry.ts @@ -22,7 +22,7 @@ import type { BrowserSessionProfile, BrowserSessionProfileCreateOptions, BrowserSessionProfileScope -} from '../../shared/types' +} from '../../shared/browser-workspace-types' import { browserManager } from './browser-manager' import { hasSystemMediaAccess, requestSystemMediaAccess } from './browser-media-access' import { cleanElectronUserAgent, setupClientHintsOverride } from './browser-session-ua' diff --git a/src/main/browser/browser-session-user-agent-mode.ts b/src/main/browser/browser-session-user-agent-mode.ts index 8fa8f71d1a9..94051d12ff7 100644 --- a/src/main/browser/browser-session-user-agent-mode.ts +++ b/src/main/browser/browser-session-user-agent-mode.ts @@ -1,6 +1,6 @@ import type { Session } from 'electron' -import type { BrowserSessionUserAgentMode } from '../../shared/types' +import type { BrowserSessionUserAgentMode } from '../../shared/browser-workspace-types' const userAgentModeBySession = new WeakMap() diff --git a/src/main/browser/offscreen-browser-backend.ts b/src/main/browser/offscreen-browser-backend.ts index 5eb6e9b8435..64e96ede29d 100644 --- a/src/main/browser/offscreen-browser-backend.ts +++ b/src/main/browser/offscreen-browser-backend.ts @@ -23,7 +23,10 @@ export class OffscreenBrowserBackend implements BrowserBackend { constructor(private readonly browserManager: BrowserManager) {} async createTab(params: BrowserBackendCreateTab): Promise<{ browserPageId: string }> { - const browserPageId = randomUUID() + const browserPageId = params.browserPageId ?? randomUUID() + if (this.windowsByPageId.has(browserPageId)) { + throw new Error(`Browser page ${browserPageId} already exists`) + } // Why: profiles map to Electron partitions; using the profile's partition // makes cookies/storage persist in the same SQLite DB the desktop path uses. const profile = params.profileId diff --git a/src/main/claude-accounts/claude-duplicate-account.test.ts b/src/main/claude-accounts/claude-duplicate-account.test.ts index 23b2fd2f994..99ab959689a 100644 --- a/src/main/claude-accounts/claude-duplicate-account.test.ts +++ b/src/main/claude-accounts/claude-duplicate-account.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { ClaudeManagedAccount } from '../../shared/types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import { findDuplicateClaudeAccount, type ClaudeAccountIdentityCandidate diff --git a/src/main/claude-accounts/claude-duplicate-account.ts b/src/main/claude-accounts/claude-duplicate-account.ts index 55e57165541..4546556e5ac 100644 --- a/src/main/claude-accounts/claude-duplicate-account.ts +++ b/src/main/claude-accounts/claude-duplicate-account.ts @@ -1,4 +1,4 @@ -import type { ClaudeManagedAccount } from '../../shared/types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import { getClaudeWslSelectionKey } from './runtime-selection' export type ClaudeAccountIdentityCandidate = { diff --git a/src/main/claude-accounts/runtime-auth-service.test.ts b/src/main/claude-accounts/runtime-auth-service.test.ts index a78bc99ec1c..61dabbf3be9 100644 --- a/src/main/claude-accounts/runtime-auth-service.test.ts +++ b/src/main/claude-accounts/runtime-auth-service.test.ts @@ -15,7 +15,8 @@ import { import { tmpdir } from 'node:os' import { join } from 'node:path' import { getDefaultSettings } from '../../shared/constants' -import type { ClaudeManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import { isOauthTokenExpiring, refreshClaudeOauthCredentials } from './oauth-refresh' const originalPlatform = Object.getOwnPropertyDescriptor(process, 'platform') diff --git a/src/main/claude-accounts/runtime-auth-service.ts b/src/main/claude-accounts/runtime-auth-service.ts index 58328222528..a855f9c10ee 100644 --- a/src/main/claude-accounts/runtime-auth-service.ts +++ b/src/main/claude-accounts/runtime-auth-service.ts @@ -3,7 +3,7 @@ import { execFileSync } from 'node:child_process' import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs' import { dirname, join } from 'node:path' import { app } from 'electron' -import type { ClaudeManagedAccount } from '../../shared/types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import type { Store } from '../persistence' import { writeFileAtomically } from '../codex-accounts/fs-utils' import type { ClaudeEnvPatch } from './environment' diff --git a/src/main/claude-accounts/runtime-selection.test.ts b/src/main/claude-accounts/runtime-selection.test.ts index 997da720de1..b7f64aede99 100644 --- a/src/main/claude-accounts/runtime-selection.test.ts +++ b/src/main/claude-accounts/runtime-selection.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ClaudeManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import { getSelectedClaudeAccountIdForTarget, pruneInvalidClaudeRuntimeSelection, diff --git a/src/main/claude-accounts/runtime-selection.ts b/src/main/claude-accounts/runtime-selection.ts index 8f3a3a4397b..eda5b271cb5 100644 --- a/src/main/claude-accounts/runtime-selection.ts +++ b/src/main/claude-accounts/runtime-selection.ts @@ -1,8 +1,8 @@ +import type { GlobalSettings } from '../../shared/global-settings-types' import type { ClaudeManagedAccount, - ClaudeManagedAccountRuntimeSelection, - GlobalSettings -} from '../../shared/types' + ClaudeManagedAccountRuntimeSelection +} from '../../shared/managed-account-types' export type ClaudeAccountSelectionTarget = { runtime?: 'host' | 'wsl' diff --git a/src/main/claude-accounts/service.test.ts b/src/main/claude-accounts/service.test.ts index 6572bae7fca..0bff847063b 100644 --- a/src/main/claude-accounts/service.test.ts +++ b/src/main/claude-accounts/service.test.ts @@ -6,7 +6,7 @@ import { mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSyn import { tmpdir } from 'node:os' import { join } from 'node:path' import { PassThrough } from 'node:stream' -import type { ClaudeManagedAccount } from '../../shared/types' +import type { ClaudeManagedAccount } from '../../shared/managed-account-types' import { deleteActiveClaudeKeychainCredentialsStrict, readActiveClaudeKeychainCredentials, diff --git a/src/main/claude-accounts/service.ts b/src/main/claude-accounts/service.ts index 3e3a8ec5f47..6bb5dae1cca 100644 --- a/src/main/claude-accounts/service.ts +++ b/src/main/claude-accounts/service.ts @@ -9,7 +9,7 @@ import type { ClaudeManagedAccount, ClaudeManagedAccountSummary, ClaudeRateLimitAccountsState -} from '../../shared/types' +} from '../../shared/managed-account-types' import type { Store } from '../persistence' import type { RateLimitService } from '../rate-limits/service' import { resolveClaudeCommand } from '../codex-cli/command' diff --git a/src/main/codex-accounts/codex-auth-identity.ts b/src/main/codex-accounts/codex-auth-identity.ts index 5c62dbfe272..2bad1469536 100644 --- a/src/main/codex-accounts/codex-auth-identity.ts +++ b/src/main/codex-accounts/codex-auth-identity.ts @@ -1,4 +1,4 @@ -import type { CodexManagedAccount } from '../../shared/types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' type CodexAuthIdentity = { email: string | null diff --git a/src/main/codex-accounts/legacy-shared-auth-migration.test.ts b/src/main/codex-accounts/legacy-shared-auth-migration.test.ts index 353535fe3c9..8481ede1431 100644 --- a/src/main/codex-accounts/legacy-shared-auth-migration.test.ts +++ b/src/main/codex-accounts/legacy-shared-auth-migration.test.ts @@ -11,7 +11,7 @@ import { } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { CodexManagedAccount } from '../../shared/types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import type * as CodexAccountFs from './fs-utils' const writeFailure = vi.hoisted(() => ({ failNextAuthWrite: false })) diff --git a/src/main/codex-accounts/legacy-shared-auth-migration.ts b/src/main/codex-accounts/legacy-shared-auth-migration.ts index b21d858cf04..a9ecd4c2ea5 100644 --- a/src/main/codex-accounts/legacy-shared-auth-migration.ts +++ b/src/main/codex-accounts/legacy-shared-auth-migration.ts @@ -1,6 +1,6 @@ import { lstatSync, readFileSync } from 'node:fs' import { join } from 'node:path' -import type { CodexManagedAccount } from '../../shared/types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import { writeFileAtomically } from './fs-utils' import { assertOwnedHostCodexManagedHomePath } from './host-codex-managed-home-ownership' import { codexAuthMatchesManagedAccount, compareCodexAuthFreshness } from './codex-auth-identity' diff --git a/src/main/codex-accounts/managed-codex-auth-readiness.test.ts b/src/main/codex-accounts/managed-codex-auth-readiness.test.ts index abd6a4881ee..d65a9344acc 100644 --- a/src/main/codex-accounts/managed-codex-auth-readiness.test.ts +++ b/src/main/codex-accounts/managed-codex-auth-readiness.test.ts @@ -3,7 +3,8 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import { readStoredCodexCredentialState, waitForManagedCodexAuthReady diff --git a/src/main/codex-accounts/managed-codex-auth-readiness.ts b/src/main/codex-accounts/managed-codex-auth-readiness.ts index 5b7938ea30c..3aea6cbd526 100644 --- a/src/main/codex-accounts/managed-codex-auth-readiness.ts +++ b/src/main/codex-accounts/managed-codex-auth-readiness.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { CodexAccountSelectionTarget } from './runtime-selection' const AUTH_READY_TIMEOUT_MS = 1_500 diff --git a/src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts b/src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts index d137a65632e..d771ab9cbfd 100644 --- a/src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts +++ b/src/main/codex-accounts/runtime-home-mirrored-status-home.test.ts @@ -3,7 +3,8 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import type * as NodeOs from 'node:os' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' const testState = { userData: '', home: '' } const previousEnv: Record = {} diff --git a/src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts b/src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts index 0efe90bb77c..be9901799ac 100644 --- a/src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts +++ b/src/main/codex-accounts/runtime-home-service-per-account-migration.test.ts @@ -2,7 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import type * as NodeOs from 'node:os' import { readHookTrustEntries } from '../codex/config-toml-trust' diff --git a/src/main/codex-accounts/runtime-home-service.test.ts b/src/main/codex-accounts/runtime-home-service.test.ts index 639d690cb06..22f5be4d53a 100644 --- a/src/main/codex-accounts/runtime-home-service.test.ts +++ b/src/main/codex-accounts/runtime-home-service.test.ts @@ -16,7 +16,8 @@ import { } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import type * as ShellStartupEnv from '../pty/shell-startup-env' const testState = { diff --git a/src/main/codex-accounts/runtime-home-service.ts b/src/main/codex-accounts/runtime-home-service.ts index 2d4b8239aad..195e2a719df 100644 --- a/src/main/codex-accounts/runtime-home-service.ts +++ b/src/main/codex-accounts/runtime-home-service.ts @@ -28,7 +28,7 @@ import { win32 as pathWin32 } from 'node:path' import { app } from 'electron' -import type { CodexManagedAccount } from '../../shared/types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import type { Store } from '../persistence' import { WSL_CODEX_RUNTIME_HOME_SEGMENTS } from '../pty/codex-home-wsl-env' diff --git a/src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts b/src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts index 337aaaf5375..a299d32ee98 100644 --- a/src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts +++ b/src/main/codex-accounts/runtime-home-windows-profile-ownership.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { CodexRuntimeHomeService } from './runtime-home-service' const originalPlatform = Object.getOwnPropertyDescriptor(process, 'platform') diff --git a/src/main/codex-accounts/runtime-selection.test.ts b/src/main/codex-accounts/runtime-selection.test.ts index df98d20242b..bd007fdc3b4 100644 --- a/src/main/codex-accounts/runtime-selection.test.ts +++ b/src/main/codex-accounts/runtime-selection.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import { getSelectedCodexAccountIdForTarget, pruneInvalidCodexRuntimeSelection, diff --git a/src/main/codex-accounts/runtime-selection.ts b/src/main/codex-accounts/runtime-selection.ts index 5ac9f91b013..c60dbdb4c9d 100644 --- a/src/main/codex-accounts/runtime-selection.ts +++ b/src/main/codex-accounts/runtime-selection.ts @@ -1,8 +1,8 @@ +import type { GlobalSettings } from '../../shared/global-settings-types' import type { CodexManagedAccount, - CodexManagedAccountRuntimeSelection, - GlobalSettings -} from '../../shared/types' + CodexManagedAccountRuntimeSelection +} from '../../shared/managed-account-types' // Why: the renderer's switch-time lane guard has to key panes the same way a // launch does, so the lane vocabulary lives in shared rather than in main. import { diff --git a/src/main/codex-accounts/service.test.ts b/src/main/codex-accounts/service.test.ts index 789b864159b..d9a1c1125ff 100644 --- a/src/main/codex-accounts/service.test.ts +++ b/src/main/codex-accounts/service.test.ts @@ -14,7 +14,8 @@ import { import { tmpdir } from 'node:os' import { join } from 'node:path' import { PassThrough } from 'node:stream' -import type { CodexRateLimitAccountsState, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexRateLimitAccountsState } from '../../shared/managed-account-types' import type { ProviderRateLimits, RateLimitState } from '../../shared/rate-limit-types' import { buildCodexResetCreditExpectedScope } from '../../shared/codex-reset-credit-scope' import type { CodexResetCreditAttemptLedger } from '../../shared/codex-reset-credit-attempt-ledger' diff --git a/src/main/codex-accounts/service.ts b/src/main/codex-accounts/service.ts index eef834af323..54eaacef7ef 100644 --- a/src/main/codex-accounts/service.ts +++ b/src/main/codex-accounts/service.ts @@ -11,7 +11,7 @@ import type { CodexManagedAccountSummary, CodexRateLimitAccountsState, CodexSystemDefaultIdentity -} from '../../shared/types' +} from '../../shared/managed-account-types' import type { CodexRateLimitResetOutcome, CodexRateLimitResetResult, diff --git a/src/main/codex/codex-pane-launch-account.test.ts b/src/main/codex/codex-pane-launch-account.test.ts index 51a9a47508d..456b9bc08be 100644 --- a/src/main/codex/codex-pane-launch-account.test.ts +++ b/src/main/codex/codex-pane-launch-account.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { CodexManagedAccount, GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { CodexManagedAccount } from '../../shared/managed-account-types' import { resolveCodexPaneLaunchAccount } from './codex-pane-launch-account' const SYSTEM_HOME = '/Users/example/.codex' diff --git a/src/main/codex/codex-pane-launch-account.ts b/src/main/codex/codex-pane-launch-account.ts index 1bb3cca9c28..b99700da081 100644 --- a/src/main/codex/codex-pane-launch-account.ts +++ b/src/main/codex/codex-pane-launch-account.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { getCodexSelectionLaneKey, diff --git a/src/main/codex/codex-session-source-home.ts b/src/main/codex/codex-session-source-home.ts index 0060051e924..959cb7ab468 100644 --- a/src/main/codex/codex-session-source-home.ts +++ b/src/main/codex/codex-session-source-home.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' /** * Resolves the user-configured Codex *session history* source home, if any. diff --git a/src/main/codex/codex-stale-pane-accounts.test.ts b/src/main/codex/codex-stale-pane-accounts.test.ts index ebc953a4be7..bf2f7e5b5ea 100644 --- a/src/main/codex/codex-stale-pane-accounts.test.ts +++ b/src/main/codex/codex-stale-pane-accounts.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { _internals, forgetCodexPaneAccount, diff --git a/src/main/codex/codex-stale-pane-accounts.ts b/src/main/codex/codex-stale-pane-accounts.ts index b74529abc29..e3c63697cb9 100644 --- a/src/main/codex/codex-stale-pane-accounts.ts +++ b/src/main/codex/codex-stale-pane-accounts.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getSelectedCodexAccountIdForTarget } from '../codex-accounts/runtime-selection' import { forgetCodexPaneAccount, diff --git a/src/main/daemon/daemon-create-or-attach-result.ts b/src/main/daemon/daemon-create-or-attach-result.ts index d7a2ac64ba8..d6668342487 100644 --- a/src/main/daemon/daemon-create-or-attach-result.ts +++ b/src/main/daemon/daemon-create-or-attach-result.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { ShellReadyState, TerminalSnapshot } from './types' import type { AgentSessionClaimedSpawnResult } from '../../shared/agent-session-host-authority' import type { PtyIncarnationId } from '../../shared/pty-incarnation' diff --git a/src/main/daemon/pty-subprocess.ts b/src/main/daemon/pty-subprocess.ts index a6eade9f621..d529c883fee 100644 --- a/src/main/daemon/pty-subprocess.ts +++ b/src/main/daemon/pty-subprocess.ts @@ -69,7 +69,7 @@ import { parsePtySessionId } from './pty-session-id' import { getAgentForegroundContextPaths } from '../providers/agent-foreground-context-paths' import { assertSafeAgentStartupCwd, resolveSafePtyDefaultCwd } from '../providers/pty-default-cwd' import { ORCA_HERMES_STARTUP_QUERY_ENV } from '../../shared/hermes-startup-query' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import { expandWindowsEnvironmentVariables, expandWindowsPathEnvironmentVariables diff --git a/src/main/daemon/session.test.ts b/src/main/daemon/session.test.ts index c0c2a119618..2da1b700ec1 100644 --- a/src/main/daemon/session.test.ts +++ b/src/main/daemon/session.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { SESSION_FORCE_KILL_RETRY_MS, Session } from './session' import { HeadlessEmulator } from './headless-emulator' import type { SessionState, ShellReadyState } from './types' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' const killWithDescendantSweepMock = vi.hoisted(() => vi.fn()) vi.mock('../pty-descendant-termination', () => ({ diff --git a/src/main/daemon/session.ts b/src/main/daemon/session.ts index 840ea36449b..84eb7fef15d 100644 --- a/src/main/daemon/session.ts +++ b/src/main/daemon/session.ts @@ -19,7 +19,7 @@ import { } from '../shell-prompt-readiness-probe' import { isPowerShellProcess } from '../../shared/shell-process-detection' import { killWithDescendantSweep } from '../pty-descendant-termination' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import { randomUUID } from 'node:crypto' import { PhysicalExitTracker } from '../../shared/physical-exit-tracker' import { diff --git a/src/main/daemon/terminal-host-create-contract.ts b/src/main/daemon/terminal-host-create-contract.ts index 114aae91ad2..dce8d052cef 100644 --- a/src/main/daemon/terminal-host-create-contract.ts +++ b/src/main/daemon/terminal-host-create-contract.ts @@ -1,5 +1,5 @@ import type { StartupCommandDelivery } from '../../shared/codex-startup-delivery' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { ShellReadyState, TerminalSnapshot } from './types' import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' import type { diff --git a/src/main/daemon/terminal-host-options.ts b/src/main/daemon/terminal-host-options.ts index b483914bba3..241f333e815 100644 --- a/src/main/daemon/terminal-host-options.ts +++ b/src/main/daemon/terminal-host-options.ts @@ -1,5 +1,5 @@ import type { StartupCommandDelivery } from '../../shared/codex-startup-delivery' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { SubprocessHandle } from './session' import type { TakePendingOutputResult, TerminalSnapshot } from './types' diff --git a/src/main/daemon/terminal-host.test.ts b/src/main/daemon/terminal-host.test.ts index ea7302dcc6b..d324d080d42 100644 --- a/src/main/daemon/terminal-host.test.ts +++ b/src/main/daemon/terminal-host.test.ts @@ -6,7 +6,7 @@ import { type SubprocessHandle } from './session' import { TerminalHost } from './terminal-host' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' const killWithDescendantSweepMock = vi.hoisted(() => vi.fn()) vi.mock('../pty-descendant-termination', () => ({ diff --git a/src/main/daemon/types.ts b/src/main/daemon/types.ts index 3908b4508ac..09e96f6d1c7 100644 --- a/src/main/daemon/types.ts +++ b/src/main/daemon/types.ts @@ -12,7 +12,7 @@ export type { // ─── Protocol Version ──────────────────────────────────────────────── import type { StartupCommandDelivery } from '../../shared/codex-startup-delivery' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' import type { AgentSessionExecutionClaim, diff --git a/src/main/ephemeral-vm-recipe-runner.test.ts b/src/main/ephemeral-vm-recipe-runner.test.ts index f5c3f4fc9fa..239eebac97f 100644 --- a/src/main/ephemeral-vm-recipe-runner.test.ts +++ b/src/main/ephemeral-vm-recipe-runner.test.ts @@ -12,7 +12,7 @@ import { runEphemeralVmRecipeStart, runEphemeralVmRecipeSuspend } from './ephemeral-vm-recipe-runner' -import type { OrcaVmRecipe } from '../shared/types' +import type { OrcaVmRecipe } from '../shared/orca-yaml-hook-types' const tmpRoots: string[] = [] diff --git a/src/main/ephemeral-vm-runtime-service.test.ts b/src/main/ephemeral-vm-runtime-service.test.ts index 80cc500b284..b3516d0e791 100644 --- a/src/main/ephemeral-vm-runtime-service.test.ts +++ b/src/main/ephemeral-vm-runtime-service.test.ts @@ -12,7 +12,7 @@ import { provisionEphemeralVmRuntime, resumeEphemeralVmRuntime } from './ephemeral-vm-runtime-service' -import type { OrcaVmRecipe } from '../shared/types' +import type { OrcaVmRecipe } from '../shared/orca-yaml-hook-types' const tempDirs: string[] = [] diff --git a/src/main/ephemeral-vm-runtime-service.ts b/src/main/ephemeral-vm-runtime-service.ts index ddbecb7cf6b..ed419b2f950 100644 --- a/src/main/ephemeral-vm-runtime-service.ts +++ b/src/main/ephemeral-vm-runtime-service.ts @@ -1,4 +1,4 @@ -import type { OrcaVmRecipe } from '../shared/types' +import type { OrcaVmRecipe } from '../shared/orca-yaml-hook-types' import { listEphemeralVmRuntimes, updateEphemeralVmRuntimeStatus, diff --git a/src/main/folder-workspace-diff-comments.ts b/src/main/folder-workspace-diff-comments.ts index 1a7435e8930..cc4481cbccf 100644 --- a/src/main/folder-workspace-diff-comments.ts +++ b/src/main/folder-workspace-diff-comments.ts @@ -1,4 +1,5 @@ -import type { DiffComment, FolderWorkspace } from '../shared/types' +import type { DiffComment } from '../shared/diff-comment-types' +import type { FolderWorkspace } from '../shared/folder-workspace-types' // Why shape-only: this replaces folder-workspaces.ts's verbatim `Array.isArray(raw.diffComments)` read. // Filtering members would make the fix itself a new deletion path for user-authored prose. diff --git a/src/main/ghostty/index.test.ts b/src/main/ghostty/index.test.ts index 08902b5375d..9247cb450c6 100644 --- a/src/main/ghostty/index.test.ts +++ b/src/main/ghostty/index.test.ts @@ -1,5 +1,5 @@ import type { Store } from '../persistence' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { afterEach, describe, expect, it, vi } from 'vitest' const { statMock, readFileMock } = vi.hoisted(() => ({ diff --git a/src/main/ghostty/index.ts b/src/main/ghostty/index.ts index 4827a29741d..e6e041aacfb 100644 --- a/src/main/ghostty/index.ts +++ b/src/main/ghostty/index.ts @@ -1,6 +1,6 @@ import { readFile, stat } from 'node:fs/promises' import { platform } from 'node:os' -import type { GlobalSettings, GhosttyImportPreview } from '../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../shared/global-settings-types' import type { Store } from '../persistence' import { findGhosttyConfigPaths } from './discovery' import { parseGhosttyConfig } from './parser' diff --git a/src/main/ghostty/mapper.ts b/src/main/ghostty/mapper.ts index c3734cd04c5..ad8b8d050c8 100644 --- a/src/main/ghostty/mapper.ts +++ b/src/main/ghostty/mapper.ts @@ -1,8 +1,5 @@ -import type { - GlobalSettings, - TerminalColorOverrides, - GhosttyImportPreview -} from '../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../shared/global-settings-types' +import type { TerminalColorOverrides } from '../../shared/terminal-color-overrides' import { HEX_COLOR_RE } from '../../shared/color-validation' import { parsePaddingValue, parseStrictInt } from './numeric-config-values' diff --git a/src/main/ghostty/theme-import.test.ts b/src/main/ghostty/theme-import.test.ts index c2d2ec61ab9..dff669ee7b1 100644 --- a/src/main/ghostty/theme-import.test.ts +++ b/src/main/ghostty/theme-import.test.ts @@ -1,5 +1,5 @@ import type { Store } from '../persistence' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const { statMock, readFileMock } = vi.hoisted(() => ({ diff --git a/src/main/git/push-target-validation.ts b/src/main/git/push-target-validation.ts index bfb85cc4a27..8e3375c100f 100644 --- a/src/main/git/push-target-validation.ts +++ b/src/main/git/push-target-validation.ts @@ -1,4 +1,4 @@ -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import { assertGitPushTargetShape } from '../../shared/git-push-target-validation' import { gitExecFileAsync } from './runner' diff --git a/src/main/git/remote.ts b/src/main/git/remote.ts index 5c3f40cafe0..687102b1184 100644 --- a/src/main/git/remote.ts +++ b/src/main/git/remote.ts @@ -5,7 +5,7 @@ import { import { resolveEffectiveGitUpstream } from '../../shared/git-effective-upstream' import { gitRefTargetsBranchOnRemote } from '../../shared/git-remote-branch-name' import { resolveGitRemoteRebaseSource } from '../../shared/git-rebase-source' -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import type { GitRuntimeOptions } from './git-runtime-options' import { gitOptionsForWorktree } from './git-runtime-options' import { validateGitPushTarget } from './push-target-validation' diff --git a/src/main/git/repo.ts b/src/main/git/repo.ts index 26291ec5d39..50d8a278be2 100644 --- a/src/main/git/repo.ts +++ b/src/main/git/repo.ts @@ -2,7 +2,7 @@ import { existsSync, readFileSync, realpathSync, statSync } from 'node:fs' import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path' import { gitExecFileSync, gitExecFileAsync } from './runner' -import type { BaseRefSearchResult } from '../../shared/types' +import type { BaseRefSearchResult } from '../../shared/repo-types' import { parseGitRevListAheadBehindCounts } from '../../shared/git-rev-list-output' import { normalizeRuntimePathSeparators } from '../../shared/cross-platform-path' import { isForEachRefExcludeUnsupportedError } from '../../shared/git-ref-command-capabilities' diff --git a/src/main/git/status.ts b/src/main/git/status.ts index 31f364789de..378bbd56dc2 100644 --- a/src/main/git/status.ts +++ b/src/main/git/status.ts @@ -4,18 +4,20 @@ import { readFile, stat } from 'node:fs/promises' import * as path from 'node:path' import type { GitBranchChangeEntry, - GitBranchChangeStatus, GitBranchCompareResult, GitBranchCompareSummary, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { + GitBranchChangeStatus, GitConflictKind, GitConflictOperation, - GitDiffResult, GitFileStatus, GitStatusEntry, GitStatusResult, GitUpstreamStatus -} from '../../shared/types' +} from '../../shared/git-status-types' import type { CommitMessageDraftContext } from '../../shared/commit-message-generation' import { getEffectiveGitUpstreamStatus, diff --git a/src/main/git/upstream.ts b/src/main/git/upstream.ts index d36b5f0a53d..18c2037493f 100644 --- a/src/main/git/upstream.ts +++ b/src/main/git/upstream.ts @@ -1,4 +1,5 @@ -import type { GitPushTarget, GitUpstreamStatus } from '../../shared/types' +import type { GitUpstreamStatus } from '../../shared/git-status-types' +import type { GitPushTarget } from '../../shared/worktree/types' import { upstreamOnlyCommitsArePatchEquivalent } from '../../shared/git-upstream-status' import { isNoUpstreamError, normalizeGitErrorMessage } from '../../shared/git-remote-error' import { getEffectiveGitUpstreamStatus } from '../../shared/git-effective-upstream' diff --git a/src/main/git/worktree-shared-directories.ts b/src/main/git/worktree-shared-directories.ts index 6ad9e6096ed..d725e80c8f8 100644 --- a/src/main/git/worktree-shared-directories.ts +++ b/src/main/git/worktree-shared-directories.ts @@ -3,7 +3,7 @@ import { join } from 'node:path' import { checkIgnoredPaths } from './check-ignored-paths' import type { GitRuntimeOptions } from './git-runtime-options' import { loadHooks } from '../hooks' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' // Why: a fresh worktree has no node_modules/.cache, and copying them is slow and // duplicates disk; `orca.yaml` names the ones every worktree should share instead. diff --git a/src/main/git/worktree.ts b/src/main/git/worktree.ts index 11439bff0ae..005be57351f 100644 --- a/src/main/git/worktree.ts +++ b/src/main/git/worktree.ts @@ -15,11 +15,11 @@ import { } from '../worktree-trash' import { parseWslPath } from '../wsl' import type { - GitWorktreeInfo, LocalBaseRefRefreshResult, - LocalBaseRefUpdateSuggestion, - RemoveWorktreeResult -} from '../../shared/types' + LocalBaseRefUpdateSuggestion +} from '../../shared/worktree/base-ref-drift-types' +import type { RemoveWorktreeResult } from '../../shared/worktree/create-types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import { assertWorktreeUnlockedForRemoval } from '../../shared/worktree/removal' import { isSubmoduleWorktreeRemovalRefusal } from '../../shared/worktree/submodule-removal' import { decodeGitCQuotedPath } from '../../shared/git-cquoted-path' diff --git a/src/main/gitea/pull-request-mappers.ts b/src/main/gitea/pull-request-mappers.ts index eee0bd5d946..9e877f14bb8 100644 --- a/src/main/gitea/pull-request-mappers.ts +++ b/src/main/gitea/pull-request-mappers.ts @@ -1,4 +1,4 @@ -import type { CheckStatus, PRMergeableState } from '../../shared/types' +import type { CheckStatus, PRMergeableState } from '../../shared/github/pull-request-types' export type RawGiteaPullRequest = { number?: number diff --git a/src/main/github/client.ts b/src/main/github/client.ts index 2457c7f21f4..5391539d353 100644 --- a/src/main/github/client.ts +++ b/src/main/github/client.ts @@ -1,28 +1,31 @@ /* eslint-disable max-lines -- Why: co-locating all GitHub client functions keeps acquire/release and error handling consistent. */ +import type { ClassifiedError } from '../../shared/classified-error' import type { - ClassifiedError, - GitPushTarget, - IssueSourcePreference, - ListWorkItemsResult, - PRInfo, - PRConflictSummary, - PRRefreshOutcome, - PRMergeableState, - PRReviewDecision, - PRCheckDetail, - PRCheckRunDetails, - GitHubCommentResult, - GitHubReactionContent, - GitHubPRReviewCommentInput, - PRComment, - GitHubViewer, - GitHubWorkItem, - GitHubPullRequestStateUpdate, GitHubRerunPRChecksResult, + PRCheckDetail, + PRCheckRunDetails +} from '../../shared/github/check-types' +import type { + GitHubCommentResult, + GitHubPRReviewCommentInput, + GitHubReactionContent, + PRComment +} from '../../shared/github/comment-types' +import type { PRRefreshOutcome } from '../../shared/github/pull-request-refresh-types' +import type { GitHubPRMergeMethod, GitHubPRMergeMethodSettings, - GitHubPRStack -} from '../../shared/types' + GitHubPRStack, + GitHubViewer, + PRConflictSummary, + PRInfo, + PRMergeableState, + PRReviewDecision +} from '../../shared/github/pull-request-types' +import type { GitHubWorkItem, ListWorkItemsResult } from '../../shared/github/work-item-types' +import type { GitHubPullRequestStateUpdate } from '../../shared/issue-mutation-types' +import type { IssueSourcePreference } from '../../shared/repo-types' +import type { GitPushTarget } from '../../shared/worktree/types' import type { CreateHostedReviewInput, CreateHostedReviewResult } from '../../shared/hosted-review' import { normalizeHostedReviewBaseRef, diff --git a/src/main/github/comment-reactions.ts b/src/main/github/comment-reactions.ts index 1bb831f30ca..89ee5ee8d6b 100644 --- a/src/main/github/comment-reactions.ts +++ b/src/main/github/comment-reactions.ts @@ -1,4 +1,4 @@ -import type { GitHubReaction, GitHubReactionContent } from '../../shared/types' +import type { GitHubReaction, GitHubReactionContent } from '../../shared/github/comment-types' type GitHubGraphQLReactionContent = | 'THUMBS_UP' diff --git a/src/main/github/conflict-summary-cache.ts b/src/main/github/conflict-summary-cache.ts index 99a2715ce6d..0980bf2a8eb 100644 --- a/src/main/github/conflict-summary-cache.ts +++ b/src/main/github/conflict-summary-cache.ts @@ -1,4 +1,4 @@ -import type { PRConflictSummary } from '../../shared/types' +import type { PRConflictSummary } from '../../shared/github/pull-request-types' // Why 60s: the hottest coordinator cadences that re-derive a CONFLICTING PR // (10s mergeability-pending, 2.5s manual-pending) previously each ran a diff --git a/src/main/github/conflict-summary.ts b/src/main/github/conflict-summary.ts index a8c52c46085..b6d19ce1d2a 100644 --- a/src/main/github/conflict-summary.ts +++ b/src/main/github/conflict-summary.ts @@ -1,4 +1,4 @@ -import type { PRConflictSummary } from '../../shared/types' +import type { PRConflictSummary } from '../../shared/github/pull-request-types' import { isUnsupportedMergeTreeMergeBaseError, isUnsupportedMergeTreeWriteTreeError diff --git a/src/main/github/gh-error-classification.ts b/src/main/github/gh-error-classification.ts index 4d2453899ac..551365f2c9c 100644 --- a/src/main/github/gh-error-classification.ts +++ b/src/main/github/gh-error-classification.ts @@ -1,4 +1,4 @@ -import type { ClassifiedError } from '../../shared/types' +import type { ClassifiedError } from '../../shared/classified-error' // Why: gh CLI surfaces API errors as unstructured stderr. Map known // patterns to typed errors so callers can show user-friendly messages. diff --git a/src/main/github/github-api-repository.ts b/src/main/github/github-api-repository.ts index 24037c4f73c..d7fabcd4f5b 100644 --- a/src/main/github/github-api-repository.ts +++ b/src/main/github/github-api-repository.ts @@ -1,4 +1,5 @@ -import type { GitHubOwnerRepo, IssueSourcePreference } from '../../shared/types' +import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { githubRepoIdentityKey, isDefaultGitHubHost diff --git a/src/main/github/github-enterprise-repository.ts b/src/main/github/github-enterprise-repository.ts index 89f8bf7bbd7..f91975097fc 100644 --- a/src/main/github/github-enterprise-repository.ts +++ b/src/main/github/github-enterprise-repository.ts @@ -1,5 +1,5 @@ import { ghExecFileAsync } from '../git/runner' -import type { GitHubOwnerRepo } from '../../shared/types' +import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types' import { getHostedReviewLocalGitOptions, type HostedReviewExecutionOptions diff --git a/src/main/github/github-owner-repo-selection.ts b/src/main/github/github-owner-repo-selection.ts index 2e7c6aa0f4c..39cd0d2da0e 100644 --- a/src/main/github/github-owner-repo-selection.ts +++ b/src/main/github/github-owner-repo-selection.ts @@ -1,4 +1,4 @@ -import type { IssueSourcePreference } from '../../shared/types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { githubRepoIdentityKey } from '../../shared/github/repository-identity-key' import { getOwnerRepoForRemote, diff --git a/src/main/github/github-pr-stack-async-merge.ts b/src/main/github/github-pr-stack-async-merge.ts index 1b3909af035..d5375a468ac 100644 --- a/src/main/github/github-pr-stack-async-merge.ts +++ b/src/main/github/github-pr-stack-async-merge.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod } from '../../shared/types' +import type { GitHubPRMergeMethod } from '../../shared/github/pull-request-types' import { ghExecFileAsync } from '../git/runner' import { acquire, release } from './gh-utils' import { diff --git a/src/main/github/github-pr-stack.test.ts b/src/main/github/github-pr-stack.test.ts index 17cd6475941..243fdc057ab 100644 --- a/src/main/github/github-pr-stack.test.ts +++ b/src/main/github/github-pr-stack.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GitHubPRStack } from '../../shared/types' +import type { GitHubPRStack } from '../../shared/github/pull-request-types' const { ghExecFileAsyncMock, rateLimitGuardMock, noteRateLimitSpendMock } = vi.hoisted(() => ({ ghExecFileAsyncMock: vi.fn(), diff --git a/src/main/github/github-pr-stack.ts b/src/main/github/github-pr-stack.ts index a11cf597769..3dc65f6175a 100644 --- a/src/main/github/github-pr-stack.ts +++ b/src/main/github/github-pr-stack.ts @@ -5,7 +5,7 @@ import type { PRMergeableState, PRReviewDecision, PRState -} from '../../shared/types' +} from '../../shared/github/pull-request-types' import { githubRepoIdentityKey } from '../../shared/github/repository-identity-key' import { ghExecFileAsync } from '../git/runner' import { diff --git a/src/main/github/github-remote-identity-parsing.ts b/src/main/github/github-remote-identity-parsing.ts index 02c21fb8983..32c640b8796 100644 --- a/src/main/github/github-remote-identity-parsing.ts +++ b/src/main/github/github-remote-identity-parsing.ts @@ -1,5 +1,5 @@ import { normalizeGitHubRemoteHost } from '../../shared/git-remote-host-alias' -import type { GitHubOwnerRepo } from '../../shared/types' +import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types' export type GitHubRemoteIdentity = GitHubOwnerRepo & { host: string } diff --git a/src/main/github/github-repository-identity.ts b/src/main/github/github-repository-identity.ts index e348fbc6459..b860c7b7d31 100644 --- a/src/main/github/github-repository-identity.ts +++ b/src/main/github/github-repository-identity.ts @@ -1,6 +1,6 @@ import { runCoalescedProbe, type CoalescedProbes } from '../git/coalesced-probe' import { readRemoteUrl } from '../git/remote-url-probe' -import type { GitHubOwnerRepo } from '../../shared/types' +import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types' import { getSshGitProviderGeneration } from '../providers/ssh-git-dispatch' import { readLocalGitConfigSignature } from './local-git-config-signature' import { diff --git a/src/main/github/github-ssh-host-alias-resolution.ts b/src/main/github/github-ssh-host-alias-resolution.ts index a4988471977..82c0f8b3fb4 100644 --- a/src/main/github/github-ssh-host-alias-resolution.ts +++ b/src/main/github/github-ssh-host-alias-resolution.ts @@ -1,4 +1,4 @@ -import type { GitHubOwnerRepo } from '../../shared/types' +import type { GitHubOwnerRepo } from '../../shared/github/pull-request-types' import { commandExecFileAsync } from '../git/runner' import { getSshGitProvider, getSshGitProviderGeneration } from '../providers/ssh-git-dispatch' import { parseWslPath } from '../wsl' diff --git a/src/main/github/issues.ts b/src/main/github/issues.ts index e2a4dd52677..40cf4e5fa26 100644 --- a/src/main/github/issues.ts +++ b/src/main/github/issues.ts @@ -2,17 +2,15 @@ comment operations keeps the shared acquire/release + error-classification pattern obvious. Each function is short; the file is long because the surface is broad. */ +import type { ClassifiedError } from '../../shared/classified-error' +import type { GitHubCommentResult, PRComment } from '../../shared/github/comment-types' +import type { GitHubAssignableUser, IssueInfo } from '../../shared/github/pull-request-types' import type { - ClassifiedError, - GitHubAssignableUser, GitHubCreateIssueFields, GitHubCreateIssueResult, - GitHubCommentResult, - GitHubIssueUpdate, - IssueInfo, - IssueSourcePreference, - PRComment -} from '../../shared/types' + GitHubIssueUpdate +} from '../../shared/issue-mutation-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { mapIssueInfo } from './mappers' import type { LocalGitExecOptions, OwnerRepo } from './gh-utils' import { diff --git a/src/main/github/mappers.ts b/src/main/github/mappers.ts index 11ce858cdfb..84fa2b4d43d 100644 --- a/src/main/github/mappers.ts +++ b/src/main/github/mappers.ts @@ -1,4 +1,5 @@ -import type { PRInfo, IssueInfo, CheckStatus, PRCheckDetail } from '../../shared/types' +import type { PRCheckDetail } from '../../shared/github/check-types' +import type { CheckStatus, IssueInfo, PRInfo } from '../../shared/github/pull-request-types' import { derivePRCheckStatusFromRollup } from '../../shared/pr-check-status' // ── REST API check-runs mapping ─────────────────────────────────────── diff --git a/src/main/github/pr-refresh-coordinator.test.ts b/src/main/github/pr-refresh-coordinator.test.ts index 30fc44b3c66..aca21c7d146 100644 --- a/src/main/github/pr-refresh-coordinator.test.ts +++ b/src/main/github/pr-refresh-coordinator.test.ts @@ -1,7 +1,8 @@ /* eslint-disable max-lines -- Why: coordinator tests cover queueing, coalescing, request timestamps, and follow-up scheduling against shared module state. */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GitHubPRRefreshCandidate, PRInfo } from '../../shared/types' +import type { GitHubPRRefreshCandidate } from '../../shared/github/pull-request-refresh-types' +import type { PRInfo } from '../../shared/github/pull-request-types' import { isWslUncPath } from '../../shared/wsl-paths' const { diff --git a/src/main/github/pr-refresh-coordinator.ts b/src/main/github/pr-refresh-coordinator.ts index 190cc82c6f9..2ff9d0e410b 100644 --- a/src/main/github/pr-refresh-coordinator.ts +++ b/src/main/github/pr-refresh-coordinator.ts @@ -7,7 +7,7 @@ import type { GitHubPRRefreshReason, GitHubPRRefreshSkippedReason, PRRefreshOutcome -} from '../../shared/types' +} from '../../shared/github/pull-request-refresh-types' import { getPRForBranchOutcome, type GitHubPRBranchLookupOptions } from './client' import { getOriginGitHubApiRepository } from './github-api-repository' import { ghRepoExecOptions, githubRepoContext } from './gh-utils' diff --git a/src/main/github/pr-refresh-error-classification.ts b/src/main/github/pr-refresh-error-classification.ts index 12c42d092b2..894ddc729fd 100644 --- a/src/main/github/pr-refresh-error-classification.ts +++ b/src/main/github/pr-refresh-error-classification.ts @@ -1,4 +1,4 @@ -import type { PRRefreshErrorType } from '../../shared/types' +import type { PRRefreshErrorType } from '../../shared/github/pull-request-refresh-types' import { classifyGitHubUnavailable } from '../../shared/github/api-availability' import { extractExecError } from '../git/exec-error' diff --git a/src/main/github/pr-start-point.ts b/src/main/github/pr-start-point.ts index 05c012c1ab6..118cbc474ef 100644 --- a/src/main/github/pr-start-point.ts +++ b/src/main/github/pr-start-point.ts @@ -1,4 +1,5 @@ -import type { GitHubPrStartPoint, GitPushTarget, IssueSourcePreference } from '../../shared/types' +import type { IssueSourcePreference } from '../../shared/repo-types' +import type { GitHubPrStartPoint, GitPushTarget } from '../../shared/worktree/types' import { fetchCompareBaseRefWithLocalFallback } from '../git/compare-base-ref-fetch' import { isMissingRemoteRefGitError, diff --git a/src/main/github/project-view/mutations.ts b/src/main/github/project-view/mutations.ts index 5f6044debbf..efe27d452e2 100644 --- a/src/main/github/project-view/mutations.ts +++ b/src/main/github/project-view/mutations.ts @@ -18,7 +18,9 @@ import { } from './internals' import { classifyProjectError, rateLimitedError } from './project-error-classification' import { githubProjectHost } from '../../../shared/github/project-identity' -import type { GitHubAssignableUser, GitHubWorkItemDetails, PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItemDetails } from '../../../shared/github/work-item-types' import type { AddIssueCommentBySlugArgs, ClearProjectItemFieldArgs, diff --git a/src/main/github/rate-limit.ts b/src/main/github/rate-limit.ts index 4a48823164d..f75d2810321 100644 --- a/src/main/github/rate-limit.ts +++ b/src/main/github/rate-limit.ts @@ -8,7 +8,7 @@ import type { GetRateLimitResult, GitHubRateLimitBucket, GitHubRateLimitSnapshot -} from '../../shared/types' +} from '../../shared/github/rate-limit-types' import { isDefaultGitHubHost } from '../../shared/github/repository-identity-key' import { isWslUncPath } from '../../shared/wsl-paths' import { acquire, release } from './gh-utils' diff --git a/src/main/github/review-head-remote.ts b/src/main/github/review-head-remote.ts index 2a0dd53ca7f..e408d626ad2 100644 --- a/src/main/github/review-head-remote.ts +++ b/src/main/github/review-head-remote.ts @@ -1,4 +1,4 @@ -import type { IssueSourcePreference } from '../../shared/types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { pickPreferredGitRemote } from '../../shared/preferred-git-remote' import { getDefaultRemote } from '../git/repo' import { getGitHubApiRepositoryForRemote } from './github-api-repository' diff --git a/src/main/github/work-item-details.ts b/src/main/github/work-item-details.ts index 2df6d9200e9..276ee9d33eb 100644 --- a/src/main/github/work-item-details.ts +++ b/src/main/github/work-item-details.ts @@ -1,17 +1,18 @@ /* eslint-disable max-lines -- Why: groups the PR/Issue fetch paths and file-contents resolver so caching/rate-limit strategy lives in one place. */ +import type { PRCheckDetail } from '../../shared/github/check-types' +import type { + GitHubIssueTimelineItem, + GitHubIssueTimelineTarget, + PRComment +} from '../../shared/github/comment-types' import type { GitHubAssignableUser, GitHubPRFile, GitHubPRFileContents, - GitHubPRFileViewedState, - GitHubIssueTimelineItem, - GitHubIssueTimelineTarget, - GitHubWorkItem, - GitHubWorkItemDetails, - IssueSourcePreference, - PRCheckDetail, - PRComment -} from '../../shared/types' + GitHubPRFileViewedState +} from '../../shared/github/pull-request-types' +import type { GitHubWorkItem, GitHubWorkItemDetails } from '../../shared/github/work-item-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { ghExecFileAsync, acquire, diff --git a/src/main/gitlab/client.ts b/src/main/gitlab/client.ts index 138b2cac93d..9e7d03c01b2 100644 --- a/src/main/gitlab/client.ts +++ b/src/main/gitlab/client.ts @@ -1,26 +1,26 @@ /* eslint-disable max-lines -- co-locates GitLab MR/issue/work-item operations sharing one acquire/release pattern. */ +import type { ClassifiedError } from '../../shared/classified-error' import type { - ClassifiedError, + GetGitLabRateLimitResult, GitLabAssignableUser, GitLabAuthDiagnostic, GitLabDiscussionResolveResult, GitLabJobTraceResult, + GitLabMRInlineCommentInput, + GitLabMRReviewersUpdateResult, GitLabPagedResult, GitLabPipelineJob, GitLabRateLimitSnapshot, - GitLabMRInlineCommentInput, - GitLabMRReviewersUpdateResult, GitLabRetryJobResult, GitLabTodo, GitLabViewer, GitLabWorkItem, - GetGitLabRateLimitResult, - IssueSourcePreference, ListMergeRequestsResult, MRComment, MRInfo, MRListState -} from '../../shared/types' +} from '../../shared/gitlab-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { derivePipelineStatus, mapIssueToWorkItem, mapMRInfo, mapMRToWorkItem } from './mappers' import { acquire, diff --git a/src/main/gitlab/gitlab-preload-args.ts b/src/main/gitlab/gitlab-preload-args.ts index be59907b41f..483f02f9c11 100644 --- a/src/main/gitlab/gitlab-preload-args.ts +++ b/src/main/gitlab/gitlab-preload-args.ts @@ -1,4 +1,4 @@ -import type { MRListState } from '../../shared/types' +import type { MRListState } from '../../shared/gitlab-types' export type GitLabIssueListState = 'opened' | 'closed' | 'all' diff --git a/src/main/gitlab/gitlab-project-recents.ts b/src/main/gitlab/gitlab-project-recents.ts index 7d81f2f3667..44a919262e6 100644 --- a/src/main/gitlab/gitlab-project-recents.ts +++ b/src/main/gitlab/gitlab-project-recents.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { computeNextGitLabRecents } from '../../shared/gitlab-projects' export type GitLabProjectRecentsStore = { diff --git a/src/main/gitlab/gitlab-project-ref-resolution.ts b/src/main/gitlab/gitlab-project-ref-resolution.ts index ee7203ce668..96186f1ccf2 100644 --- a/src/main/gitlab/gitlab-project-ref-resolution.ts +++ b/src/main/gitlab/gitlab-project-ref-resolution.ts @@ -2,7 +2,7 @@ import { glabExecFileAsync } from '../git/runner' import { isTransientGitProbeError, readRemoteUrl } from '../git/remote-url-probe' import { NEGATIVE_ENTRY_TTL_MS } from '../git/remote-ref-probe-cache' import { getSshGitProviderGeneration } from '../providers/ssh-git-dispatch' -import type { IssueSourcePreference } from '../../shared/types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { clearProjectRefInFlight, runProjectRefProbeOnce } from './project-ref-inflight' import { _resetGlabUnauthenticatedHosts, diff --git a/src/main/gitlab/glab-error-classification.ts b/src/main/gitlab/glab-error-classification.ts index 75af66ca4ea..1c8eb6212b8 100644 --- a/src/main/gitlab/glab-error-classification.ts +++ b/src/main/gitlab/glab-error-classification.ts @@ -1,4 +1,4 @@ -import type { ClassifiedError } from '../../shared/types' +import type { ClassifiedError } from '../../shared/classified-error' import { GlabNonListResponseError } from './glab-api-response' // Why: glab CLI surfaces API errors as unstructured stderr. Map known diff --git a/src/main/gitlab/issues.ts b/src/main/gitlab/issues.ts index 8635805337d..9bf57d6beb9 100644 --- a/src/main/gitlab/issues.ts +++ b/src/main/gitlab/issues.ts @@ -2,15 +2,15 @@ co-locating issue list/create/update/comment operations keeps the shared acquire/release + error-classification pattern obvious. Each function is short; the file is long because the surface is broad. */ +import type { ClassifiedError } from '../../shared/classified-error' import type { - ClassifiedError, GitLabAssignableUser, GitLabCommentResult, GitLabIssueInfo, GitLabIssueUpdate, - IssueSourcePreference, MRComment -} from '../../shared/types' +} from '../../shared/gitlab-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { mapGitLabIssueInfo } from './mappers' // prettier-ignore import { glabExecFileAsync, acquire, release, getIssueProjectRef, resolveIssueSource, classifyGlabError, classifyListFetchError, getGlabKnownHosts, glabRepoExecOptions, glabHostnameArgs, parseGlabJsonList, type LocalGitExecOptions, type ProjectRef } from './gl-utils' diff --git a/src/main/gitlab/mappers.ts b/src/main/gitlab/mappers.ts index cbc47eef6ae..645392ef2cb 100644 --- a/src/main/gitlab/mappers.ts +++ b/src/main/gitlab/mappers.ts @@ -1,10 +1,5 @@ -import type { - CheckStatus, - GitLabIssueInfo, - GitLabWorkItem, - MRInfo, - MRState -} from '../../shared/types' +import type { CheckStatus } from '../../shared/github/pull-request-types' +import type { GitLabIssueInfo, GitLabWorkItem, MRInfo, MRState } from '../../shared/gitlab-types' import { mapGitLabPipelineJobStatusToCheckStatus, mapGitLabPipelineJobStatusToConclusion diff --git a/src/main/gitlab/project-ref-parser.ts b/src/main/gitlab/project-ref-parser.ts index 9477cb8baa0..575e6093179 100644 --- a/src/main/gitlab/project-ref-parser.ts +++ b/src/main/gitlab/project-ref-parser.ts @@ -1,4 +1,4 @@ -import type { GitLabProjectRef } from '../../shared/types' +import type { GitLabProjectRef } from '../../shared/gitlab-types' export type ProjectRef = GitLabProjectRef diff --git a/src/main/gitlab/work-item-details.ts b/src/main/gitlab/work-item-details.ts index 638a35dd847..3155727eeaf 100644 --- a/src/main/gitlab/work-item-details.ts +++ b/src/main/gitlab/work-item-details.ts @@ -10,9 +10,9 @@ import type { GitLabPipelineJob, GitLabWorkItem, GitLabWorkItemDetails, - IssueSourcePreference, MRComment -} from '../../shared/types' +} from '../../shared/gitlab-types' +import type { IssueSourcePreference } from '../../shared/repo-types' import { mapIssueToWorkItem, mapMRToWorkItem } from './mappers' import { acquire, diff --git a/src/main/hooks-runner.test.ts b/src/main/hooks-runner.test.ts index 5ca5903d66f..61ba70d85ed 100644 --- a/src/main/hooks-runner.test.ts +++ b/src/main/hooks-runner.test.ts @@ -3,7 +3,7 @@ import type * as NodeFs from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { describe, expect, it, vi } from 'vitest' diff --git a/src/main/hooks.test.ts b/src/main/hooks.test.ts index 6cb9878f79c..0f8a1817e7a 100644 --- a/src/main/hooks.test.ts +++ b/src/main/hooks.test.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines -- Why: hook parsing, shell selection, and execution-path regressions are tightly coupled, so these cases stay in one file to preserve the behavior matrix across platforms. */ -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import type * as GitRunner from './git/runner' import { join } from 'node:path' diff --git a/src/main/hooks.ts b/src/main/hooks.ts index 21b56b8a597..cbbb2edddee 100644 --- a/src/main/hooks.ts +++ b/src/main/hooks.ts @@ -23,12 +23,14 @@ import { addWorktreeSetupWslInteropEnv } from './pty/wsl-orca-env' import type { HookCommandSourcePolicy, OrcaHooks, - Repo, - SetupDecision, - SetupRunPolicy, + SetupRunPolicy +} from '../shared/orca-yaml-hook-types' +import type { Repo } from '../shared/repo-types' +import type { SetupDecision } from '../shared/worktree/create-types' +import type { WorktreeDefaultTabsLaunch, WorktreeSetupLaunch -} from '../shared/types' +} from '../shared/worktree/launch-types' import type { ProjectExecutionRuntimeResolution } from '../shared/project-execution-runtime' import type { SetupRunnerShell } from '../shared/setup-runner-command' diff --git a/src/main/index.ts b/src/main/index.ts index 6b7cafa79e4..2e816ba4c89 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -109,7 +109,7 @@ import { resolveUpdateInstallMode } from './updater' import { configureRemoteServerUpdater } from './runtime/remote-server-updater' -import type { UpdateCheckOptions } from '../shared/types' +import type { UpdateCheckOptions } from '../shared/update-status-types' import { recordUpdaterLifecycle } from './updater-lifecycle-diagnostics' import { installServeSupervisorDisconnectQuit, diff --git a/src/main/ipc/app.ts b/src/main/ipc/app.ts index dfa7fa3d1eb..d976382c288 100644 --- a/src/main/ipc/app.ts +++ b/src/main/ipc/app.ts @@ -5,7 +5,8 @@ import { pathToFileURL } from 'node:url' import { app, BrowserWindow, dialog, ipcMain, type IpcMainInvokeEvent } from 'electron' import { is } from '@electron-toolkit/utils' import type { AppIdentity } from '../../shared/app-identity' -import type { FloatingTerminalCwdRequest, MarkdownDocument } from '../../shared/types' +import type { MarkdownDocument } from '../../shared/filesystem-entry-types' +import type { FloatingTerminalCwdRequest } from '../../shared/ui-chrome-types' import { relaunchApp } from '../app-relaunch' import type { Store } from '../persistence' import { getDevInstanceIdentity } from '../startup/dev-instance-identity' diff --git a/src/main/ipc/browser.ts b/src/main/ipc/browser.ts index 3d2800040ea..88c6e140afa 100644 --- a/src/main/ipc/browser.ts +++ b/src/main/ipc/browser.ts @@ -23,13 +23,13 @@ import type { BrowserExtractHoverResult } from '../../shared/browser-grab-types' import type { - BrowserCookieImportResult, BrowserCertificateProceedResult, + BrowserCookieImportResult, BrowserSessionProfile, BrowserSessionProfileCreateOptions, BrowserSessionProfileScope, BrowserViewportOverride -} from '../../shared/types' +} from '../../shared/browser-workspace-types' import { isValidBrowserAnnotationViewportBridgeMarkers, isValidBrowserAnnotationViewportBridgeToken, diff --git a/src/main/ipc/codex-accounts.ts b/src/main/ipc/codex-accounts.ts index 0c111a5f6d8..f8c81fe0189 100644 --- a/src/main/ipc/codex-accounts.ts +++ b/src/main/ipc/codex-accounts.ts @@ -3,7 +3,7 @@ import type { CodexAccountAddTarget, CodexAccountService } from '../codex-accoun import type { CodexAccountSelectionTarget } from '../codex-accounts/runtime-selection' import { listRecordedCodexPaneLanes } from '../codex/codex-pane-account-registry' import { forgetStaleCodexPanes, listStaleCodexPanes } from '../codex/codex-stale-pane-accounts' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' export function registerCodexAccountHandlers( codexAccounts: CodexAccountService, diff --git a/src/main/ipc/ephemeral-vm-recipe-context.ts b/src/main/ipc/ephemeral-vm-recipe-context.ts index c922d6f13b1..6fa591da9c1 100644 --- a/src/main/ipc/ephemeral-vm-recipe-context.ts +++ b/src/main/ipc/ephemeral-vm-recipe-context.ts @@ -4,7 +4,7 @@ import type { EphemeralVmRecipeDoctorResult } from '../../shared/ephemeral-vm-re import { listEphemeralVmRuntimes } from '../../shared/ephemeral-vm-runtime-store' import type { EphemeralVmRuntimeRecord } from '../../shared/ephemeral-vm-runtimes' import { isFolderRepo, isGitRepoKind } from '../../shared/repo-kind' -import type { OrcaVmRecipe } from '../../shared/types' +import type { OrcaVmRecipe } from '../../shared/orca-yaml-hook-types' export type EphemeralVmRecipeListResult = { status: 'ok' | 'error' diff --git a/src/main/ipc/filesystem-auth.test.ts b/src/main/ipc/filesystem-auth.test.ts index c6fa78b126d..396337a01c8 100644 --- a/src/main/ipc/filesystem-auth.test.ts +++ b/src/main/ipc/filesystem-auth.test.ts @@ -6,7 +6,10 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Store } from '../persistence' import type * as RepoWorktrees from '../repo-worktrees' import { listRepoWorktrees } from '../repo-worktrees' -import type { FolderWorkspace, GitWorktreeInfo, ProjectGroup, Repo } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Repo } from '../../shared/repo-types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import { AUTHORIZED_EXTERNAL_PATHS_MAX, authorizeExternalPath, diff --git a/src/main/ipc/filesystem-auth.ts b/src/main/ipc/filesystem-auth.ts index b172c2c1894..fb93ac7f8d7 100644 --- a/src/main/ipc/filesystem-auth.ts +++ b/src/main/ipc/filesystem-auth.ts @@ -7,7 +7,9 @@ import { isRepoRoot, listRepoWorktrees } from '../repo-worktrees' import { computeWorkspaceRoot, getWorktreePathSettings } from './worktree-logic' import { isPathInsideOrEqual } from '../../shared/cross-platform-path' import { getProjectGroupSubtreeIds } from '../../shared/project-groups' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Repo } from '../../shared/repo-types' export const PATH_ACCESS_DENIED_MESSAGE = 'Access denied: path resolves outside allowed directories. If this blocks a legitimate workflow, please file a GitHub issue.' diff --git a/src/main/ipc/filesystem-search-git.ts b/src/main/ipc/filesystem-search-git.ts index e997ddd2e02..0bff6336f66 100644 --- a/src/main/ipc/filesystem-search-git.ts +++ b/src/main/ipc/filesystem-search-git.ts @@ -1,4 +1,4 @@ -import type { SearchOptions, SearchResult } from '../../shared/types' +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' import { buildGitGrepArgs, buildSubmatchRegex, diff --git a/src/main/ipc/filesystem-watcher-large-batch.test.ts b/src/main/ipc/filesystem-watcher-large-batch.test.ts index e605cd6167c..cfb99c217c1 100644 --- a/src/main/ipc/filesystem-watcher-large-batch.test.ts +++ b/src/main/ipc/filesystem-watcher-large-batch.test.ts @@ -32,7 +32,7 @@ import { closeAllWatchers, registerFilesystemWatcherHandlers } from './filesyste import { stat } from 'node:fs/promises' import { subscribe as subscribeParcelWatcher } from '@parcel/watcher' import type { Event as WatcherEvent } from '@parcel/watcher' -import type { FsChangedPayload } from '../../shared/types' +import type { FsChangedPayload } from '../../shared/filesystem-entry-types' import { WATCH_BATCH_MAX_WAIT_MS, WATCH_BATCH_TRAILING_MS diff --git a/src/main/ipc/filesystem-watcher-remote-batch.test.ts b/src/main/ipc/filesystem-watcher-remote-batch.test.ts index 8666a40c906..befc9a194e2 100644 --- a/src/main/ipc/filesystem-watcher-remote-batch.test.ts +++ b/src/main/ipc/filesystem-watcher-remote-batch.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' const { handleMock, getSshFilesystemProviderMock, providerRegistrationListeners } = vi.hoisted( () => ({ diff --git a/src/main/ipc/filesystem-watcher.ts b/src/main/ipc/filesystem-watcher.ts index 571f6c46b3a..0a337967386 100644 --- a/src/main/ipc/filesystem-watcher.ts +++ b/src/main/ipc/filesystem-watcher.ts @@ -3,7 +3,7 @@ import { ipcMain, type WebContents } from 'electron' import * as path from 'node:path' import { stat } from 'node:fs/promises' import type { Event as WatcherEvent } from '@parcel/watcher' -import type { FsChangeEvent, FsChangedPayload } from '../../shared/types' +import type { FsChangeEvent, FsChangedPayload } from '../../shared/filesystem-entry-types' import { isWindowsAbsolutePathLike, normalizeRuntimePathForComparison diff --git a/src/main/ipc/filesystem.ts b/src/main/ipc/filesystem.ts index 44239bdac74..2a5111e5d13 100644 --- a/src/main/ipc/filesystem.ts +++ b/src/main/ipc/filesystem.ts @@ -9,25 +9,24 @@ import { awaitWindowsHostGitEnvironmentReady, gitExecFileAsync, wslAwareSpawn } import { parseWslPath, toWindowsWslPath } from '../wsl' import { tryDeleteWslUncPath } from '../wsl-unc-delete' import type { Store } from '../persistence' +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' +import type { DirEntry, MarkdownDocument } from '../../shared/filesystem-entry-types' import type { - DirEntry, GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../shared/git-fork-sync' +import type { GitConflictOperation, - GitDiffResult, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GlobalSettings, GitStagingArea, - GitPushTarget, - GitUpstreamStatus, GitStatusResult, - MarkdownDocument, - SearchOptions, - SearchResult, - Repo, - TuiAgent -} from '../../shared/types' + GitUpstreamStatus +} from '../../shared/git-status-types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' +import type { TuiAgent } from '../../shared/tui-agent' +import type { GitPushTarget } from '../../shared/worktree/types' import type { GitHistoryOptions, GitHistoryResult } from '../../shared/git-history' import type { SshMutationExpectation } from '../../shared/ssh-types' import { sortDirEntries } from '../../shared/file-name-sort' diff --git a/src/main/ipc/floating-workspace-directory.test.ts b/src/main/ipc/floating-workspace-directory.test.ts index 335bf1e96bc..2b372586cf1 100644 --- a/src/main/ipc/floating-workspace-directory.test.ts +++ b/src/main/ipc/floating-workspace-directory.test.ts @@ -2,7 +2,7 @@ import { mkdtemp, mkdir, realpath, rm, symlink, unlink } from 'node:fs/promises' import os from 'node:os' import path from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' const { appGetPathMock, authorizeExternalPathMock } = vi.hoisted(() => ({ appGetPathMock: vi.fn(), diff --git a/src/main/ipc/floating-workspace-directory.ts b/src/main/ipc/floating-workspace-directory.ts index bf1373e9f50..9e5f7d34cb7 100644 --- a/src/main/ipc/floating-workspace-directory.ts +++ b/src/main/ipc/floating-workspace-directory.ts @@ -2,7 +2,8 @@ import { constants as fsConstants } from 'node:fs' import { access, mkdir, realpath, stat } from 'node:fs/promises' import path from 'node:path' import { app } from 'electron' -import type { GlobalSettings, FloatingTerminalCwdRequest } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { FloatingTerminalCwdRequest } from '../../shared/ui-chrome-types' import type { Store } from '../persistence' import { authorizeExternalPath } from './filesystem-auth' diff --git a/src/main/ipc/github-work-item-args.ts b/src/main/ipc/github-work-item-args.ts index 0aff921ee24..2497c8e93f9 100644 --- a/src/main/ipc/github-work-item-args.ts +++ b/src/main/ipc/github-work-item-args.ts @@ -1,5 +1,5 @@ import type { TaskSourceContext } from '../../shared/task-source-context' -import type { IssueSourcePreference } from '../../shared/types' +import type { IssueSourcePreference } from '../../shared/repo-types' export type WorkItemArgs = { repoPath: string diff --git a/src/main/ipc/github.ts b/src/main/ipc/github.ts index eda32115b19..36516790446 100644 --- a/src/main/ipc/github.ts +++ b/src/main/ipc/github.ts @@ -4,19 +4,20 @@ reviewable as one surface. Splitting by feature area would risk drifting validation/gate conventions across handler files. */ import { ipcMain } from 'electron' import { resolve } from 'node:path' +import type { GitHubReactionContent } from '../../shared/github/comment-types' import type { - Repo, - GitHubCreateIssueFields, - GitHubIssueUpdate, - GitHubOwnerRepo, - GitHubPullRequestStateUpdate, GitHubPRRefreshCandidate, GitHubPRRefreshEnqueueResult, GitHubPRRefreshReason, - GitHubReactionContent, - PRRefreshOutcome, - GitHubPRFile -} from '../../shared/types' + PRRefreshOutcome +} from '../../shared/github/pull-request-refresh-types' +import type { GitHubOwnerRepo, GitHubPRFile } from '../../shared/github/pull-request-types' +import type { + GitHubCreateIssueFields, + GitHubIssueUpdate, + GitHubPullRequestStateUpdate +} from '../../shared/issue-mutation-types' +import type { Repo } from '../../shared/repo-types' import { getRepoExecutionHostId } from '../../shared/execution-host' import type { TaskSourceContext } from '../../shared/task-source-context' import type { Store } from '../persistence' diff --git a/src/main/ipc/gitlab.test.ts b/src/main/ipc/gitlab.test.ts index 2ff888a7bd8..87a298e56aa 100644 --- a/src/main/ipc/gitlab.test.ts +++ b/src/main/ipc/gitlab.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Store } from '../persistence' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { toSshExecutionHostId } from '../../shared/execution-host' const ORIGINAL_PLATFORM = process.platform diff --git a/src/main/ipc/gitlab.ts b/src/main/ipc/gitlab.ts index e68c4b8f6d8..cc668841038 100644 --- a/src/main/ipc/gitlab.ts +++ b/src/main/ipc/gitlab.ts @@ -8,9 +8,9 @@ import type { GitLabIssueUpdate, GitLabMRInlineCommentInput, GitLabMRUpdate, - GitLabWorkItem, - Repo -} from '../../shared/types' + GitLabWorkItem +} from '../../shared/gitlab-types' +import type { Repo } from '../../shared/repo-types' import { getRepoExecutionHostId } from '../../shared/execution-host' import type { TaskSourceContext } from '../../shared/task-source-context' import type { Store } from '../persistence' diff --git a/src/main/ipc/hosted-review.ts b/src/main/ipc/hosted-review.ts index 736668e1f0d..119647d9957 100644 --- a/src/main/ipc/hosted-review.ts +++ b/src/main/ipc/hosted-review.ts @@ -6,7 +6,7 @@ import type { HostedReviewCreationEligibilityArgs, HostedReviewForBranchArgs } from '../../shared/hosted-review' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { Store } from '../persistence' import type { StatsCollector } from '../stats/collector' import { diff --git a/src/main/ipc/jira.ts b/src/main/ipc/jira.ts index c8edc638a3b..b7faa6fd333 100644 --- a/src/main/ipc/jira.ts +++ b/src/main/ipc/jira.ts @@ -25,7 +25,7 @@ import type { JiraIssueFilter, JiraIssueUpdate, JiraSiteSelection -} from '../../shared/types' +} from '../../shared/jira-types' const VALID_FILTERS = new Set(['assigned', 'reported', 'all', 'done']) const issueSummaryRequests = new JiraCancellableRequests() diff --git a/src/main/ipc/linear.ts b/src/main/ipc/linear.ts index 0905c691f4c..dd64a777ab4 100644 --- a/src/main/ipc/linear.ts +++ b/src/main/ipc/linear.ts @@ -26,11 +26,9 @@ import { listTeams, getTeamStates, getTeamLabels, getTeamMembers } from '../line import type { LinearListFilter } from '../linear/issues' import { clampLinearIssueListLimit } from '../../shared/linear/issue-read-limits' import { optionalParsedLinearIssueAttributeFilter } from '../../shared/linear/issue-attribute-filter' -import type { - LinearCustomViewModel, - LinearIssueUpdate, - LinearWorkspaceSelection -} from '../../shared/types' +import type { LinearIssueUpdate } from '../../shared/issue-mutation-types' +import type { LinearCustomViewModel } from '../../shared/linear/project-types' +import type { LinearWorkspaceSelection } from '../../shared/linear/workspace-types' const VALID_FILTERS = new Set(['assigned', 'created', 'all', 'completed']) diff --git a/src/main/ipc/local-worktree-runtime-options.ts b/src/main/ipc/local-worktree-runtime-options.ts index f9850a7a399..d0d1a67e3cd 100644 --- a/src/main/ipc/local-worktree-runtime-options.ts +++ b/src/main/ipc/local-worktree-runtime-options.ts @@ -5,7 +5,7 @@ import { type LocalProjectWorktreeGitOptions } from '../project-runtime-git-options' import { splitWorktreeId } from '../../shared/worktree/id' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' function comparableLocalPath(value: string): string { const normalized = resolve(value) diff --git a/src/main/ipc/markdown-documents.ts b/src/main/ipc/markdown-documents.ts index 713adc9e0fb..38466da6087 100644 --- a/src/main/ipc/markdown-documents.ts +++ b/src/main/ipc/markdown-documents.ts @@ -1,6 +1,6 @@ import { readdir } from 'node:fs/promises' import { basename as pathBasename, extname, isAbsolute, join, relative, resolve } from 'node:path' -import type { MarkdownDocument } from '../../shared/types' +import type { MarkdownDocument } from '../../shared/filesystem-entry-types' function normalizeRelativePath(path: string): string { return path.replace(/[\\/]+/g, '/').replace(/^\/+/, '') diff --git a/src/main/ipc/memory.ts b/src/main/ipc/memory.ts index 1c57d4d6fe3..f8bf96c1967 100644 --- a/src/main/ipc/memory.ts +++ b/src/main/ipc/memory.ts @@ -1,5 +1,5 @@ import { ipcMain } from 'electron' -import type { MemorySnapshot } from '../../shared/types' +import type { MemorySnapshot } from '../../shared/process-stats-types' import type { Store } from '../persistence' import { collectMemorySnapshot } from '../memory/collector' diff --git a/src/main/ipc/notification-options.ts b/src/main/ipc/notification-options.ts index 1213e8f1d92..a2553f05a3c 100644 --- a/src/main/ipc/notification-options.ts +++ b/src/main/ipc/notification-options.ts @@ -1,4 +1,4 @@ -import type { NotificationDispatchRequest } from '../../shared/types' +import type { NotificationDispatchRequest } from '../../shared/notification-settings-types' const NOTIFICATION_AGENT_LABEL_MAX_LENGTH = 40 const NOTIFICATION_TITLE_CONTEXT_MAX_LENGTH = 80 diff --git a/src/main/ipc/notifications.ts b/src/main/ipc/notifications.ts index 031cdf63378..26d87f8f323 100644 --- a/src/main/ipc/notifications.ts +++ b/src/main/ipc/notifications.ts @@ -14,13 +14,13 @@ import twoToneSoundPath from '../../../resources/notification-sounds/two-tone.mp import type { Store } from '../persistence' import type { NotificationDeliveryProbeResult, + NotificationDismissResult, NotificationDispatchRequest, NotificationDispatchResult, - NotificationDismissResult, NotificationPermissionStatusResult, NotificationSettings, NotificationSoundDataResult -} from '../../shared/types' +} from '../../shared/notification-settings-types' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import type { OrcaRuntimeService } from '../runtime/orca-runtime' import { buildNotificationOptions } from './notification-options' diff --git a/src/main/ipc/onboarding.ts b/src/main/ipc/onboarding.ts index c5449d6a80b..840f2fc695f 100644 --- a/src/main/ipc/onboarding.ts +++ b/src/main/ipc/onboarding.ts @@ -1,6 +1,6 @@ import { ipcMain } from 'electron' import { sanitizeOnboardingUpdate, type Store } from '../persistence' -import type { OnboardingState } from '../../shared/types' +import type { OnboardingState } from '../../shared/onboarding-state-types' export function registerOnboardingHandlers(store: Store): void { ipcMain.removeHandler('onboarding:get') diff --git a/src/main/ipc/pet-bundle.ts b/src/main/ipc/pet-bundle.ts index 1b701a7a105..6a07647cfae 100644 --- a/src/main/ipc/pet-bundle.ts +++ b/src/main/ipc/pet-bundle.ts @@ -1,4 +1,4 @@ -import type { SpriteAnimation } from '../../shared/types' +import type { SpriteAnimation } from '../../shared/pet-types' import { CODEX_PET_ANIMATIONS, CODEX_PET_DEFAULT_ANIMATION, diff --git a/src/main/ipc/pet.test.ts b/src/main/ipc/pet.test.ts index 5e857bb1244..64e5126eedd 100644 --- a/src/main/ipc/pet.test.ts +++ b/src/main/ipc/pet.test.ts @@ -39,7 +39,7 @@ vi.mock('electron', () => ({ })) import { registerPetHandlers } from './pet' -import type { CustomPet } from '../../shared/types' +import type { CustomPet } from '../../shared/pet-types' describe('registerPetHandlers', () => { let tempDir: string diff --git a/src/main/ipc/pet.ts b/src/main/ipc/pet.ts index df48249f001..8b10079ba0e 100644 --- a/src/main/ipc/pet.ts +++ b/src/main/ipc/pet.ts @@ -6,7 +6,7 @@ import { pipeline } from 'node:stream/promises' import { randomUUID } from 'node:crypto' import { basename, dirname, extname, isAbsolute, join, normalize, resolve, sep } from 'node:path' import { z } from 'zod' -import type { CustomPet } from '../../shared/types' +import type { CustomPet } from '../../shared/pet-types' import { applyCodexPetDefaults, readWebpDimensionsFromBuffer, diff --git a/src/main/ipc/preflight.ts b/src/main/ipc/preflight.ts index 5619495c1cf..dc125b7a9a5 100644 --- a/src/main/ipc/preflight.ts +++ b/src/main/ipc/preflight.ts @@ -1,5 +1,8 @@ import { ipcMain } from 'electron' -import type { PathSource, ShellHydrationFailureReason } from '../../shared/types' +import type { + PathSource, + ShellHydrationFailureReason +} from '../../shared/shell-path-hydration-types' import { hydrateShellPath, mergePathSegments } from '../startup/hydrate-shell-path' import { getAzureDevOpsAuthStatus } from '../azure-devops/client' import { getBitbucketAuthStatus } from '../bitbucket/client' diff --git a/src/main/ipc/pty-hidden-delivery-gate.ts b/src/main/ipc/pty-hidden-delivery-gate.ts index 43fa8567b88..0b199d0d1ab 100644 --- a/src/main/ipc/pty-hidden-delivery-gate.ts +++ b/src/main/ipc/pty-hidden-delivery-gate.ts @@ -9,7 +9,7 @@ * bytes (dispatcher sidecars) registers delivery * interest, which suppresses the gate for that PTY. */ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' export type HiddenPtyDeliveryGateSettings = Pick< GlobalSettings, diff --git a/src/main/ipc/pty.test.ts b/src/main/ipc/pty.test.ts index 88306e95a0d..5c1516679d1 100644 --- a/src/main/ipc/pty.test.ts +++ b/src/main/ipc/pty.test.ts @@ -11,7 +11,7 @@ import { import { CLIPBOARD_TEXT_MEASURE_YIELD_CODE_UNITS } from '../../shared/clipboard-text' import { redactPtyIdForDiagnostics } from '../../shared/pty-delivery-diagnostics' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultWorkspaceSession } from '../../shared/constants' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { AgentSessionOwnerBinding } from '../../shared/agent-session-host-authority' import { AGENT_SESSION_CLAIM_DIGEST_VERSION } from '../../shared/agent-session-host-authority' import { PtyWriteUnavailableError } from '../providers/pty-write-unavailable-error' diff --git a/src/main/ipc/pty.ts b/src/main/ipc/pty.ts index 680bc78b4ec..6c38d513859 100644 --- a/src/main/ipc/pty.ts +++ b/src/main/ipc/pty.ts @@ -15,7 +15,8 @@ export { getBashShellReadyRcfileContent } from '../providers/local-pty-shell-rea import type { OrcaRuntimeService } from '../runtime/orca-runtime' import type { PtyBindingSourceExpectation, Store } from '../persistence' import { retireTerminalSurfaceFromPersistence } from '../runtime/mobile-session-terminal-persistence-retirement' -import type { GlobalSettings, TuiAgent } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { TuiAgent } from '../../shared/tui-agent' import { toSshExecutionHostId } from '../../shared/execution-host' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { terminalOutputBacklogCapChars } from '../../shared/terminal-scrollback-policy' diff --git a/src/main/ipc/remote-watcher-event-batch.test.ts b/src/main/ipc/remote-watcher-event-batch.test.ts index 19e946d4007..99f7afee014 100644 --- a/src/main/ipc/remote-watcher-event-batch.test.ts +++ b/src/main/ipc/remote-watcher-event-batch.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { createRemoteWatcherEventBatch } from './remote-watcher-event-batch' const ROOT = '/home/u/repo' diff --git a/src/main/ipc/remote-watcher-event-batch.ts b/src/main/ipc/remote-watcher-event-batch.ts index 713c6068032..85e78d2045e 100644 --- a/src/main/ipc/remote-watcher-event-batch.ts +++ b/src/main/ipc/remote-watcher-event-batch.ts @@ -1,4 +1,4 @@ -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { isWindowsAbsolutePathLike, normalizeRuntimePathForComparison diff --git a/src/main/ipc/remote-workspace-patch-queue.test.ts b/src/main/ipc/remote-workspace-patch-queue.test.ts index 1c97ad6b724..5ce4ac6b0b1 100644 --- a/src/main/ipc/remote-workspace-patch-queue.test.ts +++ b/src/main/ipc/remote-workspace-patch-queue.test.ts @@ -6,7 +6,7 @@ import type { RemoteWorkspaceSnapshot } from '../../shared/remote-workspace-types' import type { SshTarget } from '../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' const { getActiveMultiplexerMock, diff --git a/src/main/ipc/remote-workspace.test.ts b/src/main/ipc/remote-workspace.test.ts index 6da587ac86c..38dc15c4af7 100644 --- a/src/main/ipc/remote-workspace.test.ts +++ b/src/main/ipc/remote-workspace.test.ts @@ -6,7 +6,7 @@ import type { RemoteWorkspaceSnapshot } from '../../shared/remote-workspace-types' import type { SshTarget } from '../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' const { getActiveMultiplexerMock, diff --git a/src/main/ipc/remote-workspace.ts b/src/main/ipc/remote-workspace.ts index 361f66bb21f..1e6e402e3bc 100644 --- a/src/main/ipc/remote-workspace.ts +++ b/src/main/ipc/remote-workspace.ts @@ -14,7 +14,7 @@ import type { RemoteWorkspaceSnapshot } from '../../shared/remote-workspace-types' import type { SshTarget } from '../../shared/ssh-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { getRemoteWorkspaceNamespace } from './remote-workspace-namespace' import { registerRemoteWorkspaceNotificationHandler } from './remote-workspace-events' diff --git a/src/main/ipc/renderer-shutdown-checkpoint.ts b/src/main/ipc/renderer-shutdown-checkpoint.ts index 121ff86b2e3..1e5df10f1a2 100644 --- a/src/main/ipc/renderer-shutdown-checkpoint.ts +++ b/src/main/ipc/renderer-shutdown-checkpoint.ts @@ -1,6 +1,7 @@ import { ipcMain } from 'electron' import type { ExecutionHostId } from '../../shared/execution-host' -import type { PersistedUIState, WorkspaceSessionState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import type { Store } from '../persistence' type StageBeforeUnloadSyncArgs = { diff --git a/src/main/ipc/repos-add-linked-worktree.test.ts b/src/main/ipc/repos-add-linked-worktree.test.ts index d6880848850..cdcaffd8357 100644 --- a/src/main/ipc/repos-add-linked-worktree.test.ts +++ b/src/main/ipc/repos-add-linked-worktree.test.ts @@ -8,7 +8,7 @@ */ import { describe, expect, it, vi, beforeEach } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' const { handleMock, diff --git a/src/main/ipc/repos-sparse-presets.test.ts b/src/main/ipc/repos-sparse-presets.test.ts index 049db10c5e3..5b52fbca393 100644 --- a/src/main/ipc/repos-sparse-presets.test.ts +++ b/src/main/ipc/repos-sparse-presets.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as CryptoModule from 'node:crypto' -import type { SparsePreset } from '../../shared/types' +import type { SparsePreset } from '../../shared/worktree/create-types' const { handleMock, randomUUIDMock, mockStore } = vi.hoisted(() => ({ handleMock: vi.fn(), diff --git a/src/main/ipc/repos.ts b/src/main/ipc/repos.ts index 97d31dc36bf..edb9cded4da 100644 --- a/src/main/ipc/repos.ts +++ b/src/main/ipc/repos.ts @@ -6,14 +6,14 @@ import { homedir } from 'node:os' import { z } from 'zod' import type { Store } from '../persistence' import type { OrcaRuntimeService } from '../runtime/orca-runtime' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' import type { - BaseRefSearchResult, - Project, - Repo, + NestedRepoScanResult, ProjectGroup, - FolderWorkspace, - ProjectGroupImportResult, - ProjectUpdateArgs, + ProjectGroupImportResult +} from '../../shared/project-group-types' +import type { + Project, ProjectHostSetupCreateArgs, ProjectHostSetupCreateResult, ProjectHostSetupDeleteArgs, @@ -22,10 +22,10 @@ import type { ProjectHostSetupResult, ProjectHostSetupUpdateArgs, ProjectHostSetupUpdateResult, - NestedRepoScanResult, - BaseRefDefaultResult, - SparsePreset -} from '../../shared/types' + ProjectUpdateArgs +} from '../../shared/project-types' +import type { BaseRefDefaultResult, BaseRefSearchResult, Repo } from '../../shared/repo-types' +import type { SparsePreset } from '../../shared/worktree/create-types' import type { FolderWorkspacePathStatusRequest } from '../../shared/folder-workspace-path-status' import { isFolderRepo } from '../../shared/repo-kind' import { DEFAULT_REPO_BADGE_COLOR } from '../../shared/constants' diff --git a/src/main/ipc/session.ts b/src/main/ipc/session.ts index 98015aa64a7..7c70acb4f45 100644 --- a/src/main/ipc/session.ts +++ b/src/main/ipc/session.ts @@ -1,6 +1,9 @@ import { ipcMain } from 'electron' import type { Store } from '../persistence' -import type { WorkspaceSessionPatch, WorkspaceSessionState } from '../../shared/types' +import type { + WorkspaceSessionPatch, + WorkspaceSessionState +} from '../../shared/workspace-session-state-types' export function registerSessionHandlers(store: Store): void { // Why: hostId is an optional second arg so an older renderer that invokes diff --git a/src/main/ipc/settings.ts b/src/main/ipc/settings.ts index 98e918300ab..ddf9272240b 100644 --- a/src/main/ipc/settings.ts +++ b/src/main/ipc/settings.ts @@ -1,6 +1,7 @@ import { app, BrowserWindow, ipcMain, nativeTheme } from 'electron' import type { Store } from '../persistence' -import type { GlobalSettings, PersistedState } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { PersistedState } from '../../shared/persisted-state-types' import { listSystemFontFamilies } from '../system-fonts' import { previewGhosttyImport } from '../ghostty/index' import { previewWarpThemeImport } from '../warp-themes' diff --git a/src/main/ipc/source-control-ai-linked-issue.ts b/src/main/ipc/source-control-ai-linked-issue.ts index aa0696dd913..bd8a28d075b 100644 --- a/src/main/ipc/source-control-ai-linked-issue.ts +++ b/src/main/ipc/source-control-ai-linked-issue.ts @@ -1,7 +1,7 @@ import { resolve } from 'node:path' import type { Store } from '../persistence' import { isLinkedIssueNumber } from '../../shared/source-control-ai-action-variables' -import type { WorktreeMeta } from '../../shared/types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import { splitWorktreeIdForFilesystem } from '../../shared/worktree/id' export type LinkedIssueLookupArgs = { diff --git a/src/main/ipc/ssh-browse.ts b/src/main/ipc/ssh-browse.ts index f2a779ee412..c7270e50b03 100644 --- a/src/main/ipc/ssh-browse.ts +++ b/src/main/ipc/ssh-browse.ts @@ -2,7 +2,7 @@ import { ipcMain } from 'electron' import type { SshConnectionManager } from '../ssh/ssh-connection-manager' import type { SshExecOptions } from '../ssh/ssh-connection-utils' import { powerShellCommand, powerShellLiteral } from '../ssh/ssh-remote-powershell' -import type { FilesystemPathFlavor } from '../../shared/types' +import type { FilesystemPathFlavor } from '../../shared/filesystem-entry-types' import { sortDirEntries } from '../../shared/file-name-sort' export type RemoteDirEntry = { diff --git a/src/main/ipc/telemetry.test.ts b/src/main/ipc/telemetry.test.ts index 2645d98dff5..9b28270551a 100644 --- a/src/main/ipc/telemetry.test.ts +++ b/src/main/ipc/telemetry.test.ts @@ -1,7 +1,7 @@ // Telemetry IPC boundary tests: the renderer is in the threat model, so handlers drop malformed calls, cap consent mutations, and derive `via` main-side. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { Store } from '../persistence' const handlers = new Map unknown>() diff --git a/src/main/ipc/ui.ts b/src/main/ipc/ui.ts index 8d2abe92d84..0e967381160 100644 --- a/src/main/ipc/ui.ts +++ b/src/main/ipc/ui.ts @@ -1,6 +1,6 @@ import { BrowserWindow, ipcMain, webContents, type WebContents } from 'electron' import type { Store } from '../persistence' -import type { PersistedUIState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' import { isFeatureInteractionId } from '../../shared/feature-interactions' let trustedUIRendererWebContentsId: number | null = null diff --git a/src/main/ipc/workspace-cleanup-activity.test.ts b/src/main/ipc/workspace-cleanup-activity.test.ts index bfb1c080db3..a7d1e980266 100644 --- a/src/main/ipc/workspace-cleanup-activity.test.ts +++ b/src/main/ipc/workspace-cleanup-activity.test.ts @@ -1,6 +1,7 @@ import path from 'node:path' import { describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { Worktree } from '../../shared/worktree/types' import { resolveWorkspaceCleanupActivityWorktree } from './workspace-cleanup-activity' const REPO: Repo = { diff --git a/src/main/ipc/workspace-cleanup-activity.ts b/src/main/ipc/workspace-cleanup-activity.ts index 56ac36f6b29..93a6b5673cd 100644 --- a/src/main/ipc/workspace-cleanup-activity.ts +++ b/src/main/ipc/workspace-cleanup-activity.ts @@ -1,6 +1,7 @@ import { lstat, readFile } from 'node:fs/promises' import path from 'node:path' -import type { Repo, Worktree } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { Worktree } from '../../shared/worktree/types' import { getPersistedWorkspaceCleanupActivityAt } from '../../shared/workspace-cleanup' import { parseWslUncPath } from '../../shared/wsl-paths' import { toWindowsWslPath } from '../wsl' diff --git a/src/main/ipc/workspace-cleanup-candidate.ts b/src/main/ipc/workspace-cleanup-candidate.ts index e25af90964c..d6e93429b8a 100644 --- a/src/main/ipc/workspace-cleanup-candidate.ts +++ b/src/main/ipc/workspace-cleanup-candidate.ts @@ -1,6 +1,7 @@ import type { IGitProvider } from '../providers/types' import { isFolderRepo } from '../../shared/repo-kind' -import type { Repo, Worktree } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { Worktree } from '../../shared/worktree/types' import { applyWorkspaceCleanupPolicy, createWorkspaceCleanupFingerprint, diff --git a/src/main/ipc/workspace-cleanup-disconnected-ssh.ts b/src/main/ipc/workspace-cleanup-disconnected-ssh.ts index f7128d26827..264e1eac9e2 100644 --- a/src/main/ipc/workspace-cleanup-disconnected-ssh.ts +++ b/src/main/ipc/workspace-cleanup-disconnected-ssh.ts @@ -1,6 +1,7 @@ import { basename } from 'node:path' import type { Store } from '../persistence' -import type { Repo, WorktreeMeta } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import { applyWorkspaceCleanupPolicy, createWorkspaceCleanupFingerprint, diff --git a/src/main/ipc/workspace-cleanup-git-evidence.ts b/src/main/ipc/workspace-cleanup-git-evidence.ts index 04945327f98..91aca462c7a 100644 --- a/src/main/ipc/workspace-cleanup-git-evidence.ts +++ b/src/main/ipc/workspace-cleanup-git-evidence.ts @@ -1,7 +1,9 @@ import { getStatus } from '../git/status' import { gitExecFileAsync } from '../git/runner' import type { IGitProvider } from '../providers/types' -import type { GitStatusResult, Repo, Worktree } from '../../shared/types' +import type { GitStatusResult } from '../../shared/git-status-types' +import type { Repo } from '../../shared/repo-types' +import type { Worktree } from '../../shared/worktree/types' import type { WorkspaceCleanupBlocker } from '../../shared/workspace-cleanup' import { WORKSPACE_CLEANUP_GIT_READ_TIMEOUT_MS, diff --git a/src/main/ipc/workspace-cleanup-local-git-routing.test.ts b/src/main/ipc/workspace-cleanup-local-git-routing.test.ts index 656b904d0cd..a10085fae77 100644 --- a/src/main/ipc/workspace-cleanup-local-git-routing.test.ts +++ b/src/main/ipc/workspace-cleanup-local-git-routing.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Store } from '../persistence' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' const { listRepoWorktreesMock, getLocalProjectWorktreeGitOptionsMock } = vi.hoisted(() => ({ listRepoWorktreesMock: vi.fn(), diff --git a/src/main/ipc/workspace-cleanup-scan-primitives.ts b/src/main/ipc/workspace-cleanup-scan-primitives.ts index 4f0a84c8a86..8b4c5c839b4 100644 --- a/src/main/ipc/workspace-cleanup-scan-primitives.ts +++ b/src/main/ipc/workspace-cleanup-scan-primitives.ts @@ -1,5 +1,5 @@ import { basename } from 'node:path' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { WorkspaceCleanupScanError } from '../../shared/workspace-cleanup' export const WORKSPACE_CLEANUP_GIT_READ_TIMEOUT_MS = 8_000 diff --git a/src/main/ipc/workspace-cleanup-scan.ts b/src/main/ipc/workspace-cleanup-scan.ts index 41f94a07814..7072199ffcd 100644 --- a/src/main/ipc/workspace-cleanup-scan.ts +++ b/src/main/ipc/workspace-cleanup-scan.ts @@ -3,7 +3,8 @@ import { listRepoWorktrees, createFolderWorktree } from '../repo-worktrees' import { getSshGitProvider } from '../providers/ssh-git-dispatch' import type { IGitProvider } from '../providers/types' import { isFolderRepo } from '../../shared/repo-kind' -import type { GitWorktreeInfo, Repo, Worktree } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import { mergeWorktree } from './worktree-logic' import { splitWorktreeId } from '../../shared/worktree/id' import type { diff --git a/src/main/ipc/workspace-cleanup.test.ts b/src/main/ipc/workspace-cleanup.test.ts index 5d5538ca3df..96f0ce821f8 100644 --- a/src/main/ipc/workspace-cleanup.test.ts +++ b/src/main/ipc/workspace-cleanup.test.ts @@ -2,13 +2,11 @@ import path from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { ipcMain } from 'electron' import type { Store } from '../persistence' -import type { - DiffComment, - GitStatusResult, - GitWorktreeInfo, - Repo, - WorktreeMeta -} from '../../shared/types' +import type { DiffComment } from '../../shared/diff-comment-types' +import type { GitStatusResult } from '../../shared/git-status-types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import type { WorkspaceCleanupScanProgress } from '../../shared/workspace-cleanup' const { diff --git a/src/main/ipc/worktree-base-directory-change-collector.ts b/src/main/ipc/worktree-base-directory-change-collector.ts index c77f12104ee..1f1f37dcedd 100644 --- a/src/main/ipc/worktree-base-directory-change-collector.ts +++ b/src/main/ipc/worktree-base-directory-change-collector.ts @@ -1,4 +1,4 @@ -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { classifyWorktreeBaseChange, type WorktreeBaseWatchTarget diff --git a/src/main/ipc/worktree-base-directory-watch-targets.ts b/src/main/ipc/worktree-base-directory-watch-targets.ts index 1283333ee95..cfa825e09ab 100644 --- a/src/main/ipc/worktree-base-directory-watch-targets.ts +++ b/src/main/ipc/worktree-base-directory-watch-targets.ts @@ -3,7 +3,8 @@ import { realpath, stat } from 'node:fs/promises' import type { Stats } from 'node:fs' import type { Store } from '../persistence' import type { FileStat, IFilesystemProvider } from '../providers/types' -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' import { isFolderRepo } from '../../shared/repo-kind' import { diff --git a/src/main/ipc/worktree-base-directory-watcher.test.ts b/src/main/ipc/worktree-base-directory-watcher.test.ts index d8f58ff8503..9ce0712c9a0 100644 --- a/src/main/ipc/worktree-base-directory-watcher.test.ts +++ b/src/main/ipc/worktree-base-directory-watcher.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { join, sep } from 'node:path' -import type { GlobalSettings, Repo } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import type { WorktreeBasePollEvent, WorktreeBasePollerOptions diff --git a/src/main/ipc/worktree-common-git-directory.ts b/src/main/ipc/worktree-common-git-directory.ts index 7fb464f3c94..2a334055c17 100644 --- a/src/main/ipc/worktree-common-git-directory.ts +++ b/src/main/ipc/worktree-common-git-directory.ts @@ -1,6 +1,6 @@ import type { Stats } from 'node:fs' import { readFile, stat } from 'node:fs/promises' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { getRuntimePathBasename, normalizeRuntimePathSeparators, diff --git a/src/main/ipc/worktree-folder-rename-target.ts b/src/main/ipc/worktree-folder-rename-target.ts index 9cdbe7188c2..d471d41b2c7 100644 --- a/src/main/ipc/worktree-folder-rename-target.ts +++ b/src/main/ipc/worktree-folder-rename-target.ts @@ -1,5 +1,5 @@ import { posix } from 'node:path' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' import { computeWorktreePath } from './worktree-logic' diff --git a/src/main/ipc/worktree-head-identity-reader.ts b/src/main/ipc/worktree-head-identity-reader.ts index e99de115480..0e44376c00b 100644 --- a/src/main/ipc/worktree-head-identity-reader.ts +++ b/src/main/ipc/worktree-head-identity-reader.ts @@ -1,6 +1,6 @@ import { readdir, readFile } from 'node:fs/promises' import { basename, dirname, isAbsolute, join } from 'node:path' -import type { WorktreeHeadIdentity } from '../../shared/types' +import type { WorktreeHeadIdentity } from '../../shared/worktree/types' // Why: the whole point of this reader is replacing `git worktree list` fanout // with bounded metadata-file reads, so head freshness never re-creates the diff --git a/src/main/ipc/worktree-linked-work-item-metadata.ts b/src/main/ipc/worktree-linked-work-item-metadata.ts index e0b4259a2fc..e07e78ddfcb 100644 --- a/src/main/ipc/worktree-linked-work-item-metadata.ts +++ b/src/main/ipc/worktree-linked-work-item-metadata.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeMeta } from '../../shared/types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { Worktree } from '../../shared/worktree/types' type LinkedWorkItemMetadata = Pick< Worktree, diff --git a/src/main/ipc/worktree-logic.ts b/src/main/ipc/worktree-logic.ts index 3116908970f..a98133428a2 100644 --- a/src/main/ipc/worktree-logic.ts +++ b/src/main/ipc/worktree-logic.ts @@ -1,5 +1,6 @@ import { resolve, relative, isAbsolute, posix, sep, win32 } from 'node:path' -import type { GlobalSettings, OrcaWorkspaceLayout, Repo } from '../../shared/types' +import type { GlobalSettings, OrcaWorkspaceLayout } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' import { isWindowsAbsolutePathLike, resolveRuntimePath } from '../../shared/cross-platform-path' import { isWslUncPath } from '../../shared/wsl-paths' import { splitWorktreeId } from '../../shared/worktree/id' diff --git a/src/main/ipc/worktree-metadata-merge.ts b/src/main/ipc/worktree-metadata-merge.ts index 6b6accf724f..4fdfe07c72a 100644 --- a/src/main/ipc/worktree-metadata-merge.ts +++ b/src/main/ipc/worktree-metadata-merge.ts @@ -1,5 +1,6 @@ import { basename } from 'node:path' -import type { GitWorktreeInfo, Worktree, WorktreeMeta } from '../../shared/types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import { DEFAULT_WORKSPACE_STATUS_ID } from '../../shared/workspace-statuses' import { getLinkedWorkItemMetadata } from './worktree-linked-work-item-metadata' import { normalizeWorkspaceCreatorProvenance } from '../../shared/workspace-creator-provenance' diff --git a/src/main/ipc/worktree-push-target-cleanup.test.ts b/src/main/ipc/worktree-push-target-cleanup.test.ts index 24234aaa0ab..b24d98c39f6 100644 --- a/src/main/ipc/worktree-push-target-cleanup.test.ts +++ b/src/main/ipc/worktree-push-target-cleanup.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi, type Mock } from 'vitest' -import type { GitPushTarget, WorktreeMeta } from '../../shared/types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { GitPushTarget } from '../../shared/worktree/types' import { cleanupUnusedWorktreePushTargetRemoteWithExec, sameGitHubRemoteUrl, diff --git a/src/main/ipc/worktree-push-target-cleanup.ts b/src/main/ipc/worktree-push-target-cleanup.ts index 0fd1faf10ad..2bda01c5a89 100644 --- a/src/main/ipc/worktree-push-target-cleanup.ts +++ b/src/main/ipc/worktree-push-target-cleanup.ts @@ -4,7 +4,7 @@ // the multi-fork cleanup matrix is unit-testable without a real repo. import type { Store } from '../persistence' -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import { parseGitHubOwnerRepo } from '../github/gh-utils' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { iterateProcessOutputLines } from '../../shared/process-output-field-scanner' diff --git a/src/main/ipc/worktree-push-target-setup.test.ts b/src/main/ipc/worktree-push-target-setup.test.ts index 429c660e6e9..a93a22bb4be 100644 --- a/src/main/ipc/worktree-push-target-setup.test.ts +++ b/src/main/ipc/worktree-push-target-setup.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi, type Mock } from 'vitest' -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import type { GitRemoteExec } from './worktree-push-target-cleanup' import { configureCreatedWorktreePushTargetWithExec, diff --git a/src/main/ipc/worktree-push-target-setup.ts b/src/main/ipc/worktree-push-target-setup.ts index e6a99ab4443..4101055ba65 100644 --- a/src/main/ipc/worktree-push-target-setup.ts +++ b/src/main/ipc/worktree-push-target-setup.ts @@ -4,7 +4,7 @@ // remote-reuse / unique-naming / fetch behavior is unit-testable without a real // repo. The store-aware ownership decision stays with the caller via a predicate. -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import { parseGitHubOwnerRepo } from '../github/gh-utils' import type { GitRemoteExec } from './worktree-push-target-cleanup' diff --git a/src/main/ipc/worktree-remote.ts b/src/main/ipc/worktree-remote.ts index c7e7f14738a..5697b6a14f2 100644 --- a/src/main/ipc/worktree-remote.ts +++ b/src/main/ipc/worktree-remote.ts @@ -6,21 +6,25 @@ import { posix, win32 } from 'node:path' import { existsSync } from 'node:fs' import { randomUUID } from 'node:crypto' import type { Store } from '../persistence' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' +import type { + LocalBaseRefRefreshResult, + LocalBaseRefUpdateSuggestion +} from '../../shared/worktree/base-ref-drift-types' +import type { + CreateWorktreeArgs, + CreateWorktreeResult, + WorktreeCreateBaseFallback +} from '../../shared/worktree/create-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import type { AutomationWorkspaceProvenance, CliWorkspaceProvenance, - CreateWorktreeArgs, - CreateWorktreeResult, GitPushTarget, - GlobalSettings, - LocalBaseRefRefreshResult, - LocalBaseRefUpdateSuggestion, - Repo, Worktree, - WorktreeCreateBaseFallback, - WorktreeHeadIdentity, - WorktreeMeta -} from '../../shared/types' + WorktreeHeadIdentity +} from '../../shared/worktree/types' import { getPRForBranch } from '../github/client' import { listWorktrees, addWorktree, addSparseWorktree } from '../git/worktree' import type { AddWorktreeOptions, AddWorktreeResult } from '../git/worktree' diff --git a/src/main/ipc/worktrees.test.ts b/src/main/ipc/worktrees.test.ts index 3ea8e2cfc35..b49e50d3797 100644 --- a/src/main/ipc/worktrees.test.ts +++ b/src/main/ipc/worktrees.test.ts @@ -4,7 +4,9 @@ import type * as GitUsernameModule from '../git/git-username' import { lstat, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join, resolve } from 'node:path' -import type { CreateWorktreeResult, GitWorktreeInfo, Repo, Worktree } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { CreateWorktreeResult } from '../../shared/worktree/create-types' +import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import type { ProviderRequestId } from '../../shared/detected-worktree-provider-contract' import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId } from '../../shared/execution-host' import * as localWorktreeFilesystem from '../local-worktree-filesystem' diff --git a/src/main/ipc/worktrees.ts b/src/main/ipc/worktrees.ts index 7877aa7bd0d..5285609041e 100644 --- a/src/main/ipc/worktrees.ts +++ b/src/main/ipc/worktrees.ts @@ -17,26 +17,27 @@ import { getProjectGroupSubtreeIds } from '../../shared/project-groups' import { projectResolvedWorktreeLineage } from '../../shared/resolved-worktree-lineage' import { isPathInsideOrEqual, isWindowsAbsolutePathLike } from '../../shared/cross-platform-path' import { deleteWorktreeHistoryDir } from '../terminal-history-deletion' +import type { OrcaHooks } from '../../shared/orca-yaml-hook-types' +import type { Repo } from '../../shared/repo-types' import type { - AutomationWorkspaceProvenance, AdoptProvisionedRootArgs, - CliWorkspaceProvenance, CreateWorktreeArgs, CreateWorktreeResult, + ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult +} from '../../shared/worktree/create-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { + AutomationWorkspaceProvenance, + CliWorkspaceProvenance, DetectedWorktree, DetectedWorktreeListResult, - ForceDeleteWorktreeBranchResult, GitHubPrStartPoint, GitPushTarget, GitWorktreeInfo, - OrcaHooks, - Repo, - RemoveWorktreeResult, - Worktree, - WorktreeLineage, - WorkspaceLineage, - WorktreeMeta -} from '../../shared/types' + Worktree +} from '../../shared/worktree/types' import { assertWorktreeUnlockedForRemoval } from '../../shared/worktree/removal' import { getRepoExecutionHostId, diff --git a/src/main/jira/client.ts b/src/main/jira/client.ts index cd3497fb2be..f9c4e8943c0 100644 --- a/src/main/jira/client.ts +++ b/src/main/jira/client.ts @@ -20,7 +20,7 @@ import type { JiraSite, JiraSiteSelection, JiraViewer -} from '../../shared/types' +} from '../../shared/jira-types' import { clearAttachmentImagesForSite } from './attachment-image-cache' // Why: Atlassian's XSRF filter rejects POST/PUT REST calls that carry a browser diff --git a/src/main/jira/issues.ts b/src/main/jira/issues.ts index e2eade0924e..0629f6abfd3 100644 --- a/src/main/jira/issues.ts +++ b/src/main/jira/issues.ts @@ -20,7 +20,7 @@ import type { JiraStatus, JiraTransition, JiraUser -} from '../../shared/types' +} from '../../shared/jira-types' import { acquire, apiBasePath, diff --git a/src/main/kimi/kimi-runtime-home.test.ts b/src/main/kimi/kimi-runtime-home.test.ts index d56abb658d1..a1977e8d857 100644 --- a/src/main/kimi/kimi-runtime-home.test.ts +++ b/src/main/kimi/kimi-runtime-home.test.ts @@ -9,7 +9,7 @@ vi.mock('../wsl', () => wslMocks) vi.mock('node:os', () => ({ homedir: () => 'C:\\Users\\neil' })) import { getHostKimiHome, getKimiRuntimeTarget, resolveKimiHome } from './kimi-runtime-home' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' function settings(overrides: Partial): GlobalSettings { return overrides as GlobalSettings diff --git a/src/main/kimi/kimi-runtime-home.ts b/src/main/kimi/kimi-runtime-home.ts index 9b0cf799638..709cb755879 100644 --- a/src/main/kimi/kimi-runtime-home.ts +++ b/src/main/kimi/kimi-runtime-home.ts @@ -5,7 +5,7 @@ import { resolveLocalAccountRuntimeTarget, type LocalAccountRuntimeTarget } from '../../shared/local-account-runtime' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getWslHomeAsync, listWslDistrosAsync } from '../wsl' export type KimiHomeResolution = LocalAccountRuntimeTarget & { diff --git a/src/main/linear/client.ts b/src/main/linear/client.ts index 7058d130597..714fb6c165e 100644 --- a/src/main/linear/client.ts +++ b/src/main/linear/client.ts @@ -17,7 +17,7 @@ import type { LinearViewer, LinearWorkspace, LinearWorkspaceSelection -} from '../../shared/types' +} from '../../shared/linear/workspace-types' // ── Concurrency limiter — max 4 parallel Linear API calls ──────────── const MAX_CONCURRENT = 4 diff --git a/src/main/linear/issue-context-client.ts b/src/main/linear/issue-context-client.ts index 1e3a45bd301..47c2bb219dc 100644 --- a/src/main/linear/issue-context-client.ts +++ b/src/main/linear/issue-context-client.ts @@ -1,6 +1,6 @@ import type { LinearSearchIssueSummary, LinearSearchResult } from '../../shared/linear/agent-access' import { clampLinearSearchLimit } from '../../shared/linear/agent-access' -import type { LinearWorkspace } from '../../shared/types' +import type { LinearWorkspace } from '../../shared/linear/workspace-types' import { acquire, clearToken, diff --git a/src/main/linear/issue-context-current.test.ts b/src/main/linear/issue-context-current.test.ts index fd3804bbe9b..022b75525ff 100644 --- a/src/main/linear/issue-context-current.test.ts +++ b/src/main/linear/issue-context-current.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { LinearWorkspace } from '../../shared/types' +import type { LinearWorkspace } from '../../shared/linear/workspace-types' const { connectedWorkspaces } = vi.hoisted(() => ({ connectedWorkspaces: [] as LinearWorkspace[] diff --git a/src/main/linear/issue-context-fanout.ts b/src/main/linear/issue-context-fanout.ts index c28f03a2c9c..77b6186b37e 100644 --- a/src/main/linear/issue-context-fanout.ts +++ b/src/main/linear/issue-context-fanout.ts @@ -1,5 +1,5 @@ import type { LinearErrorCode, LinearWorkspaceCandidate } from '../../shared/linear/agent-access' -import type { LinearWorkspace } from '../../shared/types' +import type { LinearWorkspace } from '../../shared/linear/workspace-types' import { getClients, getStatus, type LinearClientForWorkspace } from './client' import { LinearAgentAccessError, diff --git a/src/main/linear/issue-context-workspaces.ts b/src/main/linear/issue-context-workspaces.ts index 47ad620a0a3..e1c70d2f37f 100644 --- a/src/main/linear/issue-context-workspaces.ts +++ b/src/main/linear/issue-context-workspaces.ts @@ -1,5 +1,5 @@ import type { LinearWorkspaceCandidate } from '../../shared/linear/agent-access' -import type { LinearWorkspace } from '../../shared/types' +import type { LinearWorkspace } from '../../shared/linear/workspace-types' import { linearError } from './issue-context-errors' export function resolveWorkspaceSelector( diff --git a/src/main/linear/issue-context.test.ts b/src/main/linear/issue-context.test.ts index b88dff4563e..e94c490dbc1 100644 --- a/src/main/linear/issue-context.test.ts +++ b/src/main/linear/issue-context.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { LinearClientForWorkspace } from './client' -import type { LinearWorkspace } from '../../shared/types' +import type { LinearWorkspace } from '../../shared/linear/workspace-types' const getClients = vi.fn() const getStatus = vi.fn() diff --git a/src/main/linear/issues.ts b/src/main/linear/issues.ts index 301bc66024a..43e9cf7b699 100644 --- a/src/main/linear/issues.ts +++ b/src/main/linear/issues.ts @@ -1,14 +1,13 @@ /* eslint-disable max-lines -- Why: Linear issue reads and mutations share the same workspace fan-out/error handling, so keeping them together avoids drifting auth-clearing behavior between operations. */ +import type { LinearIssueUpdate } from '../../shared/issue-mutation-types' +import type { LinearComment, LinearIssue } from '../../shared/linear/issue-types' import type { - LinearIssue, - LinearIssueUpdate, - LinearComment, LinearCollectionResult, LinearWorkspaceError, LinearWorkspaceSelection -} from '../../shared/types' +} from '../../shared/linear/workspace-types' import type { LinearClient } from '@linear/sdk' import { loadLinearSdk } from './linear-sdk' import { diff --git a/src/main/linear/linear-team-pages.ts b/src/main/linear/linear-team-pages.ts index abc1c485a8b..624f57c6d8e 100644 --- a/src/main/linear/linear-team-pages.ts +++ b/src/main/linear/linear-team-pages.ts @@ -1,4 +1,9 @@ -import type { LinearLabel, LinearMember, LinearTeam, LinearWorkflowState } from '../../shared/types' +import type { + LinearLabel, + LinearMember, + LinearTeam, + LinearWorkflowState +} from '../../shared/linear/workspace-types' import { buildLinearTeamUrl } from '../../shared/linear/links' import type { LinearClientForWorkspace } from './client' diff --git a/src/main/linear/mappers.ts b/src/main/linear/mappers.ts index 7ea55be7fca..026d70400bf 100644 --- a/src/main/linear/mappers.ts +++ b/src/main/linear/mappers.ts @@ -1,5 +1,5 @@ import type { Issue, IssueSearchResult } from '@linear/sdk' -import type { LinearIssue, LinearIssueChildSummary } from '../../shared/types' +import type { LinearIssue, LinearIssueChildSummary } from '../../shared/linear/issue-types' type IssueWithChildren = Issue & { children: Issue['children'] diff --git a/src/main/linear/projects.ts b/src/main/linear/projects.ts index d55d2f6e6a6..5063a87b17c 100644 --- a/src/main/linear/projects.ts +++ b/src/main/linear/projects.ts @@ -1,17 +1,19 @@ /* eslint-disable max-lines -- Why: Linear project and custom-view reads share raw GraphQL selection sets, workspace fan-out, and partial-failure mapping. */ +import type { LinearIssue } from '../../shared/linear/issue-types' +import type { + LinearCustomViewModel, + LinearCustomViewSummary, + LinearProjectDetail, + LinearProjectMemberSummary, + LinearProjectSummary +} from '../../shared/linear/project-types' import type { LinearCollectionResult, LinearConcreteWorkspaceId, - LinearCustomViewModel, - LinearCustomViewSummary, - LinearIssue, - LinearProjectDetail, - LinearProjectMemberSummary, - LinearProjectSummary, LinearWorkspaceError, LinearWorkspaceSelection -} from '../../shared/types' +} from '../../shared/linear/workspace-types' import { LINEAR_ISSUE_API_PAGE_SIZE_MAX, clampLinearIssueListLimit diff --git a/src/main/linear/teams.ts b/src/main/linear/teams.ts index 004c8fbd92a..8a103929b7e 100644 --- a/src/main/linear/teams.ts +++ b/src/main/linear/teams.ts @@ -1,12 +1,12 @@ import type { Team } from '@linear/sdk' import type { - LinearTeam, - LinearWorkflowState, LinearLabel, LinearMember, + LinearTeam, + LinearWorkflowState, LinearWorkspaceError, LinearWorkspaceSelection -} from '../../shared/types' +} from '../../shared/linear/workspace-types' import { acquire, release, getClients, isAuthError, clearToken } from './client' import { fetchAllTeamLabels, diff --git a/src/main/linux-package-install-command.ts b/src/main/linux-package-install-command.ts index 6a0c6d2d526..60a8ecdca00 100644 --- a/src/main/linux-package-install-command.ts +++ b/src/main/linux-package-install-command.ts @@ -1,6 +1,6 @@ import { statSync } from 'node:fs' import path from 'node:path' -import type { LinuxRootPackageType } from '../shared/types' +import type { LinuxRootPackageType } from '../shared/update-status-types' // Why: an absolute but user-writable PATH entry must never be treated as a trusted package manager. const TRUSTED_EXECUTABLE_DIRECTORIES = ['/usr/bin', '/bin', '/usr/sbin', '/sbin'] diff --git a/src/main/linux-package-install-diagnostic.ts b/src/main/linux-package-install-diagnostic.ts index 3d0afd7fdf9..bdef7c5450e 100644 --- a/src/main/linux-package-install-diagnostic.ts +++ b/src/main/linux-package-install-diagnostic.ts @@ -1,5 +1,5 @@ import os from 'node:os' -import type { LinuxPackageInstallFailureReason } from '../shared/types' +import type { LinuxPackageInstallFailureReason } from '../shared/update-status-types' /** The redacted text shown locally, paired with the reason classified from the ORIGINAL output. */ export type LinuxPackageInstallDiagnostic = { diff --git a/src/main/linux-package-update-recovery.test.ts b/src/main/linux-package-update-recovery.test.ts index 1d9bf8d8650..ec2738b823b 100644 --- a/src/main/linux-package-update-recovery.test.ts +++ b/src/main/linux-package-update-recovery.test.ts @@ -4,7 +4,7 @@ import os from 'node:os' import path from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as NodeFs from 'node:fs' -import type { LinuxPackageInstallRecovery } from '../shared/types' +import type { LinuxPackageInstallRecovery } from '../shared/update-status-types' import type * as RecoveryModule from './linux-package-update-recovery' const { showItemInFolderMock, getPackageTypeMock, buildCommandMock, hashPasses } = vi.hoisted( diff --git a/src/main/linux-package-update-recovery.ts b/src/main/linux-package-update-recovery.ts index f854b63c5b8..e5269a2077b 100644 --- a/src/main/linux-package-update-recovery.ts +++ b/src/main/linux-package-update-recovery.ts @@ -4,7 +4,10 @@ import fsp from 'node:fs/promises' import os from 'node:os' import path from 'node:path' import { shell } from 'electron' -import type { LinuxPackageInstallRecovery, LinuxRootPackageType } from '../shared/types' +import type { + LinuxPackageInstallRecovery, + LinuxRootPackageType +} from '../shared/update-status-types' import { getLinuxRootPackageType } from './linux-update-package-type' import { buildLinuxPackageInstallCommand } from './linux-package-install-command' diff --git a/src/main/linux-update-package-type.ts b/src/main/linux-update-package-type.ts index c8af66649a5..5acc83a4cf3 100644 --- a/src/main/linux-update-package-type.ts +++ b/src/main/linux-update-package-type.ts @@ -1,7 +1,7 @@ import { readFileSync } from 'node:fs' import path from 'node:path' import { app } from 'electron' -import type { LinuxRootPackageType } from '../shared/types' +import type { LinuxRootPackageType } from '../shared/update-status-types' export type { LinuxRootPackageType } diff --git a/src/main/local-project-runtime-resolution.ts b/src/main/local-project-runtime-resolution.ts index e86a2f31927..6f3e7b57f09 100644 --- a/src/main/local-project-runtime-resolution.ts +++ b/src/main/local-project-runtime-resolution.ts @@ -1,5 +1,6 @@ import type { Store } from './persistence' -import type { Project, Repo } from '../shared/types' +import type { Project } from '../shared/project-types' +import type { Repo } from '../shared/repo-types' import { resolveProjectExecutionRuntime, type ProjectExecutionRuntimeResolution diff --git a/src/main/local-worktree-removal-recovery.ts b/src/main/local-worktree-removal-recovery.ts index 578743029f6..630dd338c20 100644 --- a/src/main/local-worktree-removal-recovery.ts +++ b/src/main/local-worktree-removal-recovery.ts @@ -1,4 +1,5 @@ -import type { GitWorktreeInfo, RemoveWorktreeResult } from '../shared/types' +import type { RemoveWorktreeResult } from '../shared/worktree/create-types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { assertWorktreeUnlockedForRemoval } from '../shared/worktree/removal' import { areWorktreePathsEqual, formatWorktreeRemovalError } from './ipc/worktree-logic' import { gitExecFileAsync } from './git/runner' diff --git a/src/main/memory/collector.ts b/src/main/memory/collector.ts index c1fe58989ad..1f000706c1e 100644 --- a/src/main/memory/collector.ts +++ b/src/main/memory/collector.ts @@ -27,7 +27,12 @@ import { iterateProcessOutputLines } from '../../shared/process-output-field-scanner' import { app } from 'electron' -import type { AppMemory, MemorySnapshot, SessionMemory, WorktreeMemory } from '../../shared/types' +import type { + AppMemory, + MemorySnapshot, + SessionMemory, + WorktreeMemory +} from '../../shared/process-stats-types' import type { Store } from '../persistence' import { ORPHAN_WORKTREE_ID } from '../../shared/constants' import { listRegisteredPtys } from './pty-registry' diff --git a/src/main/memory/host-memory.ts b/src/main/memory/host-memory.ts index 5622bd27d72..5d7ee54746d 100644 --- a/src/main/memory/host-memory.ts +++ b/src/main/memory/host-memory.ts @@ -2,7 +2,7 @@ import { execFile } from 'node:child_process' import { readFile } from 'node:fs/promises' import os from 'node:os' import path from 'node:path' -import type { HostAvailableMemorySource, HostMemory } from '../../shared/types' +import type { HostAvailableMemorySource, HostMemory } from '../../shared/process-stats-types' const MEMORY_PRESSURE_TIMEOUT_MS = 1_000 const MEMORY_PRESSURE_MAX_BUFFER = 64 * 1024 diff --git a/src/main/memory/hydrate-local-pty-registry.test.ts b/src/main/memory/hydrate-local-pty-registry.test.ts index 714f18b3cba..7b9a90bfb73 100644 --- a/src/main/memory/hydrate-local-pty-registry.test.ts +++ b/src/main/memory/hydrate-local-pty-registry.test.ts @@ -11,7 +11,7 @@ */ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { SessionInfo } from '../daemon/types' import type { DaemonPtyAdapter } from '../daemon/daemon-pty-adapter' import type { Store } from '../persistence' diff --git a/src/main/memory/process-memory-metric.ts b/src/main/memory/process-memory-metric.ts index 79716cb1f8d..49d9fded195 100644 --- a/src/main/memory/process-memory-metric.ts +++ b/src/main/memory/process-memory-metric.ts @@ -1,5 +1,5 @@ import os from 'node:os' -import type { ProcessMemoryMetric } from '../../shared/types' +import type { ProcessMemoryMetric } from '../../shared/process-stats-types' export function getProcessMemoryMetric( platform: NodeJS.Platform = os.platform() diff --git a/src/main/menu/register-app-menu.ts b/src/main/menu/register-app-menu.ts index cc99c69cbc7..2f77e7f8941 100644 --- a/src/main/menu/register-app-menu.ts +++ b/src/main/menu/register-app-menu.ts @@ -5,7 +5,7 @@ import { type KeybindingActionId, type KeybindingOverrides } from '../../shared/keybindings' -import type { UpdateCheckOptions } from '../../shared/types' +import type { UpdateCheckOptions } from '../../shared/update-status-types' import { translateMain } from '../i18n/main-i18n' import { createAppMenuSelectionItem } from './app-menu-selection-item' diff --git a/src/main/orca-profiles/profile-index-store.ts b/src/main/orca-profiles/profile-index-store.ts index 8c1b4490f45..7897e299a21 100644 --- a/src/main/orca-profiles/profile-index-store.ts +++ b/src/main/orca-profiles/profile-index-store.ts @@ -9,7 +9,7 @@ import { import { randomUUID } from 'node:crypto' import { dirname } from 'node:path' import { bestEffortFsyncDirectorySync, fsyncFileSync } from '../../shared/secure-file' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { createDefaultLocalOrcaProfile, DEFAULT_LOCAL_ORCA_PROFILE_ID, diff --git a/src/main/orca-profiles/profile-project-presence.test.ts b/src/main/orca-profiles/profile-project-presence.test.ts index ebbc05b8e14..56bfed5f500 100644 --- a/src/main/orca-profiles/profile-project-presence.test.ts +++ b/src/main/orca-profiles/profile-project-presence.test.ts @@ -8,7 +8,8 @@ import { type OrcaProfileIndex, type OrcaProfileKind } from '../../shared/orca-profiles' -import type { PersistedState, Repo } from '../../shared/types' +import type { PersistedState } from '../../shared/persisted-state-types' +import type { Repo } from '../../shared/repo-types' const testState = { dir: '' } diff --git a/src/main/orca-profiles/profile-project-session-state.ts b/src/main/orca-profiles/profile-project-session-state.ts index 7b5eb1e4491..acb252007ca 100644 --- a/src/main/orca-profiles/profile-project-session-state.ts +++ b/src/main/orca-profiles/profile-project-session-state.ts @@ -1,6 +1,6 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import type { ExecutionHostId } from '../../shared/execution-host' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { isRepoWorktreeId, diff --git a/src/main/orca-profiles/profile-project-session-transfer.ts b/src/main/orca-profiles/profile-project-session-transfer.ts index 4736599df23..d5884096bd9 100644 --- a/src/main/orca-profiles/profile-project-session-transfer.ts +++ b/src/main/orca-profiles/profile-project-session-transfer.ts @@ -1,14 +1,12 @@ import { getDefaultWorkspaceSession } from '../../shared/constants' import type { ExecutionHostId } from '../../shared/execution-host' +import type { BrowserPage, BrowserWorkspace } from '../../shared/browser-workspace-types' +import type { Tab, TabGroup } from '../../shared/tab-types' +import type { TerminalTab } from '../../shared/terminal-tab-types' import type { - BrowserPage, - BrowserWorkspace, PersistedOpenFile, - Tab, - TabGroup, - TerminalTab, WorkspaceSessionState -} from '../../shared/types' +} from '../../shared/workspace-session-state-types' import { parseWorkspaceKey, worktreeWorkspaceKey } from '../../shared/workspace-scope' import { isRepoWorktreeId, diff --git a/src/main/orca-profiles/profile-project-source-removal.ts b/src/main/orca-profiles/profile-project-source-removal.ts index b120ba0c372..37480164ebc 100644 --- a/src/main/orca-profiles/profile-project-source-removal.ts +++ b/src/main/orca-profiles/profile-project-source-removal.ts @@ -1,4 +1,4 @@ -import type { WorkspaceKey } from '../../shared/types' +import type { WorkspaceKey } from '../../shared/folder-workspace-types' import { parseWorkspaceKey } from '../../shared/workspace-scope' import { rebuildRepoBackedProjectState, diff --git a/src/main/orca-profiles/profile-project-state-file.test.ts b/src/main/orca-profiles/profile-project-state-file.test.ts index 223d1229555..305ba53d869 100644 --- a/src/main/orca-profiles/profile-project-state-file.test.ts +++ b/src/main/orca-profiles/profile-project-state-file.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultPersistedState } from '../../shared/constants' -import type { PersistedState, Project, ProjectHostSetup, Repo } from '../../shared/types' +import type { PersistedState } from '../../shared/persisted-state-types' +import type { Project, ProjectHostSetup } from '../../shared/project-types' +import type { Repo } from '../../shared/repo-types' import { rebuildRepoBackedProjectState } from './profile-project-state-file' const upstreamIdentity = { diff --git a/src/main/orca-profiles/profile-project-state-file.ts b/src/main/orca-profiles/profile-project-state-file.ts index 9e097f13772..08cde398643 100644 --- a/src/main/orca-profiles/profile-project-state-file.ts +++ b/src/main/orca-profiles/profile-project-state-file.ts @@ -6,14 +6,11 @@ import { getDefaultPersistedState, getDefaultWorkspaceSession } from '../../shar import type { ExecutionHostId } from '../../shared/execution-host' import { projectHostSetupProjectionFromRepos } from '../../shared/project-host-setup-projection' import { carryProjectStateThroughIdentityChange } from '../../shared/project-identity-succession' -import type { - PersistedState, - Project, - ProjectHostSetup, - Repo, - SparsePreset, - WorkspaceSessionState -} from '../../shared/types' +import type { PersistedState } from '../../shared/persisted-state-types' +import type { Project, ProjectHostSetup } from '../../shared/project-types' +import type { Repo } from '../../shared/repo-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { SparsePreset } from '../../shared/worktree/create-types' import { getOrcaProfileDataFile } from './profile-index-store' export type TransferProfileState = PersistedState diff --git a/src/main/orca-profiles/profile-project-transfer-payload.ts b/src/main/orca-profiles/profile-project-transfer-payload.ts index 524aa02ad92..3700f1d7d91 100644 --- a/src/main/orca-profiles/profile-project-transfer-payload.ts +++ b/src/main/orca-profiles/profile-project-transfer-payload.ts @@ -2,7 +2,10 @@ import { randomUUID } from 'node:crypto' import { getRepoExecutionHostId, type ExecutionHostId } from '../../shared/execution-host' import { projectHostSetupProjectionFromRepos } from '../../shared/project-host-setup-projection' import type { SshTarget } from '../../shared/ssh-types' -import type { PersistedState, Repo, SparsePreset, WorkspaceKey } from '../../shared/types' +import type { WorkspaceKey } from '../../shared/folder-workspace-types' +import type { PersistedState } from '../../shared/persisted-state-types' +import type { Repo } from '../../shared/repo-types' +import type { SparsePreset } from '../../shared/worktree/create-types' import { parseWorkspaceKey } from '../../shared/workspace-scope' import type { TransferProfileState } from './profile-project-state-file' import { rebuildRepoBackedProjectState } from './profile-project-state-file' diff --git a/src/main/orca-profiles/profile-project-transfer.test.ts b/src/main/orca-profiles/profile-project-transfer.test.ts index a8983dc4979..5914021f16a 100644 --- a/src/main/orca-profiles/profile-project-transfer.test.ts +++ b/src/main/orca-profiles/profile-project-transfer.test.ts @@ -7,7 +7,9 @@ import { ORCA_PROFILE_INDEX_SCHEMA_VERSION, type OrcaProfileIndex } from '../../shared/orca-profiles' -import type { PersistedState, Repo, WorktreeMeta } from '../../shared/types' +import type { PersistedState } from '../../shared/persisted-state-types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import type { SshTarget } from '../../shared/ssh-types' const testState = { dir: '' } diff --git a/src/main/orca-profiles/profile-project-worktree-identity.ts b/src/main/orca-profiles/profile-project-worktree-identity.ts index 58aa55da8b3..cdc8d9182d2 100644 --- a/src/main/orca-profiles/profile-project-worktree-identity.ts +++ b/src/main/orca-profiles/profile-project-worktree-identity.ts @@ -1,6 +1,7 @@ import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { getRepoExecutionHostId } from '../../shared/execution-host' -import type { Repo, WorkspaceKey } from '../../shared/types' +import type { WorkspaceKey } from '../../shared/folder-workspace-types' +import type { Repo } from '../../shared/repo-types' import { parseWorkspaceKey, worktreeWorkspaceKey } from '../../shared/workspace-scope' import { WORKTREE_ID_SEPARATOR } from '../../shared/worktree/id' diff --git a/src/main/persistence-duplicate-repo-id-host-scope.test.ts b/src/main/persistence-duplicate-repo-id-host-scope.test.ts index 2f46dc9ca26..ade0038ee9b 100644 --- a/src/main/persistence-duplicate-repo-id-host-scope.test.ts +++ b/src/main/persistence-duplicate-repo-id-host-scope.test.ts @@ -8,7 +8,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { Project, ProjectHostSetup, Repo } from '../shared/types' +import type { Project, ProjectHostSetup } from '../shared/project-types' +import type { Repo } from '../shared/repo-types' import { getDefaultPersistedState } from '../shared/constants' const testState = { dir: '' } diff --git a/src/main/persistence-feature-interaction-broadcast.benchmark.test.ts b/src/main/persistence-feature-interaction-broadcast.benchmark.test.ts index 4c04ab22d01..cfb7f555b08 100644 --- a/src/main/persistence-feature-interaction-broadcast.benchmark.test.ts +++ b/src/main/persistence-feature-interaction-broadcast.benchmark.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { performance } from 'node:perf_hooks' import { afterEach, describe, expect, it, vi } from 'vitest' import { normalizeFeatureInteractions } from '../shared/feature-interactions' -import type { PersistedState } from '../shared/types' +import type { PersistedState } from '../shared/persisted-state-types' vi.mock('electron', () => ({ app: { getPath: () => tmpdir() }, diff --git a/src/main/persistence.test.ts b/src/main/persistence.test.ts index b2c56cf1aca..b92ed0c86c0 100644 --- a/src/main/persistence.test.ts +++ b/src/main/persistence.test.ts @@ -13,19 +13,14 @@ import { } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { - PersistedState, - Project, - ProjectGroup, - ProjectHostSetup, - Repo, - GlobalSettings, - TerminalPaneLayoutNode, - TerminalTab, - WorktreeLineage, - WorkspaceLineage, - WorkspaceSessionState -} from '../shared/types' +import type { GlobalSettings } from '../shared/global-settings-types' +import type { PersistedState } from '../shared/persisted-state-types' +import type { ProjectGroup } from '../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../shared/project-types' +import type { Repo } from '../shared/repo-types' +import type { TerminalPaneLayoutNode, TerminalTab } from '../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../shared/workspace-session-state-types' +import type { WorkspaceLineage, WorktreeLineage } from '../shared/worktree/lineage-types' import { isTerminalLeafId, makePaneKey } from '../shared/stable-pane-id' import { TERMINAL_SCROLLBACK_REPLAY_BYTE_LIMIT } from '../shared/terminal-scrollback-limits' import { MAX_BROWSER_HISTORY_ENTRIES } from '../shared/workspace-session-browser-history' diff --git a/src/main/persistence.ts b/src/main/persistence.ts index e537f1c9499..1fba61a5311 100644 --- a/src/main/persistence.ts +++ b/src/main/persistence.ts @@ -40,10 +40,22 @@ import { getAutomationLegacyRepoId } from '../shared/automation-run-identity' import { normalizeAutomationPrecheck } from '../shared/automation-precheck' import { normalizeProxyUrl } from '../shared/network-proxy' import { normalizeKagiSessionLink } from '../shared/browser-url' +import type { FolderWorkspace, WorkspaceKey } from '../shared/folder-workspace-types' +import type { GlobalSettings, OrcaWorkspaceLayout } from '../shared/global-settings-types' +import type { NotificationSettings } from '../shared/notification-settings-types' +import type { + OnboardingChecklistState, + OnboardingOutcome, + OnboardingState +} from '../shared/onboarding-state-types' +import type { + LegacyPaneKeyAliasEntry, + PersistedMobileClientTabSelections, + PersistedState +} from '../shared/persisted-state-types' +import type { ProjectGroup } from '../shared/project-group-types' import type { - PersistedState, Project, - ProjectUpdateArgs, ProjectHostSetup, ProjectHostSetupCreateArgs, ProjectHostSetupCreateResult, @@ -51,29 +63,22 @@ import type { ProjectHostSetupDeleteResult, ProjectHostSetupUpdateArgs, ProjectHostSetupUpdateResult, - RepoProjectHostSetupMethod, - Repo, - ProjectGroup, - FolderWorkspace, - SparsePreset, - PersistedMobileClientTabSelections, - WorktreeMeta, - WorktreeLineage, - WorkspaceLineage, - WorkspaceKey, - GlobalSettings, - OrcaWorkspaceLayout, - NotificationSettings, - OnboardingChecklistState, - OnboardingOutcome, - OnboardingState, - LegacyPaneKeyAliasEntry, - TerminalPaneLayoutNode, + ProjectUpdateArgs, + RepoProjectHostSetupMethod +} from '../shared/project-types' +import type { Repo } from '../shared/repo-types' +import type { TerminalLayoutSnapshot, - TerminalTab, + TerminalPaneLayoutNode, + TerminalTab +} from '../shared/terminal-tab-types' +import type { WorkspaceSessionPatch, WorkspaceSessionState -} from '../shared/types' +} from '../shared/workspace-session-state-types' +import type { SparsePreset } from '../shared/worktree/create-types' +import type { WorkspaceLineage, WorktreeLineage } from '../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' import { deriveGlobalWindowsRuntimeDefaultFromLegacySettings, normalizeProjectRuntimePreference diff --git a/src/main/plugins/plugin-approved-vm-recipes.ts b/src/main/plugins/plugin-approved-vm-recipes.ts index ab193a5280f..2ee20c63714 100644 --- a/src/main/plugins/plugin-approved-vm-recipes.ts +++ b/src/main/plugins/plugin-approved-vm-recipes.ts @@ -1,4 +1,4 @@ -import type { OrcaVmRecipe } from '../../shared/types' +import type { OrcaVmRecipe } from '../../shared/orca-yaml-hook-types' import type { PluginService } from './plugin-service' export async function getApprovedPluginVmRecipes( diff --git a/src/main/plugins/plugin-enablement.test.ts b/src/main/plugins/plugin-enablement.test.ts index 0ce3013d8a9..f0698b80a1b 100644 --- a/src/main/plugins/plugin-enablement.test.ts +++ b/src/main/plugins/plugin-enablement.test.ts @@ -1,7 +1,7 @@ import { tmpdir } from 'node:os' import { describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../shared/constants' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { pluginManifestSchema } from '../../shared/plugins/plugin-manifest' import type { Store } from '../persistence' import { applyPluginConsent, applyPluginEnablement } from './plugin-enablement' diff --git a/src/main/plugins/plugin-vm-recipe-registry.ts b/src/main/plugins/plugin-vm-recipe-registry.ts index ac2b90d9b64..eb7204fef7e 100644 --- a/src/main/plugins/plugin-vm-recipe-registry.ts +++ b/src/main/plugins/plugin-vm-recipe-registry.ts @@ -1,4 +1,4 @@ -import type { OrcaVmRecipe } from '../../shared/types' +import type { OrcaVmRecipe } from '../../shared/orca-yaml-hook-types' import { parsePluginVmRecipeArtifact } from '../../shared/plugins/plugin-vm-recipe-artifact' import { PLUGIN_VM_RECIPE_MAX_BYTES, diff --git a/src/main/project-groups/folder-workspace-path-status.test.ts b/src/main/project-groups/folder-workspace-path-status.test.ts index 495f4690434..25314576bc3 100644 --- a/src/main/project-groups/folder-workspace-path-status.test.ts +++ b/src/main/project-groups/folder-workspace-path-status.test.ts @@ -9,7 +9,8 @@ import { inferFolderWorkspacePathConnection } from './folder-workspace-path-status' import type { IFilesystemProvider } from '../providers/types' -import type { ProjectGroup, Repo } from '../../shared/types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Repo } from '../../shared/repo-types' function makeGroup(overrides: Partial = {}): ProjectGroup { return { diff --git a/src/main/project-groups/folder-workspace-path-status.ts b/src/main/project-groups/folder-workspace-path-status.ts index d8df44da72c..dbbd34a7034 100644 --- a/src/main/project-groups/folder-workspace-path-status.ts +++ b/src/main/project-groups/folder-workspace-path-status.ts @@ -5,7 +5,9 @@ import type { FolderWorkspacePathStatusRequest } from '../../shared/folder-workspace-path-status' import { getProjectGroupSubtreeIds } from '../../shared/project-groups' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Repo } from '../../shared/repo-types' import type { IFilesystemProvider } from '../providers/types' type FolderWorkspacePathStatusStore = { diff --git a/src/main/project-groups/nested-repo-discovery.ts b/src/main/project-groups/nested-repo-discovery.ts index 30453748767..d2df48e7970 100644 --- a/src/main/project-groups/nested-repo-discovery.ts +++ b/src/main/project-groups/nested-repo-discovery.ts @@ -6,7 +6,7 @@ import type { NestedRepoCandidate, NestedRepoScanOptions, NestedRepoScanResult -} from '../../shared/types' +} from '../../shared/project-group-types' import { isGitRepo } from '../git/repo' type NestedRepoDirectoryEntry = { diff --git a/src/main/project-groups/nested-repo-import-target.test.ts b/src/main/project-groups/nested-repo-import-target.test.ts index 60b1cf9b526..c630e102fb3 100644 --- a/src/main/project-groups/nested-repo-import-target.test.ts +++ b/src/main/project-groups/nested-repo-import-target.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' import { join } from 'node:path' -import type { GitWorktreeInfo } from '../../shared/types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import { listWorktreeGraph } from '../git/worktree' import { createNestedRepoImportTargetResolver, diff --git a/src/main/project-groups/nested-repo-import-target.ts b/src/main/project-groups/nested-repo-import-target.ts index bde2abb0ba9..be722716856 100644 --- a/src/main/project-groups/nested-repo-import-target.ts +++ b/src/main/project-groups/nested-repo-import-target.ts @@ -1,4 +1,4 @@ -import type { GitWorktreeInfo } from '../../shared/types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { listWorktreeGraph } from '../git/worktree' diff --git a/src/main/project-groups/nested-repo-import.test.ts b/src/main/project-groups/nested-repo-import.test.ts index be7a46e81ee..2b591fa9a71 100644 --- a/src/main/project-groups/nested-repo-import.test.ts +++ b/src/main/project-groups/nested-repo-import.test.ts @@ -4,7 +4,7 @@ import { resolveNestedRepoImportPaths, resolveNestedRepoSelection } from './nested-repo-import' -import type { ProjectGroup } from '../../shared/types' +import type { ProjectGroup } from '../../shared/project-group-types' function createGroupRecorder(): { groups: ProjectGroup[] diff --git a/src/main/project-groups/nested-repo-import.ts b/src/main/project-groups/nested-repo-import.ts index bcaf3ec25dd..17aee4a2994 100644 --- a/src/main/project-groups/nested-repo-import.ts +++ b/src/main/project-groups/nested-repo-import.ts @@ -1,4 +1,8 @@ -import type { NestedRepoScanResult, ProjectGroup, ProjectGroupImportMode } from '../../shared/types' +import type { + NestedRepoScanResult, + ProjectGroup, + ProjectGroupImportMode +} from '../../shared/project-group-types' import { getRuntimePathBasename, isPathInsideOrEqual, diff --git a/src/main/project-runtime-git-options.test.ts b/src/main/project-runtime-git-options.test.ts index 077bd43afd8..bff4694acb0 100644 --- a/src/main/project-runtime-git-options.test.ts +++ b/src/main/project-runtime-git-options.test.ts @@ -1,6 +1,7 @@ import { afterEach, describe, expect, it } from 'vitest' import type { Store } from './persistence' -import type { Project, Repo } from '../shared/types' +import type { Project } from '../shared/project-types' +import type { Repo } from '../shared/repo-types' import { getLocalProjectGitExecOptions, resolveLocalProjectRuntimeForRepo diff --git a/src/main/project-runtime-git-options.ts b/src/main/project-runtime-git-options.ts index 1c4e4945f32..32399aa5976 100644 --- a/src/main/project-runtime-git-options.ts +++ b/src/main/project-runtime-git-options.ts @@ -1,5 +1,5 @@ import type { Store } from './persistence' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { resolveLocalProjectRuntimeForRepo } from './local-project-runtime-resolution' import type { ProjectExecutionRuntimeResolution } from '../shared/project-execution-runtime' diff --git a/src/main/providers/filesystem-provider-contract.ts b/src/main/providers/filesystem-provider-contract.ts index 855f36da98c..ab467a7d89b 100644 --- a/src/main/providers/filesystem-provider-contract.ts +++ b/src/main/providers/filesystem-provider-contract.ts @@ -1,4 +1,5 @@ -import type { DirEntry, FsChangeEvent, SearchOptions, SearchResult } from '../../shared/types' +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' +import type { DirEntry, FsChangeEvent } from '../../shared/filesystem-entry-types' import type { WorkspaceSpaceDirectoryScanResult } from '../../shared/workspace-space-types' export type FileStat = { diff --git a/src/main/providers/git-provider-contract.ts b/src/main/providers/git-provider-contract.ts index d13bf5addf9..f70f3ddcc72 100644 --- a/src/main/providers/git-provider-contract.ts +++ b/src/main/providers/git-provider-contract.ts @@ -1,17 +1,17 @@ import type { - GitStatusResult, - GitDiffResult, GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../shared/git-fork-sync' +import type { GitConflictOperation, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitPushTarget, GitStagingArea, - GitUpstreamStatus, - GitWorktreeInfo, - RemoveWorktreeResult -} from '../../shared/types' + GitStatusResult, + GitUpstreamStatus +} from '../../shared/git-status-types' +import type { RemoveWorktreeResult } from '../../shared/worktree/create-types' +import type { GitPushTarget, GitWorktreeInfo } from '../../shared/worktree/types' import type { GitHistoryOptions, GitHistoryResult } from '../../shared/git-history' import type { CommitMessageDraftContext } from '../../shared/commit-message-generation' import type { GitProviderStatusOptions } from './git-provider-status-options' diff --git a/src/main/providers/pty-provider-contract.ts b/src/main/providers/pty-provider-contract.ts index 09f3cda62fd..cade47d84d2 100644 --- a/src/main/providers/pty-provider-contract.ts +++ b/src/main/providers/pty-provider-contract.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { PtyStartupIngressIntent } from '../../shared/pty-startup-ingress' import type { StartupCommandDelivery } from '../../shared/codex-startup-delivery' import type { TerminalOscLinkRange } from '../../shared/terminal-osc-link-ranges' diff --git a/src/main/providers/pty-spawn-result.ts b/src/main/providers/pty-spawn-result.ts index ebed657ee21..76bb4179069 100644 --- a/src/main/providers/pty-spawn-result.ts +++ b/src/main/providers/pty-spawn-result.ts @@ -1,5 +1,5 @@ import type { TerminalOscLinkRange } from '../../shared/terminal-osc-link-ranges' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { AgentSessionClaimedSpawnResult } from '../../shared/agent-session-host-authority' import type { PtyIncarnationId } from '../../shared/pty-incarnation' import type { PtySourceReceivingActivation } from '../../shared/pty-source-receiving-activation' diff --git a/src/main/providers/ssh-filesystem-provider-watch.ts b/src/main/providers/ssh-filesystem-provider-watch.ts index 8ef523860bd..95ef73632eb 100644 --- a/src/main/providers/ssh-filesystem-provider-watch.ts +++ b/src/main/providers/ssh-filesystem-provider-watch.ts @@ -1,5 +1,5 @@ import type { SshChannelMultiplexer } from '../ssh/ssh-channel-multiplexer' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { isMethodNotFoundError } from '../ssh/ssh-filesystem-stream-reader' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' import { PromiseSettlementWaiters } from '../../shared/promise-settlement-waiters' diff --git a/src/main/providers/ssh-filesystem-provider.ts b/src/main/providers/ssh-filesystem-provider.ts index 74f31b8e6bf..7fa2deb85b9 100644 --- a/src/main/providers/ssh-filesystem-provider.ts +++ b/src/main/providers/ssh-filesystem-provider.ts @@ -21,7 +21,8 @@ import type { FileUploadSession, TerminalArtifactAccessOptions } from './types' -import type { DirEntry, FsChangeEvent, SearchOptions, SearchResult } from '../../shared/types' +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' +import type { DirEntry, FsChangeEvent } from '../../shared/filesystem-entry-types' import { routeSshFilesystemWatchNotification } from './ssh-filesystem-watch-notifications' import type { WorkspaceSpaceDirectoryScanResult } from '../../shared/workspace-space-types' import { isWindowsRemoteHost, type RemoteHostPlatform } from '../ssh/ssh-remote-platform' diff --git a/src/main/providers/ssh-filesystem-watch-notifications.test.ts b/src/main/providers/ssh-filesystem-watch-notifications.test.ts index 3380fe42e89..d50b32bc826 100644 --- a/src/main/providers/ssh-filesystem-watch-notifications.test.ts +++ b/src/main/providers/ssh-filesystem-watch-notifications.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { isPathInsideOrEqual } from '../../shared/cross-platform-path' import { routeSshFilesystemWatchNotification } from './ssh-filesystem-watch-notifications' import type { WatchRegistration } from './ssh-filesystem-provider-watch' diff --git a/src/main/providers/ssh-filesystem-watch-notifications.ts b/src/main/providers/ssh-filesystem-watch-notifications.ts index c08afb21095..aed30f16473 100644 --- a/src/main/providers/ssh-filesystem-watch-notifications.ts +++ b/src/main/providers/ssh-filesystem-watch-notifications.ts @@ -1,4 +1,4 @@ -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { createNormalizedPathInsideOrEqualMatcher, normalizeRuntimePathForComparison diff --git a/src/main/providers/ssh-git-provider.ts b/src/main/providers/ssh-git-provider.ts index 51e2b91e1c2..1875e479f12 100644 --- a/src/main/providers/ssh-git-provider.ts +++ b/src/main/providers/ssh-git-provider.ts @@ -5,19 +5,19 @@ import type { SshChannelMultiplexer } from '../ssh/ssh-channel-multiplexer' import type { GitProviderStatusOptions, IGitProvider } from './types' import type { - GitStatusResult, - GitDiffResult, GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../shared/git-fork-sync' +import type { GitConflictOperation, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitPushTarget, GitStagingArea, - GitUpstreamStatus, - GitWorktreeInfo, - RemoveWorktreeResult -} from '../../shared/types' + GitStatusResult, + GitUpstreamStatus +} from '../../shared/git-status-types' +import type { RemoveWorktreeResult } from '../../shared/worktree/create-types' +import type { GitPushTarget, GitWorktreeInfo } from '../../shared/worktree/types' import type { GitHistoryOptions, GitHistoryResult } from '../../shared/git-history' import { buildHostedRemoteCommitUrl, buildHostedRemoteFileUrl } from '../git/hosted-remote-url' import { JsonRpcErrorCode } from '../ssh/relay-protocol' diff --git a/src/main/provisioned-root-ssh-adoption.test.ts b/src/main/provisioned-root-ssh-adoption.test.ts index d8d2c73c2ef..9d89fb27217 100644 --- a/src/main/provisioned-root-ssh-adoption.test.ts +++ b/src/main/provisioned-root-ssh-adoption.test.ts @@ -3,7 +3,10 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Store } from './persistence' -import type { AdoptProvisionedRootArgs, GitWorktreeInfo, Repo, WorktreeMeta } from '../shared/types' +import type { Repo } from '../shared/repo-types' +import type { AdoptProvisionedRootArgs } from '../shared/worktree/create-types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { listEphemeralVmRuntimes, upsertEphemeralVmRuntime diff --git a/src/main/provisioned-root-ssh-adoption.ts b/src/main/provisioned-root-ssh-adoption.ts index 0b67772a2e7..c8ba0bd340c 100644 --- a/src/main/provisioned-root-ssh-adoption.ts +++ b/src/main/provisioned-root-ssh-adoption.ts @@ -1,12 +1,12 @@ import { randomUUID } from 'node:crypto' import type { Store } from './persistence' +import type { Repo } from '../shared/repo-types' import type { AdoptProvisionedRootArgs, - AutomationWorkspaceProvenance, - CreateWorktreeResult, - Repo, - WorktreeMeta -} from '../shared/types' + CreateWorktreeResult +} from '../shared/worktree/create-types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' +import type { AutomationWorkspaceProvenance } from '../shared/worktree/types' import { isRuntimeOwnedSshTargetId, toSshExecutionHostId } from '../shared/execution-host' import { normalizeRuntimePathForComparison } from '../shared/cross-platform-path' import { diff --git a/src/main/rate-limits/account-runtime-target-sync.ts b/src/main/rate-limits/account-runtime-target-sync.ts index d78a4b68910..5b59b19552d 100644 --- a/src/main/rate-limits/account-runtime-target-sync.ts +++ b/src/main/rate-limits/account-runtime-target-sync.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { RateLimitState } from '../../shared/rate-limit-types' import type { RateLimitService } from './service' import { getInitialClaudeRateLimitTarget } from './claude-rate-limit-target' diff --git a/src/main/rate-limits/claude-rate-limit-target.ts b/src/main/rate-limits/claude-rate-limit-target.ts index dba2e396669..b28e8cfed8a 100644 --- a/src/main/rate-limits/claude-rate-limit-target.ts +++ b/src/main/rate-limits/claude-rate-limit-target.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getClaudeWslSelectionKey, normalizeClaudeRuntimeSelection, diff --git a/src/main/rate-limits/codex-rate-limit-target.ts b/src/main/rate-limits/codex-rate-limit-target.ts index 61c116bab2b..7d7232a3e87 100644 --- a/src/main/rate-limits/codex-rate-limit-target.ts +++ b/src/main/rate-limits/codex-rate-limit-target.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getWslSelectionKey, normalizeCodexRuntimeSelection, diff --git a/src/main/rate-limits/initial-account-rate-limit-target.test.ts b/src/main/rate-limits/initial-account-rate-limit-target.test.ts index 528a7527968..485fa8bcef6 100644 --- a/src/main/rate-limits/initial-account-rate-limit-target.test.ts +++ b/src/main/rate-limits/initial-account-rate-limit-target.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultSettings } from '../../shared/constants' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getInitialClaudeRateLimitTarget } from './claude-rate-limit-target' import { getInitialCodexRateLimitTarget } from './codex-rate-limit-target' diff --git a/src/main/rate-limits/initial-account-rate-limit-target.ts b/src/main/rate-limits/initial-account-rate-limit-target.ts index d60dab69daf..729f8f17407 100644 --- a/src/main/rate-limits/initial-account-rate-limit-target.ts +++ b/src/main/rate-limits/initial-account-rate-limit-target.ts @@ -1,5 +1,5 @@ import { resolveLocalAccountRuntimeTarget } from '../../shared/local-account-runtime' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' type AccountRuntimeSelection = { host: string | null diff --git a/src/main/repo-git-remote-identity-enrichment.test.ts b/src/main/repo-git-remote-identity-enrichment.test.ts index 24f498b03fc..b396e8a7e38 100644 --- a/src/main/repo-git-remote-identity-enrichment.test.ts +++ b/src/main/repo-git-remote-identity-enrichment.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { GitRemoteIdentity } from '../shared/git-remote-identity' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { type GitRemoteIdentityProbe, probeGitRemoteIdentity } from './repo-git-remote-identity' import { enrichMissingRepoGitRemoteIdentities, diff --git a/src/main/repo-git-remote-identity-enrichment.ts b/src/main/repo-git-remote-identity-enrichment.ts index e48177f2e62..145e33ddf90 100644 --- a/src/main/repo-git-remote-identity-enrichment.ts +++ b/src/main/repo-git-remote-identity-enrichment.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { probeGitRemoteIdentity } from './repo-git-remote-identity' const NO_IDENTITY_RETRY_TTL_MS = 5 * 60 * 1000 diff --git a/src/main/repo-git-username-enrichment.test.ts b/src/main/repo-git-username-enrichment.test.ts index bcecb8a2340..06ba252a6e6 100644 --- a/src/main/repo-git-username-enrichment.test.ts +++ b/src/main/repo-git-username-enrichment.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import type { ResolvedGitUsername } from './git/git-username' const resolveLocalGitUsernameDetailedMock = vi.hoisted(() => vi.fn()) diff --git a/src/main/repo-git-username-enrichment.ts b/src/main/repo-git-username-enrichment.ts index c5ae5c6d7b9..44b08ea73b1 100644 --- a/src/main/repo-git-username-enrichment.ts +++ b/src/main/repo-git-username-enrichment.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { resolveLocalGitUsernameDetailed } from './git/git-username' type RepoUsernameStore = { diff --git a/src/main/repo-icon-autodetect.ts b/src/main/repo-icon-autodetect.ts index 5fa931f06c5..4ea5f5d59d0 100644 --- a/src/main/repo-icon-autodetect.ts +++ b/src/main/repo-icon-autodetect.ts @@ -1,5 +1,6 @@ import { readFile, stat } from 'node:fs/promises' -import type { GitHubRepositoryIdentity, RepoKind } from '../shared/types' +import type { GitHubRepositoryIdentity } from '../shared/github/pull-request-types' +import type { RepoKind } from '../shared/repo-types' import { faviconUrlFromWebsite, githubAvatarIcon, diff --git a/src/main/repo-worktrees.ts b/src/main/repo-worktrees.ts index 4f45e7d8564..f4123c18889 100644 --- a/src/main/repo-worktrees.ts +++ b/src/main/repo-worktrees.ts @@ -1,4 +1,5 @@ -import type { GitWorktreeInfo, Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { listWorktrees } from './git/worktree' import { isFolderRepo } from '../shared/repo-kind' import { getSshGitProvider } from './providers/ssh-git-dispatch' diff --git a/src/main/runtime/claude-agent-teams-service.ts b/src/main/runtime/claude-agent-teams-service.ts index 1b0199c6bd0..34ef35ecb36 100644 --- a/src/main/runtime/claude-agent-teams-service.ts +++ b/src/main/runtime/claude-agent-teams-service.ts @@ -26,7 +26,8 @@ export class ClaudeAgentTeamsService { leaderHandle: string baseEnv: Record shimDir: string - shimBin: string + /** Absolute path only; null leaves the var unset so the shim refuses to guess a cwd-relative CLI. */ + shimBin: string | null }): AgentTeamsLaunchEnv { const teamId = `team-${randomUUID()}` const token = randomBytes(32).toString('base64url') @@ -47,8 +48,10 @@ export class ClaudeAgentTeamsService { ORCA_AGENT_TEAMS_TEAM_ID: teamId, ORCA_AGENT_TEAMS_TOKEN: token, ORCA_AGENT_TEAMS_LEADER_PANE: leaderPane, - ORCA_AGENT_TEAMS_SHIM_DIR: args.shimDir, - ORCA_AGENT_TEAMS_SHIM_BIN: args.shimBin + ORCA_AGENT_TEAMS_SHIM_DIR: args.shimDir + } + if (args.shimBin) { + env.ORCA_AGENT_TEAMS_SHIM_BIN = args.shimBin } if (args.baseEnv.ORCA_PAIRING_CODE) { env.ORCA_PAIRING_CODE = args.baseEnv.ORCA_PAIRING_CODE diff --git a/src/main/runtime/claude-agent-teams-shim-env.test.ts b/src/main/runtime/claude-agent-teams-shim-env.test.ts index 362291e3c26..7c62d2ae01a 100644 --- a/src/main/runtime/claude-agent-teams-shim-env.test.ts +++ b/src/main/runtime/claude-agent-teams-shim-env.test.ts @@ -1,3 +1,5 @@ +import { spawnSync } from 'node:child_process' +import { existsSync } from 'node:fs' import { chmod, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' @@ -5,7 +7,8 @@ import { afterEach, describe, expect, it } from 'vitest' import { buildClaudeAgentTeamsLaunchPlan, ensureClaudeAgentTeamsShimDir, - resolveClaudeAgentTeamsShimBin + resolveClaudeAgentTeamsShimBin, + windowsClaudeAgentTeamsShimScript } from './claude-agent-teams-shim-env' const roots: string[] = [] @@ -88,4 +91,105 @@ describe('claude agent teams shim env', () => { expect(resolveClaudeAgentTeamsShimBin({ PATH: root })).toBe(cliPath) }) + + it('refuses to resolve a CLI through relative PATH entries or a bare override', async () => { + const root = await mkdtemp(join(tmpdir(), 'orca-agent-teams-cli-')) + roots.push(root) + for (const name of ['orca', 'orca-ide', 'orca.cmd']) { + const path = join(root, name) + await writeFile(path, '#!/usr/bin/env sh\n', 'utf8') + if (process.platform !== 'win32') { + await chmod(path, 0o755) + } + } + + expect(resolveClaudeAgentTeamsShimBin({ PATH: '.' })).toBeNull() + expect(resolveClaudeAgentTeamsShimBin({ PATH: '' })).toBeNull() + expect( + resolveClaudeAgentTeamsShimBin({ PATH: '.', ORCA_AGENT_TEAMS_SHIM_BIN: 'orca' }) + ).toBeNull() + // Why: a bare override is still honored when it maps to a real absolute PATH entry. + expect(resolveClaudeAgentTeamsShimBin({ PATH: root, ORCA_AGENT_TEAMS_SHIM_BIN: 'orca' })).toBe( + join(root, 'orca') + ) + }) + + it.skipIf(process.platform !== 'win32')( + 'resolves through the Windows `Path` env spelling', + async () => { + const root = await mkdtemp(join(tmpdir(), 'orca-agent-teams-cli-')) + roots.push(root) + const cliPath = join(root, 'orca.cmd') + await writeFile(cliPath, '@echo off\r\n', 'utf8') + + expect(resolveClaudeAgentTeamsShimBin({ Path: root })).toBe(cliPath) + } + ) + + it('falls back to in-process teammates when no absolute CLI can be qualified', async () => { + const createTeamEnv = (): Record => { + throw new Error('native shim env must not be built without a qualified CLI') + } + + await expect( + buildClaudeAgentTeamsLaunchPlan({ + command: 'claude', + mode: 'native-panes-shim', + baseEnv: { PATH: '.' }, + createTeamEnv + }) + ).resolves.toEqual({ + command: 'claude --teammate-mode in-process', + env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' } + }) + }) + + it.skipIf(process.platform === 'win32')( + 'never runs a cwd-resolved orca when the shim bin is unqualified', + async () => { + const root = await mkdtemp(join(tmpdir(), 'orca-agent-teams-shim-')) + roots.push(root) + await ensureClaudeAgentTeamsShimDir(root) + const cwd = await mkdtemp(join(tmpdir(), 'orca-agent-teams-cwd-')) + roots.push(cwd) + const marker = join(cwd, 'hijacked') + for (const name of ['orca', 'orca-ide']) { + const decoy = join(cwd, name) + await writeFile(decoy, `#!/usr/bin/env sh\ntouch ${JSON.stringify(marker)}\n`, 'utf8') + await chmod(decoy, 0o755) + } + + const hijack = spawnSync(join(root, 'tmux'), ['display-message', '-p', '#{pane_id}'], { + cwd, + env: { PATH: `.:${process.env.PATH ?? ''}` }, + encoding: 'utf8' + }) + + expect(hijack.status).toBe(127) + expect(hijack.stderr).toContain('absolute path') + expect(existsSync(marker)).toBe(false) + + const cli = join(cwd, 'fake-orca') + await writeFile(cli, '#!/usr/bin/env sh\necho "ran $*"\n', 'utf8') + await chmod(cli, 0o755) + const qualified = spawnSync(join(root, 'tmux'), ['list-panes'], { + cwd, + env: { PATH: `.:${process.env.PATH ?? ''}`, ORCA_AGENT_TEAMS_SHIM_BIN: cli }, + encoding: 'utf8' + }) + + expect(qualified.status).toBe(0) + expect(qualified.stdout.trim()).toBe('ran agent-teams-tmux list-panes') + } + ) + + it('writes a Windows shim that rejects an unqualified shim bin', () => { + const script = windowsClaudeAgentTeamsShimScript() + + expect(script).not.toMatch(/^set "ORCA_AGENT_TEAMS_SHIM_BIN=orca/m) + expect(script).toContain('if "%ORCA_SHIM_BIN:~1,1%"==":" goto :run') + // Why: `call` would re-expand `%2`-style tmux pane args as batch parameters. + expect(script).toContain('\r\n"%ORCA_SHIM_BIN%" agent-teams-tmux %*\r\n') + expect(script).toContain('exit /b 127') + }) }) diff --git a/src/main/runtime/claude-agent-teams-shim-env.ts b/src/main/runtime/claude-agent-teams-shim-env.ts index 7f6c3a1922e..b8ff1b5a5c0 100644 --- a/src/main/runtime/claude-agent-teams-shim-env.ts +++ b/src/main/runtime/claude-agent-teams-shim-env.ts @@ -1,7 +1,7 @@ import { chmod, mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises' import { accessSync, constants, existsSync } from 'node:fs' import { homedir } from 'node:os' -import { delimiter, dirname, join } from 'node:path' +import { delimiter, dirname, isAbsolute, join } from 'node:path' import { addClaudeTeammateModeAuto, addClaudeTeammateModeInProcess, @@ -9,6 +9,7 @@ import { type ClaudeAgentTeamsMode } from '../../shared/claude-agent-teams-tmux-compat' import { getOrcaCliCommandNameForPlatform } from '../../shared/orca-cli-command-name' +import { resolvePathEnvKey } from '../pty/windows-path-segment-merge' export type ClaudeAgentTeamsLaunchPlan = { command: string @@ -20,7 +21,7 @@ export async function ensureClaudeAgentTeamsShimDir(root = defaultShimRoot()): P await mkdir(root, { recursive: true }) await writeIfChanged(join(root, 'tmux'), unixShimScript()) if (process.platform === 'win32') { - await writeIfChanged(join(root, 'tmux.cmd'), windowsShimScript()) + await writeIfChanged(join(root, 'tmux.cmd'), windowsClaudeAgentTeamsShimScript()) } return root } @@ -41,8 +42,15 @@ export async function buildClaudeAgentTeamsLaunchPlan(args: { env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' } } } - const shimDir = await ensureClaudeAgentTeamsShimDir() const shimBin = resolveClaudeAgentTeamsShimBin(args.baseEnv) + if (!shimBin) { + // Why: without an absolute CLI path the shim would resolve a bare `orca` against the pane cwd, so degrade instead. + return { + command: addClaudeTeammateModeInProcess(args.command), + env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' } + } + } + const shimDir = await ensureClaudeAgentTeamsShimDir() const env = args.createTeamEnv(shimDir, shimBin) return { command: addClaudeTeammateModeAuto(args.command), @@ -51,20 +59,27 @@ export async function buildClaudeAgentTeamsLaunchPlan(args: { } } +/** Absolute path to the Orca CLI that backs the tmux shim, or null when none can be qualified. */ export function resolveClaudeAgentTeamsShimBin( env: Record = process.env -): string { - if (env.ORCA_AGENT_TEAMS_SHIM_BIN) { - return env.ORCA_AGENT_TEAMS_SHIM_BIN +): string | null { + // Why: Windows callers pass an env spelt `Path`; reading only `PATH` there would find no CLI at all. + const pathValue = env[resolvePathEnvKey(env, process.platform)] + const override = env.ORCA_AGENT_TEAMS_SHIM_BIN + if (override) { + // Why: a bare override name would be resolved by the shim's shell against its cwd, so qualify it or ignore it. + const qualified = isAbsolute(override) ? override : findExecutableOnPath(override, pathValue) + if (qualified) { + return qualified + } } const bundled = bundledLauncherPath() if (bundled && isExecutableFile(bundled)) { return bundled } return ( - findExecutableOnPath(process.platform === 'win32' ? 'orca-dev.cmd' : 'orca-dev', env.PATH) ?? - findExecutableOnPath(getOrcaCliCommandNameForPlatform(process.platform), env.PATH) ?? - getOrcaCliCommandNameForPlatform(process.platform) + findExecutableOnPath(process.platform === 'win32' ? 'orca-dev.cmd' : 'orca-dev', pathValue) ?? + findExecutableOnPath(getOrcaCliCommandNameForPlatform(process.platform), pathValue) ) } @@ -90,7 +105,8 @@ function bundledLauncherPath(): string | null { function findExecutableOnPath(command: string, pathValue: string | undefined): string | null { for (const directory of pathValue?.split(delimiter) ?? []) { - if (!directory) { + // Why: empty and relative PATH entries resolve against a cwd we do not control, which is the hijack we are avoiding. + if (!directory || !isAbsolute(directory)) { continue } const candidate = join(directory, command) @@ -113,23 +129,42 @@ function isExecutableFile(candidate: string): boolean { } } +// Why: an unqualified command name is resolved against the invoking pane's cwd (always on cmd.exe, and via `.`/empty +// PATH entries on POSIX), so a stray `orca` next to the agent's files would run with the team token. Demand a +// fully-qualified binary instead of guessing one. function unixShimScript(): string { return [ '#!/usr/bin/env sh', 'set -eu', - `exec "\${ORCA_AGENT_TEAMS_SHIM_BIN:-${getOrcaCliCommandNameForPlatform(process.platform)}}" agent-teams-tmux "$@"`, + 'orca_bin=${ORCA_AGENT_TEAMS_SHIM_BIN:-}', + 'case $orca_bin in', + ' /*|[A-Za-z]:[\\\\/]*) ;;', + ' *)', + ' echo "orca agent-teams tmux shim: ORCA_AGENT_TEAMS_SHIM_BIN must be an absolute path" >&2', + ' exit 127', + ' ;;', + 'esac', + 'exec "$orca_bin" agent-teams-tmux "$@"', '' ].join('\n') } -function windowsShimScript(): string { +export function windowsClaudeAgentTeamsShimScript(): string { return [ '@echo off', 'setlocal', - 'if "%ORCA_AGENT_TEAMS_SHIM_BIN%"=="" (', - ` set "ORCA_AGENT_TEAMS_SHIM_BIN=${getOrcaCliCommandNameForPlatform(process.platform)}"`, - ')', - '"%ORCA_AGENT_TEAMS_SHIM_BIN%" agent-teams-tmux %*', + 'set "ORCA_SHIM_BIN=%ORCA_AGENT_TEAMS_SHIM_BIN%"', + 'if not defined ORCA_SHIM_BIN goto :unqualified', + 'if "%ORCA_SHIM_BIN:~1,1%"==":" goto :run', + 'if "%ORCA_SHIM_BIN:~0,2%"=="\\\\" goto :run', + 'goto :unqualified', + ':run', + // Why: no `call` — its extra percent-expansion pass would rewrite tmux pane args such as `%2` into batch parameters. + '"%ORCA_SHIM_BIN%" agent-teams-tmux %*', + 'exit /b %ERRORLEVEL%', + ':unqualified', + 'echo orca agent-teams tmux shim: ORCA_AGENT_TEAMS_SHIM_BIN must be an absolute path 1>&2', + 'exit /b 127', '' ].join('\r\n') } diff --git a/src/main/runtime/client-session-tab-selection-persistence.ts b/src/main/runtime/client-session-tab-selection-persistence.ts index 358144cb49d..7ae391a040d 100644 --- a/src/main/runtime/client-session-tab-selection-persistence.ts +++ b/src/main/runtime/client-session-tab-selection-persistence.ts @@ -1,7 +1,7 @@ import type { PersistedMobileClientTabSelection, PersistedMobileClientTabSelections -} from '../../shared/types' +} from '../../shared/persisted-state-types' function normalizeClientSessionTabSelection( raw: unknown diff --git a/src/main/runtime/client-session-tab-selection.test.ts b/src/main/runtime/client-session-tab-selection.test.ts index b0db68c5ca5..eb83e6144ca 100644 --- a/src/main/runtime/client-session-tab-selection.test.ts +++ b/src/main/runtime/client-session-tab-selection.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import type { PersistedMobileClientTabSelections } from '../../shared/types' +import type { PersistedMobileClientTabSelections } from '../../shared/persisted-state-types' import { activateClientSessionTabSelection, ClientSessionTabSelectionStore, diff --git a/src/main/runtime/client-session-tab-selection.ts b/src/main/runtime/client-session-tab-selection.ts index 7c8f84f88d2..94aa42419de 100644 --- a/src/main/runtime/client-session-tab-selection.ts +++ b/src/main/runtime/client-session-tab-selection.ts @@ -2,7 +2,7 @@ import type { RuntimeMobileSessionClientTab, RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import type { PersistedMobileClientTabSelections } from '../../shared/types' +import type { PersistedMobileClientTabSelections } from '../../shared/persisted-state-types' import { normalizePersistedMobileClientTabSelections } from './client-session-tab-selection-persistence' export type ClientSessionTabSelection = { diff --git a/src/main/runtime/file-watcher-host.test.ts b/src/main/runtime/file-watcher-host.test.ts index 10f88f228f5..72608084a9a 100644 --- a/src/main/runtime/file-watcher-host.test.ts +++ b/src/main/runtime/file-watcher-host.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import type { WatcherProcessCallback, WatcherProcessHooks, diff --git a/src/main/runtime/file-watcher-host.ts b/src/main/runtime/file-watcher-host.ts index 59a8071bd58..e7f1d29e41d 100644 --- a/src/main/runtime/file-watcher-host.ts +++ b/src/main/runtime/file-watcher-host.ts @@ -1,4 +1,4 @@ -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { forgetRuntimeWatcherProcessRoot, resetRuntimeWatcherProcessForTest, diff --git a/src/main/runtime/folder-workspace-pty-identity.test.ts b/src/main/runtime/folder-workspace-pty-identity.test.ts index db6b1c1927a..5c3c28e7ff6 100644 --- a/src/main/runtime/folder-workspace-pty-identity.test.ts +++ b/src/main/runtime/folder-workspace-pty-identity.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { RuntimeClientEvent } from '../../shared/runtime-client-events' import { makePaneKey } from '../../shared/stable-pane-id' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR } from '../../shared/worktree/id' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts b/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts index 7228ac4e8f4..b1c8d866eb6 100644 --- a/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts +++ b/src/main/runtime/graph-sync-mobile-snapshot-gating.test.ts @@ -9,7 +9,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' // Freshness predicate of shouldApplyWebSessionTabsSnapshot in diff --git a/src/main/runtime/graph-sync-payload-partition.test.ts b/src/main/runtime/graph-sync-payload-partition.test.ts index 3d73ad14dc4..a3b3a930023 100644 --- a/src/main/runtime/graph-sync-payload-partition.test.ts +++ b/src/main/runtime/graph-sync-payload-partition.test.ts @@ -9,7 +9,7 @@ import type { RuntimeMobileSessionTabsSnapshot, RuntimeSyncWindowGraphResult } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const WT_A = 'repo-1::/tmp/worktree-a' diff --git a/src/main/runtime/headless-tab-group-split-layout.ts b/src/main/runtime/headless-tab-group-split-layout.ts index da7351d49bd..9e3d56b5f73 100644 --- a/src/main/runtime/headless-tab-group-split-layout.ts +++ b/src/main/runtime/headless-tab-group-split-layout.ts @@ -1,5 +1,5 @@ import type { RuntimeMobileSessionTabGroup } from '../../shared/runtime-types' -import type { TabGroupLayoutNode } from '../../shared/types' +import type { TabGroupLayoutNode } from '../../shared/tab-types' /** * Headless ("Orca server") tab-GROUP split operations (distinct from terminal diff --git a/src/main/runtime/headless-terminal-query-reply-policy.ts b/src/main/runtime/headless-terminal-query-reply-policy.ts index 05b1883efff..fca7c623331 100644 --- a/src/main/runtime/headless-terminal-query-reply-policy.ts +++ b/src/main/runtime/headless-terminal-query-reply-policy.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' /* oxlint-disable no-control-regex -- XTVERSION replies are DCS control sequences. */ const XTVERSION_REPLY = new RegExp('^\u001bP>\\|[^\u001b]*\u001b\\\\$') diff --git a/src/main/runtime/headless-terminal-split-layout.test.ts b/src/main/runtime/headless-terminal-split-layout.test.ts index 0fa0d33b1c0..bb745d49c61 100644 --- a/src/main/runtime/headless-terminal-split-layout.test.ts +++ b/src/main/runtime/headless-terminal-split-layout.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../shared/types' +import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' import { buildHeadlessTerminalSplitLayout, countTerminalLayoutLeaves, diff --git a/src/main/runtime/headless-terminal-split-layout.ts b/src/main/runtime/headless-terminal-split-layout.ts index 834625f9ef3..681d70451e8 100644 --- a/src/main/runtime/headless-terminal-split-layout.ts +++ b/src/main/runtime/headless-terminal-split-layout.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../shared/terminal-tab-types' export function terminalLayoutContainsLeaf( node: TerminalPaneLayoutNode | null | undefined, diff --git a/src/main/runtime/missing-worktree-terminal-reconciliation.test.ts b/src/main/runtime/missing-worktree-terminal-reconciliation.test.ts index 22cf484a13e..329dd2319d2 100644 --- a/src/main/runtime/missing-worktree-terminal-reconciliation.test.ts +++ b/src/main/runtime/missing-worktree-terminal-reconciliation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { IPtyProvider } from '../providers/types' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { OrcaRuntimeService } from './orca-runtime' import { stopMissingWorktreeTerminals } from './missing-worktree-terminal-reconciliation' diff --git a/src/main/runtime/missing-worktree-terminal-reconciliation.ts b/src/main/runtime/missing-worktree-terminal-reconciliation.ts index 25cd1f2129d..11f888a5404 100644 --- a/src/main/runtime/missing-worktree-terminal-reconciliation.ts +++ b/src/main/runtime/missing-worktree-terminal-reconciliation.ts @@ -1,5 +1,5 @@ import type { IPtyProvider } from '../providers/types' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { splitWorktreeId } from '../../shared/worktree/id' import { mapWithConcurrency } from '../../shared/map-with-concurrency' import type { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/mobile-session-terminal-persistence-retirement.ts b/src/main/runtime/mobile-session-terminal-persistence-retirement.ts index 017b0f6ab47..e94155f342c 100644 --- a/src/main/runtime/mobile-session-terminal-persistence-retirement.ts +++ b/src/main/runtime/mobile-session-terminal-persistence-retirement.ts @@ -1,4 +1,5 @@ -import type { WorkspaceSessionState, WorkspaceVisibleTabType } from '../../shared/types' +import type { WorkspaceVisibleTabType } from '../../shared/tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { pruneTabGroupLayoutAfterRetirement, repairMobileSessionTabGroupsAfterRetirement, diff --git a/src/main/runtime/mobile-session-terminal-retirement.ts b/src/main/runtime/mobile-session-terminal-retirement.ts index acd75fb5580..9aaf69c7fb4 100644 --- a/src/main/runtime/mobile-session-terminal-retirement.ts +++ b/src/main/runtime/mobile-session-terminal-retirement.ts @@ -4,11 +4,11 @@ import type { RuntimeMobileSessionTabsSnapshot, RuntimeMobileSessionTerminalTab } from '../../shared/runtime-types' +import type { TabGroupLayoutNode } from '../../shared/tab-types' import type { - TabGroupLayoutNode, TerminalLayoutSnapshot, TerminalPaneLayoutNode -} from '../../shared/types' +} from '../../shared/terminal-tab-types' export type RetiredTerminalSurface = { worktreeId: string diff --git a/src/main/runtime/multi-client-navigation-isolation.integration.test.ts b/src/main/runtime/multi-client-navigation-isolation.integration.test.ts index 50fd09a4639..5d683dc77dd 100644 --- a/src/main/runtime/multi-client-navigation-isolation.integration.test.ts +++ b/src/main/runtime/multi-client-navigation-isolation.integration.test.ts @@ -5,7 +5,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import WebSocket from 'ws' import { parsePairingCode } from '../../shared/pairing' import type { RuntimeMobileSessionTabsResult } from '../../shared/runtime-types' -import type { PersistedMobileClientTabSelections } from '../../shared/types' +import type { PersistedMobileClientTabSelections } from '../../shared/persisted-state-types' import { OrcaRuntimeService } from './orca-runtime' import { decrypt, deriveSharedKey, encrypt, generateKeyPair } from './rpc/e2ee-crypto' import { OrcaRuntimeRpcServer } from './runtime-rpc' diff --git a/src/main/runtime/orca-runtime-automations.test.ts b/src/main/runtime/orca-runtime-automations.test.ts index 0c6d32d215d..14236869a29 100644 --- a/src/main/runtime/orca-runtime-automations.test.ts +++ b/src/main/runtime/orca-runtime-automations.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import type { Automation } from '../../shared/automations-types' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' const repo: Repo = { id: 'repo-1', diff --git a/src/main/runtime/orca-runtime-browser.test.ts b/src/main/runtime/orca-runtime-browser.test.ts index 5cc74aa4ad4..007a091745d 100644 --- a/src/main/runtime/orca-runtime-browser.test.ts +++ b/src/main/runtime/orca-runtime-browser.test.ts @@ -329,6 +329,56 @@ describe('RuntimeBrowserCommands browser screencast', () => { ) }) + it('returns the renderer page identity before navigation settles', async () => { + const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') + const navigation = deferred<{ title: string; url: string }>() + const webContents = { send: vi.fn() } + webContents.send = vi.fn((_channel: string, data: { requestId: string }) => { + const handler = ipcMainOnMock.mock.calls.find( + ([eventName]) => eventName === 'browser:tabCreateReply' + )?.[1] as + | ((event: unknown, reply: { requestId: string; browserPageId?: string }) => void) + | undefined + handler?.({ sender: webContents } as never, { + requestId: data.requestId, + browserPageId: 'page-slow-navigation' + }) + }) + const bridge = { + getRegisteredTabs: vi.fn(() => new Map([['page-slow-navigation', 101]])), + goto: vi.fn(() => navigation.promise), + setActiveTab: vi.fn() + } as unknown as AgentBrowserBridge + const commands = new RuntimeBrowserCommands( + createHost({ + getAgentBrowserBridge: () => bridge, + getAvailableAuthoritativeWindow: vi.fn(() => ({}) as never), + getAuthoritativeWindow: vi.fn(() => ({ webContents }) as never) + }) + ) + + let created: { browserPageId: string } | null = null + const creation = commands + .browserTabCreate({ + worktree: 'id:wt-1', + url: 'https://example.com/slow', + waitForRegistration: true + }) + .then((result) => { + created = result + return result + }) + await vi.waitFor(() => expect(bridge.goto).toHaveBeenCalledOnce()) + await new Promise((resolve) => setImmediate(resolve)) + + try { + expect(created).toEqual({ browserPageId: 'page-slow-navigation' }) + } finally { + navigation.resolve({ title: 'Slow page', url: 'https://example.com/slow' }) + await creation + } + }) + it('rejects unknown explicit profile ids before requesting a renderer tab', async () => { const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') const send = vi.fn() @@ -509,7 +559,7 @@ describe('RuntimeBrowserCommands browser screencast', () => { expect(result.browserPageId).toBe('page-target') }) - it('wakes the requested page before closing a page-scoped tab', async () => { + it('closes the requested renderer page without waiting for guest registration', async () => { const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') webContentsFromIdMock.mockReturnValue({ isDestroyed: () => true }) const send = vi.fn((channel: string, data: { requestId?: string }) => { @@ -537,11 +587,8 @@ describe('RuntimeBrowserCommands browser screencast', () => { commands.browserTabClose({ worktree: 'id:wt-1', page: 'page-target' }) ).resolves.toEqual({ closed: true }) - expect(send).toHaveBeenCalledWith('browser:activateView', { - worktreeId: 'wt-1', - browserPageId: 'page-target' - }) - expect(waitForTabRegistrationMock).toHaveBeenCalledWith('page-target') + expect(send).not.toHaveBeenCalledWith('browser:activateView', expect.anything()) + expect(waitForTabRegistrationMock).not.toHaveBeenCalled() expect(waitForWorktreeTabRegistrationMock).not.toHaveBeenCalled() expect(send).toHaveBeenCalledWith( 'browser:requestTabClose', @@ -549,6 +596,42 @@ describe('RuntimeBrowserCommands browser screencast', () => { ) }) + it('lets the renderer close an acknowledged page whose guest never registered', async () => { + const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') + const send = vi.fn((channel: string, data: { requestId?: string }) => { + if (channel !== 'browser:requestTabClose') { + return + } + const handler = ipcMainOnMock.mock.calls.find( + ([eventName]) => eventName === 'browser:tabCloseReply' + )?.[1] as ((event: unknown, reply: { requestId: string }) => void) | undefined + handler?.({} as never, { requestId: data.requestId ?? '' }) + }) + const bridge = { + getRegisteredTabs: vi.fn(() => new Map()), + getActivePageId: vi.fn(() => null), + getActiveWebContentsId: vi.fn(() => null) + } as unknown as AgentBrowserBridge + const authoritativeWindow = { webContents: { send } } as never + const commands = new RuntimeBrowserCommands( + createHost({ + getAgentBrowserBridge: () => bridge, + getAvailableAuthoritativeWindow: vi.fn(() => authoritativeWindow), + getAuthoritativeWindow: vi.fn(() => authoritativeWindow) + }) + ) + + await expect( + commands.browserTabClose({ worktree: 'id:wt-1', page: 'page-canonical' }) + ).resolves.toEqual({ closed: true }) + + expect(waitForTabRegistrationMock).not.toHaveBeenCalled() + expect(send).toHaveBeenCalledWith( + 'browser:requestTabClose', + expect.objectContaining({ tabId: 'page-canonical', worktreeId: 'wt-1' }) + ) + }) + it('lets a new same-page stream take over an active stale stream', async () => { const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') webContentsFromIdMock.mockReturnValue({ isDestroyed: () => false }) @@ -648,6 +731,34 @@ describe('RuntimeBrowserCommands headless offscreen routing', () => { expect(setActiveTab).toHaveBeenCalledWith(202, 'wt-1') }) + it('publishes a headless session snapshot after explicit navigation', async () => { + const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') + webContentsFromIdMock.mockReturnValue({ isDestroyed: () => false }) + const notifyHeadlessBrowserSessionTabsChanged = vi.fn() + const bridge = { + getRegisteredTabs: vi.fn(() => new Map([['page-offscreen', 202]])), + getActivePageId: vi.fn(() => 'page-offscreen'), + goto: vi.fn(async () => ({ title: 'Loaded', url: 'https://example.com/loaded' })) + } as unknown as AgentBrowserBridge + const commands = new RuntimeBrowserCommands( + createHost({ + getAgentBrowserBridge: () => bridge, + getAvailableAuthoritativeWindow: vi.fn(() => null), + notifyHeadlessBrowserSessionTabsChanged + }) + ) + + await expect( + commands.browserGoto({ + worktree: 'id:wt-1', + page: 'page-offscreen', + url: 'https://example.com/loaded' + }) + ).resolves.toEqual({ title: 'Loaded', url: 'https://example.com/loaded' }) + + expect(notifyHeadlessBrowserSessionTabsChanged).toHaveBeenCalledWith('wt-1') + }) + it('rejects tab creation when neither a renderer nor an offscreen backend is available', async () => { const { RuntimeBrowserCommands } = await import('./orca-runtime-browser') const commands = new RuntimeBrowserCommands( @@ -686,6 +797,10 @@ describe('RuntimeBrowserCommands headless offscreen routing', () => { expect(closeTab).toHaveBeenCalledWith('page-offscreen') // The renderer close IPC must not be used in headless mode. expect(ipcMainOnMock).not.toHaveBeenCalledWith('browser:tabCloseReply', expect.anything()) + await expect( + commands.browserTabClose({ worktree: 'id:wt-1', page: 'page-other' }) + ).rejects.toMatchObject({ code: 'browser_tab_not_found' }) + expect(closeTab).toHaveBeenCalledTimes(1) }) it('closes the active headless tab on an implicit close', async () => { diff --git a/src/main/runtime/orca-runtime-browser.ts b/src/main/runtime/orca-runtime-browser.ts index 6070cefd374..e076eeadad0 100644 --- a/src/main/runtime/orca-runtime-browser.ts +++ b/src/main/runtime/orca-runtime-browser.ts @@ -52,7 +52,7 @@ import type { import type { BrowserCertificateProceedResult, BrowserSessionUserAgentMode -} from '../../shared/types' +} from '../../shared/browser-workspace-types' import type { AgentBrowserBridge } from '../browser/agent-browser-bridge' import type { BrowserBackend } from '../browser/browser-backend' import { browserCertificateTrustController, browserManager } from '../browser/browser-manager' @@ -156,6 +156,7 @@ export type RuntimeBrowserCommandHost = { browserPageId: string, targetGroupId?: string ): void + notifyHeadlessBrowserSessionTabsChanged?(worktreeId: string): void } export class RuntimeBrowserCommands { @@ -358,6 +359,9 @@ export class RuntimeBrowserCommands { if (pageId) { this.notifyRendererNavigation(pageId, result.url, result.title) } + if (!this.host.getAvailableAuthoritativeWindow() && target.worktreeId) { + this.host.notifyHeadlessBrowserSessionTabsChanged?.(target.worktreeId) + } return result } @@ -1294,6 +1298,7 @@ export class RuntimeBrowserCommands { async browserTabCreate(params: { url?: string worktree?: string + page?: string profileId?: string waitForRegistration?: boolean activate?: boolean @@ -1322,7 +1327,8 @@ export class RuntimeBrowserCommands { worktreeId, params.profileId, params.activate, - params.targetGroupId + params.targetGroupId, + params.page ) } const { browserPageId } = await this.createBrowserTabInRenderer( @@ -1330,7 +1336,8 @@ export class RuntimeBrowserCommands { worktreeId, params.profileId, params.profileId ? sessionPartition : undefined, - params.activate + params.activate, + params.page ) // Why: the webview must mount and register before the tab is operable, so wait here (returning the ID anyway on timeout). @@ -1351,9 +1358,19 @@ export class RuntimeBrowserCommands { // Why: the webview loads about:blank first; route navigation through the bridge so its registered owner remains authoritative. if (url && url !== 'about:blank') { - try { + const navigate = async (): Promise => { const result = await bridge.goto(url, worktreeId, browserPageId) this.notifyRendererNavigation(browserPageId, result.url, result.title) + if (!this.host.getAvailableAuthoritativeWindow() && worktreeId) { + this.host.notifyHeadlessBrowserSessionTabsChanged?.(worktreeId) + } + } + if (params.waitForRegistration === true) { + void navigate().catch(() => {}) + return { browserPageId } + } + try { + await navigate() } catch { // Tab exists but navigation failed — caller can retry with explicit goto } @@ -1587,22 +1604,15 @@ export class RuntimeBrowserCommands { worktree?: string }): Promise<{ closed: boolean }> { const bridge = this.requireAgentBrowserBridge() - const pageTarget = - typeof params.page === 'string' && params.page.length > 0 - ? await this.resolveBrowserCommandTarget({ worktree: params.worktree, page: params.page }) - : null - const worktreeId = - pageTarget?.worktreeId ?? (await this.resolveBrowserWorktreeId(params.worktree)) + const explicitPage = typeof params.page === 'string' && params.page.length > 0 + const worktreeId = explicitPage + ? params.worktree + ? (await this.host.resolveWorktreeSelector(params.worktree)).id + : undefined + : await this.resolveBrowserWorktreeId(params.worktree) let tabId: string | null = null if (typeof params.page === 'string' && params.page.length > 0) { - if (!bridge.getRegisteredTabs(worktreeId).has(params.page)) { - const scope = worktreeId ? ' in this worktree' : '' - throw new BrowserError( - 'browser_tab_not_found', - `Browser page ${params.page} was not found${scope}` - ) - } tabId = params.page } else if (params.index !== undefined) { const tabs = bridge.getRegisteredTabs(worktreeId) @@ -1622,20 +1632,31 @@ export class RuntimeBrowserCommands { } // Why: headless serve has no renderer to ask, so destroy the offscreen page directly. - const offscreen = this.host.getAvailableAuthoritativeWindow() - ? null - : this.host.getOffscreenBrowserBackend() + const authoritativeWindow = this.host.getAvailableAuthoritativeWindow() + const offscreen = authoritativeWindow ? null : this.host.getOffscreenBrowserBackend() if (offscreen) { // Why: resolve the active page for implicit close so we don't report success while closing nothing. const resolvedTabId = tabId ?? bridge.getActivePageId(worktreeId) if (!resolvedTabId) { return { closed: false } } + if (explicitPage && !bridge.getRegisteredTabs(worktreeId).has(resolvedTabId)) { + const scope = worktreeId ? ' in this worktree' : '' + throw new BrowserError( + 'browser_tab_not_found', + `Browser page ${resolvedTabId} was not found${scope}` + ) + } await offscreen.closeTab(resolvedTabId) return { closed: true } } - const win = this.host.getAuthoritativeWindow() + if (!authoritativeWindow && tabId && !bridge.getRegisteredTabs(worktreeId).has(tabId)) { + const scope = worktreeId ? ' in this worktree' : '' + throw new BrowserError('browser_tab_not_found', `Browser page ${tabId} was not found${scope}`) + } + + const win = authoritativeWindow ?? this.host.getAuthoritativeWindow() const requestId = randomUUID() await new Promise((resolve, reject) => { const timer = setTimeout(() => { @@ -1645,7 +1666,7 @@ export class RuntimeBrowserCommands { const handler = ( _event: Electron.IpcMainEvent, - reply: { requestId: string; error?: string } + reply: { requestId: string; error?: string; code?: 'browser_tab_not_found' } ): void => { if (reply.requestId !== requestId) { return @@ -1653,7 +1674,11 @@ export class RuntimeBrowserCommands { clearTimeout(timer) ipcMain.removeListener('browser:tabCloseReply', handler) if (reply.error) { - reject(new Error(reply.error)) + reject( + reply.code === 'browser_tab_not_found' + ? new BrowserError('browser_tab_not_found', reply.error) + : new Error(reply.error) + ) } else { resolve() } @@ -1706,9 +1731,15 @@ export class RuntimeBrowserCommands { worktreeId?: string, profileId?: string, activate?: boolean, - targetGroupId?: string + targetGroupId?: string, + requestedPageId?: string ): Promise<{ browserPageId: string }> { - const { browserPageId } = await offscreen.createTab({ url, worktreeId, profileId }) + const { browserPageId } = await offscreen.createTab({ + url, + worktreeId, + profileId, + ...(requestedPageId ? { browserPageId: requestedPageId } : {}) + }) const bridge = this.host.getAgentBrowserBridge() const wcId = bridge?.getRegisteredTabs(worktreeId).get(browserPageId) if (bridge && wcId != null) { @@ -1726,7 +1757,8 @@ export class RuntimeBrowserCommands { worktreeId: string | undefined, profileId: string | undefined, sessionPartition: string | undefined, - activate?: boolean + activate?: boolean, + requestedPageId?: string ): Promise<{ browserPageId: string }> { const win = this.host.getAuthoritativeWindow() const requestId = randomUUID() @@ -1757,6 +1789,7 @@ export class RuntimeBrowserCommands { requestId, url, worktreeId, + ...(requestedPageId ? { browserPageId: requestedPageId } : {}), // Why: keep these undefined (not null) when no profile is chosen so the renderer still applies default-profile inheritance. sessionProfileId: profileId, sessionPartition, diff --git a/src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts b/src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts index 23f7adc4df8..5735b6dabc1 100644 --- a/src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts +++ b/src/main/runtime/orca-runtime-emulator-folder-workspace.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { EmulatorSessionInfo } from '../emulator/emulator-types' -import type { FolderWorkspace } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' import { OrcaRuntimeService } from './orca-runtime' const FOLDER_WORKSPACE_ID = 'folder-workspace-1' diff --git a/src/main/runtime/orca-runtime-emulator.ts b/src/main/runtime/orca-runtime-emulator.ts index 7c82980c2a3..2e08614b8df 100644 --- a/src/main/runtime/orca-runtime-emulator.ts +++ b/src/main/runtime/orca-runtime-emulator.ts @@ -11,7 +11,7 @@ import type { EmulatorGesturePoint } from '../emulator/emulator-gesture-sender' import type { EmulatorSessionInfo } from '../emulator/emulator-types' import type { SimulatorDevice } from '../emulator/simctl-simulator-devices' import type { EmulatorDevice } from '../emulator/backends/emulator-backend' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' // Settings slice the emulator surface needs; keeps the host contract honest (no widening cast). type EmulatorHostSettings = Pick< diff --git a/src/main/runtime/orca-runtime-files-ssh-rearm.test.ts b/src/main/runtime/orca-runtime-files-ssh-rearm.test.ts index f25f6c9051a..28d734cab63 100644 --- a/src/main/runtime/orca-runtime-files-ssh-rearm.test.ts +++ b/src/main/runtime/orca-runtime-files-ssh-rearm.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' const { resolveAuthorizedPathMock, diff --git a/src/main/runtime/orca-runtime-files-watch.test.ts b/src/main/runtime/orca-runtime-files-watch.test.ts index 41c57b5c44f..e89bc26958b 100644 --- a/src/main/runtime/orca-runtime-files-watch.test.ts +++ b/src/main/runtime/orca-runtime-files-watch.test.ts @@ -3,7 +3,7 @@ import { EventEmitter } from 'node:events' import type * as Fs from 'node:fs' import type * as FsPromises from 'node:fs/promises' import type * as FilesystemAuth from '../ipc/filesystem-auth' -import type { FsChangeEvent } from '../../shared/types' +import type { FsChangeEvent } from '../../shared/filesystem-entry-types' import { WatcherProcessFailure } from '../ipc/parcel-watcher-process-failure' import { acquireWatcherRemovalGate } from '../ipc/watcher-removal-gate' diff --git a/src/main/runtime/orca-runtime-files.ts b/src/main/runtime/orca-runtime-files.ts index fd8f76796a6..826f8a9e2d3 100644 --- a/src/main/runtime/orca-runtime-files.ts +++ b/src/main/runtime/orca-runtime-files.ts @@ -20,15 +20,9 @@ import { } from 'node:fs/promises' import { homedir, tmpdir } from 'node:os' import { basename, dirname, extname, join } from 'node:path' -import type { - DirEntry, - FsChangeEvent, - GitWorktreeInfo, - MarkdownDocument, - SearchOptions, - SearchResult, - Worktree -} from '../../shared/types' +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' +import type { DirEntry, FsChangeEvent, MarkdownDocument } from '../../shared/filesystem-entry-types' +import type { GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import { isPathInsideOrEqual, isRuntimePathAbsolute, diff --git a/src/main/runtime/orca-runtime-git-branch-diff.test.ts b/src/main/runtime/orca-runtime-git-branch-diff.test.ts index 4c469758760..aba155a6895 100644 --- a/src/main/runtime/orca-runtime-git-branch-diff.test.ts +++ b/src/main/runtime/orca-runtime-git-branch-diff.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { RuntimeGitCommands, type ResolvedRuntimeGitWorktree } from './orca-runtime-git' const getSshGitProviderMock = vi.hoisted(() => vi.fn()) diff --git a/src/main/runtime/orca-runtime-git.test.ts b/src/main/runtime/orca-runtime-git.test.ts index 68c6ff798c9..26b993704f2 100644 --- a/src/main/runtime/orca-runtime-git.test.ts +++ b/src/main/runtime/orca-runtime-git.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type * as GitStatusModule from '../git/status' import type * as CommitMessageTextGenerationModule from '../text-generation/commit-message-text-generation' import type * as PullRequestContextModule from '../text-generation/pull-request-context' diff --git a/src/main/runtime/orca-runtime-git.ts b/src/main/runtime/orca-runtime-git.ts index 67812240e43..3d802d219ea 100644 --- a/src/main/runtime/orca-runtime-git.ts +++ b/src/main/runtime/orca-runtime-git.ts @@ -2,20 +2,19 @@ import type { GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../shared/git-fork-sync' +import type { GitConflictOperation, - GitDiffResult, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitPushTarget, GitStagingArea, GitStatusResult, - GitUpstreamStatus, - GitWorktreeInfo, - GlobalSettings, - Repo, - TuiAgent, - Worktree -} from '../../shared/types' + GitUpstreamStatus +} from '../../shared/git-status-types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' +import type { TuiAgent } from '../../shared/tui-agent' +import type { GitPushTarget, GitWorktreeInfo, Worktree } from '../../shared/worktree/types' import type { CommitMessageDraftContext } from '../../shared/commit-message-generation' import { getCommitMessageModelDiscoveryHostKey } from '../../shared/commit-message-host-key' import type { GitHistoryOptions, GitHistoryResult } from '../../shared/git-history' diff --git a/src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts b/src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts index 8bca2c77ed4..75f0c4fd31e 100644 --- a/src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts +++ b/src/main/runtime/orca-runtime-headless-hydration-repo-gate.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const WORKTREE_ID = 'repo::/worktree' diff --git a/src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts b/src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts index 39298111388..9b9bcfac784 100644 --- a/src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts +++ b/src/main/runtime/orca-runtime-linked-issue-live-meta.integration.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorktreeMeta } from '../../shared/types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import type * as GitStatusModule from '../git/status' import type * as CommitMessageTextGenerationModule from '../text-generation/commit-message-text-generation' import type * as WorktreeModule from '../git/worktree' diff --git a/src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts b/src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts index 1534be0deaa..30ef460b587 100644 --- a/src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts +++ b/src/main/runtime/orca-runtime-terminal-retirement-host-partition.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../shared/execution-host' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { OrcaRuntimeService } from './orca-runtime' const CONNECTION_ID = 'conn-1' diff --git a/src/main/runtime/orca-runtime-terminal-retirement.test.ts b/src/main/runtime/orca-runtime-terminal-retirement.test.ts index 342017557cc..ae441b48d44 100644 --- a/src/main/runtime/orca-runtime-terminal-retirement.test.ts +++ b/src/main/runtime/orca-runtime-terminal-retirement.test.ts @@ -5,7 +5,7 @@ import type { RuntimeMobileSessionTabsResult, RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { sanitizeWorkspaceSessionTerminalRetirements } from './mobile-session-terminal-persistence-retirement' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/orca-runtime-terminal-split-authority.test.ts b/src/main/runtime/orca-runtime-terminal-split-authority.test.ts index 3aa6ae47603..3d4bd91536a 100644 --- a/src/main/runtime/orca-runtime-terminal-split-authority.test.ts +++ b/src/main/runtime/orca-runtime-terminal-split-authority.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../shared/constants' import type { RuntimeMobileSessionTabsSnapshot } from '../../shared/runtime-types' -import type { TerminalLayoutSnapshot, WorkspaceSessionState } from '../../shared/types' +import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { makePaneKey } from '../../shared/stable-pane-id' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/orca-runtime.test.ts b/src/main/runtime/orca-runtime.test.ts index b3ac09e784b..729730605ec 100644 --- a/src/main/runtime/orca-runtime.test.ts +++ b/src/main/runtime/orca-runtime.test.ts @@ -10,16 +10,13 @@ import { lstat, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises' import { homedir, tmpdir } from 'node:os' import { basename, join, win32 } from 'node:path' import { ipcMain } from 'electron' -import type { - FolderWorkspace, - ProjectGroup, - Tab, - TerminalLayoutSnapshot, - WorktreeLineage, - WorktreeMeta, - WorkspaceLineage, - WorkspaceSessionState -} from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Tab } from '../../shared/tab-types' +import type { TerminalLayoutSnapshot } from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import { AGENT_STATUS_STALE_AFTER_MS } from '../../shared/agent-status-types' import { reviewHeadRemoteRefComponent, @@ -14303,6 +14300,8 @@ describe('OrcaRuntimeService', () => { command: 'claude --resume claude-session', env: { CLAUDE_PROFILE: 'captured', + // Why: native panes need an absolute CLI; without one the plan degrades to in-process teammates. + ORCA_AGENT_TEAMS_SHIM_BIN: '/opt/orca/bin/orca-ide', ORCA_AGENT_TEAMS_TEAM_ID: 'stale-team', ORCA_AGENT_TEAMS_TOKEN: 'stale-token', TMUX: '/tmp/orca-claude-agent-teams/stale-team,0,1' @@ -14313,6 +14312,7 @@ describe('OrcaRuntimeService', () => { agentArgs: '--teammate-mode auto', agentEnv: { CLAUDE_PROFILE: 'captured', + ORCA_AGENT_TEAMS_SHIM_BIN: '/opt/orca/bin/orca-ide', ORCA_AGENT_TEAMS_TEAM_ID: 'stale-team', ORCA_AGENT_TEAMS_TOKEN: 'stale-token', TMUX: '/tmp/orca-claude-agent-teams/stale-team,0,1' @@ -14327,6 +14327,7 @@ describe('OrcaRuntimeService', () => { expect(spawnCall?.env).toMatchObject({ CLAUDE_PROFILE: 'captured', CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1', + ORCA_AGENT_TEAMS_SHIM_BIN: '/opt/orca/bin/orca-ide', TMUX_PANE: '%1' }) expect(spawnCall?.env?.ORCA_AGENT_TEAMS_TEAM_ID).toMatch(/^team-/) diff --git a/src/main/runtime/orca-runtime.ts b/src/main/runtime/orca-runtime.ts index a1fc612c04e..1164f25e851 100644 --- a/src/main/runtime/orca-runtime.ts +++ b/src/main/runtime/orca-runtime.ts @@ -177,24 +177,52 @@ import type { AutomationUpdateInput, AutomationWorkspaceMode } from '../../shared/automations-types' +import type { DirEntry, FilesystemPathFlavor } from '../../shared/filesystem-entry-types' +import type { FolderWorkspace, WorkspaceKey } from '../../shared/folder-workspace-types' +import type { + GitHubPRReviewCommentInput, + GitHubReactionContent +} from '../../shared/github/comment-types' +import type { PRRefreshOutcome } from '../../shared/github/pull-request-refresh-types' +import type { GitHubOwnerRepo, GitHubPRFile } from '../../shared/github/pull-request-types' +import type { ListWorkItemsResult } from '../../shared/github/work-item-types' +import type { + GitLabIssueUpdate, + GitLabMRInlineCommentInput, + GitLabProjectRef, + GitLabWorkItem, + MRListState +} from '../../shared/gitlab-types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { - AutomationWorkspaceProvenance, - CliWorkspaceProvenance, - BaseRefSearchResult, - CreateWorktreeResult, - DetectedWorktree, - DetectedWorktreeListResult, - ForceDeleteWorktreeBranchResult, - GitHubPrStartPoint, - GitPushTarget, - BranchPrefixStrategy, - GitWorktreeInfo, GitHubCreateIssueFields, - GitHubOwnerRepo, - GlobalSettings, - PersistedUIState, + GitHubIssueUpdate, + GitHubPullRequestStateUpdate, + LinearIssueUpdate +} from '../../shared/issue-mutation-types' +import type { + JiraConnectArgs, + JiraCreateIssueArgs, + JiraIssueFilter, + JiraIssueUpdate, + JiraSiteSelection +} from '../../shared/jira-types' +import type { LinearCustomViewModel, LinearProjectSummary } from '../../shared/linear/project-types' +import type { LinearWorkspaceSelection } from '../../shared/linear/workspace-types' +import type { + ClaudeRateLimitAccountsState, + CodexRateLimitAccountsState +} from '../../shared/managed-account-types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { MemorySnapshot, StatsSummary } from '../../shared/process-stats-types' +import type { + NestedRepoScanResult, + ProjectGroup, + ProjectGroupImportMode, + ProjectGroupImportResult +} from '../../shared/project-group-types' +import type { Project, - ProjectUpdateArgs, ProjectHostSetup, ProjectHostSetupCloneArgs, ProjectHostSetupCreateArgs, @@ -205,60 +233,47 @@ import type { ProjectHostSetupResult, ProjectHostSetupUpdateArgs, ProjectHostSetupUpdateResult, - Repo, - RemoveWorktreeResult, - StatsSummary, - Worktree, - WorktreeLineage, - WorkspaceLineage, - WorkspaceKey, - WorktreeLineageWarning, - WorktreeMeta, - WorktreeBaseStatusEvent, - WorktreeRemoteBranchConflictEvent, - WorktreeStartupLaunch, - LinearCustomViewModel, - JiraConnectArgs, - JiraCreateIssueArgs, - JiraIssueFilter, - JiraIssueUpdate, - JiraSiteSelection, - LinearIssueUpdate, - LinearProjectSummary, - LinearWorkspaceSelection, - NestedRepoScanResult, - ProjectGroup, - FolderWorkspace, - ProjectGroupImportMode, - ProjectGroupImportResult, - MemorySnapshot, - Tab, - TabGroupLayoutNode, - TerminalQuickCommand, + ProjectUpdateArgs +} from '../../shared/project-types' +import type { BaseRefSearchResult, Repo } from '../../shared/repo-types' +import type { Tab, TabGroupLayoutNode } from '../../shared/tab-types' +import type { TerminalQuickCommand } from '../../shared/terminal-quick-command-types' +import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, - TerminalTab, - TuiAgent, - WorkspaceCreateTelemetrySource, - WorkspaceSessionState, + TerminalTab +} from '../../shared/terminal-tab-types' +import type { TuiAgent } from '../../shared/tui-agent' +import type { BranchPrefixStrategy } from '../../shared/ui-chrome-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../shared/workspace-source' +import type { + WorktreeBaseStatusEvent, + WorktreeRemoteBranchConflictEvent +} from '../../shared/worktree/base-ref-drift-types' +import type { + CreateWorktreeResult, + ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult +} from '../../shared/worktree/create-types' +import type { WorktreeStartupLaunch } from '../../shared/worktree/launch-types' +import type { + WorkspaceLineage, + WorktreeLineage, + WorktreeLineageWarning +} from '../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { + AutomationWorkspaceProvenance, + CliWorkspaceProvenance, + DetectedWorktree, + DetectedWorktreeListResult, + GitHubPrStartPoint, + GitPushTarget, + GitWorktreeInfo, WorkspaceLinkedItem, - DirEntry, - FilesystemPathFlavor, - GitHubIssueUpdate, - GitHubPullRequestStateUpdate, - GitHubPRFile, - GitHubPRReviewCommentInput, - GitHubReactionContent, - GitLabIssueUpdate, - GitLabMRInlineCommentInput, - GitLabProjectRef, - GitLabWorkItem, - ListWorkItemsResult, - MRListState, - PRRefreshOutcome, - ClaudeRateLimitAccountsState, - CodexRateLimitAccountsState -} from '../../shared/types' + Worktree +} from '../../shared/worktree/types' import type { TaskSourceContext } from '../../shared/task-source-context' import { assertWorktreeUnlockedForRemoval } from '../../shared/worktree/removal' import { @@ -29485,7 +29500,6 @@ export class OrcaRuntimeService { if (!this.store) { return { worktrees: [], platformByRepoId: new Map() } } - const now = Date.now() const metaById = this.store.getAllWorktreeMeta() ?? {} const repos = this.store.getRepos() const projectRuntimeByRepoId = resolveLocalProjectRuntimesForRepos(this.requireStore(), repos) @@ -29566,11 +29580,13 @@ export class OrcaRuntimeService { this.store?.getAllWorktreeLineage?.() ?? {} ) // Why: short TTL avoids shelling out on every frequent poll while still catching worktree changes made outside Orca. + // Why stamped on completion, not entry: a compute that spent longer than the TTL would otherwise publish an + // already-expired entry, so the very next poll recomputes and every caller repeats the same slow path. if (generation === this.resolvedWorktreeGeneration) { this.resolvedWorktreeCache = { worktrees, platformByRepoId, - expiresAt: now + RESOLVED_WORKTREE_CACHE_TTL_MS + expiresAt: Date.now() + RESOLVED_WORKTREE_CACHE_TTL_MS } } return { worktrees, platformByRepoId } @@ -35577,7 +35593,9 @@ export class OrcaRuntimeService { getAvailableAuthoritativeWindow: () => this.getAvailableAuthoritativeWindow(), getOffscreenBrowserBackend: () => this.offscreenBrowserBackend, // Why: bind directly, not a wrapper arrow — a hand-listed wrapper dropped targetGroupId, so a right-split browser landed in the left. - markHeadlessBrowserSessionTabActive: this.markHeadlessBrowserSessionTabActive.bind(this) + markHeadlessBrowserSessionTabActive: this.markHeadlessBrowserSessionTabActive.bind(this), + notifyHeadlessBrowserSessionTabsChanged: (worktreeId) => + this.notifyMobileSessionTabsChanged(worktreeId) }) private readonly emulatorCommands = new RuntimeEmulatorCommands({ @@ -36092,13 +36110,20 @@ const WORKTREE_SCAN_AGENT_SCRATCH_TTL_MS = 5 * 60_000 // edits are invisible to it and a tip living in packed-refs or reftable only gets an mtime + size // stamp, so a real scan still runs on this interval even while the probe reports "unchanged". export const WORKTREE_SCAN_ADMIN_RECONCILE_INTERVAL_MS = 5 * 60_000 -// Why so generous: a healthy but slow host (100+ linked worktrees, Windows Defender, cold dentry -// cache, cloud placeholders) must still get to reuse its scan. Well under WORKTREE_LIST_TIMEOUT_MS, -// and expiring yields `null` — the existing "cannot prove unchanged" sentinel, so a real scan runs. -// Exceeding RESOLVED_WORKTREE_REPO_TIMEOUT_MS is deliberate, not a bug: the payoff is skipping a -// `git worktree list` subprocess, not cutting this caller's latency — that caller is already capped. -export const WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS = 10_000 -const RESOLVED_WORKTREE_REPO_TIMEOUT_MS = 5000 +export const RESOLVED_WORKTREE_REPO_TIMEOUT_MS = 5000 +// Why reserved rather than spent on the probe: when the probe expires the caller still has to run +// `git worktree list` and answer inside the same budget, so the fallback needs its own room. Sized +// for a healthy Git on a busy host, well above the tens of milliseconds a warm list costs. +const WORKTREE_SCAN_FALLBACK_ALLOWANCE_MS = 1500 +// Why derived from the caller's budget instead of a generous absolute: this wait runs *inside* +// RESOLVED_WORKTREE_REPO_TIMEOUT_MS, so outlasting it buys nothing — the caller has already given up +// and restored persisted rows — while turning a reusable scan into a full-budget stall that repeats +// on every TTL expiry. Subtracting keeps that invariant true by construction if either side moves. +// Why not smaller: the probe reads a subset of what the fallback scan reads, so a probe too slow to +// fit is a scan that will not fit either — waiting is strictly better right up to the budget. +// Expiring yields `null`, the existing "cannot prove unchanged" sentinel, so a real scan runs. +export const WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS = + RESOLVED_WORKTREE_REPO_TIMEOUT_MS - WORKTREE_SCAN_FALLBACK_ALLOWANCE_MS export function resolveWorktreeScanCacheTtlMs(repo: Pick): number { return !repo.connectionId && isAgentScratchRepoRootPath(repo.path) diff --git a/src/main/runtime/orchestration-worker-workspace-resolution.test.ts b/src/main/runtime/orchestration-worker-workspace-resolution.test.ts index 4ab96e249c7..d95139045a7 100644 --- a/src/main/runtime/orchestration-worker-workspace-resolution.test.ts +++ b/src/main/runtime/orchestration-worker-workspace-resolution.test.ts @@ -29,7 +29,10 @@ vi.mock('../providers/ssh-git-dispatch', () => ({ })) import { FLOATING_TERMINAL_WORKTREE_ID } from '../../shared/constants' -import type { FolderWorkspace, ProjectGroup, Repo, WorktreeMeta } from '../../shared/types' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../shared/project-group-types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import { registerSshFilesystemProvider, unregisterSshFilesystemProvider diff --git a/src/main/runtime/remote-runtime-request-connection.integration.test.ts b/src/main/runtime/remote-runtime-request-connection.integration.test.ts index a4c10384735..dcf4bccdb24 100644 --- a/src/main/runtime/remote-runtime-request-connection.integration.test.ts +++ b/src/main/runtime/remote-runtime-request-connection.integration.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it, vi } from 'vitest' import { getDefaultRepoHookSettings } from '../../shared/constants' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { parsePairingCode } from '../../shared/pairing' import { RemoteRuntimeRequestConnection } from '../../shared/remote-runtime-request-connection' import { RemoteRuntimeSharedControlConnection } from '../../shared/remote-runtime-shared-control-connection' diff --git a/src/main/runtime/remote-server-updater.ts b/src/main/runtime/remote-server-updater.ts index a61caa3d591..736713f4424 100644 --- a/src/main/runtime/remote-server-updater.ts +++ b/src/main/runtime/remote-server-updater.ts @@ -2,7 +2,7 @@ import type { RemoteServerUpdateInstallResult, RemoteServerUpdaterSnapshot } from '../../shared/remote-server-update' -import type { UpdateCheckOptions } from '../../shared/types' +import type { UpdateCheckOptions } from '../../shared/update-status-types' type RemoteServerUpdaterAdapter = { getSnapshot: (runtimeId: string) => RemoteServerUpdaterSnapshot diff --git a/src/main/runtime/repo-icon-fork-backfill.test.ts b/src/main/runtime/repo-icon-fork-backfill.test.ts index dc7ffb85463..aacba27f191 100644 --- a/src/main/runtime/repo-icon-fork-backfill.test.ts +++ b/src/main/runtime/repo-icon-fork-backfill.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import * as client from '../github/client' import { OrcaRuntimeService } from './orca-runtime' diff --git a/src/main/runtime/repo-worktree-resolution-scan.ts b/src/main/runtime/repo-worktree-resolution-scan.ts index 7c84e87ad84..052118cf2bf 100644 --- a/src/main/runtime/repo-worktree-resolution-scan.ts +++ b/src/main/runtime/repo-worktree-resolution-scan.ts @@ -1,4 +1,4 @@ -import type { GitWorktreeInfo } from '../../shared/types' +import type { GitWorktreeInfo } from '../../shared/worktree/types' import { listWorktreesStrict } from '../git/worktree' import type { LocalProjectWorktreeGitOptions } from '../project-runtime-git-options' diff --git a/src/main/runtime/rpc/dispatcher-feature-interactions.test.ts b/src/main/runtime/rpc/dispatcher-feature-interactions.test.ts index e33da2b2661..d0f1e6fbc39 100644 --- a/src/main/runtime/rpc/dispatcher-feature-interactions.test.ts +++ b/src/main/runtime/rpc/dispatcher-feature-interactions.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { z } from 'zod' -import type { PersistedUIState } from '../../../shared/types' +import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' import { getDefaultUIState } from '../../../shared/constants' import { ORCHESTRATION_CONTRACT_VERSION } from '../../../shared/protocol-version' import { diff --git a/src/main/runtime/rpc/methods/browser-core.ts b/src/main/runtime/rpc/methods/browser-core.ts index 41484d20768..8e8478c7b39 100644 --- a/src/main/runtime/rpc/methods/browser-core.ts +++ b/src/main/runtime/rpc/methods/browser-core.ts @@ -24,7 +24,6 @@ import { TabCurrent, TabSetProfile, TabClose, - TabCreate, TabList, TabProfileClone, TabShow, @@ -32,6 +31,7 @@ import { Upload, Wait } from './browser-schemas' +import { BrowserTabCreateParams } from './browser-tab-create-schema' import { BROWSER_TEXT_METHODS } from './browser-text-rpc-methods' const CertificateProceed = BrowserTarget.extend({ @@ -112,7 +112,7 @@ export const BROWSER_CORE_METHODS: RpcMethod[] = [ }), defineMethod({ name: 'browser.tabCreate', - params: TabCreate, + params: BrowserTabCreateParams, handler: async (params, { runtime }) => runtime.browserTabCreate(params) }), defineMethod({ diff --git a/src/main/runtime/rpc/methods/browser-schemas.ts b/src/main/runtime/rpc/methods/browser-schemas.ts index a9a2a440f8f..47027451aeb 100644 --- a/src/main/runtime/rpc/methods/browser-schemas.ts +++ b/src/main/runtime/rpc/methods/browser-schemas.ts @@ -84,7 +84,6 @@ export const Eval = BrowserTarget.extend({ }) export const TabList = z.object({ worktree: OptionalString }) - // Why: --index xor --page must be present. The refine guards that invariant // so the dispatcher surfaces a single legible error instead of either shape // leaking into the runtime. @@ -111,18 +110,6 @@ export const TabSwitch = BrowserTarget.extend({ { message: 'Missing required --index (non-negative integer) or --page' } ) -export const TabCreate = z.object({ - url: OptionalString, - worktree: OptionalString, - profileId: OptionalString, - waitForRegistration: z.boolean().optional(), - // User-initiated opens focus the tab; agent/automation opens stay background. - activate: z.boolean().optional(), - // Why: the split group whose "+" was clicked, so a headless host places the - // new browser tab there instead of coalescing into the first/active group. - targetGroupId: OptionalString -}) - export const TabShow = z.object({ page: requiredString('Missing required --page'), worktree: OptionalString diff --git a/src/main/runtime/rpc/methods/browser-tab-create-schema.ts b/src/main/runtime/rpc/methods/browser-tab-create-schema.ts new file mode 100644 index 00000000000..f431b0ec225 --- /dev/null +++ b/src/main/runtime/rpc/methods/browser-tab-create-schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod' +import { OptionalString } from '../schemas' + +export const BrowserTabCreateParams = z.object({ + url: OptionalString, + worktree: OptionalString, + page: OptionalString, + profileId: OptionalString, + waitForRegistration: z.boolean().optional(), + activate: z.boolean().optional(), + targetGroupId: OptionalString +}) diff --git a/src/main/runtime/rpc/methods/client-ui-schemas.ts b/src/main/runtime/rpc/methods/client-ui-schemas.ts index 3d9e0e2e69e..2e2555038ed 100644 --- a/src/main/runtime/rpc/methods/client-ui-schemas.ts +++ b/src/main/runtime/rpc/methods/client-ui-schemas.ts @@ -18,7 +18,7 @@ import { WORKTREE_CARD_PROPERTIES } from '../../../../shared/worktree/card-properties' import { isPluginPanelTabKey } from '../../../../shared/plugins/plugin-manifest' -import type { TaskProvider } from '../../../../shared/types' +import type { TaskProvider } from '../../../../shared/task-providers' import { ClientUiWorkspaceFilterFields } from './client-ui-workspace-filter-fields' import { TaskResumeState } from './task-resume-state-schema' import { omitUndefinedValues, tolerateUnknownValues } from './ui-update-value-tolerance' diff --git a/src/main/runtime/rpc/methods/client-ui.test.ts b/src/main/runtime/rpc/methods/client-ui.test.ts index a8323413b23..dc9afe1caaf 100644 --- a/src/main/runtime/rpc/methods/client-ui.test.ts +++ b/src/main/runtime/rpc/methods/client-ui.test.ts @@ -8,7 +8,7 @@ import { MAX_QUICK_COMMAND_TERMINAL_TEXT_LENGTH } from '../../../../shared/terminal-quick-commands' import { DEFAULT_WORKTREE_CARD_PROPERTIES } from '../../../../shared/worktree/card-properties' -import type { PersistedUIState } from '../../../../shared/types' +import type { PersistedUIState } from '../../../../shared/persisted-ui-state-types' import type { OrcaRuntimeService } from '../../orca-runtime' import type { RpcRequest } from '../core' import { RpcDispatcher } from '../dispatcher' diff --git a/src/main/runtime/rpc/methods/client-ui.ts b/src/main/runtime/rpc/methods/client-ui.ts index 73326756cd9..70ad9e9df57 100644 --- a/src/main/runtime/rpc/methods/client-ui.ts +++ b/src/main/runtime/rpc/methods/client-ui.ts @@ -1,4 +1,4 @@ -import type { PersistedUIState } from '../../../../shared/types' +import type { PersistedUIState } from '../../../../shared/persisted-ui-state-types' import { defineMethod, type RpcMethod } from '../core' import { FeatureInteractionIdParam, diff --git a/src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts b/src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts index 75af9a11bd8..81cd8b7814a 100644 --- a/src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts +++ b/src/main/runtime/rpc/methods/file-watch-event-batcher.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../../../shared/types' +import type { FsChangeEvent } from '../../../../shared/filesystem-entry-types' import { createFileWatchEventBatcher } from './file-watch-event-batcher' describe('createFileWatchEventBatcher', () => { diff --git a/src/main/runtime/rpc/methods/file-watch-event-batcher.ts b/src/main/runtime/rpc/methods/file-watch-event-batcher.ts index 24e93e2affc..da2a21d3d9b 100644 --- a/src/main/runtime/rpc/methods/file-watch-event-batcher.ts +++ b/src/main/runtime/rpc/methods/file-watch-event-batcher.ts @@ -2,7 +2,7 @@ import { WATCH_BATCH_MAX_WAIT_MS, WATCH_BATCH_TRAILING_MS } from '../../../../shared/filesystem-watch-batch-window' -import type { FsChangeEvent } from '../../../../shared/types' +import type { FsChangeEvent } from '../../../../shared/filesystem-entry-types' import { MAX_BATCHED_WATCHER_EVENTS } from '../../../ipc/filesystem-watcher-event-batch' export function createFileWatchEventBatcher( diff --git a/src/main/runtime/rpc/methods/git.ts b/src/main/runtime/rpc/methods/git.ts index 9363551507e..167b82966f5 100644 --- a/src/main/runtime/rpc/methods/git.ts +++ b/src/main/runtime/rpc/methods/git.ts @@ -1,6 +1,6 @@ /* eslint-disable max-lines -- Why: this table is the runtime git RPC contract; splitting it would make method coverage harder to audit. */ import { defineMethod, type RpcMethod } from '../core' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ResolvedSourceControlAiGenerationParams } from '../../../../shared/source-control-ai' import { GitBranchCompare, diff --git a/src/main/runtime/rpc/methods/orchestration-federation.ts b/src/main/runtime/rpc/methods/orchestration-federation.ts index f1c68310931..83cbbfe385f 100644 --- a/src/main/runtime/rpc/methods/orchestration-federation.ts +++ b/src/main/runtime/rpc/methods/orchestration-federation.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { buildDispatchPreamble } from '../../orchestration/preamble' import { OrchestrationError } from '../../orchestration/orchestration-error' import { defineMethod, type RpcMethod } from '../core' diff --git a/src/main/runtime/rpc/methods/orchestration-worker-launch-preferences.ts b/src/main/runtime/rpc/methods/orchestration-worker-launch-preferences.ts index 76c60064691..f907571e2bc 100644 --- a/src/main/runtime/rpc/methods/orchestration-worker-launch-preferences.ts +++ b/src/main/runtime/rpc/methods/orchestration-worker-launch-preferences.ts @@ -6,7 +6,7 @@ import { } from '../../../../shared/agent-session-option-catalog' import { resolveAgentSessionOptionLaunch } from '../../../../shared/agent-session-option-launch' import { ORCHESTRATION_WORKER_LAUNCH_PREFERENCES_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { OrchestrationError } from '../../orchestration/orchestration-error' export type OrchestrationWorkerLaunchSelection = { diff --git a/src/main/runtime/rpc/methods/orchestration-worker-start-validation.ts b/src/main/runtime/rpc/methods/orchestration-worker-start-validation.ts index f6bb103f37e..dad044732ce 100644 --- a/src/main/runtime/rpc/methods/orchestration-worker-start-validation.ts +++ b/src/main/runtime/rpc/methods/orchestration-worker-start-validation.ts @@ -1,5 +1,5 @@ import { isTuiAgent } from '../../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { OrcaRuntimeService } from '../../orca-runtime' import { OrchestrationError } from '../../orchestration/orchestration-error' import type { FederationAttachStartInput } from './orchestration-federation-start-schema' diff --git a/src/main/runtime/rpc/methods/orchestration-worker-topology.ts b/src/main/runtime/rpc/methods/orchestration-worker-topology.ts index 9672560ab1e..3d4a0b6bf55 100644 --- a/src/main/runtime/rpc/methods/orchestration-worker-topology.ts +++ b/src/main/runtime/rpc/methods/orchestration-worker-topology.ts @@ -1,5 +1,5 @@ import type { AgentLaunchPreferences } from '../../../../shared/agent-session-host-authority' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { OrcaRuntimeService } from '../../orca-runtime' import type { OrchestrationDb } from '../../orchestration/db' diff --git a/src/main/runtime/rpc/methods/orchestration-workers.ts b/src/main/runtime/rpc/methods/orchestration-workers.ts index a71e3299929..d1d94d897a5 100644 --- a/src/main/runtime/rpc/methods/orchestration-workers.ts +++ b/src/main/runtime/rpc/methods/orchestration-workers.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { buildDispatchPreamble } from '../../orchestration/preamble' import { OrchestrationError } from '../../orchestration/orchestration-error' import { defineMethod, type RpcMethod } from '../core' diff --git a/src/main/runtime/rpc/methods/session-tabs-schemas.ts b/src/main/runtime/rpc/methods/session-tabs-schemas.ts index fc7bdc2adc3..1f44e17ea0b 100644 --- a/src/main/runtime/rpc/methods/session-tabs-schemas.ts +++ b/src/main/runtime/rpc/methods/session-tabs-schemas.ts @@ -1,7 +1,7 @@ import { z } from 'zod' import { MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH } from '../../../../shared/terminal-quick-commands' import { isTuiAgent } from '../../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { sleepingAgentLaunchConfigSchema } from '../../../../shared/workspace-session-sleeping-agents' import { RUNTIME_NAVIGATION_TARGETS } from '../../../../shared/runtime-navigation' import { TAB_ACTIVATION_INTENTS } from '../../../../shared/tab-activation-intent' diff --git a/src/main/runtime/rpc/methods/task-resume-state-schema.ts b/src/main/runtime/rpc/methods/task-resume-state-schema.ts index 06e90f8a811..fc85cad6270 100644 --- a/src/main/runtime/rpc/methods/task-resume-state-schema.ts +++ b/src/main/runtime/rpc/methods/task-resume-state-schema.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { TaskResumeState as TaskResumeStateType } from '../../../../shared/types' +import type { TaskResumeState as TaskResumeStateType } from '../../../../shared/ui-chrome-types' import type { AssertNoMissingKeys } from './ui-state-schema-parity' /** diff --git a/src/main/runtime/rpc/methods/terminal-orphan.ts b/src/main/runtime/rpc/methods/terminal-orphan.ts index 979c6aa747c..97296d0fac5 100644 --- a/src/main/runtime/rpc/methods/terminal-orphan.ts +++ b/src/main/runtime/rpc/methods/terminal-orphan.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroupLayoutNode } from '../../../../shared/tab-types' import { isPtyIncarnationId, type PtyIncarnationId } from '../../../../shared/pty-incarnation' import { defineMethod, type RpcAnyMethod } from '../core' import { OptionalString, requiredString } from '../schemas' diff --git a/src/main/runtime/rpc/methods/terminal-quick-command-rpc-schema.ts b/src/main/runtime/rpc/methods/terminal-quick-command-rpc-schema.ts index 396710af3d3..18661f10b57 100644 --- a/src/main/runtime/rpc/methods/terminal-quick-command-rpc-schema.ts +++ b/src/main/runtime/rpc/methods/terminal-quick-command-rpc-schema.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { MAX_QUICK_COMMAND_AGENT_PROMPT_LENGTH, MAX_QUICK_COMMAND_ID_LENGTH, diff --git a/src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts b/src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts index a1ccf86c254..2af2ffe0ed8 100644 --- a/src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts +++ b/src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts @@ -1,5 +1,5 @@ import type { z } from 'zod' -import type { PersistedUIState } from '../../../../shared/types' +import type { PersistedUIState } from '../../../../shared/persisted-ui-state-types' import type { UiUpdateFieldsSchema } from './client-ui-schemas' import type { AssertNoMissingKeys, AssertNoMissingValues } from './ui-state-schema-parity' diff --git a/src/main/runtime/rpc/methods/worktree-schemas.ts b/src/main/runtime/rpc/methods/worktree-schemas.ts index cbd8b128d61..2ffbe1876d5 100644 --- a/src/main/runtime/rpc/methods/worktree-schemas.ts +++ b/src/main/runtime/rpc/methods/worktree-schemas.ts @@ -1,6 +1,6 @@ import { z } from 'zod' import { isTuiAgent } from '../../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { workspaceSourceSchema } from '../../../../shared/telemetry-events' import { sleepingAgentLaunchConfigSchema } from '../../../../shared/workspace-session-sleeping-agents' import { RUNTIME_NAVIGATION_TARGETS } from '../../../../shared/runtime-navigation' diff --git a/src/main/runtime/rpc/workspace-creator-context.ts b/src/main/runtime/rpc/workspace-creator-context.ts index de0b27965fd..6bf1adf9949 100644 --- a/src/main/runtime/rpc/workspace-creator-context.ts +++ b/src/main/runtime/rpc/workspace-creator-context.ts @@ -1,4 +1,4 @@ -import type { WorkspaceCreatorProvenance } from '../../../shared/types' +import type { WorkspaceCreatorProvenance } from '../../../shared/worktree/types' import type { RpcContext } from './core' export function resolveRpcWorkspaceCreatorProvenance( diff --git a/src/main/runtime/runtime-folder-workspace.test.ts b/src/main/runtime/runtime-folder-workspace.test.ts index 06d97809c90..a801fdc6031 100644 --- a/src/main/runtime/runtime-folder-workspace.test.ts +++ b/src/main/runtime/runtime-folder-workspace.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Repo, WorktreeMeta } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR } from '../../shared/worktree/id' import { getRuntimeFolderWorkspaceInstanceId, diff --git a/src/main/runtime/runtime-folder-workspace.ts b/src/main/runtime/runtime-folder-workspace.ts index 63f548a1037..18c226221bd 100644 --- a/src/main/runtime/runtime-folder-workspace.ts +++ b/src/main/runtime/runtime-folder-workspace.ts @@ -1,5 +1,7 @@ import { DEFAULT_WORKSPACE_STATUS_ID } from '../../shared/workspace-statuses' -import type { Repo, Worktree, WorktreeMeta } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { Worktree } from '../../shared/worktree/types' import { FOLDER_WORKSPACE_INSTANCE_SEPARATOR } from '../../shared/worktree/id' import { normalizeWorkspaceCreatorProvenance } from '../../shared/workspace-creator-provenance' diff --git a/src/main/runtime/runtime-remove-project-host-scope.test.ts b/src/main/runtime/runtime-remove-project-host-scope.test.ts index 50bc15d13c9..ab9a781d0db 100644 --- a/src/main/runtime/runtime-remove-project-host-scope.test.ts +++ b/src/main/runtime/runtime-remove-project-host-scope.test.ts @@ -6,7 +6,7 @@ * is reachable — and since #11994 every paired device now learns about it immediately. */ import { describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { OrcaRuntimeService } from './orca-runtime' function makeRepos(): Repo[] { diff --git a/src/main/runtime/selected-review-branch.ts b/src/main/runtime/selected-review-branch.ts index f874ab8a1ab..5feda3bd55f 100644 --- a/src/main/runtime/selected-review-branch.ts +++ b/src/main/runtime/selected-review-branch.ts @@ -1,4 +1,4 @@ -import type { GitPushTarget } from '../../shared/types' +import type { GitPushTarget } from '../../shared/worktree/types' import type { ForgeProviderId } from '../source-control/forge-provider' import type { getPRForBranch } from '../github/client' diff --git a/src/main/runtime/terminal-list-stale-leaf-liveness.test.ts b/src/main/runtime/terminal-list-stale-leaf-liveness.test.ts index 5cbb967da76..158dff47c37 100644 --- a/src/main/runtime/terminal-list-stale-leaf-liveness.test.ts +++ b/src/main/runtime/terminal-list-stale-leaf-liveness.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' // run6-review-pr-11959 repro: leaf.connected mirrors the graph (`ptyId !== null`), // so a restored leaf whose PTY no provider owns must be demoted from the diff --git a/src/main/runtime/terminal-model-query-authority.ts b/src/main/runtime/terminal-model-query-authority.ts index df8f05798a4..a1dd4aac2d8 100644 --- a/src/main/runtime/terminal-model-query-authority.ts +++ b/src/main/runtime/terminal-model-query-authority.ts @@ -8,7 +8,7 @@ * renderer's native-Windows-ConPTY determination, recorded per PTY at spawn * so the runtime emulator can register the DA1 override before byte zero. */ -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { isWslUncPath } from '../../shared/wsl-paths' import { isHiddenPtyDeliveryGateEnabled, diff --git a/src/main/runtime/terminal-orphan-topology.ts b/src/main/runtime/terminal-orphan-topology.ts index bcb0b6e60ca..b55a351a1b0 100644 --- a/src/main/runtime/terminal-orphan-topology.ts +++ b/src/main/runtime/terminal-orphan-topology.ts @@ -1,4 +1,4 @@ -import type { TabGroupLayoutNode } from '../../shared/types' +import type { TabGroupLayoutNode } from '../../shared/tab-types' function collectLayoutGroupIds(node: TabGroupLayoutNode | null | undefined, ids: string[]): void { if (!node) { diff --git a/src/main/runtime/terminal-restore-record-seed.test.ts b/src/main/runtime/terminal-restore-record-seed.test.ts index 8e3b49620d4..bdc98f6ef92 100644 --- a/src/main/runtime/terminal-restore-record-seed.test.ts +++ b/src/main/runtime/terminal-restore-record-seed.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' // STA repro (post-restart blind orchestrator incident): after an app relaunch // the daemon survives and spawn reattaches silently, but the restore payload diff --git a/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts b/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts index 8394140cb54..f64e960615b 100644 --- a/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts +++ b/src/main/runtime/terminal-send-stale-leaf-liveness.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { OrcaRuntimeService } from './orca-runtime' import { getDefaultWorkspaceSession } from '../../shared/constants' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' // STA repro (silent-send incident): `orca terminal send` to a leaf whose ptyId // no provider in this process owns was a silent no-op reported as success — diff --git a/src/main/runtime/windows-drive-listing.ts b/src/main/runtime/windows-drive-listing.ts index 1b9dbac062c..af4eda39f94 100644 --- a/src/main/runtime/windows-drive-listing.ts +++ b/src/main/runtime/windows-drive-listing.ts @@ -1,6 +1,6 @@ import { stat } from 'node:fs/promises' import type { Stats } from 'node:fs' -import type { FilesystemPathFlavor } from '../../shared/types' +import type { FilesystemPathFlavor } from '../../shared/filesystem-entry-types' export type DriveListing = { resolvedPath: string diff --git a/src/main/runtime/workspace-session-failed-write-rollback.ts b/src/main/runtime/workspace-session-failed-write-rollback.ts index f770511bb27..4f9e79a03d7 100644 --- a/src/main/runtime/workspace-session-failed-write-rollback.ts +++ b/src/main/runtime/workspace-session-failed-write-rollback.ts @@ -1,5 +1,5 @@ import { isDeepStrictEqual } from 'node:util' -import type { WorkspaceSessionState } from '../../shared/types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' const MISSING = Symbol('missing') type RollbackValue = unknown diff --git a/src/main/runtime/workspace-session-terminal-membership-authority.ts b/src/main/runtime/workspace-session-terminal-membership-authority.ts index 556d488edc2..c4d258d8317 100644 --- a/src/main/runtime/workspace-session-terminal-membership-authority.ts +++ b/src/main/runtime/workspace-session-terminal-membership-authority.ts @@ -1,10 +1,9 @@ +import type { Tab, TabGroup } from '../../shared/tab-types' import type { - Tab, - TabGroup, TerminalLayoutSnapshot, - TerminalPaneLayoutNode, - WorkspaceSessionState -} from '../../shared/types' + TerminalPaneLayoutNode +} from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { getRepoIdFromWorktreeId } from '../../shared/worktree/id' import { pruneTabGroupLayoutAfterRetirement } from './mobile-session-terminal-retirement' diff --git a/src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts b/src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts index e1bf370de1d..ae845e42e67 100644 --- a/src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts +++ b/src/main/runtime/worktree-scan-admin-fingerprint-gate.test.ts @@ -39,6 +39,7 @@ vi.mock('./repo-worktree-admin-fingerprint', () => ({ import { OrcaRuntimeService, + RESOLVED_WORKTREE_REPO_TIMEOUT_MS, WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS, WORKTREE_SCAN_ADMIN_RECONCILE_INTERVAL_MS } from './orca-runtime' @@ -49,6 +50,10 @@ const WORKTREE_PATH = '/Users/me/dev/app-feature' const WORKTREE_ID = `${REPO_ID}::${WORKTREE_PATH}` const MAIN_WORKTREE_ID = `${REPO_ID}::${REPO_PATH}` const SCAN_TTL_MS = 30_000 +// A busy host (100+ linked worktrees, Defender, cold dentry cache, cloud placeholders) can spend +// seconds in pure stat time. Reuse has to survive that, or trimming the probe's deadline to fit the +// caller budget just trades a repeating stall for a repeating `git worktree list`. +const SLOW_BUT_HEALTHY_PROBE_MS = 3_000 function makeMeta(overrides: Record = {}) { return { @@ -116,11 +121,14 @@ function makeRuntime( ): { runtime: OrcaRuntimeService list: () => Promise + store: ReturnType } { - const runtime = new OrcaRuntimeService(makeStore(options) as never) + const store = makeStore(options) + const runtime = new OrcaRuntimeService(store as never) return { runtime, - list: () => (runtime as unknown as RuntimeInternals).listResolvedWorktrees() + list: () => (runtime as unknown as RuntimeInternals).listResolvedWorktrees(), + store } } @@ -128,6 +136,11 @@ function scanCount(): number { return listWorktreesStrictMock.mock.calls.length } +/** Scanned rows carry the mocked tips; the persisted-row fallback publishes empty ones. */ +function heads(worktrees: unknown): string[] { + return (worktrees as { git: { head: string } }[]).map((worktree) => worktree.git.head).sort() +} + /** Let every already-settled promise chain run without advancing the clock, so a stall stays a stall. */ async function drainMicrotasks(): Promise { for (let tick = 0; tick < 200; tick += 1) { @@ -455,6 +468,80 @@ describe('worktree scan admin-fingerprint gate', () => { } }) + it('bounds the awaited probe by the caller per-repo budget', () => { + // The wait runs inside that budget, so outlasting it can only strand the caller on persisted rows. + expect(WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS).toBeLessThan( + RESOLVED_WORKTREE_REPO_TIMEOUT_MS + ) + }) + + it('still reuses the scan when a slow probe answers inside its deadline', async () => { + vi.useFakeTimers() + try { + const { list } = makeRuntime() + await list() + expect(scanCount()).toBe(1) + + const releaseSlowProbe = stallProbeOnce() + vi.advanceTimersByTime(SCAN_TTL_MS + 1_000) + const second = list() + + // Deliberately an absolute figure, not one derived from the deadline: this is the lower end of + // the band, and a self-referential advance would still pass however far the deadline is cut. + await vi.advanceTimersByTimeAsync(SLOW_BUT_HEALTHY_PROBE_MS) + releaseSlowProbe('fp-1') + await second + expect(scanCount()).toBe(1) + } finally { + vi.useRealTimers() + } + }) + + it('still returns scanned rows within the per-repo budget when the probe stalls', async () => { + vi.useFakeTimers() + try { + const { list } = makeRuntime() + await list() + + stallProbeOnce() + vi.advanceTimersByTime(SCAN_TTL_MS + 1_000) + const second = list() + const secondSettled = trackSettled(second) + + // The probe's own deadline has to end the wait; if the caller's fallback gets there first the + // repo answers with persisted rows on every TTL expiry. + await vi.advanceTimersByTimeAsync(WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS) + await drainMicrotasks() + expect(secondSettled()).toBe(true) + expect(scanCount()).toBe(2) + expect(heads(await second)).toEqual(['abc', 'def']) + } finally { + vi.useRealTimers() + } + }) + + it('does not publish an already-expired snapshot after a slow compute', async () => { + vi.useFakeTimers() + try { + const { list, store } = makeRuntime() + await list() + + stallProbeOnce() + vi.advanceTimersByTime(SCAN_TTL_MS + 1_000) + const second = list() + await vi.advanceTimersByTimeAsync(WORKTREE_SCAN_ADMIN_FINGERPRINT_TIMEOUT_MS) + await second + + // The probe deadline outlasts the snapshot TTL, so a start-stamped entry is born expired and + // the next poll repeats the whole wait instead of reading the answer that just landed. + const getRepos = vi.spyOn(store, 'getRepos') + await list() + expect(getRepos).not.toHaveBeenCalled() + } finally { + vi.useRealTimers() + } + }) + it('shares one probe and one scan across concurrent callers', async () => { const { list } = makeRuntime() diff --git a/src/main/skills/discovery.test.ts b/src/main/skills/discovery.test.ts index 55dcb55ed36..2130b5a6ee8 100644 --- a/src/main/skills/discovery.test.ts +++ b/src/main/skills/discovery.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { beforeEach, describe, expect, it, vi } from 'vitest' import { buildSkillDiscoverySources, clearSkillRootScanCache, discoverSkills } from './discovery' import { TUI_AGENT_CONFIG } from '../../shared/tui-agent-config' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' function makeRepo(path: string, connectionId: string | null = null): Repo { return { diff --git a/src/main/skills/discovery.ts b/src/main/skills/discovery.ts index 4fc04ea5d20..882ab23d1cf 100644 --- a/src/main/skills/discovery.ts +++ b/src/main/skills/discovery.ts @@ -2,7 +2,7 @@ import { open, realpath, stat } from 'node:fs/promises' import { homedir } from 'node:os' import { basename, dirname, relative, sep } from 'node:path' import { summarizeSkillMarkdown } from '../../shared/skill-metadata' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { DiscoveredSkill, SkillDiscoveryResult, diff --git a/src/main/skills/skill-discovery-sources.ts b/src/main/skills/skill-discovery-sources.ts index ad457d00e81..78a858e697a 100644 --- a/src/main/skills/skill-discovery-sources.ts +++ b/src/main/skills/skill-discovery-sources.ts @@ -8,7 +8,7 @@ import type { SkillSourceKind } from '../../shared/skills' import type { AgentType } from '../../shared/agent-status-types' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../shared/execution-host' export type SkillScanRoot = Omit diff --git a/src/main/skills/skill-discovery-target.test.ts b/src/main/skills/skill-discovery-target.test.ts index f136536b189..18cb430bb68 100644 --- a/src/main/skills/skill-discovery-target.test.ts +++ b/src/main/skills/skill-discovery-target.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { SkillDiscoveryResult } from '../../shared/skills' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' const { nativeScans, wslScans } = vi.hoisted(() => ({ nativeScans: [] as unknown[], diff --git a/src/main/skills/skill-discovery-target.ts b/src/main/skills/skill-discovery-target.ts index 3670aef905e..112c8151978 100644 --- a/src/main/skills/skill-discovery-target.ts +++ b/src/main/skills/skill-discovery-target.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { SkillDiscoveryResult, SkillDiscoveryTarget } from '../../shared/skills' import { getDefaultWslDistro, getWslHome, parseWslPath, toLinuxPath } from '../wsl' import { clearSkillRootScanCache, discoverSkills } from './discovery' diff --git a/src/main/skills/skill-freshness-inventory.test.ts b/src/main/skills/skill-freshness-inventory.test.ts index f2cb31e1357..04e778c42dc 100644 --- a/src/main/skills/skill-freshness-inventory.test.ts +++ b/src/main/skills/skill-freshness-inventory.test.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { promisify } from 'node:util' import { afterEach, describe, expect, it } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { SkillBundleFileIdentity, SkillCurrentBundleEntry, diff --git a/src/main/skills/skill-freshness-inventory.ts b/src/main/skills/skill-freshness-inventory.ts index f502707321e..f9c051988b3 100644 --- a/src/main/skills/skill-freshness-inventory.ts +++ b/src/main/skills/skill-freshness-inventory.ts @@ -1,6 +1,6 @@ import { lstat } from 'node:fs/promises' import { join } from 'node:path' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import { SUPPORTED_GLOBAL_SKILL_TOPOLOGIES, type SkillFreshnessInstallation, diff --git a/src/main/source-control/forge-review-mappers.ts b/src/main/source-control/forge-review-mappers.ts index 5d13599ccc2..c8e3fdf3899 100644 --- a/src/main/source-control/forge-review-mappers.ts +++ b/src/main/source-control/forge-review-mappers.ts @@ -1,6 +1,7 @@ import type { HostedReviewInfo } from '../../shared/hosted-review' import { hostedReviewInfoFromGitHubPRInfo } from '../../shared/hosted-review-github' -import type { MRInfo, PRInfo } from '../../shared/types' +import type { PRInfo } from '../../shared/github/pull-request-types' +import type { MRInfo } from '../../shared/gitlab-types' import type { AzureDevOpsPullRequestInfo } from '../azure-devops/pull-request-mappers' import type { BitbucketPullRequestInfo } from '../bitbucket/pull-request-mappers' import type { GiteaPullRequestInfo } from '../gitea/pull-request-mappers' diff --git a/src/main/source-control/hosted-review-creation.ts b/src/main/source-control/hosted-review-creation.ts index 2149c1ab000..9c9be75ab24 100644 --- a/src/main/source-control/hosted-review-creation.ts +++ b/src/main/source-control/hosted-review-creation.ts @@ -24,7 +24,7 @@ import { getRepoSlug } from '../github/client' import { isDefaultGitHubHost } from '../../shared/github/repository-identity-key' import { acquire, ghExecFileAsync, gitExecFileAsync, release } from '../github/gh-utils' import { isNoUpstreamError, normalizeGitErrorMessage } from '../../shared/git-remote-error' -import type { GitUpstreamStatus } from '../../shared/types' +import type { GitUpstreamStatus } from '../../shared/git-status-types' import { gitOptionalLocksDisabledEnv } from '../git/runner' import { parsePorcelainV1Records, type PorcelainV1Record } from '../git/porcelain-v1-records' import { findExistingWorktreeSymlinkPaths } from '../git/worktree-symlink-detection' diff --git a/src/main/source-control/pull-request-linked-issue.ts b/src/main/source-control/pull-request-linked-issue.ts index 2e73cd30d8d..94ea1432473 100644 --- a/src/main/source-control/pull-request-linked-issue.ts +++ b/src/main/source-control/pull-request-linked-issue.ts @@ -1,7 +1,7 @@ import type { HostedReviewProvider } from '../../shared/hosted-review' import type { PullRequestLinkedIssue } from '../../shared/pull-request-generation' import { isLinkedIssueNumber } from '../../shared/source-control-ai-action-variables' -import type { WorkspaceLinkedItem } from '../../shared/types' +import type { WorkspaceLinkedItem } from '../../shared/worktree/types' import { getIssue as getGitHubIssue } from '../github/issues' import { getIssue as getGitLabIssue } from '../gitlab/issues' diff --git a/src/main/speech/speech-model-deletion.test.ts b/src/main/speech/speech-model-deletion.test.ts index 5ce3788d7e1..e78fc0d175d 100644 --- a/src/main/speech/speech-model-deletion.test.ts +++ b/src/main/speech/speech-model-deletion.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultVoiceSettings } from '../../shared/constants' import type { VoiceSettings } from '../../shared/speech-types' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { SPEECH_MODEL_CATALOG } from './model-catalog' import { deleteLocalSpeechModel } from './speech-model-deletion' diff --git a/src/main/ssh/ssh-target-id-migration.test.ts b/src/main/ssh/ssh-target-id-migration.test.ts index 7628428654e..59ba19d4dc9 100644 --- a/src/main/ssh/ssh-target-id-migration.test.ts +++ b/src/main/ssh/ssh-target-id-migration.test.ts @@ -1,5 +1,7 @@ import { describe, it, expect } from 'vitest' -import type { PersistedUIState, TerminalTab, WorkspaceSessionState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { TerminalTab } from '../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { migrateUiHostScopeSshTargetId, migrateWorkspaceSessionSshTargetId diff --git a/src/main/ssh/ssh-target-id-migration.ts b/src/main/ssh/ssh-target-id-migration.ts index f7fe153a2be..18d3f075bf0 100644 --- a/src/main/ssh/ssh-target-id-migration.ts +++ b/src/main/ssh/ssh-target-id-migration.ts @@ -1,4 +1,5 @@ -import type { PersistedUIState, WorkspaceSessionState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' import { parseAppSshPtyId, toAppSshPtyId } from '../../shared/ssh-pty-id' import { toSshExecutionHostId } from '../../shared/execution-host' import { normalizeManualRepoOrder } from '../../shared/manual-repo-order' diff --git a/src/main/star-nag/service.test.ts b/src/main/star-nag/service.test.ts index 60f166ff200..2e52ada5442 100644 --- a/src/main/star-nag/service.test.ts +++ b/src/main/star-nag/service.test.ts @@ -3,7 +3,7 @@ Electron/IPC harness; splitting the narrow service suite would duplicate setup and make the prompt-session edge cases harder to compare. */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { STAR_NAG_INITIAL_THRESHOLD } from '../../shared/constants' -import type { PersistedUIState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' import type { Store } from '../persistence' import type { StatsCollector } from '../stats/collector' import { StarNagService } from './service' diff --git a/src/main/startup/dev-education-suppression.test.ts b/src/main/startup/dev-education-suppression.test.ts index ab969b3faf4..e84541f0f68 100644 --- a/src/main/startup/dev-education-suppression.test.ts +++ b/src/main/startup/dev-education-suppression.test.ts @@ -8,7 +8,8 @@ import { import { CONTEXTUAL_TOUR_IDS } from '../../shared/contextual-tours' import { FEATURE_INTERACTION_IDS } from '../../shared/feature-interactions' import { FEATURE_TIP_IDS } from '../../shared/feature-tips' -import type { OnboardingState, PersistedUIState } from '../../shared/types' +import type { OnboardingState } from '../../shared/onboarding-state-types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' import { DEV_SHOW_FIRST_RUN_EDUCATION_ENV, shouldSuppressDevEducation, diff --git a/src/main/startup/dev-education-suppression.ts b/src/main/startup/dev-education-suppression.ts index 9b3897169b8..bea97e7bbc8 100644 --- a/src/main/startup/dev-education-suppression.ts +++ b/src/main/startup/dev-education-suppression.ts @@ -5,7 +5,7 @@ import { type FeatureInteractionState } from '../../shared/feature-interactions' import { FEATURE_TIP_IDS } from '../../shared/feature-tips' -import type { PersistedUIState } from '../../shared/types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' import type { Store } from '../persistence' export const DEV_SHOW_FIRST_RUN_EDUCATION_ENV = 'ORCA_DEV_SHOW_FIRST_RUN_EDUCATION' diff --git a/src/main/startup/hydrate-shell-path.ts b/src/main/startup/hydrate-shell-path.ts index 38a16816507..db41fe3f462 100644 --- a/src/main/startup/hydrate-shell-path.ts +++ b/src/main/startup/hydrate-shell-path.ts @@ -1,6 +1,6 @@ import { spawn } from 'node:child_process' import { delimiter, win32 as pathWin32 } from 'node:path' -import type { ShellHydrationFailureReason } from '../../shared/types' +import type { ShellHydrationFailureReason } from '../../shared/shell-path-hydration-types' import { resolveWindowsShellStartupFamily } from '../../shared/windows-terminal-shell' import { WindowsShellPathOwnership, windowsPathSegmentKey } from './windows-shell-path-ownership' diff --git a/src/main/stats/collector.ts b/src/main/stats/collector.ts index ccc516f95f4..27647af20ad 100644 --- a/src/main/stats/collector.ts +++ b/src/main/stats/collector.ts @@ -1,6 +1,6 @@ import { app } from 'electron' import { join } from 'node:path' -import type { StatsSummary } from '../../shared/types' +import type { StatsSummary } from '../../shared/process-stats-types' import type { StatsEvent, StatsAggregates } from './types' import { loadStatsFile, STATS_SCHEMA_VERSION } from './stats-file-loader' import { StatsSnapshotWriter } from './stats-snapshot-writer' diff --git a/src/main/synthetic-title-frame-routing.ts b/src/main/synthetic-title-frame-routing.ts index 3bb10a030fa..551e871fd01 100644 --- a/src/main/synthetic-title-frame-routing.ts +++ b/src/main/synthetic-title-frame-routing.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../shared/types' +import type { GlobalSettings } from '../shared/global-settings-types' /** * Why: with the side-effect kill switch off, renderer byte parsers are the diff --git a/src/main/telemetry/client-test-harness.ts b/src/main/telemetry/client-test-harness.ts index 8e0dbb58230..4f3e4054be1 100644 --- a/src/main/telemetry/client-test-harness.ts +++ b/src/main/telemetry/client-test-harness.ts @@ -1,7 +1,7 @@ import type { PostHog } from 'posthog-node' import { vi } from 'vitest' import type { CommonProps } from '../../shared/telemetry-events' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { Store } from '../persistence' import { resetBurstCapsForSession } from './burst-cap' import { diff --git a/src/main/telemetry/cohort-classifier.test.ts b/src/main/telemetry/cohort-classifier.test.ts index 2d1593cde8e..ac4f8d14173 100644 --- a/src/main/telemetry/cohort-classifier.test.ts +++ b/src/main/telemetry/cohort-classifier.test.ts @@ -3,7 +3,7 @@ // at most one warn per session. See docs/onboarding-funnel-cohort-addendum.md. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { Store } from '../persistence' import { _resetSessionWarnFlagForTests, diff --git a/src/main/telemetry/consent.test.ts b/src/main/telemetry/consent.test.ts index 12ee8ad0058..46a54c04b6d 100644 --- a/src/main/telemetry/consent.test.ts +++ b/src/main/telemetry/consent.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { resolveConsent, _resetMisconfigWarnCacheForTests } from './consent' // A minimal GlobalSettings stub — the resolver only reads `settings.telemetry`, diff --git a/src/main/telemetry/consent.ts b/src/main/telemetry/consent.ts index 85ed0dfd481..20b78526406 100644 --- a/src/main/telemetry/consent.ts +++ b/src/main/telemetry/consent.ts @@ -6,7 +6,7 @@ // runtime only and never mutate `GlobalSettings.telemetry.optedIn`. Unsetting // the variable on the next launch restores the user's stored preference. -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import type { TelemetryConsentState } from '../../shared/telemetry-consent-types' // Discriminated union instead of a boolean: the Privacy pane (PR 3) needs the diff --git a/src/main/telemetry/install-id.test.ts b/src/main/telemetry/install-id.test.ts index 69591a72663..c2fa51f2c1d 100644 --- a/src/main/telemetry/install-id.test.ts +++ b/src/main/telemetry/install-id.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect, vi } from 'vitest' import type { Store } from '../persistence' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { generateInstallId, readInstallId } from './install-id' // Minimal in-memory store stand-in. The real `Store` pulls in Electron + fs, diff --git a/src/main/telemetry/onboarding-cohort-classifier.test.ts b/src/main/telemetry/onboarding-cohort-classifier.test.ts index 25aa5e2f67e..e74b0deb8d5 100644 --- a/src/main/telemetry/onboarding-cohort-classifier.test.ts +++ b/src/main/telemetry/onboarding-cohort-classifier.test.ts @@ -5,7 +5,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { ONBOARDING_FINAL_STEP } from '../../shared/constants' -import type { GlobalSettings, OnboardingState } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { OnboardingState } from '../../shared/onboarding-state-types' import type { Store } from '../persistence' import { _resetSessionWarnFlagForTests, diff --git a/src/main/terminal-scrollback-snapshot-async-migration.ts b/src/main/terminal-scrollback-snapshot-async-migration.ts index b1a064657c1..1768c0a20a1 100644 --- a/src/main/terminal-scrollback-snapshot-async-migration.ts +++ b/src/main/terminal-scrollback-snapshot-async-migration.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../shared/types' +import type { WorkspaceSessionState } from '../shared/workspace-session-state-types' import { collectTerminalScrollbackSnapshotRefs, deleteTerminalScrollbackSnapshot, diff --git a/src/main/terminal-scrollback-snapshots.ts b/src/main/terminal-scrollback-snapshots.ts index de387c356c9..296dd4a081b 100644 --- a/src/main/terminal-scrollback-snapshots.ts +++ b/src/main/terminal-scrollback-snapshots.ts @@ -12,7 +12,7 @@ import { import { mkdir, rename, rm, writeFile } from 'node:fs/promises' import { dirname, join } from 'node:path' import { app } from 'electron' -import type { WorkspaceSessionState } from '../shared/types' +import type { WorkspaceSessionState } from '../shared/workspace-session-state-types' import { TERMINAL_SCROLLBACK_REPLAY_BYTE_LIMIT, TERMINAL_SCROLLBACK_STORE_BYTE_LIMIT diff --git a/src/main/text-generation/commit-message-text-generation.test.ts b/src/main/text-generation/commit-message-text-generation.test.ts index 1163f54bb42..2da0f012479 100644 --- a/src/main/text-generation/commit-message-text-generation.test.ts +++ b/src/main/text-generation/commit-message-text-generation.test.ts @@ -8,7 +8,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../shared/constants' import { sourceControlAiSettingsFromLegacy } from '../../shared/source-control-ai' import { SSH_MUX_REQUEST_TIMEOUT_CODE } from '../ssh/ssh-channel-multiplexer' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { cancelGenerateCommitMessageLocal, cancelGeneratePullRequestFieldsLocal, diff --git a/src/main/text-generation/commit-message-text-generation.ts b/src/main/text-generation/commit-message-text-generation.ts index a13372de858..655c6de0e7d 100644 --- a/src/main/text-generation/commit-message-text-generation.ts +++ b/src/main/text-generation/commit-message-text-generation.ts @@ -2,7 +2,9 @@ spawn failure handling, and output normalization; keeping them together prevents those paths from drifting. */ import { spawn, type ChildProcess } from 'node:child_process' -import type { GlobalSettings, Repo, TuiAgent } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' +import type { Repo } from '../../shared/repo-types' +import type { TuiAgent } from '../../shared/tui-agent' import { buildCommitMessagePrompt, splitGeneratedCommitMessage, diff --git a/src/main/updater-changelog.ts b/src/main/updater-changelog.ts index a534075cfc6..3af55b872de 100644 --- a/src/main/updater-changelog.ts +++ b/src/main/updater-changelog.ts @@ -1,5 +1,5 @@ import { net } from 'electron' -import type { ChangelogData } from '../shared/types' +import type { ChangelogData } from '../shared/update-status-types' import { compareVersions } from './updater-fallback' type ChangelogEntry = { diff --git a/src/main/updater-events.ts b/src/main/updater-events.ts index eb1ca193510..b77cd8a8cc5 100644 --- a/src/main/updater-events.ts +++ b/src/main/updater-events.ts @@ -1,5 +1,5 @@ import { app, autoUpdater as nativeUpdater } from 'electron' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import { consumeMacInstallGuardBypass, deferMacQuitUntilInstallerReady, diff --git a/src/main/updater-fallback.ts b/src/main/updater-fallback.ts index a1c77b315d6..22cfb049555 100644 --- a/src/main/updater-fallback.ts +++ b/src/main/updater-fallback.ts @@ -1,4 +1,4 @@ -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import { compareAppVersions, isPrereleaseAppVersion, diff --git a/src/main/updater-linux-package-recovery-actions.test.ts b/src/main/updater-linux-package-recovery-actions.test.ts index 75f593b7f57..4e9d50ecdf5 100644 --- a/src/main/updater-linux-package-recovery-actions.test.ts +++ b/src/main/updater-linux-package-recovery-actions.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import type * as UpdaterModule from './updater' const { diff --git a/src/main/updater-mac-install.ts b/src/main/updater-mac-install.ts index 8012f79d8fc..e2441d64180 100644 --- a/src/main/updater-mac-install.ts +++ b/src/main/updater-mac-install.ts @@ -1,5 +1,5 @@ import { app } from 'electron' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import { recordUpdaterLifecycle } from './updater-lifecycle-diagnostics' const MAC_INSTALL_READY_TIMEOUT_MS = 15000 diff --git a/src/main/updater.fallback.test.ts b/src/main/updater.fallback.test.ts index f946aafeb6f..9cbcc97c85e 100644 --- a/src/main/updater.fallback.test.ts +++ b/src/main/updater.fallback.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import { compareVersions, isBenignCheckFailure, diff --git a/src/main/updater.test.ts b/src/main/updater.test.ts index 1f5cdc06994..f42d58b5c8e 100644 --- a/src/main/updater.test.ts +++ b/src/main/updater.test.ts @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import type * as UpdaterModule from './updater' import type * as RecoveryModule from './linux-package-update-recovery' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' type RevalidationVerdict = Awaited< ReturnType diff --git a/src/main/updater.ts b/src/main/updater.ts index 96bf163e54e..f89c00331a7 100644 --- a/src/main/updater.ts +++ b/src/main/updater.ts @@ -7,7 +7,7 @@ import type { UpdateCheckOptions, UpdateSource, UpdateStatus -} from '../shared/types' +} from '../shared/update-status-types' import type { RemoteServerUpdateInstallResult, RemoteServerUpdaterSnapshot, diff --git a/src/main/usage-worktree-metadata.ts b/src/main/usage-worktree-metadata.ts index 8c4f3a94ba6..ed6889a800b 100644 --- a/src/main/usage-worktree-metadata.ts +++ b/src/main/usage-worktree-metadata.ts @@ -1,5 +1,5 @@ import { basename } from 'node:path' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { splitWorktreeId, splitWorktreeIdForFilesystem } from '../shared/worktree/id' import { isFolderRepo } from '../shared/repo-kind' import type { Store } from './persistence' diff --git a/src/main/usage/usage-worktree-refs.ts b/src/main/usage/usage-worktree-refs.ts index f76ed7c0a58..f9ea5b7b9f6 100644 --- a/src/main/usage/usage-worktree-refs.ts +++ b/src/main/usage/usage-worktree-refs.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../shared/types' +import type { Repo } from '../../shared/repo-types' import type { UsageWorktreeRef } from '../usage-worktree-metadata' import type { UsageScanWorktreeRef } from './usage-provider-contract' diff --git a/src/main/warp-themes/parser.ts b/src/main/warp-themes/parser.ts index fa4ad55c40b..e37731a8e85 100644 --- a/src/main/warp-themes/parser.ts +++ b/src/main/warp-themes/parser.ts @@ -1,6 +1,6 @@ import path from 'node:path' import { parseDocument } from 'yaml' -import type { TerminalColorOverrides } from '../../shared/types' +import type { TerminalColorOverrides } from '../../shared/terminal-color-overrides' import { hasUsableTerminalThemeColors, makeCustomTerminalThemeSelection, diff --git a/src/main/window/attach-main-window-services.ts b/src/main/window/attach-main-window-services.ts index ad8551acb6d..0fbd850f06b 100644 --- a/src/main/window/attach-main-window-services.ts +++ b/src/main/window/attach-main-window-services.ts @@ -4,12 +4,9 @@ import { randomUUID } from 'node:crypto' import { app, ipcMain } from 'electron' import type { BrowserWindow, IpcMainInvokeEvent } from 'electron' import type { Store } from '../persistence' -import type { - CreateWorktreeResult, - ReleaseBuildListResult, - UpdateCheckOptions, - WorktreeStartupLaunch -} from '../../shared/types' +import type { ReleaseBuildListResult, UpdateCheckOptions } from '../../shared/update-status-types' +import type { CreateWorktreeResult } from '../../shared/worktree/create-types' +import type { WorktreeStartupLaunch } from '../../shared/worktree/launch-types' import { RELEASE_CHANNELS, type ReleaseChannel } from '../../shared/release-channel' import { acknowledgePendingTccPromptNotice, diff --git a/src/main/workspace-space-analysis-capacity.test.ts b/src/main/workspace-space-analysis-capacity.test.ts index ebf1e0ae634..42a2a2cee48 100644 --- a/src/main/workspace-space-analysis-capacity.test.ts +++ b/src/main/workspace-space-analysis-capacity.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import type * as NodeProcess from 'node:process' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import type * as WorkspaceSpaceScanBudgetModule from '../shared/workspace-space-scan-budget' import type { Store } from './persistence' diff --git a/src/main/workspace-space-analysis-du-timeout.test.ts b/src/main/workspace-space-analysis-du-timeout.test.ts index ecd2e97eb8b..de467d2a7d2 100644 --- a/src/main/workspace-space-analysis-du-timeout.test.ts +++ b/src/main/workspace-space-analysis-du-timeout.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as NodeProcess from 'node:process' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import type { Store } from './persistence' const { execFileMock, listRepoWorktreesMock } = vi.hoisted(() => ({ diff --git a/src/main/workspace-space-analysis.test.ts b/src/main/workspace-space-analysis.test.ts index 15baa04fc04..53082b73c7f 100644 --- a/src/main/workspace-space-analysis.test.ts +++ b/src/main/workspace-space-analysis.test.ts @@ -2,7 +2,7 @@ import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import type { Store } from './persistence' const { diff --git a/src/main/workspace-space-analysis.ts b/src/main/workspace-space-analysis.ts index bdb8d953aab..56c9a7525cd 100644 --- a/src/main/workspace-space-analysis.ts +++ b/src/main/workspace-space-analysis.ts @@ -7,7 +7,9 @@ import { platform } from 'node:process' import type { Dirent } from 'node:fs' import type { Store } from './persistence' import { isFolderRepo } from '../shared/repo-kind' -import type { DirEntry, GitWorktreeInfo, Repo, Worktree } from '../shared/types' +import type { DirEntry } from '../shared/filesystem-entry-types' +import type { Repo } from '../shared/repo-types' +import type { GitWorktreeInfo, Worktree } from '../shared/worktree/types' import type { WorkspaceSpaceAnalysis, WorkspaceSpaceDirectoryScanResult, diff --git a/src/main/worktree-create-base-prefetch.ts b/src/main/worktree-create-base-prefetch.ts index fc43980202e..a7665fc4e15 100644 --- a/src/main/worktree-create-base-prefetch.ts +++ b/src/main/worktree-create-base-prefetch.ts @@ -1,5 +1,5 @@ import { isFolderRepo } from '../shared/repo-kind' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { hasLocalCommitObject, isFullGitObjectId } from './git/commit-object-ref' import { hasWorktreeBaseCommitRef } from './git/worktree-base-ref-probe' import { getBaseRefDefault } from './git/repo' diff --git a/src/main/worktree-create-timing.ts b/src/main/worktree-create-timing.ts index 3dc5546c53c..433a9ac0098 100644 --- a/src/main/worktree-create-timing.ts +++ b/src/main/worktree-create-timing.ts @@ -1,4 +1,7 @@ -import type { WorktreeCreateTiming, WorktreeCreateTimingPhase } from '../shared/types' +import type { + WorktreeCreateTiming, + WorktreeCreateTimingPhase +} from '../shared/worktree/create-types' type TimingClock = () => number diff --git a/src/main/worktree-lineage-pruning.test.ts b/src/main/worktree-lineage-pruning.test.ts index e9465a9f6cc..db393e864d5 100644 --- a/src/main/worktree-lineage-pruning.test.ts +++ b/src/main/worktree-lineage-pruning.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it, vi } from 'vitest' -import type { Repo, WorktreeLineage, WorkspaceLineage, WorktreeMeta } from '../shared/types' +import type { Repo } from '../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' import { worktreeWorkspaceKey } from '../shared/workspace-scope' import { pruneLineageForMissingRepoWorktrees } from './worktree-lineage-pruning' diff --git a/src/main/worktree-lineage-pruning.ts b/src/main/worktree-lineage-pruning.ts index b9dbe956f57..34a99ef6e95 100644 --- a/src/main/worktree-lineage-pruning.ts +++ b/src/main/worktree-lineage-pruning.ts @@ -1,5 +1,7 @@ import { randomUUID } from 'node:crypto' -import type { GitWorktreeInfo, Repo, WorktreeLineage, WorkspaceLineage } from '../shared/types' +import type { Repo } from '../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../shared/worktree/lineage-types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { getRepoExecutionHostId } from '../shared/execution-host' import { isWorkspaceKey, parseWorkspaceKey, worktreeWorkspaceKey } from '../shared/workspace-scope' import type { Store } from './persistence' diff --git a/src/main/worktree-removal-authority.test.ts b/src/main/worktree-removal-authority.test.ts index cbc9e2ed24c..4d8229f3f1f 100644 --- a/src/main/worktree-removal-authority.test.ts +++ b/src/main/worktree-removal-authority.test.ts @@ -4,7 +4,7 @@ import { isWorktreePathMissing, stripOrcaProvenanceMetaUpdates } from './worktree-removal-safety' -import type { WorktreeMeta } from '../shared/types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' describe('isWorktreePathMissing', () => { it('recognizes missing-path errors from local and remote stat providers', async () => { diff --git a/src/main/worktree-removal-safety.test.ts b/src/main/worktree-removal-safety.test.ts index 5a64b8c90e5..968bbd96bb5 100644 --- a/src/main/worktree-removal-safety.test.ts +++ b/src/main/worktree-removal-safety.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { homedir } from 'node:os' -import type { GitWorktreeInfo } from '../shared/types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { canCleanupUnregisteredOrcaLeftoverDirectory, canSafelyRemoveOrphanedWorktreeDirectory, diff --git a/src/main/worktree-removal-safety.ts b/src/main/worktree-removal-safety.ts index ef303c18220..b37a2477bc2 100644 --- a/src/main/worktree-removal-safety.ts +++ b/src/main/worktree-removal-safety.ts @@ -2,7 +2,9 @@ import { lstat, readFile } from 'node:fs/promises' import { homedir } from 'node:os' import { posix, win32 } from 'node:path' import { isWindowsAbsolutePathLike } from '../shared/cross-platform-path' -import type { GitWorktreeInfo, Repo, WorktreeMeta } from '../shared/types' +import type { Repo } from '../shared/repo-types' +import type { WorktreeMeta } from '../shared/worktree/meta-types' +import type { GitWorktreeInfo } from '../shared/worktree/types' import { areWorktreePathsEqual } from './ipc/worktree-logic' import { gitFileProvesOrphanedWorktreeDirectory, diff --git a/src/main/worktree-removal-session-partition-fencing.test.ts b/src/main/worktree-removal-session-partition-fencing.test.ts index 53b4dc805a6..89b7feafee6 100644 --- a/src/main/worktree-removal-session-partition-fencing.test.ts +++ b/src/main/worktree-removal-session-partition-fencing.test.ts @@ -5,7 +5,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { rmSync, mkdtempSync } from 'node:fs' import { join } from 'node:path' import { tmpdir } from 'node:os' -import type { TerminalTab } from '../shared/types' +import type { TerminalTab } from '../shared/terminal-tab-types' import { getDefaultWorkspaceSession } from '../shared/constants' import { toRuntimeExecutionHostId } from '../shared/execution-host' diff --git a/src/main/worktree-root-preparation.test.ts b/src/main/worktree-root-preparation.test.ts index 16adf035efe..36ad1426a79 100644 --- a/src/main/worktree-root-preparation.test.ts +++ b/src/main/worktree-root-preparation.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' const { mkdirMock, authorizeExternalPathMock } = vi.hoisted(() => ({ mkdirMock: vi.fn(), diff --git a/src/main/worktree-root-preparation.ts b/src/main/worktree-root-preparation.ts index 3edcf311012..d4cf7ead15a 100644 --- a/src/main/worktree-root-preparation.ts +++ b/src/main/worktree-root-preparation.ts @@ -1,5 +1,6 @@ import { mkdir } from 'node:fs/promises' -import type { GlobalSettings, Repo } from '../shared/types' +import type { GlobalSettings } from '../shared/global-settings-types' +import type { Repo } from '../shared/repo-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../shared/execution-host' import { isFolderRepo } from '../shared/repo-kind' import { computeWorkspaceRoot, getWorktreePathSettings } from './ipc/worktree-logic' diff --git a/src/main/worktree-trash.test.ts b/src/main/worktree-trash.test.ts index 49a8af75a1d..5bec9f53475 100644 --- a/src/main/worktree-trash.test.ts +++ b/src/main/worktree-trash.test.ts @@ -3,7 +3,7 @@ import { mkdir, mkdtemp, readdir, rm, symlink, writeFile } from 'node:fs/promise import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import type { Repo } from '../shared/types' +import type { Repo } from '../shared/repo-types' import { collectWorktreeTrashSweepRoots, getWorktreeTrashRoot, diff --git a/src/main/worktree-trash.ts b/src/main/worktree-trash.ts index 5c0aa32be2b..cec17bf87cd 100644 --- a/src/main/worktree-trash.ts +++ b/src/main/worktree-trash.ts @@ -8,7 +8,8 @@ import { dirname, join } from 'node:path' import { removeHostTree } from './host-tree-removal' import { isFolderRepo } from '../shared/repo-kind' import { computeWorkspaceRoot, getWorktreePathSettings } from './ipc/worktree-logic' -import type { GlobalSettings, Repo } from '../shared/types' +import type { GlobalSettings } from '../shared/global-settings-types' +import type { Repo } from '../shared/repo-types' import { parseWslPath } from './wsl' export const WORKTREE_TRASH_DIR_NAME = '.orca-worktree-trash' diff --git a/src/preload/api/agent-account-api.ts b/src/preload/api/agent-account-api.ts index 43e8542cddd..e3688b57f5b 100644 --- a/src/preload/api/agent-account-api.ts +++ b/src/preload/api/agent-account-api.ts @@ -1,4 +1,7 @@ -import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState } from '../../shared/types' +import type { + ClaudeRateLimitAccountsState, + CodexRateLimitAccountsState +} from '../../shared/managed-account-types' import type { CodexConfigSyncStatus } from '../../shared/codex-config-sync-types' import type { GrokAccountStatus } from '../../shared/rate-limit-types' diff --git a/src/preload/api/agent-hook-api.ts b/src/preload/api/agent-hook-api.ts index df782419c5c..c4116aa2b6d 100644 --- a/src/preload/api/agent-hook-api.ts +++ b/src/preload/api/agent-hook-api.ts @@ -1,4 +1,5 @@ -import type { OrcaHooks, WorktreeSetupLaunch } from '../../shared/types' +import type { OrcaHooks } from '../../shared/orca-yaml-hook-types' +import type { WorktreeSetupLaunch } from '../../shared/worktree/launch-types' import type { ExecutionHostId } from '../../shared/execution-host' import type { SetupScriptImportCandidate } from '../../shared/setup-script-imports' import type { AgentHookInstallStatus } from '../../shared/agent-hook-types' diff --git a/src/preload/api/app-api.ts b/src/preload/api/app-api.ts index a03960fd531..ec18110e4a9 100644 --- a/src/preload/api/app-api.ts +++ b/src/preload/api/app-api.ts @@ -5,12 +5,10 @@ import type { WriteTerminalRenderDesyncEvidenceArgs, WriteTerminalRenderDesyncEvidenceResult } from '../../shared/terminal-render-desync-evidence' -import type { - FloatingTerminalCwdRequest, - MarkdownDocument, - PersistedUIState, - WorkspaceSessionState -} from '../../shared/types' +import type { MarkdownDocument } from '../../shared/filesystem-entry-types' +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { FloatingTerminalCwdRequest } from '../../shared/ui-chrome-types' +import type { WorkspaceSessionState } from '../../shared/workspace-session-state-types' export type AppApi = { /** Returns the app identity currently exposed to native chrome and the titlebar. */ diff --git a/src/preload/api/browser-api.ts b/src/preload/api/browser-api.ts index b6591162d19..6b352eff527 100644 --- a/src/preload/api/browser-api.ts +++ b/src/preload/api/browser-api.ts @@ -20,16 +20,16 @@ import type { BrowserPopupEvent } from '../../shared/browser-guest-events' import type { - BrowserCookieImportResult, BrowserCertificateFailure, BrowserCertificateProceedResult, + BrowserCookieImportResult, BrowserLoadError, BrowserSessionProfile, BrowserSessionProfileCreateOptions, BrowserSessionProfileScope, BrowserSessionProfileSource, BrowserViewportOverride -} from '../../shared/types' +} from '../../shared/browser-workspace-types' export type BrowserApi = { registerGuest: (args: { diff --git a/src/preload/api/ephemeral-vm-api.ts b/src/preload/api/ephemeral-vm-api.ts index e3b6ea202fd..96d0eae30c4 100644 --- a/src/preload/api/ephemeral-vm-api.ts +++ b/src/preload/api/ephemeral-vm-api.ts @@ -1,4 +1,4 @@ -import type { OrcaHooks } from '../../shared/types' +import type { OrcaHooks } from '../../shared/orca-yaml-hook-types' import type { PublicKnownRuntimeEnvironment } from '../../shared/runtime-environments' import type { EphemeralVmRecipeDoctorResult } from '../../shared/ephemeral-vm-recipes' import type { EphemeralVmRecipeResultWarning } from '../../shared/ephemeral-vm-recipe-diagnostics' diff --git a/src/preload/api/filesystem-api.ts b/src/preload/api/filesystem-api.ts index fdc1ac73250..63dd919b76d 100644 --- a/src/preload/api/filesystem-api.ts +++ b/src/preload/api/filesystem-api.ts @@ -1,10 +1,9 @@ +import type { SearchOptions, SearchResult } from '../../shared/code-search-types' import type { DirEntry, FsChangedPayload, - MarkdownDocument, - SearchOptions, - SearchResult -} from '../../shared/types' + MarkdownDocument +} from '../../shared/filesystem-entry-types' import type { LocalLogTailChangedPayload, LocalLogTailReadArgs, diff --git a/src/preload/api/git-inspection-api.ts b/src/preload/api/git-inspection-api.ts index c23bcdeecaa..b71234d2d0c 100644 --- a/src/preload/api/git-inspection-api.ts +++ b/src/preload/api/git-inspection-api.ts @@ -1,13 +1,15 @@ import type { GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../shared/git-diff-compare-types' +import type { GitConflictOperation, - GitDiffResult, - GitPushTarget, GitStagingArea, GitStatusResult, GitUpstreamStatus -} from '../../shared/types' +} from '../../shared/git-status-types' +import type { GitPushTarget } from '../../shared/worktree/types' import type { GitHistoryOptions, GitHistoryResult } from '../../shared/git-history' import type { CommitMessageAgentCapability, diff --git a/src/preload/api/git-operation-api.ts b/src/preload/api/git-operation-api.ts index fee33db4efd..d71f95c8537 100644 --- a/src/preload/api/git-operation-api.ts +++ b/src/preload/api/git-operation-api.ts @@ -1,9 +1,6 @@ -import type { - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitPushTarget, - TuiAgent -} from '../../shared/types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../shared/git-fork-sync' +import type { TuiAgent } from '../../shared/tui-agent' +import type { GitPushTarget } from '../../shared/worktree/types' import type { HostedReviewProvider } from '../../shared/hosted-review' import type { ResolvedSourceControlAiGenerationParams } from '../../shared/source-control-ai' import type { SourceControlAiSettings } from '../../shared/source-control-ai-types' diff --git a/src/preload/api/github-pull-request-api.ts b/src/preload/api/github-pull-request-api.ts index 245453cb18f..76f407598b2 100644 --- a/src/preload/api/github-pull-request-api.ts +++ b/src/preload/api/github-pull-request-api.ts @@ -1,25 +1,28 @@ import type { AppStarSource } from '../../shared/gh-star-source' import type { GhAuthDiagnostic } from '../../shared/github/auth-types' import type { TaskSourceContext } from '../../shared/task-source-context' +import type { PRCheckDetail, PRCheckRunDetails } from '../../shared/github/check-types' import type { - GetRateLimitResult, GitHubCommentResult, - GitHubOwnerRepo, - GitHubPRFile, - GitHubPRFileContents, + GitHubPRReviewCommentInput, + GitHubReactionContent, + PRComment +} from '../../shared/github/comment-types' +import type { GitHubPRRefreshCandidate, GitHubPRRefreshEnqueueResult, GitHubPRRefreshEvent, GitHubPRRefreshReason, - GitHubPRReviewCommentInput, - GitHubReactionContent, - GitHubViewer, - PRCheckDetail, - PRCheckRunDetails, - PRComment, - PRInfo, PRRefreshOutcome -} from '../../shared/types' +} from '../../shared/github/pull-request-refresh-types' +import type { + GitHubOwnerRepo, + GitHubPRFile, + GitHubPRFileContents, + GitHubViewer, + PRInfo +} from '../../shared/github/pull-request-types' +import type { GetRateLimitResult } from '../../shared/github/rate-limit-types' import type { GitHubRepoSelectorArgs } from './github-work-item-api' export type GithubPullRequestApi = { diff --git a/src/preload/api/github-work-item-api.ts b/src/preload/api/github-work-item-api.ts index e302e4517a8..064a8ed890b 100644 --- a/src/preload/api/github-work-item-api.ts +++ b/src/preload/api/github-work-item-api.ts @@ -27,17 +27,18 @@ import type { UpdatePullRequestBySlugArgs } from '../../shared/github/project-types' import type { TaskSourceContext } from '../../shared/task-source-context' +import type { GitHubCommentResult } from '../../shared/github/comment-types' import type { GitHubAssignableUser, - GitHubCommentResult, - GitHubCreateIssueResult, - GitHubIssueUpdate, GitHubOwnerRepo, + IssueInfo +} from '../../shared/github/pull-request-types' +import type { GitHubWorkItem, GitHubWorkItemDetails, - IssueInfo, ListWorkItemsResult -} from '../../shared/types' +} from '../../shared/github/work-item-types' +import type { GitHubCreateIssueResult, GitHubIssueUpdate } from '../../shared/issue-mutation-types' export type GitHubRepoSelectorArgs = { repoPath: string diff --git a/src/preload/api/gitlab-api.ts b/src/preload/api/gitlab-api.ts index b1467a891f4..ecde3880083 100644 --- a/src/preload/api/gitlab-api.ts +++ b/src/preload/api/gitlab-api.ts @@ -1,6 +1,6 @@ import type { TaskSourceContext } from '../../shared/task-source-context' +import type { ClassifiedError } from '../../shared/classified-error' import type { - ClassifiedError, GetGitLabRateLimitResult, GitLabAssignableUser, GitLabAuthDiagnostic, @@ -21,7 +21,7 @@ import type { ListMergeRequestsResult, MRInfo, MRListState -} from '../../shared/types' +} from '../../shared/gitlab-types' export type GitLabRepoSelectorArgs = { repoPath: string diff --git a/src/preload/api/jira-api.ts b/src/preload/api/jira-api.ts index d452bd9728d..1294850c284 100644 --- a/src/preload/api/jira-api.ts +++ b/src/preload/api/jira-api.ts @@ -14,7 +14,7 @@ import type { JiraTransition, JiraUser, JiraViewer -} from '../../shared/types' +} from '../../shared/jira-types' export type JiraApi = { connect: (args: { diff --git a/src/preload/api/linear-api.ts b/src/preload/api/linear-api.ts index 613837c4fa4..0b924953d86 100644 --- a/src/preload/api/linear-api.ts +++ b/src/preload/api/linear-api.ts @@ -1,21 +1,22 @@ import type { LinearIssueAttributeFilter } from '../../shared/linear/issue-attribute-filter' +import type { LinearIssueUpdate } from '../../shared/issue-mutation-types' +import type { LinearComment, LinearIssue } from '../../shared/linear/issue-types' import type { - LinearCollectionResult, - LinearComment, - LinearConnectionStatus, LinearCustomViewModel, LinearCustomViewSummary, - LinearIssue, - LinearIssueUpdate, + LinearProjectDetail, + LinearProjectSummary +} from '../../shared/linear/project-types' +import type { + LinearCollectionResult, + LinearConnectionStatus, LinearLabel, LinearMember, - LinearProjectDetail, - LinearProjectSummary, LinearTeam, LinearViewer, LinearWorkflowState, LinearWorkspaceSelection -} from '../../shared/types' +} from '../../shared/linear/workspace-types' export type LinearApi = { connect: (args: { diff --git a/src/preload/api/onboarding-api.ts b/src/preload/api/onboarding-api.ts index 678a6b38294..ba9f10c1a18 100644 --- a/src/preload/api/onboarding-api.ts +++ b/src/preload/api/onboarding-api.ts @@ -1,4 +1,4 @@ -import type { OnboardingState } from '../../shared/types' +import type { OnboardingState } from '../../shared/onboarding-state-types' export type OnboardingApi = { get: () => Promise diff --git a/src/preload/api/os-permission-api.ts b/src/preload/api/os-permission-api.ts index fc452df1196..8718cfc29a5 100644 --- a/src/preload/api/os-permission-api.ts +++ b/src/preload/api/os-permission-api.ts @@ -11,13 +11,13 @@ import type { LocalNetworkConnectionTestResult } from '../../shared/developer-permissions-types' import type { - NotificationDispatchRequest, - NotificationDispatchResult, NotificationDeliveryProbeResult, NotificationDismissResult, + NotificationDispatchRequest, + NotificationDispatchResult, NotificationPermissionStatusResult, NotificationSoundResult -} from '../../shared/types' +} from '../../shared/notification-settings-types' export type NotificationsApi = { dispatch: (args: NotificationDispatchRequest) => Promise diff --git a/src/preload/api/pet-api.ts b/src/preload/api/pet-api.ts index e0031cb8e36..8dffdda300b 100644 --- a/src/preload/api/pet-api.ts +++ b/src/preload/api/pet-api.ts @@ -1,4 +1,4 @@ -import type { CustomPet } from '../../shared/types' +import type { CustomPet } from '../../shared/pet-types' export type PetApi = { import: () => Promise diff --git a/src/preload/api/preflight-api.ts b/src/preload/api/preflight-api.ts index f63099a07ec..8535bb35f8c 100644 --- a/src/preload/api/preflight-api.ts +++ b/src/preload/api/preflight-api.ts @@ -1,5 +1,8 @@ import type { ProjectExecutionRuntimeResolution } from '../../shared/project-execution-runtime' -import type { PathSource, ShellHydrationFailureReason } from '../../shared/types' +import type { + PathSource, + ShellHydrationFailureReason +} from '../../shared/shell-path-hydration-types' export type PreflightStatus = { git: { installed: boolean } diff --git a/src/preload/api/pty-api.ts b/src/preload/api/pty-api.ts index 774196b6a01..d69d906047d 100644 --- a/src/preload/api/pty-api.ts +++ b/src/preload/api/pty-api.ts @@ -14,7 +14,7 @@ import type { import type { AgentKind, LaunchSource, RequestKind } from '../../shared/telemetry-events' import type { TerminalSideEffectBatch } from '../../shared/terminal-side-effect-facts' import type { TerminalViewAttributes } from '../../shared/terminal-view-attributes' -import type { TuiAgent } from '../../shared/types' +import type { TuiAgent } from '../../shared/tui-agent' import type { PtyManagementApi } from './pty-management-api' export type PtyApi = { diff --git a/src/preload/api/repository-api.ts b/src/preload/api/repository-api.ts index 1734c35bdc7..91f4834a938 100644 --- a/src/preload/api/repository-api.ts +++ b/src/preload/api/repository-api.ts @@ -4,13 +4,13 @@ import type { ListReposForExecutionHostArgs } from '../../shared/host-repo-catalog-contract' import type { - BaseRefDefaultResult, - BaseRefSearchResult, NestedRepoScanResult, - Project, ProjectGroup, ProjectGroupImportMode, - ProjectGroupImportResult, + ProjectGroupImportResult +} from '../../shared/project-group-types' +import type { + Project, ProjectHostSetup, ProjectHostSetupCreateArgs, ProjectHostSetupCreateResult, @@ -20,9 +20,9 @@ import type { ProjectHostSetupResult, ProjectHostSetupUpdateArgs, ProjectHostSetupUpdateResult, - ProjectUpdateArgs, - Repo -} from '../../shared/types' + ProjectUpdateArgs +} from '../../shared/project-types' +import type { BaseRefDefaultResult, BaseRefSearchResult, Repo } from '../../shared/repo-types' export type RepositoryApi = { list: () => Promise diff --git a/src/preload/api/settings-api.ts b/src/preload/api/settings-api.ts index b50843160dd..30f84c59b39 100644 --- a/src/preload/api/settings-api.ts +++ b/src/preload/api/settings-api.ts @@ -3,7 +3,7 @@ import type { WarpThemeImportPreview, WarpThemeImportSource } from '../../shared/terminal-custom-themes' -import type { GhosttyImportPreview, GlobalSettings } from '../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../shared/global-settings-types' export type SettingsApi = { get: () => Promise diff --git a/src/preload/api/ssh-api.ts b/src/preload/api/ssh-api.ts index b25f1713e16..6740819fa19 100644 --- a/src/preload/api/ssh-api.ts +++ b/src/preload/api/ssh-api.ts @@ -9,7 +9,7 @@ import type { SshTarget, SshTargetAddResult } from '../../shared/ssh-types' -import type { FilesystemPathFlavor } from '../../shared/types' +import type { FilesystemPathFlavor } from '../../shared/filesystem-entry-types' export type SshApi = { listTargets: () => Promise diff --git a/src/preload/api/telemetry-api.ts b/src/preload/api/telemetry-api.ts index 9fc70f908b7..99f9fbad4b0 100644 --- a/src/preload/api/telemetry-api.ts +++ b/src/preload/api/telemetry-api.ts @@ -1,5 +1,5 @@ import type { TelemetryConsentState } from '../../shared/telemetry-consent-types' -import type { MemorySnapshot, StatsSummary } from '../../shared/types' +import type { MemorySnapshot, StatsSummary } from '../../shared/process-stats-types' export type StatsApi = { getSummary: () => Promise diff --git a/src/preload/api/ui-command-event-api.ts b/src/preload/api/ui-command-event-api.ts index e46c09139b7..6ec32503057 100644 --- a/src/preload/api/ui-command-event-api.ts +++ b/src/preload/api/ui-command-event-api.ts @@ -1,10 +1,10 @@ +import type { PersistedUIState } from '../../shared/persisted-ui-state-types' +import type { TuiAgent } from '../../shared/tui-agent' import type { - PersistedUIState, - TuiAgent, WorktreeDefaultTabsLaunch, WorktreeSetupLaunch, WorktreeStartupLaunch -} from '../../shared/types' +} from '../../shared/worktree/launch-types' import type { FeatureInteractionId } from '../../shared/feature-interactions' import type { KeybindingActionId } from '../../shared/keybindings' import type { BrowserFindSource } from '../../shared/browser-find-source' @@ -63,6 +63,7 @@ export type UiCommandEventApi = { requestId: string url: string worktreeId?: string + browserPageId?: string sessionProfileId?: string | null sessionPartition?: string activate?: boolean @@ -81,7 +82,11 @@ export type UiCommandEventApi = { onRequestTabClose: ( callback: (data: { requestId: string; tabId: string | null; worktreeId?: string }) => void ) => () => void - replyTabClose: (reply: { requestId: string; error?: string }) => void + replyTabClose: (reply: { + requestId: string + error?: string + code?: 'browser_tab_not_found' + }) => void onNewTerminalTab: (callback: () => void) => () => void onFocusBrowserAddressBar: (callback: () => void) => () => void onFindInBrowserPage: (source: BrowserFindSource, callback: () => void) => () => void diff --git a/src/preload/api/updater-api.ts b/src/preload/api/updater-api.ts index f6a43da9834..0a3590e8035 100644 --- a/src/preload/api/updater-api.ts +++ b/src/preload/api/updater-api.ts @@ -3,7 +3,7 @@ import type { ReleaseBuildListResult, UpdateCheckOptions, UpdateStatus -} from '../../shared/types' +} from '../../shared/update-status-types' import type { ReleaseChannel } from '../../shared/release-channel' export type UpdaterApi = { diff --git a/src/preload/api/workspace-session-api.ts b/src/preload/api/workspace-session-api.ts index 35eb17486d7..1d2a87bfeb1 100644 --- a/src/preload/api/workspace-session-api.ts +++ b/src/preload/api/workspace-session-api.ts @@ -1,9 +1,8 @@ +import type { IssueInfo, PRInfo } from '../../shared/github/pull-request-types' import type { - IssueInfo, - PRInfo, WorkspaceSessionPatch, WorkspaceSessionState -} from '../../shared/types' +} from '../../shared/workspace-session-state-types' import type { ExecutionHostId } from '../../shared/execution-host' import type { RemoteWorkspaceChangedEvent, diff --git a/src/preload/api/worktree-api.ts b/src/preload/api/worktree-api.ts index 53e11b597cb..dd8d2165c3e 100644 --- a/src/preload/api/worktree-api.ts +++ b/src/preload/api/worktree-api.ts @@ -17,25 +17,28 @@ import type { HostLineageSnapshot, ListDesktopLineageForHostArgs } from '../../shared/host-lineage-contract' +import type { FolderWorkspace } from '../../shared/folder-workspace-types' +import type { + WorktreeBaseStatusEvent, + WorktreeRemoteBranchConflictEvent +} from '../../shared/worktree/base-ref-drift-types' import type { AdoptProvisionedRootArgs, CreateWorktreeArgs, CreateWorktreeResult, - DetectedWorktreeListResult, - FolderWorkspace, ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult, + SparsePreset +} from '../../shared/worktree/create-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../shared/worktree/meta-types' +import type { + DetectedWorktreeListResult, GitHubPrStartPoint, GitPushTarget, - RemoveWorktreeResult, - SparsePreset, - WorkspaceLineage, Worktree, - WorktreeBaseStatusEvent, - WorktreeHeadIdentity, - WorktreeLineage, - WorktreeMeta, - WorktreeRemoteBranchConflictEvent -} from '../../shared/types' + WorktreeHeadIdentity +} from '../../shared/worktree/types' export type WorktreeApi = { list: (args: { repoId: string }) => Promise diff --git a/src/preload/index.ts b/src/preload/index.ts index 52ec91a8388..3e9cfd59da3 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -61,54 +61,55 @@ import type { } from '../shared/plugins/plugin-panel-bridge' import type { PluginConsentRequest } from '../shared/plugins/plugin-consent-request' import type { PluginChangeEvent } from '../shared/plugins/plugin-change-event' +import type { BrowserViewportOverride } from '../shared/browser-workspace-types' +import type { SearchResult } from '../shared/code-search-types' import type { - BaseRefSearchResult, - BaseRefDefaultResult, - BrowserViewportOverride, - CustomPet, - FsChangedPayload, FilesystemPathFlavor, - GetRateLimitResult, + FsChangedPayload, + MarkdownDocument +} from '../shared/filesystem-entry-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../shared/git-fork-sync' +import type { GitStagingArea, GitUpstreamStatus } from '../shared/git-status-types' +import type { GitHubCommentResult, GitHubReactionContent } from '../shared/github/comment-types' +import type { GitHubPRRefreshCandidate, GitHubPRRefreshEvent, - GitHubPRRefreshReason, - GitHubAssignableUser, - GitHubCommentResult, - GitHubCreateIssueResult, - GitHubOwnerRepo, - GitHubReactionContent, - GitHubWorkItem, - JiraProjectStatusOrder, - GitPushTarget, - GitStagingArea, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitUpstreamStatus, - GhosttyImportPreview, - ListWorkItemsResult, - LinearProjectDetail, - MemorySnapshot, + GitHubPRRefreshReason +} from '../shared/github/pull-request-refresh-types' +import type { GitHubAssignableUser, GitHubOwnerRepo } from '../shared/github/pull-request-types' +import type { GetRateLimitResult } from '../shared/github/rate-limit-types' +import type { GitHubWorkItem, ListWorkItemsResult } from '../shared/github/work-item-types' +import type { GhosttyImportPreview } from '../shared/global-settings-types' +import type { GitHubCreateIssueResult } from '../shared/issue-mutation-types' +import type { JiraProjectStatusOrder } from '../shared/jira-types' +import type { LinearProjectDetail } from '../shared/linear/project-types' +import type { + NotificationDeliveryProbeResult, NotificationDismissResult, NotificationDispatchResult, - NotificationDeliveryProbeResult, NotificationPermissionStatusResult, NotificationSoundDataResult, NotificationSoundPathResult, - NotificationSoundResult, - NestedRepoScanResult, - OnboardingState, - PersistedUIState, - FloatingTerminalCwdRequest, - MarkdownDocument, - SearchResult, - TuiAgent, - UpdateStatus, + NotificationSoundResult +} from '../shared/notification-settings-types' +import type { OnboardingState } from '../shared/onboarding-state-types' +import type { PersistedUIState } from '../shared/persisted-ui-state-types' +import type { CustomPet } from '../shared/pet-types' +import type { MemorySnapshot } from '../shared/process-stats-types' +import type { NestedRepoScanResult } from '../shared/project-group-types' +import type { BaseRefDefaultResult, BaseRefSearchResult } from '../shared/repo-types' +import type { TuiAgent } from '../shared/tui-agent' +import type { FloatingTerminalCwdRequest } from '../shared/ui-chrome-types' +import type { UpdateStatus } from '../shared/update-status-types' +import type { WorktreeBaseStatusEvent, + WorktreeRemoteBranchConflictEvent +} from '../shared/worktree/base-ref-drift-types' +import type { WorktreeDefaultTabsLaunch, - WorktreeHeadIdentity, - WorktreeRemoteBranchConflictEvent, WorktreeSetupLaunch -} from '../shared/types' +} from '../shared/worktree/launch-types' +import type { GitPushTarget, WorktreeHeadIdentity } from '../shared/worktree/types' import type { PtyModelRestoreNeededEvent } from '../shared/pty-model-restore-marker' import type { PtyListedSession } from '../shared/pty-listed-session' import type { @@ -3653,6 +3654,7 @@ const api = { requestId: string url: string worktreeId?: string + browserPageId?: string sessionProfileId?: string | null sessionPartition?: string activate?: boolean @@ -3664,6 +3666,7 @@ const api = { requestId: string url: string worktreeId?: string + browserPageId?: string sessionProfileId?: string | null sessionPartition?: string activate?: boolean @@ -3712,7 +3715,11 @@ const api = { ipcRenderer.on('browser:requestTabClose', listener) return () => ipcRenderer.removeListener('browser:requestTabClose', listener) }, - replyTabClose: (reply: { requestId: string; error?: string }): void => { + replyTabClose: (reply: { + requestId: string + error?: string + code?: 'browser_tab_not_found' + }): void => { ipcRenderer.send('browser:tabCloseReply', reply) }, onNewTerminalTab: (callback: () => void): (() => void) => { diff --git a/src/preload/renderer-restart-wiring.ts b/src/preload/renderer-restart-wiring.ts index 0a177dd55b0..2dd0ad316aa 100644 --- a/src/preload/renderer-restart-wiring.ts +++ b/src/preload/renderer-restart-wiring.ts @@ -4,7 +4,7 @@ import { prepareRendererForAppRestart, type UpdaterQuitAbortRelay } from '../shared/renderer-restart-preparation' -import type { UpdateStatus } from '../shared/types' +import type { UpdateStatus } from '../shared/update-status-types' import { ORCA_APP_RESTART_ABORTED_EVENT, ORCA_APP_RESTART_STARTED_EVENT, diff --git a/src/preload/ssh-authority-forwarding.test.ts b/src/preload/ssh-authority-forwarding.test.ts index 1292d09e032..34179e1e7fa 100644 --- a/src/preload/ssh-authority-forwarding.test.ts +++ b/src/preload/ssh-authority-forwarding.test.ts @@ -5,7 +5,7 @@ import type { HostQualifiedDetectedWorktreeResult, ListDetectedWorktreesArgs } from '../shared/detected-worktree-provider-contract' -import type { DetectedWorktreeListResult } from '../shared/types' +import type { DetectedWorktreeListResult } from '../shared/worktree/types' function listDetectedVariableTypeProbe(api: PreloadApi, args: ListDetectedWorktreesArgs) { return api.worktrees.listDetected(args) diff --git a/src/relay/fs-handler-utils.ts b/src/relay/fs-handler-utils.ts index 83726c686bf..a9df29dd2f2 100644 --- a/src/relay/fs-handler-utils.ts +++ b/src/relay/fs-handler-utils.ts @@ -15,7 +15,7 @@ import { SEARCH_TIMEOUT_MS as SHARED_SEARCH_TIMEOUT_MS } from '../shared/text-search' import { IMAGE_FILE_MIME_TYPES } from '../shared/image-file-extensions' -import type { SearchResult as SharedSearchResult } from '../shared/types' +import type { SearchResult as SharedSearchResult } from '../shared/code-search-types' import { absorbPendingRipgrepSpawnError, isRipgrepUnavailableAfterLaunchFailure, diff --git a/src/relay/git-handler-push-target.ts b/src/relay/git-handler-push-target.ts index dfbed1a9186..40765491c56 100644 --- a/src/relay/git-handler-push-target.ts +++ b/src/relay/git-handler-push-target.ts @@ -1,6 +1,6 @@ import { assertGitPushTargetShape } from '../shared/git-push-target-validation' import { gitRefTargetsBranchOnRemote } from '../shared/git-remote-branch-name' -import type { GitPushTarget } from '../shared/types' +import type { GitPushTarget } from '../shared/worktree/types' type RelayGit = (args: string[], cwd: string) => Promise<{ stdout: string; stderr: string }> diff --git a/src/relay/git-handler-status-ops.ts b/src/relay/git-handler-status-ops.ts index a9d0b63ea8a..f87311c2cb3 100644 --- a/src/relay/git-handler-status-ops.ts +++ b/src/relay/git-handler-status-ops.ts @@ -8,7 +8,7 @@ import { readFile } from 'node:fs/promises' import { parseUnmergedEntry } from './git-handler-utils' import type { GitExec } from './git-handler-ops' import type { RelayGitStreamExec } from './git-stdout-stream' -import type { GitUpstreamStatus } from '../shared/types' +import type { GitUpstreamStatus } from '../shared/git-status-types' import { StatusPorcelainParser } from '../shared/git-status-porcelain-parser' import { splitRemoteBranchName } from '../shared/git-effective-upstream' import { readOrProbeNoEffectiveUpstreamStatus } from './git-status-upstream-negative-cache' diff --git a/src/relay/git-handler-worktree-remove.ts b/src/relay/git-handler-worktree-remove.ts index 80bf08c25fe..474e03bab88 100644 --- a/src/relay/git-handler-worktree-remove.ts +++ b/src/relay/git-handler-worktree-remove.ts @@ -1,5 +1,5 @@ import * as path from 'node:path' -import type { RemoveWorktreeResult } from '../shared/types' +import type { RemoveWorktreeResult } from '../shared/worktree/create-types' import { assertWorktreeUnlockedForRemoval } from '../shared/worktree/removal' import { isSubmoduleWorktreeRemovalRefusal } from '../shared/worktree/submodule-removal' import { deleteAlreadyMergedRelayBranchAfterSafeDeleteFailure } from './git-handler-branch-cleanup' diff --git a/src/relay/git-handler.ts b/src/relay/git-handler.ts index 3e8a20ea992..0558f710970 100644 --- a/src/relay/git-handler.ts +++ b/src/relay/git-handler.ts @@ -61,7 +61,7 @@ import { upstreamOnlyCommitsArePatchEquivalent } from '../shared/git-upstream-st import { assertGitPushTargetShape } from '../shared/git-push-target-validation' import { getPublishTargetStatus, type GitCommandRunner } from '../shared/git-publish-target-status' import { resolveGitRemoteRebaseSource } from '../shared/git-rebase-source' -import type { GitPushTarget } from '../shared/types' +import type { GitPushTarget } from '../shared/worktree/types' import { getEffectiveGitUpstreamStatus, resolveEffectiveGitUpstream diff --git a/src/relay/git-status-upstream-negative-cache.ts b/src/relay/git-status-upstream-negative-cache.ts index e3ad9239cc9..f3dcd2df663 100644 --- a/src/relay/git-status-upstream-negative-cache.ts +++ b/src/relay/git-status-upstream-negative-cache.ts @@ -1,7 +1,7 @@ import { createGitConfigSnapshotRunner } from '../shared/git-config-snapshot-runner' import { getEffectiveGitUpstreamStatus } from '../shared/git-effective-upstream' import type { GitCommandRunner } from '../shared/git-effective-upstream' -import type { GitUpstreamStatus } from '../shared/types' +import type { GitUpstreamStatus } from '../shared/git-status-types' const NO_EFFECTIVE_UPSTREAM_CACHE_TTL_MS = 5 * 60_000 const MAX_NO_EFFECTIVE_UPSTREAM_CACHE_ENTRIES = 512 diff --git a/src/relay/pty-handler.ts b/src/relay/pty-handler.ts index faa12d5093b..c077378ebda 100644 --- a/src/relay/pty-handler.ts +++ b/src/relay/pty-handler.ts @@ -44,7 +44,7 @@ import { mergeGitConfigEnvProtocol } from '../shared/git-credential-prompt-env' import { isTuiAgent } from '../shared/tui-agent-config' -import type { TuiAgent } from '../shared/types' +import type { TuiAgent } from '../shared/tui-agent' import { forceKillPosixPtyProcessGroups } from '../main/pty/posix-pty-process-groups' import { stripInheritedBuildModeEnv } from '../main/pty/build-mode-env' import { stripLegacyTerminalShimEnv } from '../main/pty/legacy-terminal-shim-dir' diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 02d9a2c38ba..f85eb212265 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -176,7 +176,8 @@ import { selectFloatingVisibleTabCount } from './store/selectors' import { selectActiveTerminalChromeState } from './store/active-terminal-chrome-selector' import type { VirtualizedScrollAnchor } from './hooks/useVirtualizedScrollAnchor' import type { RemoteWorkspacePatchResult } from '../../shared/remote-workspace-types' -import type { OnboardingState, UpdateStatus } from '../../shared/types' +import type { OnboardingState } from '../../shared/onboarding-state-types' +import type { UpdateStatus } from '../../shared/update-status-types' import { getFeatureTipsAppOpenDecision, isCliFeatureTipCompleted diff --git a/src/renderer/src/components/GitHubItemDialog.tsx b/src/renderer/src/components/GitHubItemDialog.tsx index bba079e9f6d..fea34534873 100644 --- a/src/renderer/src/components/GitHubItemDialog.tsx +++ b/src/renderer/src/components/GitHubItemDialog.tsx @@ -186,22 +186,22 @@ import { import { startFixChecksAgent } from '@/lib/fix-checks-agent-launch' import { activateAndRevealWorktree } from '@/lib/worktree-activation' import { buildFixBrokenChecksPrompt, getBrokenChecks } from '@/components/pr-checks-fix-prompt' +import type { GitBranchChangeEntry, GitDiffResult } from '../../../shared/git-diff-compare-types' +import type { PRCheckDetail } from '../../../shared/github/check-types' import type { + GitHubIssueTimelineItem, + GitHubIssueTimelineTarget, + PRComment +} from '../../../shared/github/comment-types' +import type { + GitHubAssignableUser, GitHubOwnerRepo, GitHubPRFile, GitHubPRFileContents, GitHubPRFileViewedState, - GitHubWorkItem, - GitHubWorkItemDetails, - GitHubIssueTimelineItem, - GitHubIssueTimelineTarget, - GitHubAssignableUser, - GitHubPRMergeMethod, - GitBranchChangeEntry, - GitDiffResult, - PRCheckDetail, - PRComment -} from '../../../shared/types' + GitHubPRMergeMethod +} from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem, GitHubWorkItemDetails } from '../../../shared/github/work-item-types' import { getTaskSourceCacheScope, getTaskSourceRuntimeSettings, diff --git a/src/renderer/src/components/GitLabItemDialog.tsx b/src/renderer/src/components/GitLabItemDialog.tsx index 4d3b0f0d722..7dcf2fba06d 100644 --- a/src/renderer/src/components/GitLabItemDialog.tsx +++ b/src/renderer/src/components/GitLabItemDialog.tsx @@ -44,12 +44,12 @@ import { import { useAppStore } from '@/store' import type { GitLabAssignableUser, - GitLabPipelineJob, GitLabMRUpdate, + GitLabPipelineJob, GitLabWorkItem, GitLabWorkItemDetails, MRComment -} from '../../../shared/types' +} from '../../../shared/gitlab-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/JiraIssueWorkspace.tsx b/src/renderer/src/components/JiraIssueWorkspace.tsx index 969765c4dca..b1f2078900c 100644 --- a/src/renderer/src/components/JiraIssueWorkspace.tsx +++ b/src/renderer/src/components/JiraIssueWorkspace.tsx @@ -45,7 +45,7 @@ import type { JiraPriority, JiraTransition, JiraUser -} from '../../../shared/types' +} from '../../../shared/jira-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { translate } from '@/i18n/i18n' import { formatUiRelativeTimeFromDate } from '@/i18n/relative-time-format' diff --git a/src/renderer/src/components/Landing.tsx b/src/renderer/src/components/Landing.tsx index bcf5c66ec1f..701863a1ef9 100644 --- a/src/renderer/src/components/Landing.tsx +++ b/src/renderer/src/components/Landing.tsx @@ -3,7 +3,7 @@ import { AlertTriangle, ExternalLink, FolderPlus, GitBranchPlus, Star, X } from import { cn } from '../lib/utils' import { useAppStore } from '../store' import { isGitRepoKind } from '../../../shared/repo-kind' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { dismissPreflightIssue, githubProjectKeys, diff --git a/src/renderer/src/components/LinearIssueTextEditor.tsx b/src/renderer/src/components/LinearIssueTextEditor.tsx index e00f508a7ac..42db6a5c4c8 100644 --- a/src/renderer/src/components/LinearIssueTextEditor.tsx +++ b/src/renderer/src/components/LinearIssueTextEditor.tsx @@ -8,7 +8,7 @@ import { cn } from '@/lib/utils' import { useAppStore } from '@/store' import { getScreenSubmitShortcutLabel, isScreenSubmitShortcut } from '@/lib/screen-submit-shortcut' import { linearUpdateIssue } from '@/runtime/runtime-linear-client' -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { getLinearIssueTextSavePlan, diff --git a/src/renderer/src/components/LinearIssueWorkspace.tsx b/src/renderer/src/components/LinearIssueWorkspace.tsx index 690f2d42655..7c92ca1d618 100644 --- a/src/renderer/src/components/LinearIssueWorkspace.tsx +++ b/src/renderer/src/components/LinearIssueWorkspace.tsx @@ -70,9 +70,9 @@ import { import type { LinearComment, LinearIssue, - LinearIssueChildSummary, - LinearProjectSummary -} from '../../../shared/types' + LinearIssueChildSummary +} from '../../../shared/linear/issue-types' +import type { LinearProjectSummary } from '../../../shared/linear/project-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/LinearItemDrawer.tsx b/src/renderer/src/components/LinearItemDrawer.tsx index 82053896d36..5cbd0cc2a3b 100644 --- a/src/renderer/src/components/LinearItemDrawer.tsx +++ b/src/renderer/src/components/LinearItemDrawer.tsx @@ -57,7 +57,7 @@ import { getLinearStatePillStyle } from '@/components/linear-state-pill-style' import { LinearPriorityIcon } from '@/components/linear-priority-icon' -import type { LinearIssue, LinearComment } from '../../../shared/types' +import type { LinearComment, LinearIssue } from '../../../shared/linear/issue-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { linearAddIssueComment, diff --git a/src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx b/src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx index e0685b55fbe..0c44cf153e5 100644 --- a/src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx +++ b/src/renderer/src/components/LinuxPackageInstallRecoveryCard.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, fireEvent, render, screen, type RenderResult } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { LinuxPackageInstallRecovery } from '../../../shared/types' +import type { LinuxPackageInstallRecovery } from '../../../shared/update-status-types' import { LinuxPackageInstallRecoveryCard } from './LinuxPackageInstallRecoveryCard' const RELEASE_URL = 'https://github.com/stablyai/orca/releases/tag/v1.4.200' diff --git a/src/renderer/src/components/LinuxPackageInstallRecoveryCard.tsx b/src/renderer/src/components/LinuxPackageInstallRecoveryCard.tsx index 3d89b7ee6b7..69a0f73d627 100644 --- a/src/renderer/src/components/LinuxPackageInstallRecoveryCard.tsx +++ b/src/renderer/src/components/LinuxPackageInstallRecoveryCard.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import type { LinuxPackageInstallInstructions, LinuxPackageInstallRecovery -} from '../../../shared/types' +} from '../../../shared/update-status-types' import { UpdateErrorCardContent } from './UpdateErrorCardContent' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/NewWorkspaceComposerCard.tsx b/src/renderer/src/components/NewWorkspaceComposerCard.tsx index b9683150d17..4606a625c07 100644 --- a/src/renderer/src/components/NewWorkspaceComposerCard.tsx +++ b/src/renderer/src/components/NewWorkspaceComposerCard.tsx @@ -34,16 +34,13 @@ import { } from '@/lib/text-control-paste' import { getScreenSubmitModifierLabel } from '@/lib/screen-submit-shortcut' import { useContextualTour } from '@/components/contextual-tours/use-contextual-tour' -import type { - GitHubWorkItem, - GitLabWorkItem, - JiraIssue, - LinearIssue, - SetupAgentStartupPolicy, - OrcaHooks, - SparsePreset, - TuiAgent -} from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../shared/gitlab-types' +import type { JiraIssue } from '../../../shared/jira-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { OrcaHooks, SetupAgentStartupPolicy } from '../../../shared/orca-yaml-hook-types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { SparsePreset } from '../../../shared/worktree/create-types' import SparseCheckoutPresetSelect from '@/components/sparse/SparseCheckoutPresetSelect' import SmartWorkspaceNameField, { type SmartWorkspaceNameSelection diff --git a/src/renderer/src/components/NewWorkspaceComposerModal.tsx b/src/renderer/src/components/NewWorkspaceComposerModal.tsx index aa46a10f7bf..77b9cf64e52 100644 --- a/src/renderer/src/components/NewWorkspaceComposerModal.tsx +++ b/src/renderer/src/components/NewWorkspaceComposerModal.tsx @@ -19,12 +19,10 @@ import { import type { LinkedWorkItemSummary } from '@/lib/new-workspace' import { shouldAllowComposerEnterSubmitTarget } from '@/lib/new-workspace-enter-guard' import { isScreenSubmitShortcut } from '@/lib/screen-submit-shortcut' -import type { - GitHubWorkItem, - TuiAgent, - WorkspaceCreateTelemetrySource, - WorkspaceStatus -} from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../shared/workspace-source' +import type { WorkspaceStatus } from '../../../shared/worktree/types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { translate } from '@/i18n/i18n' import { getWorkspaceComposerInitialFocusTarget } from '@/lib/workspace-composer-initial-focus' diff --git a/src/renderer/src/components/PullRequestPage.tsx b/src/renderer/src/components/PullRequestPage.tsx index f47b452b573..e495583ab4d 100644 --- a/src/renderer/src/components/PullRequestPage.tsx +++ b/src/renderer/src/components/PullRequestPage.tsx @@ -193,20 +193,18 @@ import { saveSourceControlActionRecipe, type SourceControlAiWriteTarget } from '../../../shared/source-control-ai-recipe-save' +import type { GitBranchChangeEntry, GitDiffResult } from '../../../shared/git-diff-compare-types' +import type { PRCheckDetail } from '../../../shared/github/check-types' +import type { PRComment } from '../../../shared/github/comment-types' import type { + GitHubAssignableUser, GitHubOwnerRepo, GitHubPRFile, GitHubPRFileContents, GitHubPRFileViewedState, - GitHubWorkItem, - GitHubWorkItemDetails, - GitHubAssignableUser, - GitHubPRMergeMethod, - GitBranchChangeEntry, - GitDiffResult, - PRCheckDetail, - PRComment -} from '../../../shared/types' + GitHubPRMergeMethod +} from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem, GitHubWorkItemDetails } from '../../../shared/github/work-item-types' import { getTaskSourceCacheScope, getTaskSourceRuntimeSettings, diff --git a/src/renderer/src/components/TaskPage.tsx b/src/renderer/src/components/TaskPage.tsx index d7cfc3e9e5e..cf6e884b7b0 100644 --- a/src/renderer/src/components/TaskPage.tsx +++ b/src/renderer/src/components/TaskPage.tsx @@ -351,34 +351,38 @@ import { resolveGitHubPRMergeMethods } from '../../../shared/github/pull-request-merge-methods' import type { - GitHubOwnerRepo, GitHubAssignableUser, - GitHubPRMergeMethod, - GitHubIssueUpdate, - GitHubWorkItem, - GitLabTodo, - GitLabWorkItem, + GitHubOwnerRepo, + GitHubPRMergeMethod +} from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { GitLabProjectRef, GitLabTodo, GitLabWorkItem } from '../../../shared/gitlab-types' +import type { GitHubIssueUpdate } from '../../../shared/issue-mutation-types' +import type { JiraCreateField, - LinearCollectionResult, - LinearCustomViewModel, - LinearCustomViewSummary, JiraIssue, JiraIssueType, - JiraProject, - JiraProjectStatusOrder, JiraPriority, - LinearIssue, + JiraProject, + JiraProjectStatusOrder +} from '../../../shared/jira-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { + LinearCustomViewModel, + LinearCustomViewSummary, LinearProjectDetail, - LinearProjectSummary, + LinearProjectSummary +} from '../../../shared/linear/project-types' +import type { + LinearCollectionResult, LinearTeam, - LinearWorkspaceSelection, LinearWorkflowState, - Repo, - TaskProvider, - TaskViewPresetId -} from '../../../shared/types' + LinearWorkspaceSelection +} from '../../../shared/linear/workspace-types' +import type { Repo } from '../../../shared/repo-types' +import type { TaskProvider } from '../../../shared/task-providers' +import type { TaskViewPresetId } from '../../../shared/ui-chrome-types' import type { PreflightStatus } from '../../../preload/api-types' -import type { GitLabProjectRef } from '../../../shared/gitlab-types' import { LINEAR_ISSUE_LIST_MAX, clampLinearIssueListLimit diff --git a/src/renderer/src/components/Terminal.tsx b/src/renderer/src/components/Terminal.tsx index d555a92d22c..d6878135189 100644 --- a/src/renderer/src/components/Terminal.tsx +++ b/src/renderer/src/components/Terminal.tsx @@ -38,7 +38,9 @@ import { import { isIntentionalAppRestartInProgress } from '@/lib/updater-beforeunload' import { preventUnloadAndScheduleShutdownCheckpointReset } from '@/lib/shutdown-checkpoint-guard' import EditorAutosaveController from './editor/EditorAutosaveController' -import type { Tab, TabGroupLayoutNode, TerminalTab, TuiAgent } from '../../../shared/types' +import type { Tab, TabGroupLayoutNode } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { hasFeatureInteraction } from '../../../shared/feature-interactions' import BrowserPane from './browser-pane/BrowserPane' import { RetainedBrowserPaneOverlayLayer } from './browser-pane/BrowserPaneOverlayLayer' diff --git a/src/renderer/src/components/UpdateCard.error-card.test.tsx b/src/renderer/src/components/UpdateCard.error-card.test.tsx index 4e4aec4d2b5..4cb297b7ca4 100644 --- a/src/renderer/src/components/UpdateCard.error-card.test.tsx +++ b/src/renderer/src/components/UpdateCard.error-card.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, fireEvent, render, screen, type RenderResult } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { LinuxPackageInstallRecovery } from '../../../shared/types' +import type { LinuxPackageInstallRecovery } from '../../../shared/update-status-types' import { useAppStore } from '../store' import { UpdateCard } from './UpdateCard' diff --git a/src/renderer/src/components/UpdateCard.test.ts b/src/renderer/src/components/UpdateCard.test.ts index 6eed56fad3e..d5103ed30fc 100644 --- a/src/renderer/src/components/UpdateCard.test.ts +++ b/src/renderer/src/components/UpdateCard.test.ts @@ -1,7 +1,7 @@ import { createStore, type StoreApi } from 'zustand/vanilla' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultUIState } from '../../../shared/constants' -import type { ChangelogData, UpdateStatus } from '../../../shared/types' +import type { ChangelogData, UpdateStatus } from '../../../shared/update-status-types' import { createUISlice } from '../store/slices/ui' import type { AppState } from '../store/types' import { isHttp2ProtocolError } from './UpdateCard' diff --git a/src/renderer/src/components/UpdateCard.tsx b/src/renderer/src/components/UpdateCard.tsx index b47e9fedd72..bb2b2d194c3 100644 --- a/src/renderer/src/components/UpdateCard.tsx +++ b/src/renderer/src/components/UpdateCard.tsx @@ -6,7 +6,7 @@ import { Card } from './ui/card' import { Button } from './ui/button' import { Progress } from './ui/progress' import { AlertCircle, Check, Loader2, Minus, X } from 'lucide-react' -import type { ChangelogData } from '../../../shared/types' +import type { ChangelogData } from '../../../shared/update-status-types' import { UpdateErrorCardContent, type UpdateErrorCardModel } from './UpdateErrorCardContent' import { LinuxPackageInstallRecoveryCard } from './LinuxPackageInstallRecoveryCard' import { diff --git a/src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx b/src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx index 709d57777c7..0637cad8d42 100644 --- a/src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx +++ b/src/renderer/src/components/WorktreeJumpPalette.linear-url.test.tsx @@ -7,7 +7,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactI18Next from 'react-i18next' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import type { GitHubWorkItem, LinearIssue, Repo } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { Repo } from '../../../shared/repo-types' import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' import { resolveWorkspaceCreationTarget } from '@/lib/project-host-workspace-target' import { WORKTREE_PALETTE_QUERY_MAX_BYTES } from '@/lib/worktree-palette-query-bounds' diff --git a/src/renderer/src/components/WorktreeJumpPalette.tsx b/src/renderer/src/components/WorktreeJumpPalette.tsx index 4f29ebb5c24..f3a393589b6 100644 --- a/src/renderer/src/components/WorktreeJumpPalette.tsx +++ b/src/renderer/src/components/WorktreeJumpPalette.tsx @@ -51,9 +51,9 @@ import { isAutomationGeneratedWorkspace, isCliCreatedWorkspace, isDetachedHeadWorkspace, - isDefaultBranchWorkspace, isSleepingSweepExemptWorkspace } from '@/components/sidebar/visible-worktrees' +import { isDefaultBranchWorkspace } from '@/components/sidebar/default-branch-workspace' import { EMPTY_PAIRED_DEVICE_IDS_BY_ENVIRONMENT, getPairedDeviceIdsByEnvironment, @@ -200,7 +200,10 @@ import { getSettingsFocusedExecutionHostId, isRuntimeOwnedSshTargetId } from '../../../shared/execution-host' -import type { GitHubWorkItem, LinearIssue, TerminalTab, Worktree } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { isGitRepoKind } from '../../../shared/repo-kind' import { buildTaskSourceContextFromRepo, diff --git a/src/renderer/src/components/activity/ActivityPrototypePage.test.ts b/src/renderer/src/components/activity/ActivityPrototypePage.test.ts index 05aec890947..e20c9455261 100644 --- a/src/renderer/src/components/activity/ActivityPrototypePage.test.ts +++ b/src/renderer/src/components/activity/ActivityPrototypePage.test.ts @@ -6,7 +6,9 @@ import { type AgentStatusEntry } from '../../../../shared/agent-status-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { formatAgentTypeLabel } from '@/lib/agent-status' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import { diff --git a/src/renderer/src/components/activity/ActivityPrototypePage.tsx b/src/renderer/src/components/activity/ActivityPrototypePage.tsx index 8c8058fbeeb..6157c796d71 100644 --- a/src/renderer/src/components/activity/ActivityPrototypePage.tsx +++ b/src/renderer/src/components/activity/ActivityPrototypePage.tsx @@ -61,7 +61,9 @@ import { type ActivityPortalReadinessLatch, type ActivityPortalReadinessStatus } from './activity-portal-readiness-oscillation' -import type { Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { AGENT_STATUS_STALE_AFTER_MS, diff --git a/src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx b/src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx index a668162753a..aa752c4b50f 100644 --- a/src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx +++ b/src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx @@ -31,7 +31,7 @@ import { } from '@/lib/launch-agent-session-continuation' import { useAppStore } from '@/store' import { isTuiAgentEnabled } from '../../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { chooseInitialContinuationAgent } from './agent-session-continuation-selection' type AgentSessionContinuationDialogProps = { diff --git a/src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.ts b/src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.ts index 3a7617caacd..8297a104d3e 100644 --- a/src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.ts +++ b/src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.ts @@ -1,5 +1,5 @@ import { isTuiAgent } from '../../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export function chooseInitialContinuationAgent(args: { availableAgents: TuiAgent[] diff --git a/src/renderer/src/components/agent/AgentCombobox.test.tsx b/src/renderer/src/components/agent/AgentCombobox.test.tsx index 08b8b2d37c1..629aea0ee15 100644 --- a/src/renderer/src/components/agent/AgentCombobox.test.tsx +++ b/src/renderer/src/components/agent/AgentCombobox.test.tsx @@ -3,7 +3,7 @@ import { cleanup, fireEvent, render, screen } from '@testing-library/react' import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { AGENT_CATALOG, AgentIcon } from '@/lib/agent-catalog' import { AGENT_FAVICON_ASSETS } from '@/lib/agent-favicon-assets' import AgentCombobox from './AgentCombobox' diff --git a/src/renderer/src/components/agent/AgentCombobox.tsx b/src/renderer/src/components/agent/AgentCombobox.tsx index a4fa9202543..1c2ef729db9 100644 --- a/src/renderer/src/components/agent/AgentCombobox.tsx +++ b/src/renderer/src/components/agent/AgentCombobox.tsx @@ -22,7 +22,7 @@ import { searchAgentPickerEntries } from '@/lib/agent-picker-search' import { cn } from '@/lib/utils' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { createAgentComboboxCommandState, resolveAgentComboboxCommandState, diff --git a/src/renderer/src/components/agent/AgentSettingsDialog.test.tsx b/src/renderer/src/components/agent/AgentSettingsDialog.test.tsx index 9c53f03f7b7..ee45c71c30e 100644 --- a/src/renderer/src/components/agent/AgentSettingsDialog.test.tsx +++ b/src/renderer/src/components/agent/AgentSettingsDialog.test.tsx @@ -4,7 +4,7 @@ import { act, createElement, type ComponentProps, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { AgentsPane } from '@/components/settings/AgentsPane' import { resetWindowsTerminalCapabilitiesForTests } from '@/lib/windows-terminal-capabilities' diff --git a/src/renderer/src/components/automations/AutomationEditorDialog.tsx b/src/renderer/src/components/automations/AutomationEditorDialog.tsx index 6ac0c7bc66c..569d1a8a2ea 100644 --- a/src/renderer/src/components/automations/AutomationEditorDialog.tsx +++ b/src/renderer/src/components/automations/AutomationEditorDialog.tsx @@ -6,15 +6,13 @@ import type { AutomationSchedulePreset, AutomationWorkspaceMode } from '../../../../shared/automations-types' -import type { - GlobalSettings, - OrcaHooks, - ProjectHostSetup, - Repo, - SetupDecision, - TuiAgent, - Worktree -} from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { SetupDecision } from '../../../../shared/worktree/create-types' +import type { Worktree } from '../../../../shared/worktree/types' import { isValidAutomationCronSchedule, isValidAutomationSchedule diff --git a/src/renderer/src/components/automations/AutomationEditorDialogFooter.tsx b/src/renderer/src/components/automations/AutomationEditorDialogFooter.tsx index 160dac72d8b..2c68beee9b3 100644 --- a/src/renderer/src/components/automations/AutomationEditorDialogFooter.tsx +++ b/src/renderer/src/components/automations/AutomationEditorDialogFooter.tsx @@ -7,13 +7,11 @@ import AgentCombobox from '@/components/agent/AgentCombobox' import { cn } from '@/lib/utils' import { translate } from '@/i18n/i18n' import type { AutomationWorkspaceMode } from '../../../../shared/automations-types' -import type { - GlobalSettings, - OrcaHooks, - ProjectHostSetup, - Repo, - Worktree -} from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AgentCatalogEntry } from '@/lib/agent-catalog' import { Field } from './automation-page-parts' import { AutomationMissedRunGraceField } from './AutomationMissedRunGraceField' diff --git a/src/renderer/src/components/automations/AutomationListLocalRows.tsx b/src/renderer/src/components/automations/AutomationListLocalRows.tsx index 93019241d63..cde61bd6201 100644 --- a/src/renderer/src/components/automations/AutomationListLocalRows.tsx +++ b/src/renderer/src/components/automations/AutomationListLocalRows.tsx @@ -27,7 +27,9 @@ import { getRepoExecutionHostId } from '../../../../shared/execution-host' import type { SshConnectionState } from '../../../../shared/ssh-types' -import type { ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { RuntimeStatus } from '../../../../shared/runtime-types' import type { TaskSourceHostAvailability } from '../task-source-context-summary' import type { AutomationHostTarget } from './automation-host-client' diff --git a/src/renderer/src/components/automations/AutomationProjectCombobox.tsx b/src/renderer/src/components/automations/AutomationProjectCombobox.tsx index 65d0176bf29..73fc44bddb5 100644 --- a/src/renderer/src/components/automations/AutomationProjectCombobox.tsx +++ b/src/renderer/src/components/automations/AutomationProjectCombobox.tsx @@ -11,7 +11,7 @@ import { isRepoSearchQueryTooLarge, searchRepos } from '@/lib/repo-search' import { cn } from '@/lib/utils' import { useMountedRef } from '@/hooks/useMountedRef' import { translate } from '@/i18n/i18n' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getAutomationProjectGroupForRepo, getAutomationProjectGroups, diff --git a/src/renderer/src/components/automations/AutomationRunHistory.tsx b/src/renderer/src/components/automations/AutomationRunHistory.tsx index 777eaff3fa2..323accb7259 100644 --- a/src/renderer/src/components/automations/AutomationRunHistory.tsx +++ b/src/renderer/src/components/automations/AutomationRunHistory.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useState } from 'react' import { Badge } from '@/components/ui/badge' import { cn } from '@/lib/utils' import type { AutomationRun } from '../../../../shared/automations-types' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { formatAutomationDateTime, getAutomationRunStatusLabel, diff --git a/src/renderer/src/components/automations/AutomationSetupDecisionField.tsx b/src/renderer/src/components/automations/AutomationSetupDecisionField.tsx index 2731dba8164..56a05f881b4 100644 --- a/src/renderer/src/components/automations/AutomationSetupDecisionField.tsx +++ b/src/renderer/src/components/automations/AutomationSetupDecisionField.tsx @@ -5,7 +5,9 @@ import { cn } from '@/lib/utils' import { translate } from '@/i18n/i18n' import { getVisibleAutomationSetupDecision } from './automation-setup-decision' import type { AutomationCreateTarget, AutomationDraft } from './AutomationEditorDialog' -import type { OrcaHooks, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' type AutomationSetupDecisionFieldProps = { createTarget: AutomationCreateTarget diff --git a/src/renderer/src/components/automations/AutomationsDetailPane.tsx b/src/renderer/src/components/automations/AutomationsDetailPane.tsx index 48ffceba88f..4de2a9ed795 100644 --- a/src/renderer/src/components/automations/AutomationsDetailPane.tsx +++ b/src/renderer/src/components/automations/AutomationsDetailPane.tsx @@ -11,7 +11,7 @@ import type { ExternalAutomationRun, AutomationRun } from '../../../../shared/automations-types' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import CommentMarkdown from '@/components/sidebar/CommentMarkdown' import { AutomationDetail } from './AutomationDetail' import { HermesCronOutputView } from './HermesCronOutputView' diff --git a/src/renderer/src/components/automations/AutomationsListPanel.tsx b/src/renderer/src/components/automations/AutomationsListPanel.tsx index a792839885c..b946d846b05 100644 --- a/src/renderer/src/components/automations/AutomationsListPanel.tsx +++ b/src/renderer/src/components/automations/AutomationsListPanel.tsx @@ -10,7 +10,9 @@ import type { ExternalAutomationManager } from '../../../../shared/automations-types' import type { SshConnectionState } from '../../../../shared/ssh-types' -import type { ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { RuntimeStatus } from '../../../../shared/runtime-types' import type { TaskSourceHostAvailability } from '../task-source-context-summary' import type { AutomationHostTarget } from './automation-host-client' diff --git a/src/renderer/src/components/automations/AutomationsPage.tsx b/src/renderer/src/components/automations/AutomationsPage.tsx index a17d79e4197..4445cf21eeb 100644 --- a/src/renderer/src/components/automations/AutomationsPage.tsx +++ b/src/renderer/src/components/automations/AutomationsPage.tsx @@ -28,7 +28,8 @@ import { import { getHostDisplayLabelOverrides } from '../../../../shared/host-setting-overrides' import type { PreflightStatus } from '../../../../preload/api-types' import type { TaskSourceContext } from '../../../../shared/task-source-context' -import type { OrcaHooks, Repo } from '../../../../shared/types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { Repo } from '../../../../shared/repo-types' import { getWorktreePathBasenameFromId } from '../../../../shared/worktree/id' import { buildAutomationRrule, diff --git a/src/renderer/src/components/automations/CreateFromPicker.test.tsx b/src/renderer/src/components/automations/CreateFromPicker.test.tsx index 46cb4ded084..3aaeb3f2a7f 100644 --- a/src/renderer/src/components/automations/CreateFromPicker.test.tsx +++ b/src/renderer/src/components/automations/CreateFromPicker.test.tsx @@ -3,7 +3,7 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { CreateFromPicker } from './CreateFromPicker' import { getRuntimeRepoBaseRefDefault, diff --git a/src/renderer/src/components/automations/CreateFromPicker.tsx b/src/renderer/src/components/automations/CreateFromPicker.tsx index 083ba015da7..a392627ee18 100644 --- a/src/renderer/src/components/automations/CreateFromPicker.tsx +++ b/src/renderer/src/components/automations/CreateFromPicker.tsx @@ -11,7 +11,8 @@ import { } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import { getRuntimeEnvironmentIdForRepo } from '@/lib/repo-runtime-owner' import { diff --git a/src/renderer/src/components/automations/WorkspaceCombobox.tsx b/src/renderer/src/components/automations/WorkspaceCombobox.tsx index 0951a2e23b2..ffad3e6ccbb 100644 --- a/src/renderer/src/components/automations/WorkspaceCombobox.tsx +++ b/src/renderer/src/components/automations/WorkspaceCombobox.tsx @@ -10,7 +10,7 @@ import { } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { translate } from '@/i18n/i18n' export function WorkspaceCombobox({ diff --git a/src/renderer/src/components/automations/automation-draft-model.ts b/src/renderer/src/components/automations/automation-draft-model.ts index 2abf4511388..827f84543a4 100644 --- a/src/renderer/src/components/automations/automation-draft-model.ts +++ b/src/renderer/src/components/automations/automation-draft-model.ts @@ -1,7 +1,7 @@ import { getAgentCatalog } from '@/lib/agent-catalog' import type { AutomationPrecheck } from '../../../../shared/automations-types' import { buildAutomationCronSchedule } from '../../../../shared/automation-schedules' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AutomationDraft } from './AutomationEditorDialog' export const AUTOMATION_DEFAULT_TIME = '09:00' diff --git a/src/renderer/src/components/automations/automation-host-client.ts b/src/renderer/src/components/automations/automation-host-client.ts index 36e1ff0560a..b5e28fcb6b1 100644 --- a/src/renderer/src/components/automations/automation-host-client.ts +++ b/src/renderer/src/components/automations/automation-host-client.ts @@ -6,7 +6,7 @@ import type { AutomationUpdateInput } from '../../../../shared/automations-types' import { parseExecutionHostId } from '../../../../shared/execution-host' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' type RuntimeAutomationCreateInput = Omit< AutomationCreateInput, diff --git a/src/renderer/src/components/automations/automation-project-groups.test.ts b/src/renderer/src/components/automations/automation-project-groups.test.ts index 4423c381505..b8039169496 100644 --- a/src/renderer/src/components/automations/automation-project-groups.test.ts +++ b/src/renderer/src/components/automations/automation-project-groups.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getAutomationProjectGroupForRepo, getAutomationProjectGroups, diff --git a/src/renderer/src/components/automations/automation-project-groups.ts b/src/renderer/src/components/automations/automation-project-groups.ts index eacea1f8c41..4dd4c2a6c39 100644 --- a/src/renderer/src/components/automations/automation-project-groups.ts +++ b/src/renderer/src/components/automations/automation-project-groups.ts @@ -1,6 +1,6 @@ import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import { getProjectIdentityKey } from '../../../../shared/project-host-setup-projection' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export type AutomationProjectGroup = { projectKey: string diff --git a/src/renderer/src/components/automations/automation-run-context.test.ts b/src/renderer/src/components/automations/automation-run-context.test.ts index 345b03d56f7..b2f1dc2f4ae 100644 --- a/src/renderer/src/components/automations/automation-run-context.test.ts +++ b/src/renderer/src/components/automations/automation-run-context.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { buildAutomationRunContextForRepo } from './automation-run-context' function repo(id: string, path = `/repos/${id}`): Repo { diff --git a/src/renderer/src/components/automations/automation-run-context.ts b/src/renderer/src/components/automations/automation-run-context.ts index 65bad47c9f3..49894f78159 100644 --- a/src/renderer/src/components/automations/automation-run-context.ts +++ b/src/renderer/src/components/automations/automation-run-context.ts @@ -2,7 +2,8 @@ import { buildWorkspaceRunContext, type WorkspaceRunContext } from '../../../../shared/task-source-context' -import type { ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' export function buildAutomationRunContextForRepo(args: { repoId: string diff --git a/src/renderer/src/components/automations/automation-run-open-target.ts b/src/renderer/src/components/automations/automation-run-open-target.ts index 9ee8087be85..d3de0eb7fc7 100644 --- a/src/renderer/src/components/automations/automation-run-open-target.ts +++ b/src/renderer/src/components/automations/automation-run-open-target.ts @@ -1,6 +1,9 @@ import type { AutomationRun } from '../../../../shared/automations-types' import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' export type AutomationRunPaneTarget = { tabId: string diff --git a/src/renderer/src/components/automations/automation-run-workspace-display.ts b/src/renderer/src/components/automations/automation-run-workspace-display.ts index 7d7a5e81be3..5ea6d23230e 100644 --- a/src/renderer/src/components/automations/automation-run-workspace-display.ts +++ b/src/renderer/src/components/automations/automation-run-workspace-display.ts @@ -1,5 +1,5 @@ import type { AutomationRun } from '../../../../shared/automations-types' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' export type AutomationRunWorkspaceDisplay = { rowLabel: string diff --git a/src/renderer/src/components/automations/automation-setup-decision.test.ts b/src/renderer/src/components/automations/automation-setup-decision.test.ts index b46d76da980..87d1bf19a14 100644 --- a/src/renderer/src/components/automations/automation-setup-decision.test.ts +++ b/src/renderer/src/components/automations/automation-setup-decision.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { getAutomationSetupDecisionDraftValue, getVisibleAutomationSetupDecision, diff --git a/src/renderer/src/components/automations/automation-setup-decision.ts b/src/renderer/src/components/automations/automation-setup-decision.ts index f565e439f34..9df3f0298fc 100644 --- a/src/renderer/src/components/automations/automation-setup-decision.ts +++ b/src/renderer/src/components/automations/automation-setup-decision.ts @@ -1,11 +1,8 @@ import type { AutomationWorkspaceMode } from '../../../../shared/automations-types' -import type { - OrcaHooks, - ProjectHostSetup, - Repo, - SetupDecision, - SetupRunPolicy -} from '../../../../shared/types' +import type { OrcaHooks, SetupRunPolicy } from '../../../../shared/orca-yaml-hook-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { SetupDecision } from '../../../../shared/worktree/create-types' import { getSetupConfig } from '@/lib/new-workspace' type AutomationSetupSource = { diff --git a/src/renderer/src/components/automations/automation-target-availability.test.ts b/src/renderer/src/components/automations/automation-target-availability.test.ts index 8c9ab713e88..2b94251144a 100644 --- a/src/renderer/src/components/automations/automation-target-availability.test.ts +++ b/src/renderer/src/components/automations/automation-target-availability.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from 'vitest' import type { Automation } from '../../../../shared/automations-types' import type { RuntimeStatus } from '../../../../shared/runtime-types' -import type { ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getAutomationTargetAvailability } from './automation-target-availability' function makeAutomation(overrides: Partial = {}): Automation { diff --git a/src/renderer/src/components/automations/automation-target-availability.ts b/src/renderer/src/components/automations/automation-target-availability.ts index ca7c166b5a8..40a6b3dc8f6 100644 --- a/src/renderer/src/components/automations/automation-target-availability.ts +++ b/src/renderer/src/components/automations/automation-target-availability.ts @@ -12,7 +12,9 @@ import type { AutomationHostTarget } from './automation-host-client' import type { SshConnectionState } from '../../../../shared/ssh-types' import type { TaskSourceContext } from '../../../../shared/task-source-context' import type { RuntimeStatus } from '../../../../shared/runtime-types' -import type { ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { TaskSourceHostAvailability } from '../task-source-context-summary' export type AutomationTargetAvailability = diff --git a/src/renderer/src/components/automations/automation-templates.ts b/src/renderer/src/components/automations/automation-templates.ts index 5f4af77b7e4..b4abe3017df 100644 --- a/src/renderer/src/components/automations/automation-templates.ts +++ b/src/renderer/src/components/automations/automation-templates.ts @@ -1,5 +1,5 @@ import type { AutomationSchedulePreset } from '../../../../shared/automations-types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { translate } from '@/i18n/i18n' import { createLocalizedCatalog } from '@/i18n/localized-catalog' diff --git a/src/renderer/src/components/automations/use-automation-list-search.ts b/src/renderer/src/components/automations/use-automation-list-search.ts index 235c08cdb1e..95ac89262a0 100644 --- a/src/renderer/src/components/automations/use-automation-list-search.ts +++ b/src/renderer/src/components/automations/use-automation-list-search.ts @@ -1,7 +1,7 @@ import { useDeferredValue, useEffect, useMemo } from 'react' import type { Automation } from '../../../../shared/automations-types' import { getAutomationRunRepoId } from '../../../../shared/automation-run-identity' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { automationListSearchIndexMatches, buildAutomationListSearchIndex, diff --git a/src/renderer/src/components/browser-pane/BrowserAddressBar.test.tsx b/src/renderer/src/components/browser-pane/BrowserAddressBar.test.tsx index 0cf202ff2d8..2f147fc98cc 100644 --- a/src/renderer/src/components/browser-pane/BrowserAddressBar.test.tsx +++ b/src/renderer/src/components/browser-pane/BrowserAddressBar.test.tsx @@ -3,7 +3,7 @@ import { act, type ReactNode, useRef, useState } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { BrowserHistoryEntry } from '../../../../shared/types' +import type { BrowserHistoryEntry } from '../../../../shared/browser-workspace-types' import BrowserAddressBar from './BrowserAddressBar' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/browser-pane/BrowserPane.tsx b/src/renderer/src/components/browser-pane/BrowserPane.tsx index 9158962d88c..064d2e46d30 100644 --- a/src/renderer/src/components/browser-pane/BrowserPane.tsx +++ b/src/renderer/src/components/browser-pane/BrowserPane.tsx @@ -68,7 +68,7 @@ import type { BrowserLoadError, BrowserPage as BrowserPageState, BrowserWorkspace as BrowserWorkspaceState -} from '../../../../shared/types' +} from '../../../../shared/browser-workspace-types' import { normalizeBrowserNavigationUrl, normalizeExternalBrowserUrl, diff --git a/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.test.tsx b/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.test.tsx index 111890288f4..13aa6d109a3 100644 --- a/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.test.tsx +++ b/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.test.tsx @@ -3,7 +3,8 @@ import { cleanup, render } from '@testing-library/react' import { Suspense } from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { BrowserTab as BrowserTabState, Tab, TabGroup } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' type MockAppState = { browserTabsByWorktree: Record diff --git a/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.tsx b/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.tsx index 67d6aa4da9e..f0ea554f9fe 100644 --- a/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.tsx +++ b/src/renderer/src/components/browser-pane/BrowserPaneOverlayLayer.tsx @@ -2,7 +2,8 @@ import { memo, useCallback, useLayoutEffect, useMemo, useState } from 'react' import { registerBrowserOverlaySlotViewport } from './browser-page-viewport' import { useShallow } from 'zustand/react/shallow' import { useAppStore } from '../../store' -import type { BrowserTab as BrowserTabState, Tab, TabGroup } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import BrowserPane, { type BrowserFindShortcutScope } from './BrowserPane' import { tabGroupBodyAnchorName } from '../tab-group/tab-group-body-anchor' import { useBrowserAutomationVisibilityForAny } from './browser-automation-visibility' diff --git a/src/renderer/src/components/browser-pane/BrowserToolbarMenu.tsx b/src/renderer/src/components/browser-pane/BrowserToolbarMenu.tsx index f712d33abd2..46362bbf93e 100644 --- a/src/renderer/src/components/browser-pane/BrowserToolbarMenu.tsx +++ b/src/renderer/src/components/browser-pane/BrowserToolbarMenu.tsx @@ -4,7 +4,7 @@ import { emitBrowserCookieImportToast } from '@/lib/browser-cookie-import-toast' import { useAppStore } from '@/store' import { useMountedRef } from '@/hooks/useMountedRef' import { shouldShowBrowserImportHint } from './browser-import-hint-visibility' -import type { BrowserViewportPresetId } from '../../../../shared/types' +import type { BrowserViewportPresetId } from '../../../../shared/browser-workspace-types' import { browserViewportPresetToOverride, getBrowserViewportPreset diff --git a/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.test.ts b/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.test.ts index 5da8a237944..65ba9a3809c 100644 --- a/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.test.ts +++ b/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { BrowserHistoryEntry } from '../../../../shared/types' +import type { BrowserHistoryEntry } from '../../../../shared/browser-workspace-types' import { BROWSER_ADDRESS_BAR_QUERY_MAX_BYTES, buildBrowserAddressBarSuggestions, diff --git a/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.ts b/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.ts index 6ac0fe12c52..cff0a3b54ca 100644 --- a/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.ts +++ b/src/renderer/src/components/browser-pane/browser-address-bar-suggestions.ts @@ -6,7 +6,7 @@ import { SEARCH_ENGINE_LABELS, type SearchEngine } from '../../../../shared/browser-url' -import type { BrowserHistoryEntry } from '../../../../shared/types' +import type { BrowserHistoryEntry } from '../../../../shared/browser-workspace-types' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.test.ts b/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.test.ts index 5557664f602..9d1f2bc411d 100644 --- a/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.test.ts +++ b/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { BrowserPage, BrowserWorkspace } from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' import { BROWSER_GUEST_HIDDEN_WORKTREE_RETENTION_LIMIT, browserTabVisibilityPageIds, diff --git a/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.ts b/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.ts index 322899c279f..22cd358d4fc 100644 --- a/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.ts +++ b/src/renderer/src/components/browser-pane/browser-guest-worktree-retention.ts @@ -1,4 +1,4 @@ -import type { BrowserPage, BrowserWorkspace } from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' // Why 4: every hidden worktree that retains browser guests keeps one Electron // guest process per page alive purely for instant revisits, so guest memory diff --git a/src/renderer/src/components/browser-pane/browser-load-failure-overlay.tsx b/src/renderer/src/components/browser-pane/browser-load-failure-overlay.tsx index af760df4a6b..7c2e41d2904 100644 --- a/src/renderer/src/components/browser-pane/browser-load-failure-overlay.tsx +++ b/src/renderer/src/components/browser-pane/browser-load-failure-overlay.tsx @@ -8,7 +8,7 @@ import type { BrowserCertificateProceedFailureReason, BrowserCertificateProceedResult, BrowserLoadError -} from '../../../../shared/types' +} from '../../../../shared/browser-workspace-types' import { isEligibleLocalCertificateHost } from '../../../../shared/browser-url' import { normalizeCertificateError } from '../../../../shared/browser-certificate-errors' import { diff --git a/src/renderer/src/components/browser-pane/browser-notices.ts b/src/renderer/src/components/browser-pane/browser-notices.ts index 3c644571ec5..701a074186e 100644 --- a/src/renderer/src/components/browser-pane/browser-notices.ts +++ b/src/renderer/src/components/browser-pane/browser-notices.ts @@ -3,7 +3,7 @@ import type { BrowserPermissionDeniedEvent, BrowserPopupEvent } from '../../../../shared/browser-guest-events' -import type { BrowserLoadError } from '../../../../shared/types' +import type { BrowserLoadError } from '../../../../shared/browser-workspace-types' import { isChromiumCertificateErrorCode } from '../../../../shared/browser-certificate-errors' import { translate } from '@/i18n/i18n' import { BROWSER_GUEST_RECOVERY_ERROR_CODE } from './browser-page-guest-recovery' diff --git a/src/renderer/src/components/browser-pane/browser-pane-page-selection.test.ts b/src/renderer/src/components/browser-pane/browser-pane-page-selection.test.ts index 54455d706cc..f97398619f5 100644 --- a/src/renderer/src/components/browser-pane/browser-pane-page-selection.test.ts +++ b/src/renderer/src/components/browser-pane/browser-pane-page-selection.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getBrowserPagesForWorkspace } from './browser-pane-page-selection' -import type { BrowserPage } from '../../../../shared/types' +import type { BrowserPage } from '../../../../shared/browser-workspace-types' function makeBrowserPage(id: string): BrowserPage { return { diff --git a/src/renderer/src/components/browser-pane/browser-pane-page-selection.ts b/src/renderer/src/components/browser-pane/browser-pane-page-selection.ts index 240b0dec6e9..38b8b7d3f95 100644 --- a/src/renderer/src/components/browser-pane/browser-pane-page-selection.ts +++ b/src/renderer/src/components/browser-pane/browser-pane-page-selection.ts @@ -1,4 +1,4 @@ -import type { BrowserPage } from '../../../../shared/types' +import type { BrowserPage } from '../../../../shared/browser-workspace-types' const EMPTY_BROWSER_PAGES: BrowserPage[] = [] diff --git a/src/renderer/src/components/browser-pane/browser-toolbar-menu-dropdown.tsx b/src/renderer/src/components/browser-pane/browser-toolbar-menu-dropdown.tsx index 508eb059ca2..88d63df7dd6 100644 --- a/src/renderer/src/components/browser-pane/browser-toolbar-menu-dropdown.tsx +++ b/src/renderer/src/components/browser-pane/browser-toolbar-menu-dropdown.tsx @@ -16,7 +16,10 @@ import { import { BrowserCookieImportDisclosure } from '@/components/BrowserCookieImportDisclosure' import { useAppStore } from '@/store' import { BROWSER_FAMILY_LABELS } from '../../../../shared/constants' -import type { BrowserSessionProfile, BrowserViewportPresetId } from '../../../../shared/types' +import type { + BrowserSessionProfile, + BrowserViewportPresetId +} from '../../../../shared/browser-workspace-types' type DetectedBrowserEntry = { family: string diff --git a/src/renderer/src/components/cmd-j/PaletteCreateWorktreeRow.tsx b/src/renderer/src/components/cmd-j/PaletteCreateWorktreeRow.tsx index 2079a0c8fbf..e2d126beae4 100644 --- a/src/renderer/src/components/cmd-j/PaletteCreateWorktreeRow.tsx +++ b/src/renderer/src/components/cmd-j/PaletteCreateWorktreeRow.tsx @@ -5,7 +5,7 @@ import { JiraIcon } from '@/components/icons/JiraIcon' import { CommandItem } from '@/components/ui/command' import { CREATE_WORKTREE_ITEM_ID } from '@/lib/worktree-palette-create-action' import type { CmdJTaskUrlCreatePreview } from '@/lib/worktree-palette-task-url-match' -import type { LinearIssue } from '../../../../shared/types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' import { translate } from '@/i18n/i18n' function TaskUrlProviderIcon({ diff --git a/src/renderer/src/components/cmd-j/palette-filter-options.test.ts b/src/renderer/src/components/cmd-j/palette-filter-options.test.ts index bdfaef30ad8..021e92a2359 100644 --- a/src/renderer/src/components/cmd-j/palette-filter-options.test.ts +++ b/src/renderer/src/components/cmd-j/palette-filter-options.test.ts @@ -1,7 +1,9 @@ import path from 'node:path' import { describe, expect, it } from 'vitest' import { getWorktreeExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' -import type { Project, ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildSidebarHostOptions } from '../sidebar/sidebar-host-options' import { buildPaletteFilterModel, diff --git a/src/renderer/src/components/cmd-j/palette-filter-options.ts b/src/renderer/src/components/cmd-j/palette-filter-options.ts index 9eb5fdce4ac..2670eb80e28 100644 --- a/src/renderer/src/components/cmd-j/palette-filter-options.ts +++ b/src/renderer/src/components/cmd-j/palette-filter-options.ts @@ -3,7 +3,9 @@ import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../../shared/execution-host' -import type { Project, ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getProjectHeaderRevealTarget, type ProjectGroupingModel diff --git a/src/renderer/src/components/cmd-j/palette-filter.ts b/src/renderer/src/components/cmd-j/palette-filter.ts index 075af323799..f521a6ad92a 100644 --- a/src/renderer/src/components/cmd-j/palette-filter.ts +++ b/src/renderer/src/components/cmd-j/palette-filter.ts @@ -1,5 +1,5 @@ import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { resolveRepoFilterHostId, resolveWorktreeFilterHostId, diff --git a/src/renderer/src/components/cmd-j/palette-host-badge.ts b/src/renderer/src/components/cmd-j/palette-host-badge.ts index 01cdc72a60f..8ac94adeae4 100644 --- a/src/renderer/src/components/cmd-j/palette-host-badge.ts +++ b/src/renderer/src/components/cmd-j/palette-host-badge.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID, diff --git a/src/renderer/src/components/cmd-j/palette-live-status.test.tsx b/src/renderer/src/components/cmd-j/palette-live-status.test.tsx index f19bf3a91d2..9e8a51a6e80 100644 --- a/src/renderer/src/components/cmd-j/palette-live-status.test.tsx +++ b/src/renderer/src/components/cmd-j/palette-live-status.test.tsx @@ -7,7 +7,7 @@ import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { PaletteLiveStatusProvider, PaletteRecentTabStatusDot, diff --git a/src/renderer/src/components/cmd-j/palette-live-status.tsx b/src/renderer/src/components/cmd-j/palette-live-status.tsx index 03a2af8928d..5c755ad4164 100644 --- a/src/renderer/src/components/cmd-j/palette-live-status.tsx +++ b/src/renderer/src/components/cmd-j/palette-live-status.tsx @@ -26,7 +26,9 @@ import { } from '@/components/tab-bar/terminal-tab-activity-status' import { translate } from '@/i18n/i18n' import type { LiveAgentWorktreeStatus } from '@/lib/worktree-activity-state' -import type { BrowserWorkspace, TerminalTab, Worktree } from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' /** Confines the app's hottest status subscriptions here so only the dots re-render on their churn. */ type PaletteLiveStatus = { diff --git a/src/renderer/src/components/cmd-j/palette-project-results.ts b/src/renderer/src/components/cmd-j/palette-project-results.ts index d0fcc15636c..e45e2a8e29f 100644 --- a/src/renderer/src/components/cmd-j/palette-project-results.ts +++ b/src/renderer/src/components/cmd-j/palette-project-results.ts @@ -4,7 +4,9 @@ import { normalizeCmdJPaletteQuery, uniqueNormalizedCmdJPaletteKeywords } from './palette-query-tokens' -import type { Project, ProjectGroup, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { translate } from '@/i18n/i18n' import { getProjectGroupHeaderKey, diff --git a/src/renderer/src/components/cmd-j/palette-results.test.ts b/src/renderer/src/components/cmd-j/palette-results.test.ts index bf875ebe9a2..e9f7b3ec3fa 100644 --- a/src/renderer/src/components/cmd-j/palette-results.test.ts +++ b/src/renderer/src/components/cmd-j/palette-results.test.ts @@ -13,7 +13,9 @@ import { } from './palette-results' import { hasCmdJProjectSearchCandidates, searchCmdJProjectResults } from './palette-project-results' import type { SettingsNavSection } from '@/lib/settings-navigation-types' -import type { Project, ProjectGroup, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' const noopRun: CmdJQuickAction['run'] = async () => ({ status: 'ok' }) const available: CmdJQuickAction['isAvailable'] = () => ({ available: true }) diff --git a/src/renderer/src/components/cmd-j/quick-action-context.test.ts b/src/renderer/src/components/cmd-j/quick-action-context.test.ts index 7ce2e107613..325252c4dc2 100644 --- a/src/renderer/src/components/cmd-j/quick-action-context.test.ts +++ b/src/renderer/src/components/cmd-j/quick-action-context.test.ts @@ -8,7 +8,7 @@ import { } from './quick-action-context' import { getCmdJQuickActions } from './quick-actions' import type { AppState } from '@/store/types' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' type GroupState = Pick diff --git a/src/renderer/src/components/cmd-j/quick-action-context.ts b/src/renderer/src/components/cmd-j/quick-action-context.ts index 79007eae750..88a8cfad533 100644 --- a/src/renderer/src/components/cmd-j/quick-action-context.ts +++ b/src/renderer/src/components/cmd-j/quick-action-context.ts @@ -1,6 +1,6 @@ import type { AppState } from '@/store/types' import { findWorktreeById } from '@/store/slices/worktree-helpers' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import type { SshConnectionStatus } from '../../../../shared/ssh-types' import { getClientCreationActionPolicy } from '@/lib/client-creation-action-policy' diff --git a/src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts b/src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts index e401aa0665b..250830fd2d7 100644 --- a/src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts +++ b/src/renderer/src/components/cmd-j/worktree-checks-review-index.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getGitHubPRCacheKey } from '@/store/slices/github-cache-key' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review-cache-identity' import { getRepoHostIdentity } from '@/store/slices/repo-host-identity' diff --git a/src/renderer/src/components/cmd-j/worktree-checks-review-index.ts b/src/renderer/src/components/cmd-j/worktree-checks-review-index.ts index 992fab427a9..f78f566c247 100644 --- a/src/renderer/src/components/cmd-j/worktree-checks-review-index.ts +++ b/src/renderer/src/components/cmd-j/worktree-checks-review-index.ts @@ -5,7 +5,8 @@ import { getRepoHostIdentityForParts } from '@/store/slices/repo-host-identity' import type { AppState } from '@/store/types' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { selectChecksPanelReview } from '../right-sidebar/checks-panel-review' type WorktreeChecksReviewIndexArgs = { diff --git a/src/renderer/src/components/confirmation-skip-preference.ts b/src/renderer/src/components/confirmation-skip-preference.ts index 8311f2428b2..c7eea096fd4 100644 --- a/src/renderer/src/components/confirmation-skip-preference.ts +++ b/src/renderer/src/components/confirmation-skip-preference.ts @@ -1,7 +1,7 @@ import { toast } from 'sonner' import { translate } from '@/i18n/i18n' import type { SettingsNavTarget } from '@/lib/settings-navigation-types' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' /** Persists the preference and keeps its reversal one click away. */ export function persistConfirmationSkipPreference({ diff --git a/src/renderer/src/components/crash-report/CrashReportDialogSurface.tsx b/src/renderer/src/components/crash-report/CrashReportDialogSurface.tsx index 841c6c4bb44..94ffb8d342d 100644 --- a/src/renderer/src/components/crash-report/CrashReportDialogSurface.tsx +++ b/src/renderer/src/components/crash-report/CrashReportDialogSurface.tsx @@ -19,7 +19,7 @@ import { type CrashReportDiagnosticBundle, type CrashReportRecord } from '../../../../shared/crash-reporting' -import type { GitHubViewer } from '../../../../shared/types' +import type { GitHubViewer } from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' import { CRASH_REPORT_SUBMIT_FAILURE_TOAST_ID, diff --git a/src/renderer/src/components/dashboard-popout/AgentMap.tsx b/src/renderer/src/components/dashboard-popout/AgentMap.tsx index db5741e5e07..7b7afc56bc7 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMap.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMap.tsx @@ -8,7 +8,7 @@ import type { DashboardWorkspace } from '../../../../shared/dashboard-snapshot' import type { RepoIcon } from '../../../../shared/repo-icon' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { AgentMapCanvas, type AgentMapCanvasHandle } from './AgentMapCanvas' import { ALL_AGENT_MAP_HOSTS, filterAgentMapCards, type AgentMapState } from './agent-map-filter' import { updateAgentMapLayout, type AgentMapLayoutCache } from './agent-map-layout' diff --git a/src/renderer/src/components/dashboard-popout/AgentMapCanvas.tsx b/src/renderer/src/components/dashboard-popout/AgentMapCanvas.tsx index 62439665fc7..84290f36f40 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapCanvas.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapCanvas.tsx @@ -15,7 +15,7 @@ import type { DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' import type { RepoIcon } from '../../../../shared/repo-icon' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { AgentMapAgentNode, AgentMapProjectRing, AgentMapLayout } from './agent-map-layout' import type { AgentMapFlareStatus } from './agent-map-node-metadata' import { AgentMapScene } from './AgentMapScene' diff --git a/src/renderer/src/components/dashboard-popout/AgentMapScene.tsx b/src/renderer/src/components/dashboard-popout/AgentMapScene.tsx index c4a298ed48e..a4914bbdad5 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapScene.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapScene.tsx @@ -3,7 +3,7 @@ import { RepoIconGlyph } from '@/components/repo/repo-icon' import { translate } from '@/i18n/i18n' import type { DashboardCard, DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' import type { RepoIcon } from '../../../../shared/repo-icon' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { AgentMapAgentNode, AgentMapLayout, diff --git a/src/renderer/src/components/dashboard-popout/AgentMapSnapshotWorkspaceMenu.tsx b/src/renderer/src/components/dashboard-popout/AgentMapSnapshotWorkspaceMenu.tsx index e2208e0be0d..17b992aaaff 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapSnapshotWorkspaceMenu.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapSnapshotWorkspaceMenu.tsx @@ -17,7 +17,7 @@ import type { DashboardSleepWorkspaceArgs, DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type AgentMapSnapshotWorkspaceMenuRequest = { id: number diff --git a/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx b/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx index 057a593da7e..c5477a997e9 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx @@ -5,7 +5,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react' import { TooltipProvider } from '@/components/ui/tooltip' import { useAppStore } from '@/store' -import type { ProjectGroup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { DashboardCard } from '../../../../shared/dashboard-snapshot' import { AgentMap } from './AgentMap' import * as StoreSelectors from '@/store/selectors' diff --git a/src/renderer/src/components/dashboard-popout/AgentMapWorktreeRingNode.tsx b/src/renderer/src/components/dashboard-popout/AgentMapWorktreeRingNode.tsx index fd362f45609..f4999a012bd 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapWorktreeRingNode.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapWorktreeRingNode.tsx @@ -7,7 +7,7 @@ import { translate } from '@/i18n/i18n' import { AgentIcon, getAgentLabel } from '@/lib/agent-catalog' import { agentTypeToIconAgent } from '@/lib/agent-status' import type { DashboardCard, DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { AgentMapAgentNode, AgentMapProjectRing, diff --git a/src/renderer/src/components/dashboard-popout/agent-map-render-test-harness.tsx b/src/renderer/src/components/dashboard-popout/agent-map-render-test-harness.tsx index a7c0b08f64e..e428d43f5f6 100644 --- a/src/renderer/src/components/dashboard-popout/agent-map-render-test-harness.tsx +++ b/src/renderer/src/components/dashboard-popout/agent-map-render-test-harness.tsx @@ -6,7 +6,7 @@ import type { DashboardSleepWorkspaceArgs, DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { AgentMap } from './AgentMap' import type { AgentMapState } from './agent-map-filter' diff --git a/src/renderer/src/components/dashboard-popout/preview-terminal-compatibility.ts b/src/renderer/src/components/dashboard-popout/preview-terminal-compatibility.ts index 0693bdff81a..96db5963714 100644 --- a/src/renderer/src/components/dashboard-popout/preview-terminal-compatibility.ts +++ b/src/renderer/src/components/dashboard-popout/preview-terminal-compatibility.ts @@ -1,6 +1,6 @@ import type { Terminal } from '@xterm/xterm' import { Unicode11Addon } from '@xterm/addon-unicode11' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { activateOrcaTerminalUnicodeProvider } from '../../../../shared/terminal-unicode-provider' import { installWindowsCtrlAltChordRepair } from '@/lib/pane-manager/terminal-windows-ctrl-alt-chord-classification' import { attachTerminalMouseWheelMultiplier } from '@/lib/pane-manager/pane-terminal-mouse-wheel' diff --git a/src/renderer/src/components/dashboard-popout/preview-terminal-ligatures.ts b/src/renderer/src/components/dashboard-popout/preview-terminal-ligatures.ts index cc0cb2036fd..354edfeead0 100644 --- a/src/renderer/src/components/dashboard-popout/preview-terminal-ligatures.ts +++ b/src/renderer/src/components/dashboard-popout/preview-terminal-ligatures.ts @@ -1,5 +1,5 @@ import type { Terminal } from '@xterm/xterm' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { resolveTerminalLigaturesEnabled } from '../../../../shared/terminal-ligatures' import { TerminalLigaturesAddon } from '@/lib/pane-manager/terminal-ligatures-addon' diff --git a/src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts b/src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts index af4974cdef3..319ec241293 100644 --- a/src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts +++ b/src/renderer/src/components/dashboard-popout/preview-terminal-options.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { buildPreviewAppearanceOptions, buildPreviewTerminalOptions diff --git a/src/renderer/src/components/dashboard-popout/preview-terminal-options.ts b/src/renderer/src/components/dashboard-popout/preview-terminal-options.ts index aaf13a8c4bc..284f6510558 100644 --- a/src/renderer/src/components/dashboard-popout/preview-terminal-options.ts +++ b/src/renderer/src/components/dashboard-popout/preview-terminal-options.ts @@ -1,5 +1,5 @@ import type { ITerminalInitOnlyOptions, ITerminalOptions, ITheme } from '@xterm/xterm' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { DashboardCardTerminalInput } from '../../../../shared/dashboard-snapshot' import { resolveTerminalFontWeights } from '../../../../shared/terminal-fonts' import { normalizeTerminalLineHeight } from '../../../../shared/terminal-line-height-settings' diff --git a/src/renderer/src/components/dashboard-popout/useAgentMapContextMenus.tsx b/src/renderer/src/components/dashboard-popout/useAgentMapContextMenus.tsx index a20c534e4d3..198885bdf67 100644 --- a/src/renderer/src/components/dashboard-popout/useAgentMapContextMenus.tsx +++ b/src/renderer/src/components/dashboard-popout/useAgentMapContextMenus.tsx @@ -3,7 +3,7 @@ import type { DashboardSleepWorkspaceArgs, DashboardSpawnAgentArgs } from '../../../../shared/dashboard-snapshot' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { AgentMapProjectRing, AgentMapWorktreeRing } from './agent-map-layout' import { AgentMapSnapshotWorkspaceMenu, diff --git a/src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx b/src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx index 1cc3b6ed03b..eb462a2d3a9 100644 --- a/src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx +++ b/src/renderer/src/components/dashboard/AgentDashboardSettingsMenu.tsx @@ -9,7 +9,7 @@ import { } from '@/components/ui/dropdown-menu' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { SettingsSegmentedControl, SettingsSwitch } from '../settings/SettingsFormControls' -import type { AgentDashboardMode } from '../../../../shared/types' +import type { AgentDashboardMode } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' type AgentDashboardSettingsMenuProps = { diff --git a/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx b/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx index 0fb978de62b..5be1c78d574 100644 --- a/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx +++ b/src/renderer/src/components/dashboard/DashboardAgentRow.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ComponentProps } from 'react' import { describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { TooltipProvider } from '../ui/tooltip' import DashboardAgentRow from './DashboardAgentRow' import type { DashboardAgentRow as DashboardAgentRowData } from './useDashboardData' diff --git a/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts b/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts index 028670a91a3..dcc5d754de2 100644 --- a/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts +++ b/src/renderer/src/components/dashboard/agent-row-lineage-model.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { DashboardAgentRow } from './useDashboardData' import { buildAgentRowLineageTree } from './agent-row-lineage-model' diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts index 822a3b80e96..51a3aada421 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot-folder-workspace.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from 'vitest' import { makePaneKey } from '../../../../shared/stable-pane-id' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' -import type { FolderWorkspace, ProjectGroup, TerminalTab } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { buildDashboardSnapshot, type DashboardSnapshotState } from './build-dashboard-snapshot' diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts index d2b85f6ced0..424c936ab0f 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot-orchestration-routing.test.ts @@ -1,7 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab, Worktree } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' const batchMocks = vi.hoisted(() => ({ release: vi.fn(), diff --git a/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts b/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts index d4e9bdc565a..884a8ebcaf9 100644 --- a/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts +++ b/src/renderer/src/components/dashboard/build-dashboard-snapshot.test.ts @@ -7,7 +7,8 @@ import { } from '../../../../shared/agent-status-types' import { DASHBOARD_MAX_LABEL_LENGTH } from '../../../../shared/dashboard-snapshot' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab, Worktree } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { selectRuntimeAgentOrchestrationBatch } from '../sidebar/worktree-agent-orchestration-batch' import type * as DashboardSnapshotWorkspacesModule from './dashboard-snapshot-workspaces' import type * as AgentRowLineageModule from './agent-row-lineage' diff --git a/src/renderer/src/components/dashboard/dashboard-card-context.test.ts b/src/renderer/src/components/dashboard/dashboard-card-context.test.ts index ab61f16d857..f4152c20701 100644 --- a/src/renderer/src/components/dashboard/dashboard-card-context.test.ts +++ b/src/renderer/src/components/dashboard/dashboard-card-context.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getGitHubPRCacheKey } from '@/store/slices/github-cache-key' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review-cache-identity' import { diff --git a/src/renderer/src/components/dashboard/dashboard-card-context.ts b/src/renderer/src/components/dashboard/dashboard-card-context.ts index f376a52163c..a0ed03d4d85 100644 --- a/src/renderer/src/components/dashboard/dashboard-card-context.ts +++ b/src/renderer/src/components/dashboard/dashboard-card-context.ts @@ -4,7 +4,8 @@ import type { AppState } from '@/store/types' import type { DashboardCardReview } from '../../../../shared/dashboard-snapshot' import { hostedReviewInfoFromGitHubPRInfo } from '../../../../shared/hosted-review-github' import { isPositiveHostedReviewNumber } from '../../../../shared/hosted-review' -import type { Repo, Worktree, WorkspaceStatusDefinition } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types' import { DEFAULT_WORKSPACE_STATUSES, getWorkspaceStatus diff --git a/src/renderer/src/components/dashboard/dashboard-card-terminal-input.ts b/src/renderer/src/components/dashboard/dashboard-card-terminal-input.ts index b1b0f16c3ee..74ca8250315 100644 --- a/src/renderer/src/components/dashboard/dashboard-card-terminal-input.ts +++ b/src/renderer/src/components/dashboard/dashboard-card-terminal-input.ts @@ -1,6 +1,6 @@ import type { AppState } from '@/store/types' import type { DashboardCardTerminalInput } from '../../../../shared/dashboard-snapshot' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { toRuntimeExecutionHostId, toSshExecutionHostId } from '../../../../shared/execution-host' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { getConnectionIdFromState } from '@/lib/connection-context' diff --git a/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts b/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts index a0aacdcc504..c160b4dd37c 100644 --- a/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts +++ b/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it } from 'vitest' import { DASHBOARD_MAX_LAUNCH_WORKTREES } from '../../../../shared/dashboard-snapshot' import type { DashboardCard, DashboardWorkspace } from '../../../../shared/dashboard-snapshot' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { buildDashboardWorktreeLaunchOptions } from './dashboard-worktree-launch-options' diff --git a/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.ts b/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.ts index 16ca6c1f795..44c76a74fee 100644 --- a/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.ts +++ b/src/renderer/src/components/dashboard/dashboard-worktree-launch-options.ts @@ -10,7 +10,7 @@ import { filterEnabledTuiAgents, TUI_AGENT_AUTO_PICK_ORDER } from '../../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' export type DashboardLaunchDetectionState = Pick< diff --git a/src/renderer/src/components/dashboard/useDashboardData.ts b/src/renderer/src/components/dashboard/useDashboardData.ts index 06926f919a0..2433ea0e88f 100644 --- a/src/renderer/src/components/dashboard/useDashboardData.ts +++ b/src/renderer/src/components/dashboard/useDashboardData.ts @@ -3,7 +3,7 @@ import type { AgentStatusState, AgentType } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' export type DashboardAgentRow = { /** Row identity. For 'subagent' rows this is a synthetic key (the child has diff --git a/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts b/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts index d2481a9201e..f3b7da6254e 100644 --- a/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts +++ b/src/renderer/src/components/dashboard/useLiveDashboardSnapshot.test.ts @@ -4,7 +4,10 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { GlobalSettings, Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { useLiveDashboardSnapshot } from './useLiveDashboardSnapshot' const NOW = 1_000_000_000 diff --git a/src/renderer/src/components/dashboard/useRetainedAgents.test.ts b/src/renderer/src/components/dashboard/useRetainedAgents.test.ts index 095bdedcb67..2e3b60f1157 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgents.test.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgents.test.ts @@ -5,7 +5,9 @@ import { useAppStore } from '@/store' import { resetAgentPaneAuthorityAliasesForTests } from '@/store/slices/agent-pane-authority' import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { collectRetainedAgentsOnDisappear, useRetainedAgentsSync } from './useRetainedAgents' const initialAppState = useAppStore.getInitialState() diff --git a/src/renderer/src/components/dashboard/useRetainedAgents.ts b/src/renderer/src/components/dashboard/useRetainedAgents.ts index 6fa1f94fda7..883da974142 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgents.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgents.ts @@ -4,7 +4,10 @@ import { useAppStore } from '@/store' import { isExplicitAgentStatusFresh } from '@/lib/agent-status' import type { DashboardAgentRow } from './useDashboardData' import type { RetainedAgentEntry } from '@/store/slices/agent-status' -import type { FolderWorkspace, Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { resolveAgentPaneAuthorityKey } from '@/store/slices/agent-pane-authority' import { diff --git a/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts b/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts index 3d33575d649..88bb584a18e 100644 --- a/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts +++ b/src/renderer/src/components/dashboard/useRetainedAgentsSync.test.ts @@ -4,7 +4,10 @@ import { type AgentStatusEntry, type AgentStatusState } from '../../../../shared/agent-status-types' -import type { FolderWorkspace, Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { makePaneKey } from '../../../../shared/stable-pane-id' import { buildRetainedAgentsSyncSnapshot } from './useRetainedAgents' diff --git a/src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx b/src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx index ef83b076201..d71e608e525 100644 --- a/src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx +++ b/src/renderer/src/components/dictation/use-hold-dictation-gesture.test.tsx @@ -4,7 +4,7 @@ import { createRef, type MutableRefObject, act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { DictationState } from '../../../../shared/speech-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { DictationInsertionTarget } from './dictation-insertion-target' import { useHoldDictationGesture } from './use-hold-dictation-gesture' diff --git a/src/renderer/src/components/dictation/use-hold-dictation-gesture.ts b/src/renderer/src/components/dictation/use-hold-dictation-gesture.ts index f1316b9a4ac..554af340c9c 100644 --- a/src/renderer/src/components/dictation/use-hold-dictation-gesture.ts +++ b/src/renderer/src/components/dictation/use-hold-dictation-gesture.ts @@ -2,7 +2,7 @@ import { useEffect, useRef, type MutableRefObject } from 'react' import { getShortcutPlatform } from '@/lib/shortcut-platform' import { keybindingMatchesAction, type KeybindingOverrides } from '../../../../shared/keybindings' import type { DictationState } from '../../../../shared/speech-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { DictationInsertionTarget } from './dictation-insertion-target' type HoldDictationGestureOptions = { diff --git a/src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx b/src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx index 2c3214070d9..833099b3ad4 100644 --- a/src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx +++ b/src/renderer/src/components/diff-comments/useDiffCommentDecorator.tsx @@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef } from 'react' import * as monaco from 'monaco-editor' import type { editor as monacoEditor, IDisposable } from 'monaco-editor' import { createRoot, type Root } from 'react-dom/client' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { getCommentBodyLayoutLineCount } from '@/lib/comment-body-line-count' import { getDiffCommentLineLabel } from '@/lib/diff-comment-compat' import { formatDiffComments } from '@/lib/diff-comments-format' diff --git a/src/renderer/src/components/editor/ChangesModeView.tsx b/src/renderer/src/components/editor/ChangesModeView.tsx index 9fac8364e80..2004f576d5c 100644 --- a/src/renderer/src/components/editor/ChangesModeView.tsx +++ b/src/renderer/src/components/editor/ChangesModeView.tsx @@ -1,7 +1,8 @@ import React from 'react' import { lazyWithRetry as lazy } from '@/lib/lazy-with-retry' import type { OpenFile } from '@/store/slices/editor' -import type { GitDiffResult, GitStatusEntry } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { ConflictBanner } from './ConflictComponents' import { getDiffContentSignature } from './diff-content-signature' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/editor/CheckRunAnnotations.tsx b/src/renderer/src/components/editor/CheckRunAnnotations.tsx index f7b53071508..5d7dfe0d878 100644 --- a/src/renderer/src/components/editor/CheckRunAnnotations.tsx +++ b/src/renderer/src/components/editor/CheckRunAnnotations.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ExternalLink } from 'lucide-react' import { translate } from '@/i18n/i18n' -import type { PRCheckAnnotation } from '../../../../shared/types' +import type { PRCheckAnnotation } from '../../../../shared/github/check-types' import { cancelAnnotationRevealFrame, getOpenableAnnotationLine, diff --git a/src/renderer/src/components/editor/CheckRunDetailsPanel.tsx b/src/renderer/src/components/editor/CheckRunDetailsPanel.tsx index 6003be19e05..edf79624cc5 100644 --- a/src/renderer/src/components/editor/CheckRunDetailsPanel.tsx +++ b/src/renderer/src/components/editor/CheckRunDetailsPanel.tsx @@ -3,7 +3,7 @@ import { ExternalLink, LoaderCircle, RefreshCw } from 'lucide-react' import { toast } from 'sonner' import { Button } from '@/components/ui/button' import CommentMarkdown from '@/components/sidebar/CommentMarkdown' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' import { SourceControlFixSplitButton } from '@/components/right-sidebar/source-control-fix-split-button' import { translate } from '@/i18n/i18n' import { useCheckRunDetailsFixWithAI } from './check-run-details-fix-with-ai' diff --git a/src/renderer/src/components/editor/CheckRunJobs.tsx b/src/renderer/src/components/editor/CheckRunJobs.tsx index 6b3bfa0816e..3fedd9f7569 100644 --- a/src/renderer/src/components/editor/CheckRunJobs.tsx +++ b/src/renderer/src/components/editor/CheckRunJobs.tsx @@ -3,7 +3,7 @@ import { CheckCircle2, ChevronDown, CircleDashed, MinusCircle, XCircle } from 'l import { CheckJobLogTail } from '@/components/right-sidebar/check-job-log-tail' import { translate } from '@/i18n/i18n' import { cn } from '@/lib/utils' -import type { PRCheckJob, PRCheckStep } from '../../../../shared/types' +import type { PRCheckJob, PRCheckStep } from '../../../../shared/github/check-types' import { resolveStepOutcome, summarizeJobSteps, type StepOutcome } from './check-job-step-status' function StepOutcomeIcon({ outcome }: { outcome: StepOutcome }): React.JSX.Element { diff --git a/src/renderer/src/components/editor/CombinedDiffFileTree.test.ts b/src/renderer/src/components/editor/CombinedDiffFileTree.test.ts index 97721b1b6b7..7a21281213d 100644 --- a/src/renderer/src/components/editor/CombinedDiffFileTree.test.ts +++ b/src/renderer/src/components/editor/CombinedDiffFileTree.test.ts @@ -11,7 +11,8 @@ import { getFilteredCombinedDiffFileTreeEntries, isCombinedDiffFileTreeQueryTooLarge } from './combined-diff-file-tree-model' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' describe('CombinedDiffFileTree navigation mapping', () => { it('disambiguates uncommitted entries with the same path by area', () => { diff --git a/src/renderer/src/components/editor/CombinedDiffFileTree.tsx b/src/renderer/src/components/editor/CombinedDiffFileTree.tsx index fc59c2dd75c..99a53af8795 100644 --- a/src/renderer/src/components/editor/CombinedDiffFileTree.tsx +++ b/src/renderer/src/components/editor/CombinedDiffFileTree.tsx @@ -10,7 +10,8 @@ import { compactSourceControlTree, flattenSourceControlTree } from '@/components/right-sidebar/source-control-tree' -import type { GitBranchChangeEntry, GitStagingArea, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStagingArea, GitStatusEntry } from '../../../../shared/git-status-types' import { getEntryExtension, getFilteredCombinedDiffFileTreeEntries, diff --git a/src/renderer/src/components/editor/CombinedDiffViewer.tsx b/src/renderer/src/components/editor/CombinedDiffViewer.tsx index fd87b515349..b004ef3a799 100644 --- a/src/renderer/src/components/editor/CombinedDiffViewer.tsx +++ b/src/renderer/src/components/editor/CombinedDiffViewer.tsx @@ -42,12 +42,9 @@ import { import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import type { OpenFile } from '@/store/slices/editor' -import type { - DiffComment, - GitBranchChangeEntry, - GitDiffResult, - GitStatusEntry -} from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { GitBranchChangeEntry, GitDiffResult } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { Check, Copy, MessageSquare, PanelLeftOpen, Sparkles, Trash2, WrapText } from 'lucide-react' import { toast } from 'sonner' import { DiffSectionItem } from './DiffSectionItem' diff --git a/src/renderer/src/components/editor/ConflictComponents.tsx b/src/renderer/src/components/editor/ConflictComponents.tsx index 32159e23f00..b89db1280ea 100644 --- a/src/renderer/src/components/editor/ConflictComponents.tsx +++ b/src/renderer/src/components/editor/ConflictComponents.tsx @@ -13,7 +13,7 @@ import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import type { ConflictReviewEntry, OpenFile } from '@/store/slices/editor' -import type { GitConflictKind, GitStatusEntry } from '../../../../shared/types' +import type { GitConflictKind, GitStatusEntry } from '../../../../shared/git-status-types' import { ConflictReviewFileTree } from './ConflictReviewFileTree' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/editor/ConflictReviewFileTree.tsx b/src/renderer/src/components/editor/ConflictReviewFileTree.tsx index f3e5e02c425..6a3ce686694 100644 --- a/src/renderer/src/components/editor/ConflictReviewFileTree.tsx +++ b/src/renderer/src/components/editor/ConflictReviewFileTree.tsx @@ -10,7 +10,7 @@ import { type SourceControlTreeNode } from '@/components/right-sidebar/source-control-tree' import type { ConflictReviewEntry } from '@/store/slices/editor' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { translate } from '@/i18n/i18n' type ConflictReviewTreeEntry = ConflictReviewEntry & { diff --git a/src/renderer/src/components/editor/DiffNotesSendMenu.tsx b/src/renderer/src/components/editor/DiffNotesSendMenu.tsx index 8fc9daefbe8..8e49dceaf9f 100644 --- a/src/renderer/src/components/editor/DiffNotesSendMenu.tsx +++ b/src/renderer/src/components/editor/DiffNotesSendMenu.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useMemo } from 'react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { useAppStore } from '@/store' import { formatDiffComments } from '@/lib/diff-comments-format' import { NotesSendMenu, type NotesSendMenuScope } from './NotesSendMenu' diff --git a/src/renderer/src/components/editor/DiffSectionItem.tsx b/src/renderer/src/components/editor/DiffSectionItem.tsx index c6931fe5240..22905daf464 100644 --- a/src/renderer/src/components/editor/DiffSectionItem.tsx +++ b/src/renderer/src/components/editor/DiffSectionItem.tsx @@ -13,7 +13,7 @@ import { } from '../diff-comments/diff-comment-popover-position' import { applyDiffEditorLineNumberOptions } from './diff-editor-line-number-options' import { DiffSectionHeader } from './DiffSectionHeader' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { isDiffComment } from '@/lib/diff-comment-compat' import { installEditorSaveShortcut, installMonacoEditorFindShortcut } from './editor-shortcuts' import { DiffSectionBody } from './DiffSectionBody' diff --git a/src/renderer/src/components/editor/DiffViewer.tsx b/src/renderer/src/components/editor/DiffViewer.tsx index e2f364a2c81..36b515b8f53 100644 --- a/src/renderer/src/components/editor/DiffViewer.tsx +++ b/src/renderer/src/components/editor/DiffViewer.tsx @@ -14,7 +14,7 @@ import { getDiffCommentPopoverTop } from '../diff-comments/diff-comment-popover-position' import { applyDiffEditorLineNumberOptions } from './diff-editor-line-number-options' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { isDiffComment } from '@/lib/diff-comment-compat' import { installEditorSaveShortcut, installMonacoEditorFindShortcut } from './editor-shortcuts' import { diffEditorScrollbarOptions } from './diff-editor-scrollbar-options' diff --git a/src/renderer/src/components/editor/EditorContent.tsx b/src/renderer/src/components/editor/EditorContent.tsx index a9da4e54065..01be65d3465 100644 --- a/src/renderer/src/components/editor/EditorContent.tsx +++ b/src/renderer/src/components/editor/EditorContent.tsx @@ -14,7 +14,8 @@ import { getNextConflictNavigationIndex } from './ConflictComponents' import type { MarkdownViewMode, OpenFile, PendingEditorReveal } from '@/store/slices/editor' -import type { GitStatusEntry, GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { getMarkdownRenderMode } from './markdown-render-mode' import { getMarkdownRichModeUnsupportedMessage } from './markdown-rich-mode' import { exceedsMarkdownRichModeSizeLimit } from './markdown-rich-size-limit' diff --git a/src/renderer/src/components/editor/MarkdownPreview.test.ts b/src/renderer/src/components/editor/MarkdownPreview.test.ts index b6fd98c6467..12f29758a83 100644 --- a/src/renderer/src/components/editor/MarkdownPreview.test.ts +++ b/src/renderer/src/components/editor/MarkdownPreview.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { decodeMarkdownPreviewAnchor, deriveMarkdownPreviewSourceRoot, diff --git a/src/renderer/src/components/editor/MarkdownPreview.tsx b/src/renderer/src/components/editor/MarkdownPreview.tsx index fe73dc07858..519072c63c8 100644 --- a/src/renderer/src/components/editor/MarkdownPreview.tsx +++ b/src/renderer/src/components/editor/MarkdownPreview.tsx @@ -41,7 +41,9 @@ import { getConnectionIdForFile } from '@/lib/connection-context' import { createConnectionIdForFileSelector } from '@/lib/connection-owner-resolution' import { scrollTopCache, setWithLRU } from '@/lib/scroll-cache' import { detectLanguage } from '@/lib/language-detect' -import type { DiffComment, MarkdownDocument, Worktree } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' +import type { Worktree } from '../../../../shared/worktree/types' import { fileUrlToAbsolutePath, getMarkdownPreviewLinkTarget, diff --git a/src/renderer/src/components/editor/MonacoEditor.tsx b/src/renderer/src/components/editor/MonacoEditor.tsx index 15718697a54..ba1a967746b 100644 --- a/src/renderer/src/components/editor/MonacoEditor.tsx +++ b/src/renderer/src/components/editor/MonacoEditor.tsx @@ -4,7 +4,8 @@ import React, { useRef, useCallback, useEffect, useLayoutEffect, useMemo, useSta import Editor, { type OnMount } from '@monaco-editor/react' import type { editor } from 'monaco-editor' import { toast } from 'sonner' -import type { MarkdownDocument, DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { useAppStore } from '@/store' import { scrollTopCache, cursorPositionCache, setWithLRU } from '@/lib/scroll-cache' import '@/lib/monaco-setup' diff --git a/src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx b/src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx index 92e7e21da80..1ae74985923 100644 --- a/src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx +++ b/src/renderer/src/components/editor/ReviewNotesSendMenuContent.test.tsx @@ -1,7 +1,7 @@ import React from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry, AgentStatusState } from '../../../../shared/agent-status-types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { makePaneKey } from '../../../../shared/stable-pane-id' import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/dashboard/useDashboardData' import { ReviewNotesSendMenuContent } from './ReviewNotesSendMenuContent' diff --git a/src/renderer/src/components/editor/RichMarkdownEditor.tsx b/src/renderer/src/components/editor/RichMarkdownEditor.tsx index 56eb1e9d728..6678cda3569 100644 --- a/src/renderer/src/components/editor/RichMarkdownEditor.tsx +++ b/src/renderer/src/components/editor/RichMarkdownEditor.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useEffect, useRef, useState } from 'react' import { useEditorState, type Editor } from '@tiptap/react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { useAppStore } from '@/store' import { selectWorktreeDiffComments } from '@/store/worktree-diff-comments-selector' import { useLocalImagePick } from './useLocalImagePick' diff --git a/src/renderer/src/components/editor/RichMarkdownEditorSurface.tsx b/src/renderer/src/components/editor/RichMarkdownEditorSurface.tsx index d3a7b423daa..12bc5cc35c3 100644 --- a/src/renderer/src/components/editor/RichMarkdownEditorSurface.tsx +++ b/src/renderer/src/components/editor/RichMarkdownEditorSurface.tsx @@ -19,7 +19,7 @@ import type { NotesSendMenuScope } from './NotesSendMenu' import type { MarkdownReviewNote } from '@/lib/markdown-review-notes' import type { RichMarkdownAnnotationTarget } from './rich-markdown-review-annotations' import type { RichMarkdownReviewNotePosition } from './rich-markdown-review-note-layout' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' function shouldFocusEmptyEditorFromSurfaceClick( event: React.MouseEvent, diff --git a/src/renderer/src/components/editor/RichMarkdownReviewNoteLayer.tsx b/src/renderer/src/components/editor/RichMarkdownReviewNoteLayer.tsx index 881cef3ff1d..0aa90569f98 100644 --- a/src/renderer/src/components/editor/RichMarkdownReviewNoteLayer.tsx +++ b/src/renderer/src/components/editor/RichMarkdownReviewNoteLayer.tsx @@ -1,5 +1,5 @@ import { Check, Copy } from 'lucide-react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { DiffCommentCard } from '../diff-comments/DiffCommentCard' import { NotesSendMenu } from './NotesSendMenu' import { diff --git a/src/renderer/src/components/editor/check-annotation-path.test.ts b/src/renderer/src/components/editor/check-annotation-path.test.ts index 95f23378473..b28fa77214a 100644 --- a/src/renderer/src/components/editor/check-annotation-path.test.ts +++ b/src/renderer/src/components/editor/check-annotation-path.test.ts @@ -3,7 +3,7 @@ import { getOpenableAnnotationLine, resolveAnnotationPathInsideWorktree } from './check-annotation-path' -import type { PRCheckAnnotation } from '../../../../shared/types' +import type { PRCheckAnnotation } from '../../../../shared/github/check-types' function annotation(path: string | null, startLine = 1): PRCheckAnnotation { return { diff --git a/src/renderer/src/components/editor/check-annotation-path.ts b/src/renderer/src/components/editor/check-annotation-path.ts index b18baea1475..4087d22669c 100644 --- a/src/renderer/src/components/editor/check-annotation-path.ts +++ b/src/renderer/src/components/editor/check-annotation-path.ts @@ -1,4 +1,4 @@ -import type { PRCheckAnnotation } from '../../../../shared/types' +import type { PRCheckAnnotation } from '../../../../shared/github/check-types' import { relativePathInsideRoot, resolveRuntimePath } from '../../../../shared/cross-platform-path' const WORKFLOW_PSEUDO_ANNOTATION_PATH = '.github' diff --git a/src/renderer/src/components/editor/check-job-step-status.ts b/src/renderer/src/components/editor/check-job-step-status.ts index a6d4d07007d..c81797818ae 100644 --- a/src/renderer/src/components/editor/check-job-step-status.ts +++ b/src/renderer/src/components/editor/check-job-step-status.ts @@ -1,4 +1,4 @@ -import type { PRCheckJob, PRCheckStep } from '../../../../shared/types' +import type { PRCheckJob, PRCheckStep } from '../../../../shared/github/check-types' export type StepOutcome = 'success' | 'failure' | 'skipped' | 'pending' diff --git a/src/renderer/src/components/editor/check-run-details-fix-context.ts b/src/renderer/src/components/editor/check-run-details-fix-context.ts index f0e99b12e2f..d794265ec60 100644 --- a/src/renderer/src/components/editor/check-run-details-fix-context.ts +++ b/src/renderer/src/components/editor/check-run-details-fix-context.ts @@ -10,7 +10,8 @@ import { getGitHubPRCacheKey } from '@/store/slices/github-cache-key' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review-cache-identity' import { findWorktreeById } from '@/store/slices/worktree-helpers' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRCheckDetail, PRCheckRunDetails, Repo } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { Repo } from '../../../../shared/repo-types' import { translate } from '@/i18n/i18n' export function resolveCheckRunDetailsFixCheck( diff --git a/src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts b/src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts index 10531e2224a..ae46dc37187 100644 --- a/src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts +++ b/src/renderer/src/components/editor/check-run-details-fix-with-ai.test.ts @@ -1,11 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { - PRCheckDetail, - PRCheckRunDetails, - PRInfo, - Repo, - Worktree -} from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getCheckRunDetailsFixDisabledReason, isCheckRunDetailsFixCandidate, diff --git a/src/renderer/src/components/editor/check-run-details-fix-with-ai.ts b/src/renderer/src/components/editor/check-run-details-fix-with-ai.ts index 80059758ca7..48cae27613a 100644 --- a/src/renderer/src/components/editor/check-run-details-fix-with-ai.ts +++ b/src/renderer/src/components/editor/check-run-details-fix-with-ai.ts @@ -24,7 +24,7 @@ import type { SourceControlActionRecipe, SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' import { translate } from '@/i18n/i18n' export { diff --git a/src/renderer/src/components/editor/check-run-details-tab.ts b/src/renderer/src/components/editor/check-run-details-tab.ts index 02e833b61b6..b274b1564c0 100644 --- a/src/renderer/src/components/editor/check-run-details-tab.ts +++ b/src/renderer/src/components/editor/check-run-details-tab.ts @@ -1,9 +1,6 @@ import type { GitLabProjectRef } from '../../../../shared/gitlab-types' -import type { - GitHubRepositoryIdentity, - PRCheckDetail, - PRCheckRunDetails -} from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { GitHubRepositoryIdentity } from '../../../../shared/github/pull-request-types' export type OpenCheckRunDetailsState = { contextKey: string diff --git a/src/renderer/src/components/editor/combined-diff-entries.test.ts b/src/renderer/src/components/editor/combined-diff-entries.test.ts index c3ff00ecab0..312d6baa8c2 100644 --- a/src/renderer/src/components/editor/combined-diff-entries.test.ts +++ b/src/renderer/src/components/editor/combined-diff-entries.test.ts @@ -5,7 +5,8 @@ import { resolveCombinedUncommittedSnapshotEntries, shouldAutoReloadCombinedDiffFromGitStatus } from './combined-diff-entries' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' describe('getCombinedUncommittedEntries', () => { it('filters unresolved conflicts from live entries', () => { diff --git a/src/renderer/src/components/editor/combined-diff-entries.ts b/src/renderer/src/components/editor/combined-diff-entries.ts index 73d2fe44a70..ab64df67d47 100644 --- a/src/renderer/src/components/editor/combined-diff-entries.ts +++ b/src/renderer/src/components/editor/combined-diff-entries.ts @@ -1,5 +1,6 @@ import type { OpenFile } from '@/store/slices/editor' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { CombinedDiffFileTreeMode } from './combined-diff-file-tree-model' /** diff --git a/src/renderer/src/components/editor/combined-diff-file-tree-model.ts b/src/renderer/src/components/editor/combined-diff-file-tree-model.ts index 93d38853647..fc3c440fc95 100644 --- a/src/renderer/src/components/editor/combined-diff-file-tree-model.ts +++ b/src/renderer/src/components/editor/combined-diff-file-tree-model.ts @@ -1,5 +1,6 @@ import { basename } from '@/lib/path' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' import { buildSourceControlTree, diff --git a/src/renderer/src/components/editor/combined-diff-file-tree-row.tsx b/src/renderer/src/components/editor/combined-diff-file-tree-row.tsx index 7f47909cb10..eb6dc11fbf0 100644 --- a/src/renderer/src/components/editor/combined-diff-file-tree-row.tsx +++ b/src/renderer/src/components/editor/combined-diff-file-tree-row.tsx @@ -6,12 +6,12 @@ import { getFileTypeIcon } from '@/lib/file-type-icons' import { basename, dirname, joinPath } from '@/lib/path' import { cn } from '@/lib/utils' import { WORKSPACE_FILE_PATH_MIME } from '@/lib/workspace-file-drag' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' import type { - GitBranchChangeEntry, GitFileStatus, GitStagingArea, GitStatusEntry -} from '../../../../shared/types' +} from '../../../../shared/git-status-types' import { getCombinedDiffFileTreeSectionKey, type CombinedDiffBranchTreeArea, diff --git a/src/renderer/src/components/editor/combined-diff-section-cache-match.test.ts b/src/renderer/src/components/editor/combined-diff-section-cache-match.test.ts index 970a2155d00..1eea28d9d89 100644 --- a/src/renderer/src/components/editor/combined-diff-section-cache-match.test.ts +++ b/src/renderer/src/components/editor/combined-diff-section-cache-match.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { DiffSection } from './diff-section-types' import { combinedDiffSectionsMatchEntryMetadata } from './combined-diff-section-cache-match' diff --git a/src/renderer/src/components/editor/combined-diff-section-cache-match.ts b/src/renderer/src/components/editor/combined-diff-section-cache-match.ts index a53e3a1aa43..7f25e96f7c3 100644 --- a/src/renderer/src/components/editor/combined-diff-section-cache-match.ts +++ b/src/renderer/src/components/editor/combined-diff-section-cache-match.ts @@ -1,4 +1,5 @@ -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { CombinedDiffFileTreeMode } from './combined-diff-file-tree-model' import { getCombinedDiffFileTreeSectionKey } from './combined-diff-file-tree-model' import type { DiffSection } from './diff-section-types' diff --git a/src/renderer/src/components/editor/combined-diff-section-connection.test.ts b/src/renderer/src/components/editor/combined-diff-section-connection.test.ts index 894f6df7830..89254a6f6b1 100644 --- a/src/renderer/src/components/editor/combined-diff-section-connection.test.ts +++ b/src/renderer/src/components/editor/combined-diff-section-connection.test.ts @@ -1,5 +1,7 @@ import { afterEach, describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { useAppStore } from '@/store' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { getCombinedDiffSectionConnectionId } from './combined-diff-section-connection' diff --git a/src/renderer/src/components/editor/combined-diff-section-load-state.test.ts b/src/renderer/src/components/editor/combined-diff-section-load-state.test.ts index 996e66c2f5a..0b647561738 100644 --- a/src/renderer/src/components/editor/combined-diff-section-load-state.test.ts +++ b/src/renderer/src/components/editor/combined-diff-section-load-state.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' import type { LargeDiffRenderLimit } from './large-diff-render-limit' import { isUnchangedDiffSectionReload, diff --git a/src/renderer/src/components/editor/diff-section-layout.test.ts b/src/renderer/src/components/editor/diff-section-layout.test.ts index 809ca80cab3..f5b4d4145f6 100644 --- a/src/renderer/src/components/editor/diff-section-layout.test.ts +++ b/src/renderer/src/components/editor/diff-section-layout.test.ts @@ -5,7 +5,7 @@ import { getDiffSectionEstimatedHeight, isIntrinsicHeightImageDiff } from './diff-section-layout' -import type { GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' describe('diff section layout', () => { it('uses Monaco measured content height for text diffs', () => { diff --git a/src/renderer/src/components/editor/diff-section-layout.ts b/src/renderer/src/components/editor/diff-section-layout.ts index 17e642641ee..6fb4c6c46b0 100644 --- a/src/renderer/src/components/editor/diff-section-layout.ts +++ b/src/renderer/src/components/editor/diff-section-layout.ts @@ -1,4 +1,4 @@ -import type { GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' import { countLinesLikeSplit, type DiffLineCounts } from './large-diff-render-limit' const DIFF_LINE_HEIGHT = 19 diff --git a/src/renderer/src/components/editor/diff-section-types.ts b/src/renderer/src/components/editor/diff-section-types.ts index 0c5d659f4be..fe2d23bf273 100644 --- a/src/renderer/src/components/editor/diff-section-types.ts +++ b/src/renderer/src/components/editor/diff-section-types.ts @@ -1,4 +1,5 @@ -import type { GitDiffResult, GitStatusEntry } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { LargeDiffRenderLimit } from './large-diff-render-limit' export type DiffSection = { diff --git a/src/renderer/src/components/editor/editor-cmd-save-target.test.ts b/src/renderer/src/components/editor/editor-cmd-save-target.test.ts index 518f8c8b859..f53e6c5f1f8 100644 --- a/src/renderer/src/components/editor/editor-cmd-save-target.test.ts +++ b/src/renderer/src/components/editor/editor-cmd-save-target.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { getEditorCmdSaveFileId } from './editor-cmd-save-target' function makeTab(contentType: Tab['contentType'], entityId: string): Tab { diff --git a/src/renderer/src/components/editor/editor-cmd-save-target.ts b/src/renderer/src/components/editor/editor-cmd-save-target.ts index 0d021a87790..75159e0dbff 100644 --- a/src/renderer/src/components/editor/editor-cmd-save-target.ts +++ b/src/renderer/src/components/editor/editor-cmd-save-target.ts @@ -1,5 +1,6 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { Tab, TabContentType, TopLevelView } from '../../../../shared/types' +import type { Tab, TabContentType } from '../../../../shared/tab-types' +import type { TopLevelView } from '../../../../shared/ui-chrome-types' export const EDITOR_TAB_CONTENT_TYPES = new Set([ 'editor', diff --git a/src/renderer/src/components/editor/editor-external-watch-path-index.ts b/src/renderer/src/components/editor/editor-external-watch-path-index.ts index f1cb7054c67..3ce5f2a432b 100644 --- a/src/renderer/src/components/editor/editor-external-watch-path-index.ts +++ b/src/renderer/src/components/editor/editor-external-watch-path-index.ts @@ -1,7 +1,7 @@ import { joinPath } from '@/lib/path' import { getExternalFileChangeRelativePath } from '@/components/right-sidebar/useFileExplorerWatch' import type { OpenFile } from '@/store/slices/editor' -import type { FsChangedPayload } from '../../../../shared/types' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' import { getLocalWindowsWslPathIdentity, normalizeRuntimePathForComparison, diff --git a/src/renderer/src/components/editor/editor-header.ts b/src/renderer/src/components/editor/editor-header.ts index a3fbafbd6da..c511d401d3b 100644 --- a/src/renderer/src/components/editor/editor-header.ts +++ b/src/renderer/src/components/editor/editor-header.ts @@ -1,5 +1,6 @@ import type { OpenFile } from '@/store/slices/editor' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { getEditorDisplayLabel } from './editor-labels' export type EditorHeaderCopyState = { diff --git a/src/renderer/src/components/editor/editor-panel-content-types.ts b/src/renderer/src/components/editor/editor-panel-content-types.ts index 1c137bfb632..dcbccfbc640 100644 --- a/src/renderer/src/components/editor/editor-panel-content-types.ts +++ b/src/renderer/src/components/editor/editor-panel-content-types.ts @@ -1,4 +1,4 @@ -import type { GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' /** * Thrown when a worktree's host owner is not yet known (the backing repo has diff --git a/src/renderer/src/components/editor/editor-panel-diff-reload.test.ts b/src/renderer/src/components/editor/editor-panel-diff-reload.test.ts index 2463ce680d8..35a3d32e20c 100644 --- a/src/renderer/src/components/editor/editor-panel-diff-reload.test.ts +++ b/src/renderer/src/components/editor/editor-panel-diff-reload.test.ts @@ -4,7 +4,7 @@ import { isReloadableSingleFileDiffTab, shouldReloadDiffOnGitStatusChange } from './editor-panel-diff-reload' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' function makeDiffFile(overrides: Partial = {}): OpenFile { return { diff --git a/src/renderer/src/components/editor/editor-panel-diff-reload.ts b/src/renderer/src/components/editor/editor-panel-diff-reload.ts index 4b58a471239..8bcf59ab38b 100644 --- a/src/renderer/src/components/editor/editor-panel-diff-reload.ts +++ b/src/renderer/src/components/editor/editor-panel-diff-reload.ts @@ -1,5 +1,5 @@ import type { OpenFile } from '@/store/slices/editor' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' export function isReloadableSingleFileDiffTab(file: OpenFile): boolean { return ( diff --git a/src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts b/src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts index 524776853d5..0dedf058495 100644 --- a/src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts +++ b/src/renderer/src/components/editor/editor-panel-git-entry-selector.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { selectEditorPanelGitBranchEntries, selectEditorPanelGitStatusEntries diff --git a/src/renderer/src/components/editor/editor-panel-render-model.test.ts b/src/renderer/src/components/editor/editor-panel-render-model.test.ts index fc7e66a78ea..1475ce35bf3 100644 --- a/src/renderer/src/components/editor/editor-panel-render-model.test.ts +++ b/src/renderer/src/components/editor/editor-panel-render-model.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import type { OpenFile } from '@/store/slices/editor' import { RICH_MARKDOWN_MAX_SIZE_BYTES } from '../../../../shared/constants' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { FileContent } from './editor-panel-content-types' import { getEditorPanelRenderModel } from './editor-panel-render-model' diff --git a/src/renderer/src/components/editor/large-diff-section-content.ts b/src/renderer/src/components/editor/large-diff-section-content.ts index df60ada45ac..f83ef383bcc 100644 --- a/src/renderer/src/components/editor/large-diff-section-content.ts +++ b/src/renderer/src/components/editor/large-diff-section-content.ts @@ -1,4 +1,4 @@ -import type { GitDiffResult } from '../../../../shared/types' +import type { GitDiffResult } from '../../../../shared/git-diff-compare-types' import type { LargeDiffRenderLimit } from './large-diff-render-limit' export function shouldPruneLargeDiffContent( diff --git a/src/renderer/src/components/editor/markdown-doc-completions.test.ts b/src/renderer/src/components/editor/markdown-doc-completions.test.ts index 9a6a8278af5..a08261e2ff6 100644 --- a/src/renderer/src/components/editor/markdown-doc-completions.test.ts +++ b/src/renderer/src/components/editor/markdown-doc-completions.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { getMarkdownDocCompletionContext, getMarkdownDocCompletionDocuments, diff --git a/src/renderer/src/components/editor/markdown-doc-completions.ts b/src/renderer/src/components/editor/markdown-doc-completions.ts index c41965ad96a..b7b81a72eee 100644 --- a/src/renderer/src/components/editor/markdown-doc-completions.ts +++ b/src/renderer/src/components/editor/markdown-doc-completions.ts @@ -1,4 +1,4 @@ -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' export type MarkdownDocCompletionContext = { diff --git a/src/renderer/src/components/editor/markdown-doc-links.test.ts b/src/renderer/src/components/editor/markdown-doc-links.test.ts index d5cfaade6e7..9a7f9859b83 100644 --- a/src/renderer/src/components/editor/markdown-doc-links.test.ts +++ b/src/renderer/src/components/editor/markdown-doc-links.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import Markdown from 'react-markdown' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { createMarkdownDocumentIndex, createMarkdownDocLinkHref, diff --git a/src/renderer/src/components/editor/markdown-doc-links.ts b/src/renderer/src/components/editor/markdown-doc-links.ts index 82cd7133b38..3f5e4f7f6af 100644 --- a/src/renderer/src/components/editor/markdown-doc-links.ts +++ b/src/renderer/src/components/editor/markdown-doc-links.ts @@ -1,4 +1,4 @@ -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { slugMarkdownHeading } from './markdown-heading-slug' export const MARKDOWN_DOC_LINK_PREFIX = '#orca-doc-link=' diff --git a/src/renderer/src/components/editor/markdown-document-list-request.test.ts b/src/renderer/src/components/editor/markdown-document-list-request.test.ts index 085b8599fb8..e94501a9140 100644 --- a/src/renderer/src/components/editor/markdown-document-list-request.test.ts +++ b/src/renderer/src/components/editor/markdown-document-list-request.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import type { RuntimeFileOperationArgs } from '@/runtime/runtime-file-client' import { getMarkdownDocumentListRequestKey, diff --git a/src/renderer/src/components/editor/markdown-document-list-request.ts b/src/renderer/src/components/editor/markdown-document-list-request.ts index 7e9cc0f32b3..a97ada9abbf 100644 --- a/src/renderer/src/components/editor/markdown-document-list-request.ts +++ b/src/renderer/src/components/editor/markdown-document-list-request.ts @@ -1,4 +1,4 @@ -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { listRuntimeMarkdownDocuments, type RuntimeFileOperationArgs diff --git a/src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts b/src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts index b8b19f085e8..20a387648db 100644 --- a/src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts +++ b/src/renderer/src/components/editor/markdown-document-worktree-path-selector.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { findWorktreeById } from '@/store/slices/worktree-helpers' import { selectMarkdownDocumentWorktreePath } from './markdown-document-worktree-path-selector' diff --git a/src/renderer/src/components/editor/monaco-markdown-doc-completions.ts b/src/renderer/src/components/editor/monaco-markdown-doc-completions.ts index 4d33a1f3985..3f6861c7897 100644 --- a/src/renderer/src/components/editor/monaco-markdown-doc-completions.ts +++ b/src/renderer/src/components/editor/monaco-markdown-doc-completions.ts @@ -1,6 +1,6 @@ import type { OnMount } from '@monaco-editor/react' import type { IDisposable } from 'monaco-editor' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { getMarkdownDocCompletionContext, getMarkdownDocCompletionDocuments diff --git a/src/renderer/src/components/editor/rich-markdown-annotation-submit-highlights.ts b/src/renderer/src/components/editor/rich-markdown-annotation-submit-highlights.ts index fba5d07bdc4..973b2198c40 100644 --- a/src/renderer/src/components/editor/rich-markdown-annotation-submit-highlights.ts +++ b/src/renderer/src/components/editor/rich-markdown-annotation-submit-highlights.ts @@ -1,5 +1,5 @@ import type { Editor } from '@tiptap/react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { richMarkdownAnnotationHighlightPluginKey } from './rich-markdown-annotation-highlight' import { getRichMarkdownAnnotationHighlightRanges, diff --git a/src/renderer/src/components/editor/rich-markdown-commands.tsx b/src/renderer/src/components/editor/rich-markdown-commands.tsx index 5da14987ab4..607885d43e0 100644 --- a/src/renderer/src/components/editor/rich-markdown-commands.tsx +++ b/src/renderer/src/components/editor/rich-markdown-commands.tsx @@ -1,6 +1,6 @@ import type React from 'react' import type { Editor } from '@tiptap/react' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { stripMarkdownExtension } from './markdown-doc-links' export type DocLinkMenuState = { diff --git a/src/renderer/src/components/editor/rich-markdown-doc-link.ts b/src/renderer/src/components/editor/rich-markdown-doc-link.ts index bbc1b26b294..e2245ec472a 100644 --- a/src/renderer/src/components/editor/rich-markdown-doc-link.ts +++ b/src/renderer/src/components/editor/rich-markdown-doc-link.ts @@ -1,7 +1,7 @@ import { Node } from '@tiptap/core' import { type EditorState, Plugin, PluginKey, TextSelection } from '@tiptap/pm/state' import { Decoration, DecorationSet } from '@tiptap/pm/view' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import type { MarkdownDocumentIndex } from './markdown-doc-links' import { createMarkdownDocumentIndex, diff --git a/src/renderer/src/components/editor/rich-markdown-editor-click-routing.ts b/src/renderer/src/components/editor/rich-markdown-editor-click-routing.ts index 9078f0e769d..3555330fac3 100644 --- a/src/renderer/src/components/editor/rich-markdown-editor-click-routing.ts +++ b/src/renderer/src/components/editor/rich-markdown-editor-click-routing.ts @@ -11,7 +11,7 @@ import { } from './markdown-internal-links' import { scrollToAnchorInEditor } from './markdown-anchor-scroll' import { getRichMarkdownCommentAtPos } from './rich-markdown-review-annotations' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { translate } from '@/i18n/i18n' import { classifyHtmlSuperscriptLinkAction, diff --git a/src/renderer/src/components/editor/rich-markdown-editor-config.ts b/src/renderer/src/components/editor/rich-markdown-editor-config.ts index 275720cb5ab..7fd8385eeb8 100644 --- a/src/renderer/src/components/editor/rich-markdown-editor-config.ts +++ b/src/renderer/src/components/editor/rich-markdown-editor-config.ts @@ -29,7 +29,7 @@ import { } from './rich-markdown-image-context' import { getRichMarkdownSpellcheckAttribute } from './rich-markdown-spellcheck' import type { MutableRefObject, Dispatch, SetStateAction } from 'react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import type { RichMarkdownEditorCodec } from './rich-markdown-source-transport' import type { RichMarkdownHtmlSuperscriptLinkContext } from './rich-markdown-html-superscript-link-context' import { diff --git a/src/renderer/src/components/editor/rich-markdown-editor-props.ts b/src/renderer/src/components/editor/rich-markdown-editor-props.ts index 04a20c13c75..93ed3310212 100644 --- a/src/renderer/src/components/editor/rich-markdown-editor-props.ts +++ b/src/renderer/src/components/editor/rich-markdown-editor-props.ts @@ -1,5 +1,5 @@ import type React from 'react' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' export type RichMarkdownEditorProps = { fileId: string diff --git a/src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts b/src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts index 90591cfdb17..8e3b4dead62 100644 --- a/src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts +++ b/src/renderer/src/components/editor/rich-markdown-html-superscript-link.test.ts @@ -29,7 +29,7 @@ import { handleRichMarkdownCitationKey } from './rich-markdown-citation-keyboard import { resolveRichMarkdownWorktreeRoot } from './useRichMarkdownSuperscriptLinkSetup' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import type { AppState } from '@/store/types' -import type { FolderWorkspace } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' import { inspectRichMarkdownSourceOwningSlice, RICH_MARKDOWN_SOURCE_OWNING_PASTE_LIMIT diff --git a/src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts b/src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts index 95c1fa67b8d..28688d73b59 100644 --- a/src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts +++ b/src/renderer/src/components/editor/rich-markdown-review-annotations.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { Editor } from '@tiptap/core' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { countRichMarkdownReviewMarkdownLines, getRichMarkdownAnnotationButtonLeft, diff --git a/src/renderer/src/components/editor/rich-markdown-review-annotations.ts b/src/renderer/src/components/editor/rich-markdown-review-annotations.ts index a7ef2307401..619d128bb65 100644 --- a/src/renderer/src/components/editor/rich-markdown-review-annotations.ts +++ b/src/renderer/src/components/editor/rich-markdown-review-annotations.ts @@ -1,7 +1,7 @@ import type { Dispatch, SetStateAction } from 'react' import type { Editor } from '@tiptap/react' import type { JSONContent } from '@tiptap/core' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import type { RichMarkdownAnnotationHighlightRange } from './rich-markdown-annotation-highlight' import { getRichMarkdownLineRangeFromBlocks, diff --git a/src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts b/src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts index 98e47f5214e..4327f65d007 100644 --- a/src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts +++ b/src/renderer/src/components/editor/rich-markdown-review-note-layout.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { shouldExpandRichMarkdownReviewRail, stackRichMarkdownReviewNotePositions diff --git a/src/renderer/src/components/editor/rich-markdown-review-note-layout.ts b/src/renderer/src/components/editor/rich-markdown-review-note-layout.ts index 1a24de6dd21..7f8cab5244e 100644 --- a/src/renderer/src/components/editor/rich-markdown-review-note-layout.ts +++ b/src/renderer/src/components/editor/rich-markdown-review-note-layout.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { getCommentBodyLayoutLineCount } from '@/lib/comment-body-line-count' export type RichMarkdownReviewNotePosition = { diff --git a/src/renderer/src/components/editor/rich-markdown-review-note-positioning.ts b/src/renderer/src/components/editor/rich-markdown-review-note-positioning.ts index d458312f6a1..c54996d0ffa 100644 --- a/src/renderer/src/components/editor/rich-markdown-review-note-positioning.ts +++ b/src/renderer/src/components/editor/rich-markdown-review-note-positioning.ts @@ -1,5 +1,5 @@ import type { Editor } from '@tiptap/react' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { buildRichMarkdownCommentBlocks, getRichMarkdownCommentAnchorTop diff --git a/src/renderer/src/components/editor/useEditorPanelContentState.test.tsx b/src/renderer/src/components/editor/useEditorPanelContentState.test.tsx index e72ff75858e..14b70465087 100644 --- a/src/renderer/src/components/editor/useEditorPanelContentState.test.tsx +++ b/src/renderer/src/components/editor/useEditorPanelContentState.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { OpenFile } from '@/store/slices/editor' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { DiffContent, FileContent } from './editor-panel-content-types' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx b/src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx index 560bc217d86..317fa625779 100644 --- a/src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx +++ b/src/renderer/src/components/editor/useEditorPanelVisibilityContentState.test.tsx @@ -4,7 +4,7 @@ import { act, useLayoutEffect, useMemo } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { OpenFile } from '@/store/slices/editor' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { DiffContent, FileContent } from './editor-panel-content-types' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/editor/useMarkdownDocuments.ts b/src/renderer/src/components/editor/useMarkdownDocuments.ts index 5e8e5a17fb8..40694193c75 100644 --- a/src/renderer/src/components/editor/useMarkdownDocuments.ts +++ b/src/renderer/src/components/editor/useMarkdownDocuments.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { useAppStore } from '@/store' import { getConnectionId } from '@/lib/connection-context' import { statRuntimePath } from '@/runtime/runtime-file-client' diff --git a/src/renderer/src/components/editor/useRichMarkdownMenuController.ts b/src/renderer/src/components/editor/useRichMarkdownMenuController.ts index d62a47d0308..6d73e618d03 100644 --- a/src/renderer/src/components/editor/useRichMarkdownMenuController.ts +++ b/src/renderer/src/components/editor/useRichMarkdownMenuController.ts @@ -1,6 +1,6 @@ import { useCallback, useMemo, useRef, useState } from 'react' import type React from 'react' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { getMarkdownDocCompletionDocuments } from './markdown-doc-completions' import type { DocLinkMenuRow, DocLinkMenuState } from './rich-markdown-commands' import { filterRichMarkdownSlashCommands } from './rich-markdown-slash-command-filter' diff --git a/src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.ts b/src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.ts index 585cec52c0b..6094570d39e 100644 --- a/src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.ts +++ b/src/renderer/src/components/editor/useRichMarkdownProgrammaticSync.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react' import type { Dispatch, MutableRefObject, SetStateAction } from 'react' import type { Editor } from '@tiptap/react' -import type { MarkdownDocument } from '../../../../shared/types' +import type { MarkdownDocument } from '../../../../shared/filesystem-entry-types' import { encodeRawMarkdownHtmlForRichEditor } from './raw-markdown-html' import { syncDocLinkMenu, type DocLinkMenuState } from './rich-markdown-commands' import { normalizeEmptyListItems } from './rich-markdown-normalize' diff --git a/src/renderer/src/components/editor/useRichMarkdownReviewController.ts b/src/renderer/src/components/editor/useRichMarkdownReviewController.ts index cc4e828bc94..f78b403e1c1 100644 --- a/src/renderer/src/components/editor/useRichMarkdownReviewController.ts +++ b/src/renderer/src/components/editor/useRichMarkdownReviewController.ts @@ -15,7 +15,7 @@ import { flushPendingProseMirrorSelection } from './rich-markdown-selection-flus import { useRichMarkdownReviewData } from './useRichMarkdownReviewData' import { useRichMarkdownReviewCopyFeedback } from './useRichMarkdownReviewCopyFeedback' import { useRichMarkdownReviewRailController } from './useRichMarkdownReviewRailController' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' type UseRichMarkdownReviewControllerOptions = { addDiffComment: AppState['addDiffComment'] diff --git a/src/renderer/src/components/editor/useRichMarkdownReviewData.ts b/src/renderer/src/components/editor/useRichMarkdownReviewData.ts index e0dc9286034..458dce00035 100644 --- a/src/renderer/src/components/editor/useRichMarkdownReviewData.ts +++ b/src/renderer/src/components/editor/useRichMarkdownReviewData.ts @@ -7,7 +7,7 @@ import { type MarkdownReviewNote } from '@/lib/markdown-review-notes' import type { NotesSendMenuScope } from './NotesSendMenu' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' import { translate } from '@/i18n/i18n' type UseRichMarkdownReviewDataOptions = { diff --git a/src/renderer/src/components/editor/useRichMarkdownReviewEditorEffects.ts b/src/renderer/src/components/editor/useRichMarkdownReviewEditorEffects.ts index b79cb031753..7a8abdec3c9 100644 --- a/src/renderer/src/components/editor/useRichMarkdownReviewEditorEffects.ts +++ b/src/renderer/src/components/editor/useRichMarkdownReviewEditorEffects.ts @@ -2,7 +2,7 @@ import { useEffect, type RefObject } from 'react' import type { Editor } from '@tiptap/react' import { richMarkdownAnnotationHighlightPluginKey } from './rich-markdown-annotation-highlight' import { getRichMarkdownAnnotationHighlightRanges } from './rich-markdown-review-annotations' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' type UseRichMarkdownReviewEditorEffectsOptions = { canAnnotateRichMarkdown: boolean diff --git a/src/renderer/src/components/editor/useRichMarkdownReviewRailController.ts b/src/renderer/src/components/editor/useRichMarkdownReviewRailController.ts index 0004f3aab87..45603510138 100644 --- a/src/renderer/src/components/editor/useRichMarkdownReviewRailController.ts +++ b/src/renderer/src/components/editor/useRichMarkdownReviewRailController.ts @@ -12,7 +12,7 @@ import { } from './rich-markdown-review-annotations' import type { RichMarkdownReviewNotePosition } from './rich-markdown-review-note-layout' import { measureRichMarkdownReviewNotePositions } from './rich-markdown-review-note-positioning' -import type { DiffComment } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' type UseRichMarkdownReviewRailControllerOptions = { canAnnotateRichMarkdown: boolean diff --git a/src/renderer/src/components/emulator-pane/EmulatorPane.tsx b/src/renderer/src/components/emulator-pane/EmulatorPane.tsx index 476c79e232d..17b5de71fc3 100644 --- a/src/renderer/src/components/emulator-pane/EmulatorPane.tsx +++ b/src/renderer/src/components/emulator-pane/EmulatorPane.tsx @@ -1,4 +1,4 @@ -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { EmulatorPaneToolbar } from './emulator-pane-toolbar' import { EmulatorDeviceFrame } from './emulator-device-frame' import { MobileEmulatorAgentSetupGuideLayer } from './MobileEmulatorAgentSetupGuideLayer' diff --git a/src/renderer/src/components/emulator-pane/EmulatorPaneOverlayLayer.tsx b/src/renderer/src/components/emulator-pane/EmulatorPaneOverlayLayer.tsx index 8d15f611003..410d9d3ac66 100644 --- a/src/renderer/src/components/emulator-pane/EmulatorPaneOverlayLayer.tsx +++ b/src/renderer/src/components/emulator-pane/EmulatorPaneOverlayLayer.tsx @@ -1,7 +1,7 @@ import { memo, useCallback, useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' import { useAppStore } from '@/store' -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import EmulatorPane from './EmulatorPane' import { tabGroupBodyAnchorName } from '../tab-group/tab-group-body-anchor' diff --git a/src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts b/src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts index a2e39a00841..c224d5e1c8c 100644 --- a/src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts +++ b/src/renderer/src/components/feature-tips/feature-tip-modal-state.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getDefaultVoiceSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getFeatureTipForModal } from './feature-tip-modal-state' function makeSettings(voiceEnabled = false): Pick { diff --git a/src/renderer/src/components/feature-tips/feature-tip-modal-state.ts b/src/renderer/src/components/feature-tips/feature-tip-modal-state.ts index ca54215e73d..780b40894b1 100644 --- a/src/renderer/src/components/feature-tips/feature-tip-modal-state.ts +++ b/src/renderer/src/components/feature-tips/feature-tip-modal-state.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { FeatureInteractionState } from '../../../../shared/feature-interactions' import { FEATURE_TIPS, diff --git a/src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts b/src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts index 99b281aab47..cac13f108fd 100644 --- a/src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts +++ b/src/renderer/src/components/feature-tips/feature-tip-startup-gate.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultOnboardingState, getDefaultVoiceSettings } from '../../../../shared/constants' import type { CliInstallStatus } from '../../../../shared/cli-install-types' -import type { GlobalSettings, OnboardingState } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' import { getFeatureTipsAppOpenDecision, isCliFeatureTipCompleted } from './feature-tip-startup-gate' const existingUserOnboarding: OnboardingState = { diff --git a/src/renderer/src/components/feature-tips/feature-tip-startup-gate.ts b/src/renderer/src/components/feature-tips/feature-tip-startup-gate.ts index a7eef0b8ead..4ad80028fd8 100644 --- a/src/renderer/src/components/feature-tips/feature-tip-startup-gate.ts +++ b/src/renderer/src/components/feature-tips/feature-tip-startup-gate.ts @@ -5,7 +5,8 @@ import { } from '../../../../shared/feature-tips' import type { CliInstallStatus } from '../../../../shared/cli-install-types' import type { FeatureInteractionState } from '../../../../shared/feature-interactions' -import type { GlobalSettings, OnboardingState } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' import { shouldShowOnboarding } from '../onboarding/should-show-onboarding' export type FeatureTipsAppOpenDecision = diff --git a/src/renderer/src/components/feature-wall/AiCommitPrSettingsFields.tsx b/src/renderer/src/components/feature-wall/AiCommitPrSettingsFields.tsx index 52460dbadbc..7560b4a6cb3 100644 --- a/src/renderer/src/components/feature-wall/AiCommitPrSettingsFields.tsx +++ b/src/renderer/src/components/feature-wall/AiCommitPrSettingsFields.tsx @@ -7,7 +7,7 @@ import { type CommitMessageAgentCapability, type CommitMessageModelCapability } from '../../../../shared/commit-message-agent-spec' -import type { CommitMessageAiSettings } from '../../../../shared/types' +import type { CommitMessageAiSettings } from '../../../../shared/commit-message-ai-types' import { AgentIcon } from '@/lib/agent-catalog' import { cn } from '@/lib/utils' import { Input } from '../ui/input' diff --git a/src/renderer/src/components/feature-wall/FeatureWallBody.tsx b/src/renderer/src/components/feature-wall/FeatureWallBody.tsx index 0eb0314d89e..b08fc2f669c 100644 --- a/src/renderer/src/components/feature-wall/FeatureWallBody.tsx +++ b/src/renderer/src/components/feature-wall/FeatureWallBody.tsx @@ -4,7 +4,7 @@ import type { FeatureWallOpenSourceTelemetry } from '../../../../shared/telemetr import type { AgentsStep } from '../../../../shared/agents-orchestration-steps' import type { WorkbenchStep } from '../../../../shared/workbench-steps' import type { ReviewStep } from '../../../../shared/review-steps' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { InstalledAgentSkillState } from '@/hooks/useInstalledAgentSkills' import { cn } from '@/lib/utils' import { PreviewMedia, RelatedFeatures } from './FeatureWallPreview' diff --git a/src/renderer/src/components/feature-wall/FeatureWallSetupChecklist.tsx b/src/renderer/src/components/feature-wall/FeatureWallSetupChecklist.tsx index dadf8f1134d..0fcea197023 100644 --- a/src/renderer/src/components/feature-wall/FeatureWallSetupChecklist.tsx +++ b/src/renderer/src/components/feature-wall/FeatureWallSetupChecklist.tsx @@ -23,7 +23,7 @@ import { import { AgentStep } from '../onboarding/AgentStep' import { NotificationStep } from '../onboarding/NotificationStep' import { useAppStore } from '@/store' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { getProviderRuntimeContextKey } from '@/lib/provider-runtime-context' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx b/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx index b7b64877156..0a0b4f0ce46 100644 --- a/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx +++ b/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.test.tsx @@ -14,7 +14,7 @@ import { } from './FeatureWallSetupWorkflowActions' import { useAppStore } from '@/store' import { toast } from 'sonner' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' vi.mock('sonner', () => ({ toast: { diff --git a/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.tsx b/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.tsx index e92264899ee..2649029c9b5 100644 --- a/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.tsx +++ b/src/renderer/src/components/feature-wall/FeatureWallSetupWorkflowActions.tsx @@ -7,7 +7,9 @@ import { useAppStore } from '@/store' import { useAllWorktrees } from '@/store/selectors' import { getDefaultRepoHookSettings } from '../../../../shared/constants' import { isGitRepoKind } from '../../../../shared/repo-kind' -import type { Repo, RepoHookSettings, Worktree } from '../../../../shared/types' +import type { RepoHookSettings } from '../../../../shared/orca-yaml-hook-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getRepositoryLocalCommandsSectionId } from '../settings/repository-settings-targets' import { requestContextualTourWhenReady, diff --git a/src/renderer/src/components/feature-wall/FeatureWallTourPanel.tsx b/src/renderer/src/components/feature-wall/FeatureWallTourPanel.tsx index 93646baa2f8..bb620423115 100644 --- a/src/renderer/src/components/feature-wall/FeatureWallTourPanel.tsx +++ b/src/renderer/src/components/feature-wall/FeatureWallTourPanel.tsx @@ -6,7 +6,7 @@ import type { } from '../../../../shared/feature-wall-workflows' import type { ReviewStep, ReviewStepId } from '../../../../shared/review-steps' import type { FeatureWallOpenSourceTelemetry } from '../../../../shared/telemetry-events' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { WorkbenchStep, WorkbenchStepId } from '../../../../shared/workbench-steps' import type { InstalledAgentSkillState } from '@/hooks/useInstalledAgentSkills' import { cn } from '@/lib/utils' diff --git a/src/renderer/src/components/feature-wall/KeepAwakeCard.tsx b/src/renderer/src/components/feature-wall/KeepAwakeCard.tsx index a201b6f60cd..0520cc05564 100644 --- a/src/renderer/src/components/feature-wall/KeepAwakeCard.tsx +++ b/src/renderer/src/components/feature-wall/KeepAwakeCard.tsx @@ -1,7 +1,7 @@ import type { JSX } from 'react' import { Switch } from '@/components/ui/switch' import { getAgentAwakeDescription, getAgentAwakeTitle } from '../settings/agent-awake-copy' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { computerAwakeSettingsForMode, diff --git a/src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.tsx b/src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.tsx index a32fd8c38f9..bda09726912 100644 --- a/src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.tsx +++ b/src/renderer/src/components/feature-wall/agents-orchestration/UsageAccountsCard.tsx @@ -10,7 +10,7 @@ import { useMountedRef } from '@/hooks/useMountedRef' import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState -} from '../../../../../shared/types' +} from '../../../../../shared/managed-account-types' import { getFeatureWallUsageProviderConnection } from '../feature-wall-usage-tracking' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/feature-wall/ai-commit-pr-settings-helpers.ts b/src/renderer/src/components/feature-wall/ai-commit-pr-settings-helpers.ts index 8ed5d238b01..5dc505a0a10 100644 --- a/src/renderer/src/components/feature-wall/ai-commit-pr-settings-helpers.ts +++ b/src/renderer/src/components/feature-wall/ai-commit-pr-settings-helpers.ts @@ -1,4 +1,6 @@ -import type { CommitMessageAiSettings, GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { CommitMessageAiSettings } from '../../../../shared/commit-message-ai-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { getCommitMessageAgentCapability, isCustomAgentId, diff --git a/src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts b/src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts index ae23c2876ab..d46fd15ac91 100644 --- a/src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts +++ b/src/renderer/src/components/feature-wall/feature-wall-setup-progress.test.ts @@ -8,7 +8,7 @@ import { getFeatureWallSetupStepsForSection, getFirstIncompleteFeatureWallSetupStepId } from '../../../../shared/feature-wall-setup-steps' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' function makeInput( overrides: Partial = {} diff --git a/src/renderer/src/components/feature-wall/feature-wall-setup-progress.ts b/src/renderer/src/components/feature-wall/feature-wall-setup-progress.ts index 35196cb4fb2..585df18a9ac 100644 --- a/src/renderer/src/components/feature-wall/feature-wall-setup-progress.ts +++ b/src/renderer/src/components/feature-wall/feature-wall-setup-progress.ts @@ -4,7 +4,8 @@ import { FEATURE_WALL_SETUP_STEPS, type FeatureWallSetupStepId } from '../../../../shared/feature-wall-setup-steps' -import type { GlobalSettings, Worktree } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Worktree } from '../../../../shared/worktree/types' export type FeatureWallSetupProgressInput = { ready?: boolean diff --git a/src/renderer/src/components/feature-wall/useAiCommitPrSettings.ts b/src/renderer/src/components/feature-wall/useAiCommitPrSettings.ts index c187d6f18ec..1bdda194061 100644 --- a/src/renderer/src/components/feature-wall/useAiCommitPrSettings.ts +++ b/src/renderer/src/components/feature-wall/useAiCommitPrSettings.ts @@ -1,5 +1,6 @@ import { useCallback, useState } from 'react' -import type { CommitMessageAiSettings, TuiAgent } from '../../../../shared/types' +import type { CommitMessageAiSettings } from '../../../../shared/commit-message-ai-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { CUSTOM_AGENT_ID, getCommitMessageAgentCapability, diff --git a/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx b/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx index 01a12086c7c..7e1b8d7a7a2 100644 --- a/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import { FloatingBrowserSlot } from './FloatingBrowserSlot' import { getBrowserOverlaySlotViewport } from '@/components/browser-pane/browser-page-viewport' -import type { BrowserTab } from '../../../../shared/types' +import type { BrowserTab } from '../../../../shared/browser-workspace-types' // Why: BrowserPane mounts a real Electron we can't run in jsdom; stub // it so the test isolates the slot-root registration that BrowserPane depends on. diff --git a/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.tsx b/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.tsx index 2013ffe4993..76b819f0876 100644 --- a/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingBrowserSlot.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react' import BrowserPane from '@/components/browser-pane/BrowserPane' import { registerBrowserOverlaySlotViewport } from '@/components/browser-pane/browser-page-viewport' -import type { BrowserTab as BrowserTabState } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' // Why: BrowserPane mounts its persistent Electron into a slot viewport // root keyed by the browser tab id. The main workspace registers that root via diff --git a/src/renderer/src/components/floating-terminal/FloatingTerminalIconContextMenu.tsx b/src/renderer/src/components/floating-terminal/FloatingTerminalIconContextMenu.tsx index 8947efc01f3..abd460a80fd 100644 --- a/src/renderer/src/components/floating-terminal/FloatingTerminalIconContextMenu.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingTerminalIconContextMenu.tsx @@ -8,7 +8,7 @@ import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { useAppStore } from '@/store' -import type { FloatingTerminalTriggerLocation } from '../../../../shared/types' +import type { FloatingTerminalTriggerLocation } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' type FloatingTerminalIconContextMenuProps = { diff --git a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.test.tsx b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.test.tsx index 43e74374d9d..4e1913eb967 100644 --- a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.test.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.test.tsx @@ -4,7 +4,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { KeybindingOverrides, TerminalShortcutPolicy } from '../../../../shared/keybindings' -import type { BrowserTab, Tab, TabGroup, TerminalTab } from '../../../../shared/types' +import type { BrowserTab } from '../../../../shared/browser-workspace-types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { OpenFile } from '@/store/slices/editor' import { createUntitledMarkdownFileWithTemplateSelection } from '@/lib/create-untitled-markdown' import { diff --git a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx index 2f60cb89902..f37a6968c36 100644 --- a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx @@ -85,7 +85,9 @@ import { ModifierDoubleTapDetector, toModifierDoubleTapEvent } from '../../../../shared/modifier-double-tap-detector' -import type { BrowserTab as BrowserTabState, Tab, TerminalTab } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { Tab } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveUnifiedTabLabel } from '../../../../shared/tab-title-resolution' import { FloatingBrowserSlot } from './FloatingBrowserSlot' import { FloatingTerminalOrchestrationDialog } from './FloatingTerminalOrchestrationDialog' diff --git a/src/renderer/src/components/github-checks-tab-state.test.ts b/src/renderer/src/components/github-checks-tab-state.test.ts index 66a0c06b722..f9b3a3c8001 100644 --- a/src/renderer/src/components/github-checks-tab-state.test.ts +++ b/src/renderer/src/components/github-checks-tab-state.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/github/check-types' import { beginGitHubChecksTabDetails, createGitHubChecksTabState, diff --git a/src/renderer/src/components/github-checks-tab-state.ts b/src/renderer/src/components/github-checks-tab-state.ts index e408eb6ef9d..18c12cf089b 100644 --- a/src/renderer/src/components/github-checks-tab-state.ts +++ b/src/renderer/src/components/github-checks-tab-state.ts @@ -1,4 +1,4 @@ -import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/github/check-types' export type CheckDetailsLoadState = { requestId?: number diff --git a/src/renderer/src/components/github-pr-merge-state.ts b/src/renderer/src/components/github-pr-merge-state.ts index d67a3b8a3ef..f26edd5896b 100644 --- a/src/renderer/src/components/github-pr-merge-state.ts +++ b/src/renderer/src/components/github-pr-merge-state.ts @@ -1,10 +1,10 @@ import type { CheckStatus, - ProviderCheckSummary, PRMergeableState, PRReviewDecision, - PRState -} from '../../../shared/types' + PRState, + ProviderCheckSummary +} from '../../../shared/github/pull-request-types' import { canEnableGitHubPRAutoMerge } from '../../../shared/github/pull-request-auto-merge-availability' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/github-pr-reviewer-display.test.ts b/src/renderer/src/components/github-pr-reviewer-display.test.ts index fca899f118c..3512b578e29 100644 --- a/src/renderer/src/components/github-pr-reviewer-display.test.ts +++ b/src/renderer/src/components/github-pr-reviewer-display.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { GITHUB_PR_REVIEWER_INPUT_MAX_BYTES, appendGitHubPRRequestedReviewers, diff --git a/src/renderer/src/components/github-pr-reviewer-display.ts b/src/renderer/src/components/github-pr-reviewer-display.ts index 695c5eab90a..01ba370e0a9 100644 --- a/src/renderer/src/components/github-pr-reviewer-display.ts +++ b/src/renderer/src/components/github-pr-reviewer-display.ts @@ -1,4 +1,5 @@ -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' type ReviewDisplayItem = Pick diff --git a/src/renderer/src/components/github-project/ProjectCell.tsx b/src/renderer/src/components/github-project/ProjectCell.tsx index 877f426311a..ef22f2ffcaa 100644 --- a/src/renderer/src/components/github-project/ProjectCell.tsx +++ b/src/renderer/src/components/github-project/ProjectCell.tsx @@ -25,7 +25,7 @@ import type { GitHubProjectUser, ListIssueTypesBySlugResult } from '../../../../shared/github/project-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' type Props = { diff --git a/src/renderer/src/components/github-project/ProjectItemSlugDialog.tsx b/src/renderer/src/components/github-project/ProjectItemSlugDialog.tsx index 2b778e29c10..bf176e802c3 100644 --- a/src/renderer/src/components/github-project/ProjectItemSlugDialog.tsx +++ b/src/renderer/src/components/github-project/ProjectItemSlugDialog.tsx @@ -12,7 +12,7 @@ import { VisuallyHidden } from 'radix-ui' import { Sheet, SheetContent, SheetDescription, SheetTitle } from '@/components/ui/sheet' import type { GitHubItemDialogProjectOrigin } from '@/components/GitHubItemDialog' import { SlugDialogBody } from './slug-dialog/SlugDialogBody' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' type Props = { diff --git a/src/renderer/src/components/github-project/ProjectRow.tsx b/src/renderer/src/components/github-project/ProjectRow.tsx index d57a807702e..57ad63784c3 100644 --- a/src/renderer/src/components/github-project/ProjectRow.tsx +++ b/src/renderer/src/components/github-project/ProjectRow.tsx @@ -12,7 +12,7 @@ import type { GitHubProjectFieldMutationValue, GitHubProjectRow as GitHubProjectRowType } from '../../../../shared/github/project-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' const PROJECT_FROZEN_COLUMN_SURFACE_CLASS = diff --git a/src/renderer/src/components/github-project/ProjectViewList.tsx b/src/renderer/src/components/github-project/ProjectViewList.tsx index 8bd6963b4c7..e54493418d6 100644 --- a/src/renderer/src/components/github-project/ProjectViewList.tsx +++ b/src/renderer/src/components/github-project/ProjectViewList.tsx @@ -22,7 +22,7 @@ import type { GitHubProjectSortDirection, GitHubProjectTable } from '../../../../shared/github/project-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' type SortOverride = { fieldId: string; direction: GitHubProjectSortDirection } diff --git a/src/renderer/src/components/github-project/ProjectViewWrapper.tsx b/src/renderer/src/components/github-project/ProjectViewWrapper.tsx index 24941730c94..3996a562715 100644 --- a/src/renderer/src/components/github-project/ProjectViewWrapper.tsx +++ b/src/renderer/src/components/github-project/ProjectViewWrapper.tsx @@ -41,7 +41,7 @@ import type { GitHubProjectViewSummary, ListProjectViewsResult } from '../../../../shared/github/project-types' -import type { GitHubWorkItem } from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' import ProjectPicker, { type ResolvedProjectSelection } from './ProjectPicker' import ProjectViewList from './ProjectViewList' import ProjectItemSlugDialog from './ProjectItemSlugDialog' diff --git a/src/renderer/src/components/github-project/project-row-filtering.test.ts b/src/renderer/src/components/github-project/project-row-filtering.test.ts index 636382aa53c..fae4ecf6ffc 100644 --- a/src/renderer/src/components/github-project/project-row-filtering.test.ts +++ b/src/renderer/src/components/github-project/project-row-filtering.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { GitHubProjectRow, GitHubProjectTable } from '../../../../shared/github/project-types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { filterProjectTableRowsByOpenRepos, filterProjectTableRowsBySelectedRepos, diff --git a/src/renderer/src/components/github-project/project-row-filtering.ts b/src/renderer/src/components/github-project/project-row-filtering.ts index b4c1b3738a3..0e9a3108043 100644 --- a/src/renderer/src/components/github-project/project-row-filtering.ts +++ b/src/renderer/src/components/github-project/project-row-filtering.ts @@ -1,5 +1,5 @@ import type { GitHubProjectRow, GitHubProjectTable } from '../../../../shared/github/project-types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export type ProjectRowSlugLookup = ( slug: string | null | undefined, diff --git a/src/renderer/src/components/github-project/project-work-item.ts b/src/renderer/src/components/github-project/project-work-item.ts index cc68266fe88..692e0fa487b 100644 --- a/src/renderer/src/components/github-project/project-work-item.ts +++ b/src/renderer/src/components/github-project/project-work-item.ts @@ -1,6 +1,6 @@ import { githubProjectHost } from '../../../../shared/github/project-identity' import type { GitHubProjectRow } from '../../../../shared/github/project-types' -import type { GitHubWorkItem } from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' export function buildProjectWorkItem( row: GitHubProjectRow, diff --git a/src/renderer/src/components/github-project/slug-dialog/AssigneesEditor.tsx b/src/renderer/src/components/github-project/slug-dialog/AssigneesEditor.tsx index b609030dc03..cccdefb3f31 100644 --- a/src/renderer/src/components/github-project/slug-dialog/AssigneesEditor.tsx +++ b/src/renderer/src/components/github-project/slug-dialog/AssigneesEditor.tsx @@ -2,7 +2,7 @@ import React, { useMemo, useState } from 'react' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' import { useRepoAssigneesBySlug } from '@/hooks/useGitHubSlugMetadata' -import type { GlobalSettings } from '../../../../../shared/types' +import type { GlobalSettings } from '../../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' export function AssigneesEditor({ diff --git a/src/renderer/src/components/github-project/slug-dialog/Comments.tsx b/src/renderer/src/components/github-project/slug-dialog/Comments.tsx index 748edc1fe74..d5ebf6f5740 100644 --- a/src/renderer/src/components/github-project/slug-dialog/Comments.tsx +++ b/src/renderer/src/components/github-project/slug-dialog/Comments.tsx @@ -12,7 +12,8 @@ import { } from '@/lib/comment-body-submit-state' import { useRepoSlugIndex } from '@/lib/repo-slug-index' import { getSettingsForRepoRuntimeOwner } from '@/lib/repo-runtime-owner' -import type { GlobalSettings, PRComment } from '../../../../../shared/types' +import type { PRComment } from '../../../../../shared/github/comment-types' +import type { GlobalSettings } from '../../../../../shared/global-settings-types' import type { GitHubProjectCommentMutationResult, GitHubProjectMutationResult diff --git a/src/renderer/src/components/github-project/slug-dialog/LabelsEditor.tsx b/src/renderer/src/components/github-project/slug-dialog/LabelsEditor.tsx index 877cf47ca7c..96d64b7ad2a 100644 --- a/src/renderer/src/components/github-project/slug-dialog/LabelsEditor.tsx +++ b/src/renderer/src/components/github-project/slug-dialog/LabelsEditor.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' import { useRepoLabelsBySlug } from '@/hooks/useGitHubSlugMetadata' -import type { GlobalSettings } from '../../../../../shared/types' +import type { GlobalSettings } from '../../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' export function LabelsEditor({ diff --git a/src/renderer/src/components/github-project/slug-dialog/SlugDialogBody.tsx b/src/renderer/src/components/github-project/slug-dialog/SlugDialogBody.tsx index a8b20151a34..e04c3129958 100644 --- a/src/renderer/src/components/github-project/slug-dialog/SlugDialogBody.tsx +++ b/src/renderer/src/components/github-project/slug-dialog/SlugDialogBody.tsx @@ -7,7 +7,8 @@ import { Input } from '@/components/ui/input' import CommentMarkdown from '@/components/sidebar/CommentMarkdown' import { useAppStore } from '@/store' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' -import type { GitHubWorkItemDetails, GlobalSettings } from '../../../../../shared/types' +import type { GitHubWorkItemDetails } from '../../../../../shared/github/work-item-types' +import type { GlobalSettings } from '../../../../../shared/global-settings-types' import type { GitHubItemDialogProjectOrigin } from '@/components/GitHubItemDialog' import { LabelsEditor } from './LabelsEditor' import { AssigneesEditor } from './AssigneesEditor' diff --git a/src/renderer/src/components/github/CommentCodeContext.tsx b/src/renderer/src/components/github/CommentCodeContext.tsx index 8dd390f9586..8539ba9fad3 100644 --- a/src/renderer/src/components/github/CommentCodeContext.tsx +++ b/src/renderer/src/components/github/CommentCodeContext.tsx @@ -16,12 +16,12 @@ import { import { getPrCommentCodeContext } from '@/components/github/pr-comment-code-context' import { getPRFileContentsRenderLimit } from '@/components/github/pr-file-diff-mapping' import type { TaskSourceContext } from '../../../../shared/task-source-context' +import type { PRComment } from '../../../../shared/github/comment-types' import type { GitHubOwnerRepo, GitHubPRFile, - GitHubPRFileContents, - PRComment -} from '../../../../shared/types' + GitHubPRFileContents +} from '../../../../shared/github/pull-request-types' const MonacoCodeExcerpt = lazy(() => import('@/components/editor/MonacoCodeExcerpt')) diff --git a/src/renderer/src/components/github/CommentReactions.tsx b/src/renderer/src/components/github/CommentReactions.tsx index 21aa4ac2316..fc9027e89ca 100644 --- a/src/renderer/src/components/github/CommentReactions.tsx +++ b/src/renderer/src/components/github/CommentReactions.tsx @@ -6,7 +6,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip import { translate } from '@/i18n/i18n' import { cn } from '@/lib/utils' import { GITHUB_REACTION_ORDER } from '@/lib/pr-comment-reactions' -import type { GitHubReaction, GitHubReactionContent } from '../../../../shared/types' +import type { GitHubReaction, GitHubReactionContent } from '../../../../shared/github/comment-types' const REACTION_EMOJI: Record = { '+1': '👍', diff --git a/src/renderer/src/components/github/GitHubMarkdownComposer.tsx b/src/renderer/src/components/github/GitHubMarkdownComposer.tsx index 9fa818066fd..52d7906df08 100644 --- a/src/renderer/src/components/github/GitHubMarkdownComposer.tsx +++ b/src/renderer/src/components/github/GitHubMarkdownComposer.tsx @@ -27,7 +27,7 @@ import { } from '@/components/github/github-markdown-composer-tabbar' import { hasBoundedGitHubMarkdownImageUrlText } from '@/components/github/github-markdown-image-url' import { useImageInput } from '@/components/github/use-image-input' -import type { GitHubOwnerRepo } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/components/github/IssueSourceIndicator.tsx b/src/renderer/src/components/github/IssueSourceIndicator.tsx index c9615562e81..264b4ef7242 100644 --- a/src/renderer/src/components/github/IssueSourceIndicator.tsx +++ b/src/renderer/src/components/github/IssueSourceIndicator.tsx @@ -1,5 +1,5 @@ import React from 'react' -import type { GitHubOwnerRepo } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' import RepoBadgeLabel from '@/components/repo/RepoBadgeLabel' import { cn } from '@/lib/utils' import { diff --git a/src/renderer/src/components/github/IssueSourceSelector.tsx b/src/renderer/src/components/github/IssueSourceSelector.tsx index e428d53f525..fc20eae5c4c 100644 --- a/src/renderer/src/components/github/IssueSourceSelector.tsx +++ b/src/renderer/src/components/github/IssueSourceSelector.tsx @@ -1,5 +1,6 @@ import React from 'react' -import type { GitHubOwnerRepo, IssueSourcePreference } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' +import type { IssueSourcePreference } from '../../../../shared/repo-types' import { sameGitHubOwnerRepo } from '@/components/github/IssueSourceIndicator' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' diff --git a/src/renderer/src/components/github/PRAssigneesPanel.tsx b/src/renderer/src/components/github/PRAssigneesPanel.tsx index 24391745120..d759d93880a 100644 --- a/src/renderer/src/components/github/PRAssigneesPanel.tsx +++ b/src/renderer/src/components/github/PRAssigneesPanel.tsx @@ -19,7 +19,8 @@ import { getTaskSourceRuntimeSettings, type TaskSourceContext } from '../../../../shared/task-source-context' -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' export function PRAssigneesPanel({ item, diff --git a/src/renderer/src/components/github/PRFilterDropdowns.tsx b/src/renderer/src/components/github/PRFilterDropdowns.tsx index d22cdbb8f4b..ddf74929515 100644 --- a/src/renderer/src/components/github/PRFilterDropdowns.tsx +++ b/src/renderer/src/components/github/PRFilterDropdowns.tsx @@ -17,9 +17,9 @@ import { } from '@/components/github/PRFilterSections' import type { GitHubAssignableUser, - GitHubOwnerRepo, - GlobalSettings -} from '../../../../shared/types' + GitHubOwnerRepo +} from '../../../../shared/github/pull-request-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ParsedTaskQuery } from '../../../../shared/task-query' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/github/github-markdown-composer-preview-pane.tsx b/src/renderer/src/components/github/github-markdown-composer-preview-pane.tsx index 706f8785f8e..01fc334b2a6 100644 --- a/src/renderer/src/components/github/github-markdown-composer-preview-pane.tsx +++ b/src/renderer/src/components/github/github-markdown-composer-preview-pane.tsx @@ -1,5 +1,5 @@ import CommentMarkdown from '@/components/sidebar/CommentMarkdown' -import type { GitHubOwnerRepo } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' export function GitHubMarkdownComposerPreviewPane({ diff --git a/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts b/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts index e20b151f747..c8ef5e977e3 100644 --- a/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts +++ b/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitHubAssignableUser } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' import { GITHUB_PR_REVIEWER_QUERY_MAX_BYTES, filterGitHubPRReviewerCandidates, diff --git a/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.ts b/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.ts index 3ae5bc4a236..f38bd80e9a0 100644 --- a/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.ts +++ b/src/renderer/src/components/github/github-pr-reviewer-candidate-filter.ts @@ -1,5 +1,5 @@ import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' -import type { GitHubAssignableUser } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' export type GitHubPRReviewerQueryState = { query: string diff --git a/src/renderer/src/components/github/github-rate-limit-display.tsx b/src/renderer/src/components/github/github-rate-limit-display.tsx index 9b7002476ce..17d81a90532 100644 --- a/src/renderer/src/components/github/github-rate-limit-display.tsx +++ b/src/renderer/src/components/github/github-rate-limit-display.tsx @@ -4,7 +4,10 @@ import { cn } from '@/lib/utils' import { installWindowVisibilityInterval } from '@/lib/window-visibility-interval' import { useAppStore } from '@/store' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' -import type { GetRateLimitResult, GitHubRateLimitSnapshot } from '../../../../shared/types' +import type { + GetRateLimitResult, + GitHubRateLimitSnapshot +} from '../../../../shared/github/rate-limit-types' import { getProviderRateLimitScope } from '@/components/settings/provider-account-scope' import { ProviderHostScopeControl } from '@/components/settings/ProviderHostScopeControl' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/github/github-work-item-assignee-filter.ts b/src/renderer/src/components/github/github-work-item-assignee-filter.ts index cda49753314..7d30ce248b1 100644 --- a/src/renderer/src/components/github/github-work-item-assignee-filter.ts +++ b/src/renderer/src/components/github/github-work-item-assignee-filter.ts @@ -1,4 +1,4 @@ -import type { GitHubAssignableUser } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' import { isGitHubWorkItemOptionFilterQueryTooLarge } from './github-work-item-option-filter-bounds' export function filterGitHubWorkItemAssignees( diff --git a/src/renderer/src/components/github/github-work-item-comment-mutations.ts b/src/renderer/src/components/github/github-work-item-comment-mutations.ts index a42804365bf..f0f6fda3b82 100644 --- a/src/renderer/src/components/github/github-work-item-comment-mutations.ts +++ b/src/renderer/src/components/github/github-work-item-comment-mutations.ts @@ -5,7 +5,7 @@ import { getGitHubSourceRuntimeHost } from '@/lib/github-source-runtime-context' import type { TaskSourceContext } from '../../../../shared/task-source-context' -import type { GitHubOwnerRepo } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' export function addIssueCommentForRepo(args: { repoId?: string diff --git a/src/renderer/src/components/github/github-work-item-edit-mutations.ts b/src/renderer/src/components/github/github-work-item-edit-mutations.ts index e81adba1f0e..5c40aeb2328 100644 --- a/src/renderer/src/components/github/github-work-item-edit-mutations.ts +++ b/src/renderer/src/components/github/github-work-item-edit-mutations.ts @@ -13,7 +13,8 @@ import { getTaskSourceRuntimeSettings, type TaskSourceContext } from '../../../../shared/task-source-context' -import type { GitHubOwnerRepo, GitHubWorkItem } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' // Why: for a Project row whose repo differs from the active workspace, mutations must target the row's actual repo via slug-addressed IPCs, else edits silently apply to the workspace's repo. // Why: these edit IPCs return `{ ok, error }`; callers throw on `!ok` so useImmediateMutation (which expects throws on failure) works unchanged. diff --git a/src/renderer/src/components/github/github-work-item-identity.ts b/src/renderer/src/components/github/github-work-item-identity.ts index f4808e17f3f..b4b06754406 100644 --- a/src/renderer/src/components/github/github-work-item-identity.ts +++ b/src/renderer/src/components/github/github-work-item-identity.ts @@ -1,5 +1,6 @@ import { githubProjectHost } from '../../../../shared/github/project-identity' -import type { GitHubOwnerRepo, GitHubWorkItem } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' // Why: the dialog lacks repository context, so recover its host-aware identity from the canonical item URL. export function parseOwnerRepoFromItemUrl(url: string): GitHubOwnerRepo | null { diff --git a/src/renderer/src/components/github/pr-check-presentation.ts b/src/renderer/src/components/github/pr-check-presentation.ts index 8b500171866..fb50d0a780a 100644 --- a/src/renderer/src/components/github/pr-check-presentation.ts +++ b/src/renderer/src/components/github/pr-check-presentation.ts @@ -1,5 +1,5 @@ import { getCheckConclusion } from '@/components/pr-check-counts' -import type { PRCheckDetail } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' export function getCheckStatusLabel(check: PRCheckDetail): string { const conclusion = getCheckConclusion(check) diff --git a/src/renderer/src/components/github/pr-file-content-size.test.ts b/src/renderer/src/components/github/pr-file-content-size.test.ts index 700a9579ec4..d63bb18798d 100644 --- a/src/renderer/src/components/github/pr-file-content-size.test.ts +++ b/src/renderer/src/components/github/pr-file-content-size.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitHubPRFileContents } from '../../../../shared/types' +import type { GitHubPRFileContents } from '../../../../shared/github/pull-request-types' import { getPRFileContentsCacheByteCount } from './pr-file-content-size' describe('PR file content size', () => { diff --git a/src/renderer/src/components/github/pr-file-content-size.ts b/src/renderer/src/components/github/pr-file-content-size.ts index 0e20c92bd1d..164dae1b8eb 100644 --- a/src/renderer/src/components/github/pr-file-content-size.ts +++ b/src/renderer/src/components/github/pr-file-content-size.ts @@ -1,5 +1,8 @@ import { MAX_RENDERED_DIFF_COMBINED_CHARACTERS } from '@/components/editor/large-diff-render-limit' -import type { GitHubPRFile, GitHubPRFileContents } from '../../../../shared/types' +import type { + GitHubPRFile, + GitHubPRFileContents +} from '../../../../shared/github/pull-request-types' import { getUtf8ByteLength } from '../../../../shared/utf8-byte-limits' export const PR_FILE_CONTENT_CACHE_MAX_BYTES = MAX_RENDERED_DIFF_COMBINED_CHARACTERS * 4 diff --git a/src/renderer/src/components/github/pr-file-diff-mapping.ts b/src/renderer/src/components/github/pr-file-diff-mapping.ts index d592a0d8140..dc990ed8f69 100644 --- a/src/renderer/src/components/github/pr-file-diff-mapping.ts +++ b/src/renderer/src/components/github/pr-file-diff-mapping.ts @@ -5,14 +5,13 @@ import { type LargeDiffRenderLimit } from '@/components/editor/large-diff-render-limit' import type { TaskSourceContext } from '../../../../shared/task-source-context' +import type { GitBranchChangeEntry, GitDiffResult } from '../../../../shared/git-diff-compare-types' +import type { PRComment } from '../../../../shared/github/comment-types' import type { - GitBranchChangeEntry, - GitDiffResult, GitHubOwnerRepo, GitHubPRFile, - GitHubPRFileContents, - PRComment -} from '../../../../shared/types' + GitHubPRFileContents +} from '../../../../shared/github/pull-request-types' export const PR_DIFF_OVERSCAN = 5 diff --git a/src/renderer/src/components/github/work-item-state-presentation.tsx b/src/renderer/src/components/github/work-item-state-presentation.tsx index fadc502fb91..b7f24298e94 100644 --- a/src/renderer/src/components/github/work-item-state-presentation.tsx +++ b/src/renderer/src/components/github/work-item-state-presentation.tsx @@ -1,6 +1,7 @@ import React from 'react' import { GitHubUserAvatar } from '@/components/github/github-user-avatar' -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' import { formatUiRelativeTimeFromDate } from '@/i18n/relative-time-format' export function formatRelativeTime(input: string): string { diff --git a/src/renderer/src/components/gitlab/gitlab-rate-limit-display.tsx b/src/renderer/src/components/gitlab/gitlab-rate-limit-display.tsx index a85c566b0d6..66e18cc4fca 100644 --- a/src/renderer/src/components/gitlab/gitlab-rate-limit-display.tsx +++ b/src/renderer/src/components/gitlab/gitlab-rate-limit-display.tsx @@ -5,7 +5,10 @@ import { cn } from '@/lib/utils' import { installWindowVisibilityInterval } from '@/lib/window-visibility-interval' import { useAppStore } from '@/store' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' -import type { GetGitLabRateLimitResult, GitLabRateLimitSnapshot } from '../../../../shared/types' +import type { + GetGitLabRateLimitResult, + GitLabRateLimitSnapshot +} from '../../../../shared/gitlab-types' import { getProviderRateLimitScope } from '@/components/settings/provider-account-scope' import { ProviderHostScopeControl } from '@/components/settings/ProviderHostScopeControl' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/jira-issue-sorter.ts b/src/renderer/src/components/jira-issue-sorter.ts index 875aaff0ef0..7fe071dc61e 100644 --- a/src/renderer/src/components/jira-issue-sorter.ts +++ b/src/renderer/src/components/jira-issue-sorter.ts @@ -1,4 +1,4 @@ -import type { JiraIssue, JiraPriority } from '../../../shared/types' +import type { JiraIssue, JiraPriority } from '../../../shared/jira-types' import { compareNumericLocaleText } from '@/lib/locale-text-collators' export type JiraIssueSortColumn = 'key' | 'title' | 'status' | 'priority' | 'assignee' | 'updated' diff --git a/src/renderer/src/components/jira-project-picker-filter.test.ts b/src/renderer/src/components/jira-project-picker-filter.test.ts index c270f361e4e..2c41742c5fc 100644 --- a/src/renderer/src/components/jira-project-picker-filter.test.ts +++ b/src/renderer/src/components/jira-project-picker-filter.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { JiraProject } from '../../../shared/types' +import type { JiraProject } from '../../../shared/jira-types' import { JIRA_PROJECT_PICKER_QUERY_MAX_BYTES, filterJiraProjectPickerProjects, diff --git a/src/renderer/src/components/jira-project-picker-filter.ts b/src/renderer/src/components/jira-project-picker-filter.ts index 0a5ee32176a..0e8d060bf50 100644 --- a/src/renderer/src/components/jira-project-picker-filter.ts +++ b/src/renderer/src/components/jira-project-picker-filter.ts @@ -1,5 +1,5 @@ import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' -import type { JiraProject } from '../../../shared/types' +import type { JiraProject } from '../../../shared/jira-types' export const JIRA_PROJECT_PICKER_QUERY_MAX_BYTES = 2 * 1024 diff --git a/src/renderer/src/components/landing-preflight-dismissal.test.ts b/src/renderer/src/components/landing-preflight-dismissal.test.ts index 20b50442241..cfc316bc4b4 100644 --- a/src/renderer/src/components/landing-preflight-dismissal.test.ts +++ b/src/renderer/src/components/landing-preflight-dismissal.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { dismissPreflightIssue, githubProjectKeys, diff --git a/src/renderer/src/components/landing-preflight-dismissal.ts b/src/renderer/src/components/landing-preflight-dismissal.ts index 1fae17b0a3d..d688d5a0c4c 100644 --- a/src/renderer/src/components/landing-preflight-dismissal.ts +++ b/src/renderer/src/components/landing-preflight-dismissal.ts @@ -2,7 +2,7 @@ import { getProjectIdentityKey, isGitHubBackedRepo } from '../../../shared/project-host-setup-projection' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' // Why: GitHub-CLI setup nudges are dismissible, but the dismissal must lapse // when the user adds a NEW GitHub-backed project — that's the moment the CLI diff --git a/src/renderer/src/components/landing-preflight-issues.test.ts b/src/renderer/src/components/landing-preflight-issues.test.ts index 99c315088f0..75ba7a5e006 100644 --- a/src/renderer/src/components/landing-preflight-issues.test.ts +++ b/src/renderer/src/components/landing-preflight-issues.test.ts @@ -4,7 +4,7 @@ import { hasGitHubBackedProject, type LandingPreflightStatus } from './landing-preflight-issues' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' function repo(overrides: Partial & Pick): Repo { return { diff --git a/src/renderer/src/components/landing-preflight-issues.ts b/src/renderer/src/components/landing-preflight-issues.ts index 73324510a08..10e7ec81baf 100644 --- a/src/renderer/src/components/landing-preflight-issues.ts +++ b/src/renderer/src/components/landing-preflight-issues.ts @@ -1,6 +1,6 @@ import { translate } from '@/i18n/i18n' import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' export type PreflightIssue = { id: string diff --git a/src/renderer/src/components/landing-preflight-runtime-boundary.test.ts b/src/renderer/src/components/landing-preflight-runtime-boundary.test.ts index a52c516f161..f282ca5f15a 100644 --- a/src/renderer/src/components/landing-preflight-runtime-boundary.test.ts +++ b/src/renderer/src/components/landing-preflight-runtime-boundary.test.ts @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { PreflightStatus } from '../../../preload/api-types' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { useAppStore } from '../store' import { useLandingPreflightRuntime } from './landing-preflight-runtime' diff --git a/src/renderer/src/components/linear-api-key-dialog.tsx b/src/renderer/src/components/linear-api-key-dialog.tsx index 0f00205d26e..272814e901b 100644 --- a/src/renderer/src/components/linear-api-key-dialog.tsx +++ b/src/renderer/src/components/linear-api-key-dialog.tsx @@ -1,6 +1,6 @@ import { useId, useMemo, useState } from 'react' import { ExternalLink, LoaderCircle, Lock } from 'lucide-react' -import type { LinearWorkspace } from '../../../shared/types' +import type { LinearWorkspace } from '../../../shared/linear/workspace-types' import { buildLinearPersonalApiKeySettingsUrl, buildLinearWorkspaceApiSettingsUrl diff --git a/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx b/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx index 2352f25b876..65b08bbc168 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx +++ b/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' import { clearLinearIssueAttributeFacet, countLinearIssueAttributeFilters, diff --git a/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx b/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx index e914a40c064..a8fa09cbf12 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx +++ b/src/renderer/src/components/linear-issue-attribute-filter-dropdowns.tsx @@ -12,7 +12,7 @@ import { emptyLinearIssueAttributeFilter, type LinearIssueAttributeFilter } from '../../../shared/linear/issue-attribute-filter' -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' import { LinearIssueFilterSectionDetail, LinearIssueFilterSectionMenu, diff --git a/src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts b/src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts index 1b7cdf164d2..91532889d37 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts +++ b/src/renderer/src/components/linear-issue-attribute-filter-primary-team.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { resolveLinearIssueAttributeFilterPrimaryTeam } from './linear-issue-attribute-filter-primary-team' -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' const teams: LinearTeam[] = [ { id: 't-b', name: 'Backend', key: 'BE' }, diff --git a/src/renderer/src/components/linear-issue-attribute-filter-primary-team.ts b/src/renderer/src/components/linear-issue-attribute-filter-primary-team.ts index 53fe674b04b..75264f69d49 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-primary-team.ts +++ b/src/renderer/src/components/linear-issue-attribute-filter-primary-team.ts @@ -1,4 +1,4 @@ -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' function compareTeamNameId(a: LinearTeam, b: LinearTeam): number { const nameCmp = a.name.localeCompare(b.name) diff --git a/src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts b/src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts index 167080f61b0..bd56b936d88 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts +++ b/src/renderer/src/components/linear-issue-attribute-filter-team-ids.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' import { resolveLinearIssueAttributeFilterTeamIds, unionLinearMetadataById diff --git a/src/renderer/src/components/linear-issue-attribute-filter-team-ids.ts b/src/renderer/src/components/linear-issue-attribute-filter-team-ids.ts index ba586332e4c..dea77e52595 100644 --- a/src/renderer/src/components/linear-issue-attribute-filter-team-ids.ts +++ b/src/renderer/src/components/linear-issue-attribute-filter-team-ids.ts @@ -1,4 +1,4 @@ -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' /** * Resolve which Linear team ids should feed attribute-filter metadata. diff --git a/src/renderer/src/components/linear-issue-text-draft-state.ts b/src/renderer/src/components/linear-issue-text-draft-state.ts index 44b5eb08fbb..867a5eede9f 100644 --- a/src/renderer/src/components/linear-issue-text-draft-state.ts +++ b/src/renderer/src/components/linear-issue-text-draft-state.ts @@ -1,4 +1,4 @@ -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' type LinearIssueTextDraftSource = Pick diff --git a/src/renderer/src/components/linear-issue-text-save-plan.ts b/src/renderer/src/components/linear-issue-text-save-plan.ts index 13553ea301d..43a28d360f9 100644 --- a/src/renderer/src/components/linear-issue-text-save-plan.ts +++ b/src/renderer/src/components/linear-issue-text-save-plan.ts @@ -1,4 +1,4 @@ -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' export type LinearIssueTextField = 'title' | 'description' diff --git a/src/renderer/src/components/linear-issue-workspace-text.test.ts b/src/renderer/src/components/linear-issue-workspace-text.test.ts index eecc60bddf5..42eb037916d 100644 --- a/src/renderer/src/components/linear-issue-workspace-text.test.ts +++ b/src/renderer/src/components/linear-issue-workspace-text.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import { buildLinearIssueBranchName } from './linear-issue-workspace-text' function makeIssue(branchName?: string): LinearIssue { diff --git a/src/renderer/src/components/linear-issue-workspace-text.ts b/src/renderer/src/components/linear-issue-workspace-text.ts index e047495d40b..57f7aae1945 100644 --- a/src/renderer/src/components/linear-issue-workspace-text.ts +++ b/src/renderer/src/components/linear-issue-workspace-text.ts @@ -1,5 +1,5 @@ import { getLinearIssueWorkspaceName } from '../../../shared/workspace-name' -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import { getUsableLinearBranchName } from '../../../shared/new-workspace/workspace-source' import { formatUiRelativeTimeFromDate } from '@/i18n/relative-time-format' diff --git a/src/renderer/src/components/linear-project-view-surfaces.tsx b/src/renderer/src/components/linear-project-view-surfaces.tsx index 58970a8215a..4717375b182 100644 --- a/src/renderer/src/components/linear-project-view-surfaces.tsx +++ b/src/renderer/src/components/linear-project-view-surfaces.tsx @@ -22,9 +22,9 @@ import { cn } from '@/lib/utils' import type { LinearCustomViewSummary, LinearProjectDetail, - LinearProjectSummary, - LinearWorkspaceError -} from '../../../shared/types' + LinearProjectSummary +} from '../../../shared/linear/project-types' +import type { LinearWorkspaceError } from '../../../shared/linear/workspace-types' import { translate } from '@/i18n/i18n' type LinearProjectLike = LinearProjectSummary & { diff --git a/src/renderer/src/components/linear-scope-selector.test.ts b/src/renderer/src/components/linear-scope-selector.test.ts index 65c752c6fe0..3e8d69f69c7 100644 --- a/src/renderer/src/components/linear-scope-selector.test.ts +++ b/src/renderer/src/components/linear-scope-selector.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { LinearTeam, LinearWorkspace } from '../../../shared/types' +import type { LinearTeam, LinearWorkspace } from '../../../shared/linear/workspace-types' import { LINEAR_SCOPE_TEAM_FILTER_QUERY_MAX_BYTES, filterLinearScopeTeams, diff --git a/src/renderer/src/components/linear-scope-selector.tsx b/src/renderer/src/components/linear-scope-selector.tsx index 26bfb33df2e..e6a1712fab1 100644 --- a/src/renderer/src/components/linear-scope-selector.tsx +++ b/src/renderer/src/components/linear-scope-selector.tsx @@ -1,6 +1,10 @@ import { useCallback, useMemo, useState } from 'react' import { Check, ChevronDown, KeyRound } from 'lucide-react' -import type { LinearTeam, LinearWorkspace, LinearWorkspaceSelection } from '../../../shared/types' +import type { + LinearTeam, + LinearWorkspace, + LinearWorkspaceSelection +} from '../../../shared/linear/workspace-types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' import { Command, CommandInput, CommandItem, CommandList } from '@/components/ui/command' import { Button } from '@/components/ui/button' diff --git a/src/renderer/src/components/native-chat/claude-model-switch-confirmation.ts b/src/renderer/src/components/native-chat/claude-model-switch-confirmation.ts index 826d70aea9f..f9664bacfa5 100644 --- a/src/renderer/src/components/native-chat/claude-model-switch-confirmation.ts +++ b/src/renderer/src/components/native-chat/claude-model-switch-confirmation.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { subscribeToPtyData } from '../terminal-pane/pty-data-sidecar-subscriptions' import { isRemoteRuntimePtyId, sendRuntimePtyInput } from '@/runtime/runtime-terminal-inspection' import { subscribeToRuntimeTerminalData } from '@/runtime/runtime-terminal-stream' diff --git a/src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts b/src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts index 5f84fc4b7ba..3dde6373391 100644 --- a/src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-attachment-upload.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' const mocks = vi.hoisted(() => ({ toastLoading: vi.fn(() => 'toast-1'), diff --git a/src/renderer/src/components/native-chat/native-chat-availability.ts b/src/renderer/src/components/native-chat/native-chat-availability.ts index 11b9e5af7ad..3cad7fc157f 100644 --- a/src/renderer/src/components/native-chat/native-chat-availability.ts +++ b/src/renderer/src/components/native-chat/native-chat-availability.ts @@ -1,4 +1,5 @@ -import type { Tab, TuiAgent } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { AgentType } from '../../../../shared/agent-status-types' import { isNativeChatSupportedAgent, diff --git a/src/renderer/src/components/native-chat/native-chat-file-link.test.ts b/src/renderer/src/components/native-chat/native-chat-file-link.test.ts index 1022d8e8441..17dae96d98d 100644 --- a/src/renderer/src/components/native-chat/native-chat-file-link.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-file-link.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { AppState } from '@/store/types' import { resolveNativeChatFileLink, diff --git a/src/renderer/src/components/native-chat/native-chat-file-link.ts b/src/renderer/src/components/native-chat/native-chat-file-link.ts index eee08ceae2b..44c1e83b6ab 100644 --- a/src/renderer/src/components/native-chat/native-chat-file-link.ts +++ b/src/renderer/src/components/native-chat/native-chat-file-link.ts @@ -1,5 +1,5 @@ import { routeNativeChatHref } from '../../../../shared/native-chat-href-routing' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { parseExplicitFileLinkTarget, resolveExplicitFileLinkTarget diff --git a/src/renderer/src/components/native-chat/native-chat-launch-session-options.ts b/src/renderer/src/components/native-chat/native-chat-launch-session-options.ts index 2257bb77120..2271d4bd1d8 100644 --- a/src/renderer/src/components/native-chat/native-chat-launch-session-options.ts +++ b/src/renderer/src/components/native-chat/native-chat-launch-session-options.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SessionOptionValue } from '../../../../shared/native-chat-session-options' import { decideInitialAgentTabViewMode, diff --git a/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts b/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts index 1262f010ca5..2dfc25e77f8 100644 --- a/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts +++ b/src/renderer/src/components/native-chat/native-chat-leaf-routing.ts @@ -1,8 +1,8 @@ import type { TerminalLayoutSnapshot, - TerminalPaneLayoutNode, - TuiAgent -} from '../../../../shared/types' + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' function layoutNodeContainsLeaf(node: TerminalPaneLayoutNode | null, leafId: string): boolean { if (!node) { diff --git a/src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts b/src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts index 1193450e3cb..42f9605fdea 100644 --- a/src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { resolveNativeChatSession } from './native-chat-pane-resolution' function entry( diff --git a/src/renderer/src/components/native-chat/native-chat-pane-resolution.ts b/src/renderer/src/components/native-chat/native-chat-pane-resolution.ts index 181895a4878..a363b977ff1 100644 --- a/src/renderer/src/components/native-chat/native-chat-pane-resolution.ts +++ b/src/renderer/src/components/native-chat/native-chat-pane-resolution.ts @@ -1,5 +1,5 @@ import type { AgentStatusEntry, AgentType } from '../../../../shared/agent-status-types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isNativeChatSupportedAgent } from './native-chat-availability' /** Inputs that resolve the active pane to the agent/session/pty triple the diff --git a/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts b/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts index 3f3b3cf8e7b..6841d9a0685 100644 --- a/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts +++ b/src/renderer/src/components/native-chat/native-chat-runtime-owner.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { selectNativeChatRuntimeEnvironmentId, type NativeChatRuntimeOwnerState diff --git a/src/renderer/src/components/native-chat/native-chat-view-types.ts b/src/renderer/src/components/native-chat/native-chat-view-types.ts index ca374bab11c..de095f9b232 100644 --- a/src/renderer/src/components/native-chat/native-chat-view-types.ts +++ b/src/renderer/src/components/native-chat/native-chat-view-types.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { NativeChatSession } from '../../../../shared/native-chat-types' import type { NativeChatContextMenuActions } from './use-native-chat-context-menu' diff --git a/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts b/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts index 3096077e820..90c84470cee 100644 --- a/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts +++ b/src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react' import { useAppStore } from '../../store' import type { AgentType } from '../../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' import { canToggleNativeChat } from './native-chat-availability' import { isNativeChatTranscriptLocalReadable } from '@/lib/native-chat-transcript-readability' diff --git a/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx b/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx index 062101e7545..b11b8b20ac1 100644 --- a/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx +++ b/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.jira-accessibility.test.tsx @@ -3,7 +3,7 @@ import React, { act } from 'react' import { cleanup, createEvent, fireEvent, render, screen } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { JiraIssue } from '../../../../shared/types' +import type { JiraIssue } from '../../../../shared/jira-types' import SmartWorkspaceNameField, { type SmartWorkspaceNameSelection } from './SmartWorkspaceNameField' diff --git a/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.tsx b/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.tsx index 66dd756e18f..58e771477dd 100644 --- a/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.tsx +++ b/src/renderer/src/components/new-workspace/SmartWorkspaceNameField.tsx @@ -74,14 +74,11 @@ import { } from '../../../../shared/new-workspace/smart-workspace-linear-intent' import { isSmartWorkspaceSourceQueryWithinLimit } from '../../../../shared/new-workspace/smart-workspace-source-query' import { filterAvailableTaskProviders } from '../../../../shared/task-providers' -import type { - BaseRefSearchResult, - GitHubWorkItem, - GitLabWorkItem, - JiraIssue, - JiraSite, - LinearIssue -} from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../../shared/gitlab-types' +import type { JiraIssue, JiraSite } from '../../../../shared/jira-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { BaseRefSearchResult } from '../../../../shared/repo-types' import { resolveSmartWorkspaceCommandValue } from './smart-workspace-command-value' import { isComposerFieldToFieldFocus } from './smart-workspace-source-popover-focus' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/new-workspace/run-target-options.ts b/src/renderer/src/components/new-workspace/run-target-options.ts index a07a094cf80..b95d128831d 100644 --- a/src/renderer/src/components/new-workspace/run-target-options.ts +++ b/src/renderer/src/components/new-workspace/run-target-options.ts @@ -1,4 +1,4 @@ -import type { OrcaHooks } from '../../../../shared/types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' import type { NeedsSetupProjectHostOption, ProjectHostSetupOption, diff --git a/src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx b/src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx index e29f5bd7acf..1da6ffaad00 100644 --- a/src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx +++ b/src/renderer/src/components/new-workspace/use-jira-source-connection.test.tsx @@ -4,7 +4,7 @@ import { act, renderHook } from '@testing-library/react' import type * as React from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { TaskSourceContext } from '../../../../shared/task-source-context' -import type { JiraConnectionStatus } from '../../../../shared/types' +import type { JiraConnectionStatus } from '../../../../shared/jira-types' import { getJiraSourceConnectionRevisionKey, useJiraSourceConnection diff --git a/src/renderer/src/components/new-workspace/use-jira-source-connection.ts b/src/renderer/src/components/new-workspace/use-jira-source-connection.ts index 49884020d1b..703e87cf9e7 100644 --- a/src/renderer/src/components/new-workspace/use-jira-source-connection.ts +++ b/src/renderer/src/components/new-workspace/use-jira-source-connection.ts @@ -5,7 +5,7 @@ import { getTaskSourceRuntimeSettings, type TaskSourceContext } from '../../../../shared/task-source-context' -import type { JiraConnectionStatus } from '../../../../shared/types' +import type { JiraConnectionStatus } from '../../../../shared/jira-types' import { getProviderRuntimeContextKey } from '@/lib/provider-runtime-context' export type JiraSourceConnection = { diff --git a/src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx b/src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx index 1f6df54bfb2..fe4adf51e85 100644 --- a/src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx +++ b/src/renderer/src/components/new-workspace/use-jira-url-source.test.tsx @@ -2,7 +2,7 @@ import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { JiraConnectionStatus, JiraIssue, JiraSite } from '../../../../shared/types' +import type { JiraConnectionStatus, JiraIssue, JiraSite } from '../../../../shared/jira-types' import type { TaskSourceContext } from '../../../../shared/task-source-context' import { useJiraUrlSource } from './use-jira-url-source' diff --git a/src/renderer/src/components/new-workspace/use-jira-url-source.ts b/src/renderer/src/components/new-workspace/use-jira-url-source.ts index 0441e37edc9..f3a922a7171 100644 --- a/src/renderer/src/components/new-workspace/use-jira-url-source.ts +++ b/src/renderer/src/components/new-workspace/use-jira-url-source.ts @@ -15,7 +15,7 @@ import { } from '../../../../shared/task-source-context' import { parseExecutionHostId } from '../../../../shared/execution-host' import { WORKTREE_LINKED_WORK_ITEM_CONTEXT_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' -import type { JiraIssue, JiraSite } from '../../../../shared/types' +import type { JiraIssue, JiraSite } from '../../../../shared/jira-types' import { canReuseLoadedJiraStatus, type JiraSourceConnection } from './use-jira-source-connection' const LOOKUP_DEBOUNCE_MS = 200 diff --git a/src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts b/src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts index 44fddd40d08..aa82e46ea46 100644 --- a/src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts +++ b/src/renderer/src/components/new-workspace/use-recent-project-ids.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { orderProjectIdsByRecency } from './use-recent-project-ids' function worktree(partial: Partial): Worktree { diff --git a/src/renderer/src/components/new-workspace/use-recent-project-ids.ts b/src/renderer/src/components/new-workspace/use-recent-project-ids.ts index 3c68485ac52..e4f4c26a017 100644 --- a/src/renderer/src/components/new-workspace/use-recent-project-ids.ts +++ b/src/renderer/src/components/new-workspace/use-recent-project-ids.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAllWorktrees } from '@/store/selectors' import { NEW_WORKSPACE_PROJECT_GROUP_OPTION_PREFIX } from '@/lib/new-workspace-project-options' diff --git a/src/renderer/src/components/notification-sound-options.ts b/src/renderer/src/components/notification-sound-options.ts index 1f0ca95597b..b1485939d9c 100644 --- a/src/renderer/src/components/notification-sound-options.ts +++ b/src/renderer/src/components/notification-sound-options.ts @@ -13,7 +13,7 @@ import { type LucideIcon } from 'lucide-react' import { basename } from '@/lib/path' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { createLocalizedCatalog } from '@/i18n/localized-catalog' diff --git a/src/renderer/src/components/notifications/mac-notification-permission-card.tsx b/src/renderer/src/components/notifications/mac-notification-permission-card.tsx index 2bc94664d1c..fca7aab97d5 100644 --- a/src/renderer/src/components/notifications/mac-notification-permission-card.tsx +++ b/src/renderer/src/components/notifications/mac-notification-permission-card.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { BellRing, Check, Settings, TriangleAlert } from 'lucide-react' -import type { NotificationDeliveryProbeResult } from '../../../../shared/types' +import type { NotificationDeliveryProbeResult } from '../../../../shared/notification-settings-types' import { Button } from '@/components/ui/button' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/onboarding/AgentStep.tsx b/src/renderer/src/components/onboarding/AgentStep.tsx index d5e18e8070f..234d854d27e 100644 --- a/src/renderer/src/components/onboarding/AgentStep.tsx +++ b/src/renderer/src/components/onboarding/AgentStep.tsx @@ -5,7 +5,7 @@ import { cn } from '@/lib/utils' import { Checkbox } from '@/components/ui/checkbox' import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { translate } from '@/i18n/i18n' const AGENT_GRID_MAX_ROWS = 4 diff --git a/src/renderer/src/components/onboarding/GhosttyDiscoveryRow.tsx b/src/renderer/src/components/onboarding/GhosttyDiscoveryRow.tsx index a9e44f218b6..5c5d8641f53 100644 --- a/src/renderer/src/components/onboarding/GhosttyDiscoveryRow.tsx +++ b/src/renderer/src/components/onboarding/GhosttyDiscoveryRow.tsx @@ -1,5 +1,5 @@ import { Check } from 'lucide-react' -import type { GhosttyImportPreview } from '../../../../shared/types' +import type { GhosttyImportPreview } from '../../../../shared/global-settings-types' import ghosttyIcon from '../../../../../resources/ghostty.svg' import { translate } from '@/i18n/i18n' import type { DiscoveryState } from './ThemeStep' diff --git a/src/renderer/src/components/onboarding/NotificationStep.test.tsx b/src/renderer/src/components/onboarding/NotificationStep.test.tsx index 04bd27f9833..854dcbe763c 100644 --- a/src/renderer/src/components/onboarding/NotificationStep.test.tsx +++ b/src/renderer/src/components/onboarding/NotificationStep.test.tsx @@ -1,6 +1,6 @@ import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { NotificationStep } from './NotificationStep' import { resolveMacNotificationPermissionState } from '../notifications/mac-notification-permission-card' diff --git a/src/renderer/src/components/onboarding/NotificationStep.tsx b/src/renderer/src/components/onboarding/NotificationStep.tsx index 711677552dd..2f37329ace1 100644 --- a/src/renderer/src/components/onboarding/NotificationStep.tsx +++ b/src/renderer/src/components/onboarding/NotificationStep.tsx @@ -1,7 +1,7 @@ import { useCallback, useRef, useState } from 'react' import { BellRing, FileAudio, Upload } from 'lucide-react' import { toast } from 'sonner' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '@/components/ui/button' import { Select, diff --git a/src/renderer/src/components/onboarding/OnboardingFlow.tsx b/src/renderer/src/components/onboarding/OnboardingFlow.tsx index f32b401fff2..9e82e42547c 100644 --- a/src/renderer/src/components/onboarding/OnboardingFlow.tsx +++ b/src/renderer/src/components/onboarding/OnboardingFlow.tsx @@ -3,7 +3,7 @@ import { cn } from '@/lib/utils' import { isEditableTarget } from '@/lib/editable-target' import { getScreenSubmitModifierLabel, isScreenSubmitShortcut } from '@/lib/screen-submit-shortcut' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' -import type { OnboardingState } from '../../../../shared/types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' import { AgentStep } from './AgentStep' import { ThemeStep } from './ThemeStep' import { NotificationStep } from './NotificationStep' diff --git a/src/renderer/src/components/onboarding/ThemeStep.tsx b/src/renderer/src/components/onboarding/ThemeStep.tsx index afb0bded49a..bb797a12a6e 100644 --- a/src/renderer/src/components/onboarding/ThemeStep.tsx +++ b/src/renderer/src/components/onboarding/ThemeStep.tsx @@ -5,11 +5,8 @@ import { cn } from '@/lib/utils' import { track } from '@/lib/telemetry' import { useMountedRef } from '@/hooks/useMountedRef' import { GhosttyDiscoveryRow } from './GhosttyDiscoveryRow' -import type { - DiscoveryStatusEmitted, - GhosttyImportPreview, - GlobalSettings -} from '../../../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../../../shared/global-settings-types' +import type { DiscoveryStatusEmitted } from '../../../../shared/onboarding-state-types' import { translate } from '@/i18n/i18n' import { ChromePreview } from './theme-chrome-preview' diff --git a/src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx b/src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx index f7047d37bbb..aee8ce2aa2d 100644 --- a/src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx +++ b/src/renderer/src/components/onboarding/WindowsTerminalStep.test.tsx @@ -1,7 +1,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it, vi } from 'vitest' import { WINDOWS_GIT_BASH_SHELL } from '../../../../shared/windows-terminal-shell' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { WindowsTerminalStep } from './WindowsTerminalStep' function createSettings(overrides: Partial = {}): GlobalSettings { diff --git a/src/renderer/src/components/onboarding/WindowsTerminalStep.tsx b/src/renderer/src/components/onboarding/WindowsTerminalStep.tsx index a821dd22bb5..257e9d47b9c 100644 --- a/src/renderer/src/components/onboarding/WindowsTerminalStep.tsx +++ b/src/renderer/src/components/onboarding/WindowsTerminalStep.tsx @@ -2,7 +2,7 @@ import { Check } from 'lucide-react' import { useCallback, useState } from 'react' import type { BuiltInWindowsTerminalShell } from '../../../../shared/windows-terminal-shell' import { WINDOWS_GIT_BASH_SHELL } from '../../../../shared/windows-terminal-shell' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { cn } from '@/lib/utils' import { useWindowsTerminalCapabilities } from '@/lib/windows-terminal-capabilities' import { SettingsSegmentedControl } from '../settings/SettingsFormControls' diff --git a/src/renderer/src/components/onboarding/agent-picked-payload.ts b/src/renderer/src/components/onboarding/agent-picked-payload.ts index 90d146effeb..2c2cabc9441 100644 --- a/src/renderer/src/components/onboarding/agent-picked-payload.ts +++ b/src/renderer/src/components/onboarding/agent-picked-payload.ts @@ -7,7 +7,11 @@ import { tuiAgentToAgentKind } from '@/lib/telemetry' import type { EventProps } from '../../../../shared/telemetry-events' -import type { PathSource, ShellHydrationFailureReason, TuiAgent } from '../../../../shared/types' +import type { + PathSource, + ShellHydrationFailureReason +} from '../../../../shared/shell-path-hydration-types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type AgentPickedSnapshot = { agent: TuiAgent diff --git a/src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts b/src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts index 33dff5e8409..8e11d1d9eec 100644 --- a/src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts +++ b/src/renderer/src/components/onboarding/onboarding-settings-hydration.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { resolveOnboardingSettingsHydration } from './onboarding-settings-hydration' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' const settings = { theme: 'light', diff --git a/src/renderer/src/components/onboarding/onboarding-settings-hydration.ts b/src/renderer/src/components/onboarding/onboarding-settings-hydration.ts index 8c0a9e3536d..fc4241d0d1b 100644 --- a/src/renderer/src/components/onboarding/onboarding-settings-hydration.ts +++ b/src/renderer/src/components/onboarding/onboarding-settings-hydration.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type OnboardingSettingsHydrationUpdate = { settingsHydrated: boolean diff --git a/src/renderer/src/components/onboarding/should-show-onboarding.ts b/src/renderer/src/components/onboarding/should-show-onboarding.ts index c50352a5653..d96f2f8e6f0 100644 --- a/src/renderer/src/components/onboarding/should-show-onboarding.ts +++ b/src/renderer/src/components/onboarding/should-show-onboarding.ts @@ -1,4 +1,4 @@ -import type { OnboardingState } from '../../../../shared/types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' // Why: split out so App.tsx can gate the lazy without an // eager static import path that pulls the whole flow into the main chunk. diff --git a/src/renderer/src/components/onboarding/show-onboarding-event.ts b/src/renderer/src/components/onboarding/show-onboarding-event.ts index 716c3b4d22f..0e6f139b676 100644 --- a/src/renderer/src/components/onboarding/show-onboarding-event.ts +++ b/src/renderer/src/components/onboarding/show-onboarding-event.ts @@ -1,4 +1,4 @@ -import type { OnboardingState } from '../../../../shared/types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' const ONBOARDING_REOPENED_EVENT = 'orca:onboarding-reopened' diff --git a/src/renderer/src/components/onboarding/theme-chrome-preview.tsx b/src/renderer/src/components/onboarding/theme-chrome-preview.tsx index 68ef3120ef8..49fdb60a680 100644 --- a/src/renderer/src/components/onboarding/theme-chrome-preview.tsx +++ b/src/renderer/src/components/onboarding/theme-chrome-preview.tsx @@ -1,5 +1,5 @@ import { cn } from '@/lib/utils' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export function ChromePreview({ variant }: { variant: GlobalSettings['theme'] }) { if (variant === 'system') { diff --git a/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts b/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts index 1dfbc0c708a..9a35faac37a 100644 --- a/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts +++ b/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.test.ts @@ -4,7 +4,7 @@ import { createElement, useEffect, act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultOnboardingState } from '../../../../shared/constants' -import type { OnboardingState } from '../../../../shared/types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' const trackMock = vi.hoisted(() => vi.fn()) diff --git a/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.ts b/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.ts index 12a8c6e22a2..93b4b62c153 100644 --- a/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.ts +++ b/src/renderer/src/components/onboarding/use-onboarding-flow-persistence.ts @@ -3,7 +3,9 @@ import { track } from '@/lib/telemetry' import { useAppStore } from '@/store' import { ONBOARDING_FINAL_STEP, ONBOARDING_FLOW_VERSION } from '../../../../shared/constants' import type { EventProps } from '../../../../shared/telemetry-events' -import type { GlobalSettings, OnboardingState, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { applyAgentPermissionMode } from '../../../../shared/tui-agent-permissions' import type { StepId, StepNumber } from './use-onboarding-flow-types' diff --git a/src/renderer/src/components/onboarding/use-onboarding-flow.ts b/src/renderer/src/components/onboarding/use-onboarding-flow.ts index b5376b363f1..33f7e94d1e2 100644 --- a/src/renderer/src/components/onboarding/use-onboarding-flow.ts +++ b/src/renderer/src/components/onboarding/use-onboarding-flow.ts @@ -8,7 +8,9 @@ import { track } from '@/lib/telemetry' import { buildAgentPickedPayload } from './agent-picked-payload' import { ONBOARDING_FINAL_STEP, ONBOARDING_FLOW_VERSION } from '../../../../shared/constants' import type { EventProps } from '../../../../shared/telemetry-events' -import type { GlobalSettings, OnboardingState, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OnboardingState } from '../../../../shared/onboarding-state-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { STEPS, type StepNumber } from './use-onboarding-flow-types' import { persistStep, useCloseWith, usePersistCurrentStep } from './use-onboarding-flow-persistence' import { resolveOnboardingSettingsHydration } from './onboarding-settings-hydration' diff --git a/src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.ts b/src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.ts index 341f8b73fe6..922f7b866a0 100644 --- a/src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.ts +++ b/src/renderer/src/components/onboarding/windows-terminal-onboarding-telemetry.ts @@ -1,6 +1,6 @@ import { WINDOWS_GIT_BASH_SHELL } from '../../../../shared/windows-terminal-shell' import type { EventProps } from '../../../../shared/telemetry-events' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' type WindowsTerminalSnapshot = EventProps<'onboarding_windows_terminal_snapshot'> diff --git a/src/renderer/src/components/pet/PetOverlay.tsx b/src/renderer/src/components/pet/PetOverlay.tsx index 052ff64750a..5f16da6986d 100644 --- a/src/renderer/src/components/pet/PetOverlay.tsx +++ b/src/renderer/src/components/pet/PetOverlay.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react' import { usePrefersReducedMotion } from '@/hooks/usePrefersReducedMotion' import { usePetUrl } from './usePetUrl' import type { DetectedSpriteCacheEntry } from './pet-blob-cache' -import type { CustomPet } from '../../../../shared/types' +import type { CustomPet } from '../../../../shared/pet-types' import { useAppStore } from '../../store' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status-types' import { diff --git a/src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx b/src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx index adb257ce4b5..360bfdea7c1 100644 --- a/src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx +++ b/src/renderer/src/components/pet/pet-overlay-hit-area.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import type { DetectedSpriteCacheEntry } from './pet-blob-cache' -import type { CustomPet } from '../../../../shared/types' +import type { CustomPet } from '../../../../shared/pet-types' type PetUrlState = | { url: string; ready: boolean; sprite: null; detected: null } diff --git a/src/renderer/src/components/pet/usePetUrl.ts b/src/renderer/src/components/pet/usePetUrl.ts index efc9fc05568..9809b228532 100644 --- a/src/renderer/src/components/pet/usePetUrl.ts +++ b/src/renderer/src/components/pet/usePetUrl.ts @@ -1,5 +1,5 @@ import { useEffect, useLayoutEffect, useRef, useState } from 'react' -import type { CustomPet } from '../../../../shared/types' +import type { CustomPet } from '../../../../shared/pet-types' import { applyCodexSpriteTimingDefaults } from '../../../../shared/codex-pet-sprite-defaults' import { useAppStore } from '../../store' import { BUNDLED_PET, findBundledPet, isBundledPetId } from './pet-models' diff --git a/src/renderer/src/components/pr-check-counts.test.ts b/src/renderer/src/components/pr-check-counts.test.ts index 8f2fa37c2ef..782597e3231 100644 --- a/src/renderer/src/components/pr-check-counts.test.ts +++ b/src/renderer/src/components/pr-check-counts.test.ts @@ -4,7 +4,7 @@ import { getProviderChecksLabel, summarizeProviderChecks } from '../../../shared/provider-check-summary' -import type { PRCheckDetail } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' function check(conclusion: PRCheckDetail['conclusion'], name = String(conclusion)): PRCheckDetail { return { name, status: 'completed', conclusion, url: null } diff --git a/src/renderer/src/components/pr-check-counts.ts b/src/renderer/src/components/pr-check-counts.ts index e5b6d65e482..341c96141c1 100644 --- a/src/renderer/src/components/pr-check-counts.ts +++ b/src/renderer/src/components/pr-check-counts.ts @@ -1,6 +1,6 @@ import { translate } from '../i18n/i18n' import { summarizeProviderChecks } from '../../../shared/provider-check-summary' -import type { PRCheckDetail } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' export type PRCheckCounts = { passing: number diff --git a/src/renderer/src/components/pr-checks-fix-prompt.test.ts b/src/renderer/src/components/pr-checks-fix-prompt.test.ts index b3f2eadf600..10623b46df9 100644 --- a/src/renderer/src/components/pr-checks-fix-prompt.test.ts +++ b/src/renderer/src/components/pr-checks-fix-prompt.test.ts @@ -6,7 +6,7 @@ import { getCheckDetailsPromptKey, truncateLogTailForPrompt } from './pr-checks-fix-prompt' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/github/check-types' const failingCheck: PRCheckDetail = { name: 'unit', diff --git a/src/renderer/src/components/pr-comments-resolution-prompt.test.ts b/src/renderer/src/components/pr-comments-resolution-prompt.test.ts index 902481e9ba3..9ff4fad596c 100644 --- a/src/renderer/src/components/pr-comments-resolution-prompt.test.ts +++ b/src/renderer/src/components/pr-comments-resolution-prompt.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' import { groupPRComments } from '../../../shared/pr-comment-groups' import { buildPRCommentsResolutionPrompt, diff --git a/src/renderer/src/components/pr-comments-resolution-prompt.ts b/src/renderer/src/components/pr-comments-resolution-prompt.ts index d86a4e8d653..8f83fabc3d3 100644 --- a/src/renderer/src/components/pr-comments-resolution-prompt.ts +++ b/src/renderer/src/components/pr-comments-resolution-prompt.ts @@ -1,4 +1,4 @@ -import type { PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' import type { PRCommentGroup } from '../../../shared/pr-comment-groups' export type PRCommentsResolutionReviewKind = 'PR' | 'MR' diff --git a/src/renderer/src/components/provider-check-classification-parity.test.ts b/src/renderer/src/components/provider-check-classification-parity.test.ts index 688f61a978e..bedb0663739 100644 --- a/src/renderer/src/components/provider-check-classification-parity.test.ts +++ b/src/renderer/src/components/provider-check-classification-parity.test.ts @@ -9,7 +9,8 @@ import { summarizeProviderChecks } from '../../../shared/provider-check-summary' import type { GitLabPipelineJob } from '../../../shared/gitlab-types' -import type { PRCheckDetail, ProviderCheckSummary } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' +import type { ProviderCheckSummary } from '../../../shared/github/pull-request-types' function completed(conclusion: string): PRCheckDetail { return { diff --git a/src/renderer/src/components/quick-open-file-list.react.test.tsx b/src/renderer/src/components/quick-open-file-list.react.test.tsx index fc00fac9891..fa2a288d7ac 100644 --- a/src/renderer/src/components/quick-open-file-list.react.test.tsx +++ b/src/renderer/src/components/quick-open-file-list.react.test.tsx @@ -3,7 +3,8 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/components/quick-open-file-list.test.ts b/src/renderer/src/components/quick-open-file-list.test.ts index fa6e695e998..be5370b4d8c 100644 --- a/src/renderer/src/components/quick-open-file-list.test.ts +++ b/src/renderer/src/components/quick-open-file-list.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { buildExcludePathPrefixes } from '../../../shared/quick-open-filter' import { getRuntimeFileListTarget, diff --git a/src/renderer/src/components/quick-open-file-list.ts b/src/renderer/src/components/quick-open-file-list.ts index bb539749353..80a8dbac6d9 100644 --- a/src/renderer/src/components/quick-open-file-list.ts +++ b/src/renderer/src/components/quick-open-file-list.ts @@ -1,7 +1,7 @@ /* oxlint-disable react-doctor/no-adjust-state-on-prop-change -- Why: quick-open file lists are fetched over local or SSH runtime IPC, so loading/error/results track the request lifecycle. */ import { useEffect, useMemo, useRef, useState } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { isWindowsAbsolutePathLike } from '../../../shared/cross-platform-path' import { createBrowserUuid } from '@/lib/browser-uuid' import { cancelRuntimeFileList, listRuntimeFiles } from '@/runtime/runtime-file-client' diff --git a/src/renderer/src/components/repo/NestedRepoChecklist.test.tsx b/src/renderer/src/components/repo/NestedRepoChecklist.test.tsx index ab8f3dda663..05864c4a050 100644 --- a/src/renderer/src/components/repo/NestedRepoChecklist.test.tsx +++ b/src/renderer/src/components/repo/NestedRepoChecklist.test.tsx @@ -1,7 +1,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it, vi } from 'vitest' import { NestedRepoChecklist } from './NestedRepoChecklist' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' const scan: NestedRepoScanResult = { selectedPath: '/workspace/platform', diff --git a/src/renderer/src/components/repo/NestedRepoChecklist.tsx b/src/renderer/src/components/repo/NestedRepoChecklist.tsx index 95ea1a41897..77bb3378900 100644 --- a/src/renderer/src/components/repo/NestedRepoChecklist.tsx +++ b/src/renderer/src/components/repo/NestedRepoChecklist.tsx @@ -1,6 +1,6 @@ import { useCallback, useMemo, type Dispatch, type SetStateAction } from 'react' import { GitBranch } from 'lucide-react' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import { cn } from '@/lib/utils' import { getRepoDisplayLabelKey, getRepoDisplayLabelsByPath } from '@/lib/repo-display-labels' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts b/src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts index 44506bcd5e6..f3279d16939 100644 --- a/src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts +++ b/src/renderer/src/components/repo/NestedRepoScanLimitNotice.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import { nestedRepoScanLimitText } from './NestedRepoScanLimitNotice' describe('nestedRepoScanLimitText', () => { diff --git a/src/renderer/src/components/repo/NestedRepoScanLimitNotice.tsx b/src/renderer/src/components/repo/NestedRepoScanLimitNotice.tsx index 59066a6675b..38fa6524a18 100644 --- a/src/renderer/src/components/repo/NestedRepoScanLimitNotice.tsx +++ b/src/renderer/src/components/repo/NestedRepoScanLimitNotice.tsx @@ -1,6 +1,6 @@ import { CircleHelp } from 'lucide-react' import { useState } from 'react' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/repo/RepoCombobox.tsx b/src/renderer/src/components/repo/RepoCombobox.tsx index 868c7be2d22..f47833eeca9 100644 --- a/src/renderer/src/components/repo/RepoCombobox.tsx +++ b/src/renderer/src/components/repo/RepoCombobox.tsx @@ -14,7 +14,7 @@ import { isGitRepoKind } from '../../../../shared/repo-kind' import { searchRepos } from '@/lib/repo-search' import { cn } from '@/lib/utils' import { useMountedRef } from '@/hooks/useMountedRef' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import RepoBadgeLabel from './RepoBadgeLabel' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/repo/repo-fork-indicator.tsx b/src/renderer/src/components/repo/repo-fork-indicator.tsx index 896a5217730..b1dcf93fa15 100644 --- a/src/renderer/src/components/repo/repo-fork-indicator.tsx +++ b/src/renderer/src/components/repo/repo-fork-indicator.tsx @@ -1,6 +1,6 @@ import React from 'react' import { GitFork } from 'lucide-react' -import type { GitHubRepositoryIdentity } from '../../../../shared/types' +import type { GitHubRepositoryIdentity } from '../../../../shared/github/pull-request-types' import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip' import { cn } from '@/lib/utils' diff --git a/src/renderer/src/components/right-sidebar/ChecksPanel.tsx b/src/renderer/src/components/right-sidebar/ChecksPanel.tsx index 2d63be3bacf..cfa9030d5f0 100644 --- a/src/renderer/src/components/right-sidebar/ChecksPanel.tsx +++ b/src/renderer/src/components/right-sidebar/ChecksPanel.tsx @@ -58,17 +58,15 @@ import { type PRCommentsListSelectionClearRequest } from './pr-comments-list-selection' import { ENTRY_REFRESH_GRACE_MS, shouldEntryRefresh } from './checks-entry-refresh' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { GitHubReactionContent, PRComment } from '../../../../shared/github/comment-types' +import type { PRRefreshErrorType } from '../../../../shared/github/pull-request-refresh-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import type { GitLabDiscussionResolveResult, GitLabProjectRef, - GitLabWorkItemDetails, - PRInfo, - PRCheckDetail, - PRCheckRunDetails, - PRComment, - GitHubReactionContent, - PRRefreshErrorType -} from '../../../../shared/types' + GitLabWorkItemDetails +} from '../../../../shared/gitlab-types' import { getConnectionId } from '@/lib/connection-context' import { buildResolvePullRequestConflictsPrompt, diff --git a/src/renderer/src/components/right-sidebar/FileExplorer.tsx b/src/renderer/src/components/right-sidebar/FileExplorer.tsx index e8191d1b3e7..d52457324c0 100644 --- a/src/renderer/src/components/right-sidebar/FileExplorer.tsx +++ b/src/renderer/src/components/right-sidebar/FileExplorer.tsx @@ -54,7 +54,7 @@ import { useFileExplorerSelection } from './useFileExplorerSelection' import { useFileExplorerVisibleRowProjection } from './useFileExplorerVisibleRowProjection' import { translate } from '@/i18n/i18n' import { CLOSE_ALL_CONTEXT_MENUS_EVENT } from '@/components/tab-bar/SortableTab' -import type { RightSidebarExplorerView } from '../../../../shared/types' +import type { RightSidebarExplorerView } from '../../../../shared/ui-chrome-types' import { getRuntimeEnvironmentIdForWorktree } from '@/lib/worktree-runtime-owner' import { createNewTerminalTab } from '@/components/terminal/terminal-tab-create' import { useWorkspaceFileBrowserActionPredicate } from '@/lib/file-preview' diff --git a/src/renderer/src/components/right-sidebar/FileExplorerQueryStrip.tsx b/src/renderer/src/components/right-sidebar/FileExplorerQueryStrip.tsx index 23b89e096a0..cfa1c1a30e1 100644 --- a/src/renderer/src/components/right-sidebar/FileExplorerQueryStrip.tsx +++ b/src/renderer/src/components/right-sidebar/FileExplorerQueryStrip.tsx @@ -1,6 +1,6 @@ import React from 'react' import { FileExplorerViewSwitch } from './FileExplorerViewSwitch' -import type { RightSidebarExplorerView } from '../../../../shared/types' +import type { RightSidebarExplorerView } from '../../../../shared/ui-chrome-types' type FileExplorerQueryStripProps = { view: RightSidebarExplorerView diff --git a/src/renderer/src/components/right-sidebar/FileExplorerRow.tsx b/src/renderer/src/components/right-sidebar/FileExplorerRow.tsx index a5e232cb29e..545dc284da8 100644 --- a/src/renderer/src/components/right-sidebar/FileExplorerRow.tsx +++ b/src/renderer/src/components/right-sidebar/FileExplorerRow.tsx @@ -43,7 +43,7 @@ import { WORKSPACE_FILE_PATH_MIME, WORKSPACE_FILE_PATHS_MIME } from '@/lib/workspace-file-drag' -import type { GitFileStatus } from '../../../../shared/types' +import type { GitFileStatus } from '../../../../shared/git-status-types' import { STATUS_LABELS } from './status-display' import { RENAME_HOTSPOT_ATTR } from './file-explorer-dir-toggle-timing' import type { TreeNode } from './file-explorer-types' diff --git a/src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.tsx b/src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.tsx index ec64942f1cf..f7e32b63c98 100644 --- a/src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.tsx +++ b/src/renderer/src/components/right-sidebar/FileExplorerViewSwitch.tsx @@ -1,7 +1,7 @@ import type React from 'react' import { translate } from '@/i18n/i18n' import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group' -import type { RightSidebarExplorerView } from '../../../../shared/types' +import type { RightSidebarExplorerView } from '../../../../shared/ui-chrome-types' type FileExplorerViewSwitchProps = { view: RightSidebarExplorerView diff --git a/src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.tsx b/src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.tsx index d72e7a5ca19..59327faddf5 100644 --- a/src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.tsx +++ b/src/renderer/src/components/right-sidebar/FileExplorerVirtualRows.tsx @@ -2,7 +2,7 @@ import React from 'react' import type { Virtualizer } from '@tanstack/react-virtual' import { dirname, normalizeRelativePath } from '@/lib/path' import { cn } from '@/lib/utils' -import type { GitFileStatus } from '../../../../shared/types' +import type { GitFileStatus } from '../../../../shared/git-status-types' import { FileExplorerRow, InlineInputRow, type InlineInput } from './FileExplorerRow' import { shouldShowIgnoredDecoration, STATUS_COLORS } from './status-display' import type { DirCache, TreeNode } from './file-explorer-types' diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx index 3cd868a5baf..4ee957c5001 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.test.tsx @@ -3,13 +3,11 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { - FolderWorkspace, - PRCheckDetail, - Repo, - Worktree, - WorkspaceLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../../shared/workspace-scope' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review' diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.tsx index f2e3bdda640..4c03a998d79 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksPanel.tsx @@ -5,7 +5,7 @@ import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import { translate } from '@/i18n/i18n' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' import { getAttachedWorktreesForFolderWorkspace } from './folder-workspace-attached-worktrees' import { FolderWorkspacePrChecksRow } from './FolderWorkspacePrChecksRow' import type { ParentPrChecksRefreshOutcome, ParentPrChecksRow } from './parent-pr-checks-rows' diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx index de88bd8454d..67c3a0fc222 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.test.tsx @@ -3,7 +3,9 @@ import { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { CheckStatus, Repo, Worktree } from '../../../../shared/types' +import type { CheckStatus } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { ParentPrChecksRow, ParentPrChecksRowStatus } from './parent-pr-checks-rows' vi.mock('@/i18n/i18n', () => ({ diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.tsx index cd07701bde7..ac87481de9b 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspacePrChecksRow.tsx @@ -3,7 +3,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip import { cn } from '@/lib/utils' import { openHttpLink } from '@/lib/http-link-routing' import { translate } from '@/i18n/i18n' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' import { CHECK_COLOR, CHECK_ICON, diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx index ddeb4704433..2fcdd1cea93 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.test.tsx @@ -3,7 +3,9 @@ import { act, type CSSProperties, type MouseEvent, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree, WorktreeLineage, WorkspaceLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../../shared/workspace-scope' import { LINEAGE_CHILDREN_INLINE_OFFSET, diff --git a/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.tsx b/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.tsx index 2a2a5a78588..94c46a545d2 100644 --- a/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.tsx +++ b/src/renderer/src/components/right-sidebar/FolderWorkspaceWorktreesPanel.tsx @@ -5,7 +5,7 @@ import { } from '@/components/sidebar/worktree-list-indentation' import { useAppStore } from '@/store' import { translate } from '@/i18n/i18n' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { getAttachedWorktreesForFolderWorkspace } from './folder-workspace-attached-worktrees' import { useState } from 'react' diff --git a/src/renderer/src/components/right-sidebar/GitHistoryCommitFiles.tsx b/src/renderer/src/components/right-sidebar/GitHistoryCommitFiles.tsx index 4bf5da10cb8..d32e82cdd0f 100644 --- a/src/renderer/src/components/right-sidebar/GitHistoryCommitFiles.tsx +++ b/src/renderer/src/components/right-sidebar/GitHistoryCommitFiles.tsx @@ -10,7 +10,8 @@ import { getFileTypeIcon } from '@/lib/file-type-icons' import { basename, dirname } from '@/lib/path' import { translate } from '@/i18n/i18n' import { formatGitHistoryTimestamp } from './git-history-format' -import type { GitBranchChangeEntry, GitFileStatus } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitFileStatus } from '../../../../shared/git-status-types' // State for a single commit's lazily-loaded file list. Owned by GitHistoryPanel, // populated through the onLoadCommitFiles loader supplied by SourceControl. diff --git a/src/renderer/src/components/right-sidebar/GitHistoryPanel.tsx b/src/renderer/src/components/right-sidebar/GitHistoryPanel.tsx index bc60150cd77..c7cb02f4247 100644 --- a/src/renderer/src/components/right-sidebar/GitHistoryPanel.tsx +++ b/src/renderer/src/components/right-sidebar/GitHistoryPanel.tsx @@ -5,7 +5,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip import { cn } from '@/lib/utils' import { ContextMenu, ContextMenuTrigger } from '@/components/ui/context-menu' import type { GitHistoryItem, GitHistoryResult } from '../../../../shared/git-history' -import type { GitBranchChangeEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' import { buildDefaultGitHistoryColorMap, buildGitHistoryViewModels diff --git a/src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx b/src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx index e29d0b74361..e33e952f2fc 100644 --- a/src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx +++ b/src/renderer/src/components/right-sidebar/GitHubPRStackMap.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GitHubPRStack } from '../../../../shared/types' +import type { GitHubPRStack } from '../../../../shared/github/pull-request-types' import { GitHubPRStackMap } from './GitHubPRStackMap' const stack: GitHubPRStack = { diff --git a/src/renderer/src/components/right-sidebar/GitHubPRStackMap.tsx b/src/renderer/src/components/right-sidebar/GitHubPRStackMap.tsx index e0187b37709..1bbaf2b019b 100644 --- a/src/renderer/src/components/right-sidebar/GitHubPRStackMap.tsx +++ b/src/renderer/src/components/right-sidebar/GitHubPRStackMap.tsx @@ -1,6 +1,9 @@ import { useMemo, useState } from 'react' import { ChevronDown, GitBranch, GitPullRequest } from 'lucide-react' -import type { GitHubPRStack, GitHubPRStackEntry } from '../../../../shared/types' +import type { + GitHubPRStack, + GitHubPRStackEntry +} from '../../../../shared/github/pull-request-types' import { cn } from '@/lib/utils' import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/HostedReviewActions.tsx b/src/renderer/src/components/right-sidebar/HostedReviewActions.tsx index cace5ee7d98..a98ea57ab7a 100644 --- a/src/renderer/src/components/right-sidebar/HostedReviewActions.tsx +++ b/src/renderer/src/components/right-sidebar/HostedReviewActions.tsx @@ -12,7 +12,9 @@ import { DropdownMenuSeparator } from '@/components/ui/dropdown-menu' import { presentGitHubPRMergeState } from '@/components/github-pr-merge-state' -import type { PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { resolveGitHubPRMergeMethods } from '../../../../shared/github/pull-request-merge-methods' import { runWorktreeDelete } from '../sidebar/delete-worktree-flow' import { presentGitLabMRMergeState } from './gitlab-mr-merge-state' diff --git a/src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx b/src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx index 1364bdc87d0..18599c352c3 100644 --- a/src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx +++ b/src/renderer/src/components/right-sidebar/SearchResultItems.test.tsx @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { Button } from '@/components/ui/button' import { FileResultRow } from './SearchResultItems' -import type { SearchFileResult } from '../../../../shared/types' +import type { SearchFileResult } from '../../../../shared/code-search-types' type ReactElementLike = { type: unknown diff --git a/src/renderer/src/components/right-sidebar/SearchResultItems.tsx b/src/renderer/src/components/right-sidebar/SearchResultItems.tsx index a7499929ea9..2dc3d1e2f52 100644 --- a/src/renderer/src/components/right-sidebar/SearchResultItems.tsx +++ b/src/renderer/src/components/right-sidebar/SearchResultItems.tsx @@ -12,7 +12,7 @@ import { ContextMenuItem } from '@/components/ui/context-menu' import { normalizeSearchFileMatchCount } from '../../../../shared/search-match-count' -import type { SearchFileResult, SearchMatch } from '../../../../shared/types' +import type { SearchFileResult, SearchMatch } from '../../../../shared/code-search-types' import { translate } from '@/i18n/i18n' // ─── Toggle Button ──────────────────────────────────────── diff --git a/src/renderer/src/components/right-sidebar/SearchResultsPane.tsx b/src/renderer/src/components/right-sidebar/SearchResultsPane.tsx index 952e1a0d99b..b1fc60b7d5e 100644 --- a/src/renderer/src/components/right-sidebar/SearchResultsPane.tsx +++ b/src/renderer/src/components/right-sidebar/SearchResultsPane.tsx @@ -1,6 +1,10 @@ import React from 'react' import { useVirtualizer } from '@tanstack/react-virtual' -import type { SearchFileResult, SearchMatch, SearchResult } from '../../../../shared/types' +import type { + SearchFileResult, + SearchMatch, + SearchResult +} from '../../../../shared/code-search-types' import type { SearchRow } from './search-rows' import { FileResultRow, MatchResultRow } from './SearchResultItems' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx b/src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx index 9f2529973dc..02f6ce6f027 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControl.branch-line-total.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' -import type { GitBranchCompareSummary } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' import { clearBranchLineTotalRequestGateForTests, getBranchLineTotalMergeBase diff --git a/src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts b/src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts index f00bbe9d78c..e740362f60d 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts +++ b/src/renderer/src/components/right-sidebar/SourceControl.compare-summary.test.ts @@ -12,7 +12,8 @@ import { shouldRefreshBranchCompareForStatusHead, shouldShowCompareSummary } from './SourceControl' -import type { GitBranchCompareSummary, GitUpstreamStatus } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' +import type { GitUpstreamStatus } from '../../../../shared/git-status-types' type ReactElementLike = { type: unknown diff --git a/src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx b/src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx index d3125ee86c7..c1dc570d558 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControl.open-file-highlight.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import SourceControl from './SourceControl' const mocks = vi.hoisted(() => { diff --git a/src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx b/src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx index 13dc2479894..0afa6769ea1 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControl.preview-open.test.tsx @@ -6,9 +6,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' import type { GitBranchChangeEntry, - GitBranchCompareSummary, - GitStatusEntry -} from '../../../../shared/types' + GitBranchCompareSummary +} from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import SourceControl from './SourceControl' const mocks = vi.hoisted(() => { diff --git a/src/renderer/src/components/right-sidebar/SourceControl.tsx b/src/renderer/src/components/right-sidebar/SourceControl.tsx index bbfe20317f5..1bab1037bde 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControl.tsx @@ -201,17 +201,19 @@ import { isBehindOnlyUpstream, shouldForcePushWithLeaseForUpstream } from '../../../../shared/git-upstream-status' +import type { DiffComment } from '../../../../shared/diff-comment-types' import type { - DiffComment, GitBranchChangeEntry, - GitBranchCompareSummary, + GitBranchCompareSummary +} from '../../../../shared/git-diff-compare-types' +import type { GitConflictOperation, - GitPushTarget, GitStatusEntry, - GitUpstreamStatus, - SourceControlViewMode, - TuiAgent -} from '../../../../shared/types' + GitUpstreamStatus +} from '../../../../shared/git-status-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { SourceControlViewMode } from '../../../../shared/ui-chrome-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import type { HostedReviewCreationEligibility, HostedReviewInfo, diff --git a/src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx b/src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx index 5ff61b17d43..2625ab54441 100644 --- a/src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControl.virtual-file-list.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import SourceControl from './SourceControl' import { SOURCE_CONTROL_FILE_ROW_HEIGHT_PX, diff --git a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx index 2b87618bd5e..610b6d74b20 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx @@ -6,7 +6,9 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' import type { SourceControlActionRecipe } from '../../../../shared/source-control-ai-actions' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' const mocks = vi.hoisted(() => ({ ensureDetectedAgents: vi.fn(), diff --git a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.tsx b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.tsx index 3a431ea03e0..e6532d3eba3 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.tsx @@ -10,7 +10,7 @@ import type { SourceControlActionRecipe, SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { LaunchSource } from '../../../../shared/telemetry-events' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' import { SourceControlAgentActionDialogForm } from './SourceControlAgentActionDialogForm' diff --git a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx index 6b923a0f58a..8e506ec9ca4 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.test.tsx @@ -2,7 +2,8 @@ import React, { type ReactNode } from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it, vi } from 'vitest' import { SourceControlAgentActionDialogForm } from './SourceControlAgentActionDialogForm' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' vi.mock('@/components/agent/AgentCombobox', () => ({ default: ({ value }: { value: string | null }) => diff --git a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.tsx b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.tsx index 8f9fff3e657..596a1c19f0f 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlAgentActionDialogForm.tsx @@ -24,7 +24,9 @@ import type { AgentCatalogEntry } from '@/lib/agent-catalog' import { cn } from '@/lib/utils' import type { SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { SourceControlActionVariableChips } from '../source-control/SourceControlActionVariableChips' import { sourceControlActionRecipeMatchesTarget } from './source-control-action-recipe-match' import type { SourceControlAgentScopeNote } from './source-control-agent-action-dialog-result' diff --git a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx index 56c3e52f8b9..f48431b1ef2 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.tsx @@ -12,7 +12,8 @@ import { type ResolvedSourceControlAiGenerationParams } from '../../../../shared/source-control-ai' import type { SourceControlTextActionId } from '../../../../shared/source-control-ai-actions' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' import { buildBranchNamePrompt } from '../../../../shared/branch-name-from-work' import { buildCommitMessagePrompt } from '../../../../shared/commit-message-generation' diff --git a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialogForm.tsx b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialogForm.tsx index dc59ac3da85..56402b58850 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialogForm.tsx +++ b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialogForm.tsx @@ -22,7 +22,9 @@ import type { ResolvedSourceControlAiGenerationParams } from '../../../../shared import { formatLinkedIssueTemplateValue } from '../../../../shared/source-control-ai-action-variables' import type { SourceControlTextActionId } from '../../../../shared/source-control-ai-actions' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { toast } from 'sonner' import { SourceControlActionVariableChips } from '../source-control/SourceControlActionVariableChips' import { sourceControlTextGenerationDefaultsMatchTarget } from './source-control-text-generation-defaults' diff --git a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationParams.ts b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationParams.ts index eb1a5a98fb6..e3c75f3175e 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationParams.ts +++ b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationParams.ts @@ -4,7 +4,7 @@ import { isCustomAgentId } from '../../../../shared/commit-message-agent-spec' import type { ResolvedSourceControlAiGenerationParams } from '../../../../shared/source-control-ai' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export type CommitMessageGenerationAgentChoice = | ResolvedSourceControlAiGenerationParams['agentId'] diff --git a/src/renderer/src/components/right-sidebar/active-checks-status.test.ts b/src/renderer/src/components/right-sidebar/active-checks-status.test.ts index 7ee80e0e8c5..c81c059a78c 100644 --- a/src/renderer/src/components/right-sidebar/active-checks-status.test.ts +++ b/src/renderer/src/components/right-sidebar/active-checks-status.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { getActiveChecksStatus } from './active-checks-status' import type { AppState } from '../../store/types' -import type { PRInfo } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' function makePR(status: PRInfo['checksStatus']): PRInfo { return { diff --git a/src/renderer/src/components/right-sidebar/active-checks-status.ts b/src/renderer/src/components/right-sidebar/active-checks-status.ts index a7af63812ca..b2a0a540a5b 100644 --- a/src/renderer/src/components/right-sidebar/active-checks-status.ts +++ b/src/renderer/src/components/right-sidebar/active-checks-status.ts @@ -1,6 +1,6 @@ import type { AppState } from '../../store/types' import { getRepoMapFromState, getWorktreeMapFromState } from '../../store/selectors' -import type { CheckStatus } from '../../../../shared/types' +import type { CheckStatus } from '../../../../shared/github/pull-request-types' import { getGitHubPRCacheKey } from '../../store/slices/github-cache-key' import { getHostedReviewCacheKey } from '../../store/slices/hosted-review-cache-identity' diff --git a/src/renderer/src/components/right-sidebar/activity-bar-buttons.tsx b/src/renderer/src/components/right-sidebar/activity-bar-buttons.tsx index dd67762bbb7..4bab9fd907e 100644 --- a/src/renderer/src/components/right-sidebar/activity-bar-buttons.tsx +++ b/src/renderer/src/components/right-sidebar/activity-bar-buttons.tsx @@ -1,7 +1,7 @@ import React from 'react' import { MoreHorizontal } from 'lucide-react' import type { ActiveRightSidebarTab } from '@/store/slices/editor' -import type { CheckStatus } from '../../../../shared/types' +import type { CheckStatus } from '../../../../shared/github/pull-request-types' import { cn } from '@/lib/utils' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { RIGHT_SIDEBAR_HEADER_NO_DRAG_CLASS_NAME } from './right-sidebar-titlebar-drag-regions' diff --git a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts index 013684c7870..7cb9c647af3 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-original-pane.ts @@ -3,7 +3,10 @@ import { resolveRuntimePaneTitleLeafId } from '@/lib/runtime-pane-title-leaf-id' import type { AgentStatusState } from '../../../../shared/agent-status-types' import type { AiVaultSession } from '../../../../shared/ai-vault-types' import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' export type AiVaultOriginalPaneTarget = { paneKey: string diff --git a/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts b/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts index bf11a0af23b..237da2fecc8 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { deriveAiVaultScopeSessionPaths, deriveAiVaultWorkspaceScopePaths diff --git a/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.ts b/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.ts index bcd3391a4fc..cfdef42f3e0 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-scope-paths.ts @@ -3,7 +3,8 @@ import { normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path' import type { ProjectHostSetupProjection } from '../../../../shared/project-host-setup-projection' -import type { ProjectHostSetup, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Worktree } from '../../../../shared/worktree/types' import { splitWorktreeIdForFilesystem } from '../../../../shared/worktree/id' export function deriveAiVaultWorkspaceScopePaths( diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-launch-actions.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-launch-actions.ts index 43504842aaa..4ede3cafe71 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-launch-actions.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-launch-actions.ts @@ -18,7 +18,7 @@ import { } from '@/lib/ai-vault-resume-target' import type { AiVaultAgent, AiVaultSession } from '../../../../shared/ai-vault-types' import { prepareAiVaultSessionForResume } from '@/lib/ai-vault-session-resume-preparation' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { translate } from '@/i18n/i18n' import { agentLabel } from './ai-vault-session-filters' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts index 6c46a144f86..b3c5d0aa841 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-projects.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from 'vitest' import type { ProjectHostSetupProjection } from '../../../../shared/project-host-setup-projection' import type { AiVaultSession } from '../../../../shared/ai-vault-types' -import type { Project, ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildAiVaultProjectContext, buildAiVaultSessionProjectById, diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-projects.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-projects.ts index 80ed7f3ced7..f9ad52dd198 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-projects.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-projects.ts @@ -6,7 +6,9 @@ import { } from '../../../../shared/execution-host' import type { ProjectHostSetupProjection } from '../../../../shared/project-host-setup-projection' import type { AiVaultSession } from '../../../../shared/ai-vault-types' -import type { ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { createNormalizedPathInsideOrEqualMatcher, normalizeRuntimePathForComparison diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts index 97803382577..583e668cd2a 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-resume.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AiVaultSessionWorktreeInfo } from './ai-vault-session-worktree' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { resolveAiVaultSessionLaunchTarget } from './ai-vault-session-launch-actions' diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-resume.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-resume.ts index 9465144b705..d021fc66b1f 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-resume.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-resume.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { canResumeAiVaultSessionOnTarget, getAiVaultResumeWorkspaceExecutionHostId, diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx index 90ea7cd900c..cc71cc9b55a 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree-map.test.tsx @@ -2,7 +2,8 @@ import { renderHook } from '@testing-library/react' import { describe, expect, it } from 'vitest' import type { AiVaultSession } from '../../../../shared/ai-vault-types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { resolveAiVaultSessionWorktreeDisplay, useAiVaultSessionWorktreeMap, diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts index 7f5f0d07b0c..5ceeb12523f 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import type { AiVaultSession } from '../../../../shared/ai-vault-types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { aiVaultWorktreeCompactPath, aiVaultWorktreeJumpTooltip, diff --git a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.ts b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.ts index a82a68c8f1e..15e489d1b44 100644 --- a/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.ts +++ b/src/renderer/src/components/right-sidebar/ai-vault-session-worktree.ts @@ -13,7 +13,8 @@ import { normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path' import type { AiVaultSession } from '../../../../shared/ai-vault-types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { aiVaultWorktreeCompactPath } from './ai-vault-session-worktree-affordances' export { diff --git a/src/renderer/src/components/right-sidebar/buildSourceControlAgentDeliveryPlan.ts b/src/renderer/src/components/right-sidebar/buildSourceControlAgentDeliveryPlan.ts index 7093101eeee..10d17bd5dc8 100644 --- a/src/renderer/src/components/right-sidebar/buildSourceControlAgentDeliveryPlan.ts +++ b/src/renderer/src/components/right-sidebar/buildSourceControlAgentDeliveryPlan.ts @@ -1,6 +1,6 @@ import { planSourceControlAgentActionLaunch } from '@/lib/source-control-agent-action-plan' import { useAppStore } from '@/store' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SourceControlAgentActionDeliveryPlanState } from './SourceControlAgentActionDialogForm' import { buildSourceControlAgentConnectionErrorPlan } from './source-control-agent-action-dialog-support' import { resolveInitialNativeChatSessionOptions } from '@/components/native-chat/native-chat-launch-session-options' diff --git a/src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx b/src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx index 8555d53b345..4fac43a4ea1 100644 --- a/src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx +++ b/src/renderer/src/components/right-sidebar/checks-list-expanded-details.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' import { ChecksList } from './checks-panel-content' globalThis.IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/right-sidebar/checks-panel-async-result-key.ts b/src/renderer/src/components/right-sidebar/checks-panel-async-result-key.ts index fc95acb9a7c..7cdc9326a36 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-async-result-key.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-async-result-key.ts @@ -1,4 +1,4 @@ -import type { GitHubOwnerRepo } from '../../../../shared/types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' import { githubRepoIdentityKey } from '../../../../shared/github/repository-identity-key' function normalizedPRRepoIdentity(prRepo?: GitHubOwnerRepo | null): string { diff --git a/src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx b/src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx index 69fd873c89b..78f6eac58f7 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx +++ b/src/renderer/src/components/right-sidebar/checks-panel-content.test.tsx @@ -2,7 +2,9 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' -import type { PRCheckDetail, PRComment, PRInfo } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { PRComment } from '../../../../shared/github/comment-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import { buildMergeabilityRecalculationCommands, CheckJobLogTail, diff --git a/src/renderer/src/components/right-sidebar/checks-panel-content.tsx b/src/renderer/src/components/right-sidebar/checks-panel-content.tsx index ad0824e424f..222fb8f0a0a 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-content.tsx +++ b/src/renderer/src/components/right-sidebar/checks-panel-content.tsx @@ -88,16 +88,14 @@ import { type PRCommentPresentationClasses } from './pr-comment-presentation' import type { GitLabProjectRef } from '../../../../shared/gitlab-types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { GitHubReactionContent, PRComment } from '../../../../shared/github/comment-types' import type { - PRInfo, - PRCheckDetail, - PRCheckRunDetails, - PRComment, - GitHubReactionContent, GitHubRepositoryIdentity, PRConflictSummary, + PRInfo, PRMergeableState -} from '../../../../shared/types' +} from '../../../../shared/github/pull-request-types' import { useCheckDetailsResize } from './check-details-resize' import { RightPanelCommentComposer, diff --git a/src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts b/src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts index 78063f3b211..22078dfda37 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-git-status-snapshot.ts @@ -1,4 +1,5 @@ -import type { GitPushTarget, GitStatusEntry, GitUpstreamStatus } from '../../../../shared/types' +import type { GitStatusEntry, GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' export type ChecksPanelGitStatusContextInput = { repoId: string | null | undefined diff --git a/src/renderer/src/components/right-sidebar/checks-panel-polling.test.ts b/src/renderer/src/components/right-sidebar/checks-panel-polling.test.ts index 55e453ded19..c4a8568526a 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-polling.test.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-polling.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' import { CHECKS_PANEL_BASE_POLL_INTERVAL_MS, CHECKS_PANEL_MAX_POLL_INTERVAL_MS, diff --git a/src/renderer/src/components/right-sidebar/checks-panel-polling.ts b/src/renderer/src/components/right-sidebar/checks-panel-polling.ts index 42573079584..89d234a745e 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-polling.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-polling.ts @@ -1,4 +1,4 @@ -import type { PRCheckDetail } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' export const CHECKS_PANEL_BASE_POLL_INTERVAL_MS = 30_000 export const CHECKS_PANEL_MAX_POLL_INTERVAL_MS = 120_000 diff --git a/src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.ts b/src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.ts index 2ade777964d..3558b4bad06 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-pr-refresh-request.ts @@ -1,5 +1,5 @@ import type { HostedReviewProvider } from '../../../../shared/hosted-review' -import type { GitHubPRRefreshReason } from '../../../../shared/types' +import type { GitHubPRRefreshReason } from '../../../../shared/github/pull-request-refresh-types' type ChecksPanelPRRefreshRequestInput = { cachedHasPR: boolean | null diff --git a/src/renderer/src/components/right-sidebar/checks-panel-review-copy.ts b/src/renderer/src/components/right-sidebar/checks-panel-review-copy.ts index b4486bec769..33b1d0f9168 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-review-copy.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-review-copy.ts @@ -1,4 +1,4 @@ -import type { GitHubPRRefreshSkippedReason } from '../../../../shared/types' +import type { GitHubPRRefreshSkippedReason } from '../../../../shared/github/pull-request-refresh-types' import { translate } from '@/i18n/i18n' import { getGitHubUnavailableEmptyStateCopy } from './github-refresh-error-copy' import { diff --git a/src/renderer/src/components/right-sidebar/checks-panel-review-creation.ts b/src/renderer/src/components/right-sidebar/checks-panel-review-creation.ts index d0534124397..7c4260463fa 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-review-creation.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-review-creation.ts @@ -3,7 +3,7 @@ import type { HostedReviewCreationEligibility, HostedReviewLookupOutcome } from '../../../../shared/hosted-review' -import type { PRRefreshErrorType } from '../../../../shared/types' +import type { PRRefreshErrorType } from '../../../../shared/github/pull-request-refresh-types' import { normalizeHostedReviewBaseRef } from '../../../../shared/hosted-review-refs' import type { ChecksPanelReviewLookup } from './checks-panel-review-lookup-authority' // Single source of truth for the hard-refresh error set, shared with the diff --git a/src/renderer/src/components/right-sidebar/checks-panel-review-state-model.ts b/src/renderer/src/components/right-sidebar/checks-panel-review-state-model.ts index 4b43615ebd9..647f9303190 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-review-state-model.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-review-state-model.ts @@ -1,5 +1,8 @@ import type { HostedReviewCreationBlockedReason } from '../../../../shared/hosted-review' -import type { GitHubPRRefreshSkippedReason, PRRefreshErrorType } from '../../../../shared/types' +import type { + GitHubPRRefreshSkippedReason, + PRRefreshErrorType +} from '../../../../shared/github/pull-request-refresh-types' import type { ChecksPanelReviewLookup } from './checks-panel-review-lookup-authority' /** diff --git a/src/renderer/src/components/right-sidebar/checks-panel-review.test.ts b/src/renderer/src/components/right-sidebar/checks-panel-review.test.ts index decd6585c8a..6f741b5889f 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-review.test.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-review.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { gitHubPRToChecksPanelReview, selectChecksPanelReview } from './checks-panel-review' -import type { PRInfo } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' function makePR(overrides: Partial = {}): PRInfo { diff --git a/src/renderer/src/components/right-sidebar/checks-panel-review.ts b/src/renderer/src/components/right-sidebar/checks-panel-review.ts index a51ad79079e..17f34421174 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-review.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-review.ts @@ -1,4 +1,4 @@ -import type { PRInfo } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { hostedReviewInfoFromGitHubPRInfo } from '../../../../shared/hosted-review-github' diff --git a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts index fe817238eb9..5ca81c860da 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { resolveChecksPanelTerminalPtyId, resolveChecksPanelWorktreeFromTerminalCwd diff --git a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts index ab92bbd1469..6aedcdab0dd 100644 --- a/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts +++ b/src/renderer/src/components/right-sidebar/checks-panel-terminal-worktree.ts @@ -5,7 +5,8 @@ import { isRuntimePathAbsolute, normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path' -import type { TerminalLayoutSnapshot, Worktree } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' type TerminalPtyContext = { activeTabId: string | null diff --git a/src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts b/src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts index e808af6da27..0faedae8114 100644 --- a/src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts +++ b/src/renderer/src/components/right-sidebar/discard-all-sequence.test.ts @@ -8,7 +8,7 @@ import { runDiscardAllForArea, type DiscardAllArea } from './discard-all-sequence' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' function entry(partial: Partial & { path: string }): GitStatusEntry { return { diff --git a/src/renderer/src/components/right-sidebar/discard-all-sequence.ts b/src/renderer/src/components/right-sidebar/discard-all-sequence.ts index c52854fcd91..24f0093c6e1 100644 --- a/src/renderer/src/components/right-sidebar/discard-all-sequence.ts +++ b/src/renderer/src/components/right-sidebar/discard-all-sequence.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' export type DiscardAllArea = 'staged' | 'unstaged' | 'untracked' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts b/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts index 3f36fb04672..86ff9cef435 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { TreeNode } from './file-explorer-types' import { buildAddProjectFromFolderModalData, diff --git a/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.ts b/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.ts index b8af63bcb6c..162dcac7575 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-add-project-action.ts @@ -1,6 +1,6 @@ import { isFolderRepo } from '../../../../shared/repo-kind' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { TreeNode } from './file-explorer-types' export type AddProjectFromFolderModalData = { diff --git a/src/renderer/src/components/right-sidebar/file-explorer-directory-listing.ts b/src/renderer/src/components/right-sidebar/file-explorer-directory-listing.ts index eb8f7142846..d904c910e0b 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-directory-listing.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-directory-listing.ts @@ -1,5 +1,5 @@ import { joinPath, normalizeRelativePath } from '@/lib/path' -import type { DirEntry } from '../../../../shared/types' +import type { DirEntry } from '../../../../shared/filesystem-entry-types' import { sortDirEntries } from '../../../../shared/file-name-sort' import { readRuntimeDirectory } from '@/runtime/runtime-file-client' import type { FileExplorerOperationOwner, TreeNode } from './file-explorer-types' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-entries.ts b/src/renderer/src/components/right-sidebar/file-explorer-entries.ts index dfb8591fd2f..4e5b6e7b423 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-entries.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-entries.ts @@ -1,4 +1,4 @@ -import type { DirEntry } from '../../../../shared/types' +import type { DirEntry } from '../../../../shared/filesystem-entry-types' export function shouldIncludeFileExplorerEntry(entry: DirEntry): boolean { return entry.name !== '.git' && entry.name !== 'node_modules' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts b/src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts index b3fdc583522..cbb6b6bb25f 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-expanded-dirs-refresh.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { SetStateAction } from 'react' -import type { DirEntry } from '../../../../shared/types' +import type { DirEntry } from '../../../../shared/filesystem-entry-types' import type { DirCache } from './file-explorer-types' import { createFileExplorerDirLoadTracker } from './file-explorer-dir-load-tracker' import { refreshFileExplorerExpandedDirs } from './file-explorer-expanded-dirs-refresh' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts b/src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts index 0a6c2606b01..d5bb840feeb 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-operation-generation.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-reset.ts b/src/renderer/src/components/right-sidebar/file-explorer-reset.ts index 9ed03fecda9..83b17724310 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-reset.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-reset.ts @@ -1,4 +1,4 @@ -import type { RightSidebarExplorerView } from '../../../../shared/types' +import type { RightSidebarExplorerView } from '../../../../shared/ui-chrome-types' export function getVisibleFileExplorerWorktreePath({ explorerView, diff --git a/src/renderer/src/components/right-sidebar/file-explorer-runtime-owner.ts b/src/renderer/src/components/right-sidebar/file-explorer-runtime-owner.ts index eddc593d31f..a98a38d4edc 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-runtime-owner.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-runtime-owner.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getSettingsForWorktreeRuntimeOwner } from '@/lib/worktree-runtime-owner' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts b/src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts index 259d3da312c..d7b1380aefa 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-watch-drive-root.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { FsChangeEvent } from '../../../../shared/types' +import type { FsChangeEvent } from '../../../../shared/filesystem-entry-types' import type { DirCache } from './file-explorer-types' import { processFileExplorerFsPayload } from './file-explorer-watch-reconcile' diff --git a/src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.ts b/src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.ts index 538657edb76..1d3905911ef 100644 --- a/src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.ts +++ b/src/renderer/src/components/right-sidebar/file-explorer-watch-reconcile.ts @@ -1,5 +1,5 @@ import type { Dispatch, SetStateAction } from 'react' -import type { FsChangedPayload } from '../../../../shared/types' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' import type { DirCache } from './file-explorer-types' import { isPathInsideOrEqual, diff --git a/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts b/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts index ed765b0886d..80bf23187a6 100644 --- a/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts +++ b/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.test.ts @@ -1,10 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { - FolderWorkspace, - Worktree, - WorktreeLineage, - WorkspaceLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../../shared/workspace-scope' import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId } from '../../../../shared/execution-host' import { getAttachedWorktreesForFolderWorkspace } from './folder-workspace-attached-worktrees' diff --git a/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.ts b/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.ts index ec65782b488..577f21aa1f1 100644 --- a/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.ts +++ b/src/renderer/src/components/right-sidebar/folder-workspace-attached-worktrees.ts @@ -1,10 +1,7 @@ import { folderWorkspaceKey, parseWorkspaceKey } from '../../../../shared/workspace-scope' -import type { - FolderWorkspace, - Worktree, - WorktreeLineage, - WorkspaceLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { compareWorktreeDisplayName } from '@/lib/worktree-display-name-order' import { getProjectedWorktreeLineageChildrenByParentId } from '../sidebar/worktree-lineage-projection' diff --git a/src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts b/src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts index 17c0992b3e3..f2e4ccf0d60 100644 --- a/src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts +++ b/src/renderer/src/components/right-sidebar/fork-push-target-label.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitPushTarget } from '../../../../shared/types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import { describeForkPushTarget } from './fork-push-target-label' function target(overrides: Partial): GitPushTarget { diff --git a/src/renderer/src/components/right-sidebar/fork-push-target-label.ts b/src/renderer/src/components/right-sidebar/fork-push-target-label.ts index 7967dcf152a..daff8d89b3c 100644 --- a/src/renderer/src/components/right-sidebar/fork-push-target-label.ts +++ b/src/renderer/src/components/right-sidebar/fork-push-target-label.ts @@ -1,4 +1,4 @@ -import type { GitPushTarget } from '../../../../shared/types' +import type { GitPushTarget } from '../../../../shared/worktree/types' // Why: a fork-PR worktree pushes to a contributor's fork, not origin. Render // "owner:branch" from the fork remote URL when available so the maintainer can diff --git a/src/renderer/src/components/right-sidebar/git-status-file-watch-refresh.ts b/src/renderer/src/components/right-sidebar/git-status-file-watch-refresh.ts index 034cc9e570c..8ab2492f4aa 100644 --- a/src/renderer/src/components/right-sidebar/git-status-file-watch-refresh.ts +++ b/src/renderer/src/components/right-sidebar/git-status-file-watch-refresh.ts @@ -7,11 +7,11 @@ import { normalizeRuntimePathForComparison, relativePathInsideRoot } from '../../../../shared/cross-platform-path' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' import type { ActiveRightSidebarTab, - FsChangedPayload, RightSidebarExplorerView -} from '../../../../shared/types' +} from '../../../../shared/ui-chrome-types' import type { OpenFile } from '@/store/slices/editor' import { ORCA_WORKTREE_FILE_CHANGE_EVENT, diff --git a/src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts b/src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts index 3437d8d227a..4727ebd173b 100644 --- a/src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts +++ b/src/renderer/src/components/right-sidebar/git-status-refresh-branch-line-total.test.ts @@ -9,7 +9,7 @@ import { refreshGitStatusForWorktreeStrict, type GitStatusRefreshDeps } from './git-status-refresh' -import type { GitStatusResult } from '../../../../shared/types' +import type { GitStatusResult } from '../../../../shared/git-status-types' const MERGE_BASE = '1f3c0d9a5b6e7f8091a2b3c4d5e6f708192a3b4c' diff --git a/src/renderer/src/components/right-sidebar/git-status-refresh.test.ts b/src/renderer/src/components/right-sidebar/git-status-refresh.test.ts index 2a3f8ba564e..dd03ae54f87 100644 --- a/src/renderer/src/components/right-sidebar/git-status-refresh.test.ts +++ b/src/renderer/src/components/right-sidebar/git-status-refresh.test.ts @@ -5,7 +5,7 @@ import { refreshGitStatusForWorktreeStrict, type GitStatusRefreshDeps } from './git-status-refresh' -import type { GitStatusResult, GitUpstreamStatus } from '../../../../shared/types' +import type { GitStatusResult, GitUpstreamStatus } from '../../../../shared/git-status-types' function makeDeps(): GitStatusRefreshDeps { return { diff --git a/src/renderer/src/components/right-sidebar/git-status-refresh.ts b/src/renderer/src/components/right-sidebar/git-status-refresh.ts index 50f2cf068c7..ec654b2c175 100644 --- a/src/renderer/src/components/right-sidebar/git-status-refresh.ts +++ b/src/renderer/src/components/right-sidebar/git-status-refresh.ts @@ -6,12 +6,9 @@ import { invalidateAutomaticPushTargetUpstreamStatusCache, storeCachedAutomaticPushTargetUpstreamStatus } from './push-target-upstream-refresh-cache' -import type { - GitPushTarget, - GitStatusResult, - GitUpstreamStatus, - GlobalSettings -} from '../../../../shared/types' +import type { GitStatusResult, GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import { beginAutomaticUpstreamRefresh, beginStrictUpstreamRefresh, diff --git a/src/renderer/src/components/right-sidebar/github-pr-stack-confirmation.ts b/src/renderer/src/components/right-sidebar/github-pr-stack-confirmation.ts index e219f68952d..e3e1e84f1a9 100644 --- a/src/renderer/src/components/right-sidebar/github-pr-stack-confirmation.ts +++ b/src/renderer/src/components/right-sidebar/github-pr-stack-confirmation.ts @@ -1,6 +1,9 @@ import type { ConfirmationDialogOptions } from '@/components/confirmation-dialog-context' import { translate } from '@/i18n/i18n' -import type { GitHubPRMergeMethod, GitHubPRStack } from '../../../../shared/types' +import type { + GitHubPRMergeMethod, + GitHubPRStack +} from '../../../../shared/github/pull-request-types' import { getGitHubPRStackMergeScope } from './github-pr-stack-merge' export function buildGitHubPRStackMergeConfirmation({ diff --git a/src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts b/src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts index be889a5eb74..44145a61bc0 100644 --- a/src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts +++ b/src/renderer/src/components/right-sidebar/github-pr-stack-merge.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitHubPRStack } from '../../../../shared/types' +import type { GitHubPRStack } from '../../../../shared/github/pull-request-types' import { getGitHubPRStackMergeBlocker, getGitHubPRStackMergeScope, diff --git a/src/renderer/src/components/right-sidebar/github-pr-stack-merge.ts b/src/renderer/src/components/right-sidebar/github-pr-stack-merge.ts index 8eacfb0380b..5d127d5f736 100644 --- a/src/renderer/src/components/right-sidebar/github-pr-stack-merge.ts +++ b/src/renderer/src/components/right-sidebar/github-pr-stack-merge.ts @@ -1,4 +1,7 @@ -import type { GitHubPRStack, GitHubPRStackEntry } from '../../../../shared/types' +import type { + GitHubPRStack, + GitHubPRStackEntry +} from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' export type GitHubPRStackMergeScope = { diff --git a/src/renderer/src/components/right-sidebar/github-refresh-error-copy.ts b/src/renderer/src/components/right-sidebar/github-refresh-error-copy.ts index 298c892e5b0..b22ed9ce23c 100644 --- a/src/renderer/src/components/right-sidebar/github-refresh-error-copy.ts +++ b/src/renderer/src/components/right-sidebar/github-refresh-error-copy.ts @@ -1,4 +1,4 @@ -import type { PRRefreshUpstreamErrorType } from '../../../../shared/types' +import type { PRRefreshUpstreamErrorType } from '../../../../shared/github/pull-request-refresh-types' import { translate } from '@/i18n/i18n' export type ChecksPanelErrorCopy = { title: string; description: string } diff --git a/src/renderer/src/components/right-sidebar/hosted-review-github-actions.ts b/src/renderer/src/components/right-sidebar/hosted-review-github-actions.ts index 2481e5b4293..8940f8adf5b 100644 --- a/src/renderer/src/components/right-sidebar/hosted-review-github-actions.ts +++ b/src/renderer/src/components/right-sidebar/hosted-review-github-actions.ts @@ -1,4 +1,5 @@ -import type { GitHubPRMergeMethod, PRInfo, Repo } from '../../../../shared/types' +import type { GitHubPRMergeMethod, PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' import { callRuntimeRpc, type RuntimeClientTarget } from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-github-pr-cache.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-github-pr-cache.ts index 8487c6619ef..ac8d9223fc4 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-github-pr-cache.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-github-pr-cache.ts @@ -1,5 +1,7 @@ import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { LOCAL_EXECUTION_HOST_ID, normalizeExecutionHostId diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-hosted-review-cache.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-hosted-review-cache.ts index e6db09a2736..854af41074a 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-hosted-review-cache.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-hosted-review-cache.ts @@ -1,5 +1,6 @@ import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getWorktreeCardPrDisplay, isCachedMergedBranchPRCurrentForWorktree diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts index 75c288da7fd..025817b1160 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-projection-selector.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review' import { buildParentPrChecksProjection } from './parent-pr-checks-rows' import { createParentPrChecksProjectionSelector } from './parent-pr-checks-projection-selector' diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts index 9cf77aa2565..df7f6ff4e2d 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { getParentPrChecksRefreshCandidates, diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.ts index 2404950b422..edde3fcd750 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-refresh.ts @@ -1,9 +1,7 @@ -import type { - GitHubRepositoryIdentity, - PRCheckDetail, - Repo, - Worktree -} from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { GitHubRepositoryIdentity } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { isFolderRepo } from '../../../../shared/repo-kind' import { getWorktreeGitIdentityDisplay } from '@/lib/worktree-git-identity-display' diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-row-status.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-row-status.ts index 4f48f655cf6..478ccec9a49 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-row-status.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-row-status.ts @@ -1,4 +1,4 @@ -import type { CheckStatus } from '../../../../shared/types' +import type { CheckStatus } from '../../../../shared/github/pull-request-types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { translate } from '@/i18n/i18n' import type { diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-row-types.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-row-types.ts index 18fc4459da6..2904b5565fc 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-row-types.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-row-types.ts @@ -1,11 +1,11 @@ +import type { PRCheckDetail } from '../../../../shared/github/check-types' import type { CheckStatus, GitHubRepositoryIdentity, - PRCheckDetail, - PRInfo, - Repo, - Worktree -} from '../../../../shared/types' + PRInfo +} from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import type { AppState } from '@/store' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts index c9e2ebc18cc..4a071f6638e 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail, PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { getHostedReviewCacheKey } from '@/store/slices/hosted-review' import { diff --git a/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.ts b/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.ts index 72f4ab921bc..10d0367f620 100644 --- a/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.ts +++ b/src/renderer/src/components/right-sidebar/parent-pr-checks-rows.ts @@ -1,4 +1,6 @@ -import type { PRCheckDetail, Repo, Worktree } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { hostedReviewInfoFromGitHubPRInfo } from '../../../../shared/hosted-review-github' import { isFolderRepo } from '../../../../shared/repo-kind' diff --git a/src/renderer/src/components/right-sidebar/pr-comment-fixing-reply-body.ts b/src/renderer/src/components/right-sidebar/pr-comment-fixing-reply-body.ts index 757c5abc303..5122a653ef9 100644 --- a/src/renderer/src/components/right-sidebar/pr-comment-fixing-reply-body.ts +++ b/src/renderer/src/components/right-sidebar/pr-comment-fixing-reply-body.ts @@ -1,4 +1,4 @@ -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' /** Posted when a selected review comment is sent to AI. */ export const PR_COMMENT_AI_FIXING_REPLY = 'Fixing. Will be in the next commit' diff --git a/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts b/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts index 5cbd180ed3c..2ee6834ecb6 100644 --- a/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts +++ b/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' import { markPRCommentThreadResolved, restorePRCommentThreadSnapshot diff --git a/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.ts b/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.ts index 2af2a42c3d0..eb5b947f77a 100644 --- a/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.ts +++ b/src/renderer/src/components/right-sidebar/pr-comment-thread-resolution.ts @@ -1,4 +1,4 @@ -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' export function markPRCommentThreadResolved( comments: PRComment[], diff --git a/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts b/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts index 3ae9663f314..a0b5a0b19e2 100644 --- a/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts +++ b/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' import type { PRCommentGroup } from '../../../../shared/pr-comment-groups' import { acknowledgePRCommentsAfterAiLaunch, diff --git a/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.ts b/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.ts index 6c427f84acc..8f21d3c7920 100644 --- a/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.ts +++ b/src/renderer/src/components/right-sidebar/pr-comments-ai-launch-ack.ts @@ -1,4 +1,5 @@ -import type { PRComment, PRInfo } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { getPRCommentGroupRoot, type PRCommentGroup } from '../../../../shared/pr-comment-groups' import { isResolvablePRCommentGroup } from '../pr-comments-resolution-prompt' diff --git a/src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx b/src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx index c6f0130d1c1..94a2c20b45e 100644 --- a/src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx +++ b/src/renderer/src/components/right-sidebar/pr-comments-list-selection.test.tsx @@ -65,7 +65,7 @@ vi.mock('@/components/ui/dropdown-menu', () => { DropdownMenuTrigger: ({ children }: { children: ReactNode }) => <>{children} } }) -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' import type { PRCommentGroup } from '../../../../shared/pr-comment-groups' import { MAX_PERSISTED_PR_COMMENTS_LIST_SELECTIONS, diff --git a/src/renderer/src/components/right-sidebar/pr-comments-list-selection.ts b/src/renderer/src/components/right-sidebar/pr-comments-list-selection.ts index 6245f6ff131..b82c2b4c277 100644 --- a/src/renderer/src/components/right-sidebar/pr-comments-list-selection.ts +++ b/src/renderer/src/components/right-sidebar/pr-comments-list-selection.ts @@ -5,7 +5,7 @@ import { type PRCommentGroup } from '../../../../shared/pr-comment-groups' import { isPRCommentGroupQueueableForAI } from '@/lib/pr-comment-action-state' -import type { PRComment } from '../../../../shared/types' +import type { PRComment } from '../../../../shared/github/comment-types' export type PRCommentsListSelection = { isSelectingForAI: boolean diff --git a/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts b/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts index 6ec8514351c..50b76dd829b 100644 --- a/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts +++ b/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.test.ts @@ -10,7 +10,8 @@ import { invalidateAutomaticPushTargetUpstreamStatusCache, storeCachedAutomaticPushTargetUpstreamStatus } from './push-target-upstream-refresh-cache' -import type { GitPushTarget, GitStatusResult, GitUpstreamStatus } from '../../../../shared/types' +import type { GitStatusResult, GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' const pushTarget: GitPushTarget = { remoteName: 'fork', diff --git a/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts b/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts index bb79bd2a2c2..e8f0a8c39fb 100644 --- a/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts +++ b/src/renderer/src/components/right-sidebar/push-target-upstream-refresh-cache.ts @@ -1,9 +1,6 @@ -import type { - GitPushTarget, - GitStatusResult, - GitUpstreamStatus, - GlobalSettings -} from '../../../../shared/types' +import type { GitStatusResult, GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' const AUTOMATIC_PUSH_TARGET_UPSTREAM_REFRESH_TTL_MS = 60_000 const MAX_AUTOMATIC_PUSH_TARGET_UPSTREAM_CACHE_ENTRIES = 1024 diff --git a/src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.ts b/src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.ts index 278117bb68b..b9b86e93228 100644 --- a/src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.ts +++ b/src/renderer/src/components/right-sidebar/runSourceControlAgentActionStart.ts @@ -1,6 +1,8 @@ import { focusTerminalTabSurface } from '@/lib/focus-terminal-tab-surface' import { launchAgentInNewTab } from '@/lib/launch-agent-in-new-tab' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { LaunchSource } from '../../../../shared/telemetry-events' import type { SourceControlActionRecipe, diff --git a/src/renderer/src/components/right-sidebar/search-match-open.ts b/src/renderer/src/components/right-sidebar/search-match-open.ts index 0e2bf3b74ac..3e870396428 100644 --- a/src/renderer/src/components/right-sidebar/search-match-open.ts +++ b/src/renderer/src/components/right-sidebar/search-match-open.ts @@ -1,6 +1,6 @@ import { detectLanguage } from '@/lib/language-detect' import type { FileSearchResultOwner } from '@/lib/file-search-result-owner' -import type { SearchFileResult, SearchMatch } from '../../../../shared/types' +import type { SearchFileResult, SearchMatch } from '../../../../shared/code-search-types' export function cancelRevealFrame(frameRef: React.RefObject): void { if (frameRef.current !== null) { diff --git a/src/renderer/src/components/right-sidebar/search-rows.ts b/src/renderer/src/components/right-sidebar/search-rows.ts index e9697febea3..031cca36710 100644 --- a/src/renderer/src/components/right-sidebar/search-rows.ts +++ b/src/renderer/src/components/right-sidebar/search-rows.ts @@ -1,4 +1,8 @@ -import type { SearchFileResult, SearchMatch, SearchResult } from '../../../../shared/types' +import type { + SearchFileResult, + SearchMatch, + SearchResult +} from '../../../../shared/code-search-types' export type SearchRow = | { diff --git a/src/renderer/src/components/right-sidebar/source-control-action-error.ts b/src/renderer/src/components/right-sidebar/source-control-action-error.ts index 3e54a65d9a0..2e3ab396df1 100644 --- a/src/renderer/src/components/right-sidebar/source-control-action-error.ts +++ b/src/renderer/src/components/right-sidebar/source-control-action-error.ts @@ -1,5 +1,5 @@ import type { RemoteOpKind } from './source-control-primary-action' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' export type AbortActionErrorKind = 'abort_merge' | 'abort_rebase' export type SourceControlActionErrorKind = RemoteOpKind | AbortActionErrorKind diff --git a/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts b/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts index 3c806438ceb..398ce251cd9 100644 --- a/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { sourceControlActionRecipeMatchesTarget } from './source-control-action-recipe-match' function settings(): GlobalSettings { diff --git a/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.ts b/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.ts index 2c1078e9a06..83055b58e77 100644 --- a/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.ts +++ b/src/renderer/src/components/right-sidebar/source-control-action-recipe-match.ts @@ -10,7 +10,8 @@ import { type SourceControlActionRecipe } from '../../../../shared/source-control-ai-actions' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' type NormalizedSourceControlActionRecipe = { agentId: SourceControlActionRecipe['agentId'] | null diff --git a/src/renderer/src/components/right-sidebar/source-control-actions.ts b/src/renderer/src/components/right-sidebar/source-control-actions.ts index 3ae829cd710..db4efa16b82 100644 --- a/src/renderer/src/components/right-sidebar/source-control-actions.ts +++ b/src/renderer/src/components/right-sidebar/source-control-actions.ts @@ -1,4 +1,4 @@ -import type { GitStagingArea } from '../../../../shared/types' +import type { GitStagingArea } from '../../../../shared/git-status-types' export type SourceControlAction = 'discard' | 'stage' | 'unstage' diff --git a/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-result.ts b/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-result.ts index 5609880477a..6078d17f4b3 100644 --- a/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-result.ts +++ b/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-result.ts @@ -1,7 +1,7 @@ import type { getAgentCatalog } from '@/lib/agent-catalog' import type { useAppStore } from '@/store' import type { useRepoById } from '@/store/selectors' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SourceControlAgentActionDeliveryPlanState } from './SourceControlAgentActionDialogForm' export type SourceControlAgentScopeNote = { diff --git a/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.ts b/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.ts index ac0448b70d2..a88cc65617d 100644 --- a/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.ts +++ b/src/renderer/src/components/right-sidebar/source-control-agent-action-dialog-support.ts @@ -1,6 +1,6 @@ import { getAgentCatalog } from '@/lib/agent-catalog' import { isTuiAgentEnabled } from '../../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' import { translate } from '@/i18n/i18n' import type { SourceControlAgentActionDeliveryPlanState } from './SourceControlAgentActionDialogForm' diff --git a/src/renderer/src/components/right-sidebar/source-control-ai-controller-types.ts b/src/renderer/src/components/right-sidebar/source-control-ai-controller-types.ts index a3c851be789..6a76186f851 100644 --- a/src/renderer/src/components/right-sidebar/source-control-ai-controller-types.ts +++ b/src/renderer/src/components/right-sidebar/source-control-ai-controller-types.ts @@ -1,10 +1,7 @@ import type { AppState } from '@/store' -import type { - GitConflictOperation, - GitStatusEntry, - GlobalSettings, - Repo -} from '../../../../shared/types' +import type { GitConflictOperation, GitStatusEntry } from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' export type SourceControlAiStoreSnapshot = Pick< AppState, diff --git a/src/renderer/src/components/right-sidebar/source-control-ai-settings-navigation.ts b/src/renderer/src/components/right-sidebar/source-control-ai-settings-navigation.ts index 259bd6f43c0..a5352c08795 100644 --- a/src/renderer/src/components/right-sidebar/source-control-ai-settings-navigation.ts +++ b/src/renderer/src/components/right-sidebar/source-control-ai-settings-navigation.ts @@ -1,6 +1,6 @@ import { getRepositorySourceControlAiSectionId } from '@/components/settings/repository-settings-targets' import type { AppState } from '@/store' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export function openSourceControlAiSettingsTarget({ activeRepo, diff --git a/src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx b/src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx index 9ccad4f3acc..3d3f6ce6549 100644 --- a/src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-branch-context-row.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { describe, expect, it, vi } from 'vitest' import { SourceControlBranchContextRow } from './source-control-branch-context-row' -import type { GitBranchCompareSummary } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' import type { GitBranchLineTotal } from '../../../../shared/git-status-types' vi.mock('@/components/ui/tooltip', () => ({ diff --git a/src/renderer/src/components/right-sidebar/source-control-branch-context-row.tsx b/src/renderer/src/components/right-sidebar/source-control-branch-context-row.tsx index 42a531a10d3..f22348a6f3f 100644 --- a/src/renderer/src/components/right-sidebar/source-control-branch-context-row.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-branch-context-row.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ExternalLink, Loader2, RefreshCw } from 'lucide-react' -import type { GitBranchCompareSummary, GitUpstreamStatus } from '../../../../shared/types' -import type { GitBranchLineTotal } from '../../../../shared/git-status-types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' +import type { GitBranchLineTotal, GitUpstreamStatus } from '../../../../shared/git-status-types' import { cn } from '@/lib/utils' import { translate } from '@/i18n/i18n' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' diff --git a/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts b/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts index be3823e6c3f..25384eb6cd9 100644 --- a/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.test.ts @@ -6,7 +6,7 @@ import { shouldShowSourceControlBranchContextChrome, shouldShowSourceControlBranchContextRow } from './source-control-branch-context-stats' -import type { GitBranchCompareSummary } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' const readySummary: GitBranchCompareSummary = { baseRef: 'origin/main', diff --git a/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.ts b/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.ts index ed4b801897d..e724a51d366 100644 --- a/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.ts +++ b/src/renderer/src/components/right-sidebar/source-control-branch-context-stats.ts @@ -1,4 +1,5 @@ -import type { GitBranchCompareSummary, GitUpstreamStatus } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' +import type { GitUpstreamStatus } from '../../../../shared/git-status-types' import type { WorktreeGitIdentityDisplay } from '@/lib/worktree-git-identity-display' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts b/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts index e71afce388c..0a1dfd8607c 100644 --- a/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.test.ts @@ -13,7 +13,7 @@ import { shouldAttemptCreateHostedReviewForIntent, shouldGenerateHostedReviewDetailsForIntent } from './source-control-create-pr-intent-flow' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' describe('source-control Create PR intent flow helpers', () => { it('matches async completions only to the original repo, worktree, path, branch, and base', () => { diff --git a/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.ts b/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.ts index 20d8e002ba0..3a392535ef5 100644 --- a/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.ts +++ b/src/renderer/src/components/right-sidebar/source-control-create-pr-intent-flow.ts @@ -10,7 +10,7 @@ import { normalizeHostedReviewBaseRef, normalizeHostedReviewHeadRef } from '../../../../shared/hosted-review-refs' -import type { GitStatusEntry, GitUpstreamStatus } from '../../../../shared/types' +import type { GitStatusEntry, GitUpstreamStatus } from '../../../../shared/git-status-types' import { summarizeCommitFailure } from './commit-failure-summary' import { getStageAllPaths } from './discard-all-sequence' diff --git a/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts b/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts index 48e28160af6..496924874f2 100644 --- a/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.test.ts @@ -3,7 +3,7 @@ import { getDiscardAreaConfirmationCopy, getDiscardEntryConfirmationCopy } from './source-control-discard-confirmation' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' function entry(partial: Partial & { path: string }): GitStatusEntry { return { diff --git a/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.ts b/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.ts index ff020c434ec..d65a9d86ab2 100644 --- a/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.ts +++ b/src/renderer/src/components/right-sidebar/source-control-discard-confirmation.ts @@ -1,5 +1,5 @@ import { basename } from '@/lib/path' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { DiscardAllArea } from './discard-all-sequence' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx b/src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx index 3dd4246a719..a445ee0da72 100644 --- a/src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-discard-dialog.test.tsx @@ -1,7 +1,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ButtonHTMLAttributes, ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' type CapturedButtonProps = ButtonHTMLAttributes & { children?: ReactNode diff --git a/src/renderer/src/components/right-sidebar/source-control-discard-dialog.tsx b/src/renderer/src/components/right-sidebar/source-control-discard-dialog.tsx index 6741a72ac55..52a63734c51 100644 --- a/src/renderer/src/components/right-sidebar/source-control-discard-dialog.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-discard-dialog.tsx @@ -10,7 +10,7 @@ import { DialogHeader, DialogTitle } from '@/components/ui/dialog' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { DiscardAllArea } from './discard-all-sequence' import { getDiscardAreaConfirmationCopy, diff --git a/src/renderer/src/components/right-sidebar/source-control-dropdown-items.ts b/src/renderer/src/components/right-sidebar/source-control-dropdown-items.ts index 8ee0f549aa0..8c8b3b0905b 100644 --- a/src/renderer/src/components/right-sidebar/source-control-dropdown-items.ts +++ b/src/renderer/src/components/right-sidebar/source-control-dropdown-items.ts @@ -3,7 +3,7 @@ import type { PrimaryActionInputs } from './source-control-primary-action' import { canSubmitCommit, resolveCommitDisabledReason } from './source-control-commit-eligibility' -import type { GitConflictOperation } from '../../../../shared/types' +import type { GitConflictOperation } from '../../../../shared/git-status-types' import { shouldForcePushWithLeaseForUpstream } from '../../../../shared/git-upstream-status' import { supportsHostedReviewCreation } from '../../../../shared/hosted-review-creation-providers' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts b/src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts index f9f3bcba206..214e9387f46 100644 --- a/src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-entry-actions.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { canDiscardStatusEntry, canStageStatusEntry, diff --git a/src/renderer/src/components/right-sidebar/source-control-entry-actions.ts b/src/renderer/src/components/right-sidebar/source-control-entry-actions.ts index b9bd2fe6a57..8495f231188 100644 --- a/src/renderer/src/components/right-sidebar/source-control-entry-actions.ts +++ b/src/renderer/src/components/right-sidebar/source-control-entry-actions.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { isStageableStatusEntry } from './discard-all-sequence' /** diff --git a/src/renderer/src/components/right-sidebar/source-control-fix-split-button.tsx b/src/renderer/src/components/right-sidebar/source-control-fix-split-button.tsx index 26fed796035..9879af5b5f1 100644 --- a/src/renderer/src/components/right-sidebar/source-control-fix-split-button.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-fix-split-button.tsx @@ -12,7 +12,7 @@ import type { SourceControlActionRecipe, SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { LaunchSource } from '../../../../shared/telemetry-events' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/right-sidebar/source-control-header-overflow-menu.tsx b/src/renderer/src/components/right-sidebar/source-control-header-overflow-menu.tsx index 8959c50efa0..55db724a5af 100644 --- a/src/renderer/src/components/right-sidebar/source-control-header-overflow-menu.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-header-overflow-menu.tsx @@ -1,6 +1,6 @@ import React from 'react' import { List, ListTree, MessageSquare, MoreHorizontal, RefreshCw, Settings2 } from 'lucide-react' -import type { SourceControlViewMode } from '../../../../shared/types' +import type { SourceControlViewMode } from '../../../../shared/ui-chrome-types' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { diff --git a/src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx b/src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx index fac0f0b6ded..19ccba393fd 100644 --- a/src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-header-toolbar-identity.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { describe, expect, it, vi } from 'vitest' import { SourceControlHeaderToolbar } from './source-control-header-toolbar' -import type { GitBranchCompareSummary } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' import type { GitBranchLineTotal } from '../../../../shared/git-status-types' import type { WorktreeGitIdentityDisplay } from '@/lib/worktree-git-identity-display' import type { PrimaryAction } from './source-control-primary-action' diff --git a/src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts b/src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts index 667445e0244..11b79d1b6a0 100644 --- a/src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-header-toolbar.test.ts @@ -3,7 +3,7 @@ import { getNextSourceControlViewMode, shouldShowSourceControlCompareUnavailableCard } from './source-control-header-toolbar' -import type { GitBranchCompareSummary } from '../../../../shared/types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' const readySummary: GitBranchCompareSummary = { baseRef: 'origin/main', diff --git a/src/renderer/src/components/right-sidebar/source-control-header-toolbar.tsx b/src/renderer/src/components/right-sidebar/source-control-header-toolbar.tsx index e04ca32eaca..41a2ca38273 100644 --- a/src/renderer/src/components/right-sidebar/source-control-header-toolbar.tsx +++ b/src/renderer/src/components/right-sidebar/source-control-header-toolbar.tsx @@ -1,11 +1,8 @@ import React, { useCallback, useEffect, useRef } from 'react' import { GitPullRequestArrow, Loader2, Search, X } from 'lucide-react' -import type { - GitBranchCompareSummary, - GitUpstreamStatus, - SourceControlViewMode -} from '../../../../shared/types' -import type { GitBranchLineTotal } from '../../../../shared/git-status-types' +import type { GitBranchCompareSummary } from '../../../../shared/git-diff-compare-types' +import type { GitBranchLineTotal, GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { SourceControlViewMode } from '../../../../shared/ui-chrome-types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import type { PrimaryAction } from './source-control-primary-action' import { Button } from '@/components/ui/button' diff --git a/src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.ts b/src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.ts index bd87f24c4c0..131e7b22733 100644 --- a/src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.ts +++ b/src/renderer/src/components/right-sidebar/source-control-hosted-review-push-target.ts @@ -1,4 +1,5 @@ -import type { GitPushTarget, GitUpstreamStatus } from '../../../../shared/types' +import type { GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import type { HostedReviewState } from '../../../../shared/hosted-review' import { isPositiveHostedReviewNumber } from '../../../../shared/hosted-review' import { getPublishTargetDisplayName } from '../../../../shared/git-publish-target-status' diff --git a/src/renderer/src/components/right-sidebar/source-control-manual-review-url.ts b/src/renderer/src/components/right-sidebar/source-control-manual-review-url.ts index 4b5f44227f3..70e9cd6e877 100644 --- a/src/renderer/src/components/right-sidebar/source-control-manual-review-url.ts +++ b/src/renderer/src/components/right-sidebar/source-control-manual-review-url.ts @@ -1,5 +1,5 @@ import type { HostedReviewProvider } from '../../../../shared/hosted-review' -import type { GitPushTarget } from '../../../../shared/types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import { branchFromRef, normalizeProvider, diff --git a/src/renderer/src/components/right-sidebar/source-control-primary-action-types.ts b/src/renderer/src/components/right-sidebar/source-control-primary-action-types.ts index da34c8a253d..d4043333442 100644 --- a/src/renderer/src/components/right-sidebar/source-control-primary-action-types.ts +++ b/src/renderer/src/components/right-sidebar/source-control-primary-action-types.ts @@ -1,5 +1,6 @@ import type { HostedReviewCreationEligibility } from '../../../../shared/hosted-review' -import type { GitUpstreamStatus, PRState } from '../../../../shared/types' +import type { GitUpstreamStatus } from '../../../../shared/git-status-types' +import type { PRState } from '../../../../shared/github/pull-request-types' import type { SourceControlPrimaryActionKind, SourceControlRemoteOpKind diff --git a/src/renderer/src/components/right-sidebar/source-control-section-order.test.ts b/src/renderer/src/components/right-sidebar/source-control-section-order.test.ts index fa563470d66..e63df719130 100644 --- a/src/renderer/src/components/right-sidebar/source-control-section-order.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-section-order.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { buildSourceControlDisplaySections, getConflictReviewEntries, diff --git a/src/renderer/src/components/right-sidebar/source-control-section-order.ts b/src/renderer/src/components/right-sidebar/source-control-section-order.ts index 557db90b556..02e03a646ea 100644 --- a/src/renderer/src/components/right-sidebar/source-control-section-order.ts +++ b/src/renderer/src/components/right-sidebar/source-control-section-order.ts @@ -1,5 +1,6 @@ import { normalizeSourceControlGroupOrder } from '../../../../shared/source-control-group-order' -import type { GitStatusEntry, SourceControlGroupOrder } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' +import type { SourceControlGroupOrder } from '../../../../shared/ui-chrome-types' export const SOURCE_CONTROL_AREAS = ['unstaged', 'staged', 'untracked'] as const export type SourceControlSectionArea = (typeof SOURCE_CONTROL_AREAS)[number] diff --git a/src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts b/src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts index 595ba62fe34..a8c3b2acf59 100644 --- a/src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-status-sort.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { compareGitStatusEntries } from './source-control-status-sort' function entry(path: string, conflictStatus?: GitStatusEntry['conflictStatus']): GitStatusEntry { diff --git a/src/renderer/src/components/right-sidebar/source-control-status-sort.ts b/src/renderer/src/components/right-sidebar/source-control-status-sort.ts index ccedb093ffb..ff188a6cf76 100644 --- a/src/renderer/src/components/right-sidebar/source-control-status-sort.ts +++ b/src/renderer/src/components/right-sidebar/source-control-status-sort.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { compareFileNames } from '../../../../shared/file-name-sort' export function compareGitStatusEntries(a: GitStatusEntry, b: GitStatusEntry): number { diff --git a/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts b/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts index c17d057f5c8..c93cd05203f 100644 --- a/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { buildSubmoduleChildNodes, collectListSelectionEntries, diff --git a/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.ts b/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.ts index aab15360590..c7796eeaf28 100644 --- a/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.ts +++ b/src/renderer/src/components/right-sidebar/source-control-submodule-expansion.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { basename } from '@/lib/path' import type { SourceControlSectionArea } from './source-control-section-order' import type { SourceControlTreeNode } from './source-control-tree' diff --git a/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts b/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts index b52e87482ab..acba48929f1 100644 --- a/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { generationParamsToActionRecipe, sourceControlTextGenerationDefaultsMatchTarget diff --git a/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.ts b/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.ts index 08bc9fb6d9d..33f3e572d0c 100644 --- a/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.ts +++ b/src/renderer/src/components/right-sidebar/source-control-text-generation-defaults.ts @@ -8,7 +8,8 @@ import { type SourceControlTextActionId } from '../../../../shared/source-control-ai-actions' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { sourceControlActionRecipeMatchesTarget } from './source-control-action-recipe-match' type TextGenerationRecipeConfiguration = { diff --git a/src/renderer/src/components/right-sidebar/source-control-tree.test.ts b/src/renderer/src/components/right-sidebar/source-control-tree.test.ts index 421b5f3cd06..6d9251801d2 100644 --- a/src/renderer/src/components/right-sidebar/source-control-tree.test.ts +++ b/src/renderer/src/components/right-sidebar/source-control-tree.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { GitBranchChangeEntry, GitStatusEntry } from '../../../../shared/types' +import type { GitBranchChangeEntry } from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { buildGitStatusSourceControlTree, buildSourceControlTree, diff --git a/src/renderer/src/components/right-sidebar/source-control-tree.ts b/src/renderer/src/components/right-sidebar/source-control-tree.ts index 2ecca32c0bd..eb4a01a7ea3 100644 --- a/src/renderer/src/components/right-sidebar/source-control-tree.ts +++ b/src/renderer/src/components/right-sidebar/source-control-tree.ts @@ -1,5 +1,5 @@ import { normalizeRelativePath } from '@/lib/path' -import type { GitStatusEntry, GitStagingArea } from '../../../../shared/types' +import type { GitStagingArea, GitStatusEntry } from '../../../../shared/git-status-types' import { compareFileNames } from '../../../../shared/file-name-sort' import { splitPathSegments } from './path-tree' import { compareGitStatusEntries } from './source-control-status-sort' diff --git a/src/renderer/src/components/right-sidebar/stale-conflict-operation-poll.ts b/src/renderer/src/components/right-sidebar/stale-conflict-operation-poll.ts index eaf61d70be7..413f1c51c0a 100644 --- a/src/renderer/src/components/right-sidebar/stale-conflict-operation-poll.ts +++ b/src/renderer/src/components/right-sidebar/stale-conflict-operation-poll.ts @@ -1,5 +1,6 @@ import { useEffect, useMemo } from 'react' -import type { GitConflictOperation, Repo } from '../../../../shared/types' +import type { GitConflictOperation } from '../../../../shared/git-status-types' +import type { Repo } from '../../../../shared/repo-types' import { isGitRepoKind } from '../../../../shared/repo-kind' import { getConnectionId } from '@/lib/connection-context' import { getRuntimeGitConflictOperation } from '@/runtime/runtime-git-client' diff --git a/src/renderer/src/components/right-sidebar/status-display.ts b/src/renderer/src/components/right-sidebar/status-display.ts index 92fa3e7769b..17ce74ab4f5 100644 --- a/src/renderer/src/components/right-sidebar/status-display.ts +++ b/src/renderer/src/components/right-sidebar/status-display.ts @@ -1,4 +1,4 @@ -import type { GitFileStatus, GitStatusEntry } from '../../../../shared/types' +import type { GitFileStatus, GitStatusEntry } from '../../../../shared/git-status-types' import { joinPath, normalizeRelativePath } from '@/lib/path' import { splitPathSegments } from './path-tree' diff --git a/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts b/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts index 7d194d2bf00..d79f9a16fbe 100644 --- a/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts +++ b/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.test.ts @@ -3,7 +3,8 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { makeWorktree, TEST_REPO } from '@/store/slices/store-test-helpers' diff --git a/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.ts b/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.ts index eb902500547..a0754151973 100644 --- a/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.ts +++ b/src/renderer/src/components/right-sidebar/use-checks-panel-terminal-worktree.ts @@ -6,7 +6,7 @@ import { useAllWorktrees, useRepoMap } from '@/store/selectors' import { isRemoteRuntimePtyId } from '@/runtime/runtime-terminal-inspection' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { resolveChecksPanelTerminalPtyId, resolveChecksPanelWorktreeFromTerminalCwd diff --git a/src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.ts b/src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.ts index c28ae16f9b0..8508d61f5e7 100644 --- a/src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.ts +++ b/src/renderer/src/components/right-sidebar/use-git-status-upstream-ref-watch.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect } from 'react' import { getConnectionId } from '@/lib/connection-context' import { setRuntimeGitStatusUpstreamRefWatch } from '@/runtime/runtime-git-client' -import type { GitStatusResult } from '../../../../shared/types' +import type { GitStatusResult } from '../../../../shared/git-status-types' import { getRightSidebarWorktreeRuntimeSettings } from './file-explorer-runtime-owner' export function useGitStatusUpstreamRefWatch(args: { diff --git a/src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx b/src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx index 09fd8fe4133..daf0dffe1b7 100644 --- a/src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx +++ b/src/renderer/src/components/right-sidebar/use-hosted-review-actions.test.tsx @@ -3,7 +3,8 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { PRInfo, Repo } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' import { useHostedReviewActions, type HostedReviewActionInfo } from './use-hosted-review-actions' const confirmationMocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/right-sidebar/use-hosted-review-actions.ts b/src/renderer/src/components/right-sidebar/use-hosted-review-actions.ts index 6830fe86eee..44b8eb7940f 100644 --- a/src/renderer/src/components/right-sidebar/use-hosted-review-actions.ts +++ b/src/renderer/src/components/right-sidebar/use-hosted-review-actions.ts @@ -3,7 +3,8 @@ import { toast } from 'sonner' import { useConfirmationDialog } from '@/components/confirmation-dialog-context' import type { GitHubPRAutoMergeAction } from '@/components/github-pr-merge-state' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Repo, GitHubPRMergeMethod } from '../../../../shared/types' +import type { GitHubPRMergeMethod, PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' import { mergeGitHubHostedReview, setGitHubHostedReviewAutoMerge, diff --git a/src/renderer/src/components/right-sidebar/use-source-control-recovery-ai.ts b/src/renderer/src/components/right-sidebar/use-source-control-recovery-ai.ts index 3d679a55789..27ec43a3323 100644 --- a/src/renderer/src/components/right-sidebar/use-source-control-recovery-ai.ts +++ b/src/renderer/src/components/right-sidebar/use-source-control-recovery-ai.ts @@ -3,7 +3,7 @@ import type { SourceControlActionRecipe, SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { buildFixCommitFailurePrompt } from './source-control-ai-prompts' import { summarizeCommitFailure } from './commit-failure-summary' import { diff --git a/src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.ts b/src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.ts index c9720c751bf..85347b2e6bd 100644 --- a/src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.ts +++ b/src/renderer/src/components/right-sidebar/useCreatePullRequestDialogFields.ts @@ -13,7 +13,7 @@ import { getRuntimeRepoBaseRefDefault, searchRuntimeRepoBaseRefDetails } from '@/runtime/runtime-repo-client' -import type { Repo, BaseRefSearchResult } from '../../../../shared/types' +import type { BaseRefSearchResult, Repo } from '../../../../shared/repo-types' import type { HostedReviewCreationEligibility } from '../../../../shared/hosted-review' import { normalizeHostedReviewBaseRef } from '../../../../shared/hosted-review-refs' import { diff --git a/src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx b/src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx index 9c665f4cce6..49ca1844cba 100644 --- a/src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx +++ b/src/renderer/src/components/right-sidebar/useFileExplorerTree.stale-dirs.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { DirEntry } from '../../../../shared/types' +import type { DirEntry } from '../../../../shared/filesystem-entry-types' import { useFileExplorerTree } from './useFileExplorerTree' const readDirectoryMock = vi.hoisted(() => vi.fn()) diff --git a/src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx b/src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx index 13b7b1c1c5a..4bf3de4b551 100644 --- a/src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx +++ b/src/renderer/src/components/right-sidebar/useFileExplorerWatch.pending-refresh.test.tsx @@ -2,7 +2,7 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FsChangedPayload } from '../../../../shared/types' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' import type { FileExplorerOperationOwner, FileExplorerTreeRefreshOutcome diff --git a/src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts b/src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts index d8b218b6409..33e439e4a11 100644 --- a/src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts +++ b/src/renderer/src/components/right-sidebar/useFileExplorerWatch.ts @@ -1,5 +1,5 @@ import { useEffect, useRef, type Dispatch, type SetStateAction } from 'react' -import type { FsChangedPayload } from '../../../../shared/types' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' import type { DirCache, FileExplorerOperationOwner, diff --git a/src/renderer/src/components/right-sidebar/useFileSearchPanel.ts b/src/renderer/src/components/right-sidebar/useFileSearchPanel.ts index f0935b625a0..e66e647c26f 100644 --- a/src/renderer/src/components/right-sidebar/useFileSearchPanel.ts +++ b/src/renderer/src/components/right-sidebar/useFileSearchPanel.ts @@ -2,7 +2,11 @@ import type React from 'react' import { useCallback, useDeferredValue, useEffect, useMemo, useRef } from 'react' import { useAppStore } from '@/store' import { useActiveWorktree } from '@/store/selectors' -import type { SearchFileResult, SearchMatch, SearchResult } from '../../../../shared/types' +import type { + SearchFileResult, + SearchMatch, + SearchResult +} from '../../../../shared/code-search-types' import { buildSearchRows } from './search-rows' import { cancelRevealFrame, openMatchResult } from './search-match-open' import type { SearchQueryRowProps } from './SearchQueryRow' diff --git a/src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx b/src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx index 62bbf4f9bec..c68f5effa4e 100644 --- a/src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx +++ b/src/renderer/src/components/right-sidebar/useFileSearchRunner.test.tsx @@ -2,7 +2,7 @@ import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { SearchResult } from '../../../../shared/types' +import type { SearchResult } from '../../../../shared/code-search-types' import { useFileSearchRunner } from './useFileSearchRunner' const mocks = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/right-sidebar/useFileSearchRunner.ts b/src/renderer/src/components/right-sidebar/useFileSearchRunner.ts index 20feac4a610..7950a86114f 100644 --- a/src/renderer/src/components/right-sidebar/useFileSearchRunner.ts +++ b/src/renderer/src/components/right-sidebar/useFileSearchRunner.ts @@ -10,7 +10,7 @@ import { } from '@/runtime/runtime-file-search-bounds' import { searchRuntimeFiles } from '@/runtime/runtime-file-client' import { useAppStore } from '@/store' -import type { SearchResult } from '../../../../shared/types' +import type { SearchResult } from '../../../../shared/code-search-types' import { getRightSidebarWorktreeRuntimeSettings } from './file-explorer-runtime-owner' const SEARCH_DEBOUNCE_MS = 300 diff --git a/src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts b/src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts index c60c6f1f3e0..532912c65eb 100644 --- a/src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts +++ b/src/renderer/src/components/right-sidebar/useGitHistoryCommitActions.ts @@ -12,7 +12,10 @@ import { launchAgentInNewTab } from '@/lib/launch-agent-in-new-tab' import { resolveDefaultAgentForNewTab } from '@/lib/agent-tab-shortcuts' import { translate } from '@/i18n/i18n' import type { GitHistoryItem } from '../../../../shared/git-history' -import type { GitBranchChangeEntry, GitCommitCompareResult } from '../../../../shared/types' +import type { + GitBranchChangeEntry, + GitCommitCompareResult +} from '../../../../shared/git-diff-compare-types' import { shouldOpenSourceControlRowAsPreview, type SourceControlRowOpenEvent diff --git a/src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts b/src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts index 348bf8a1f36..7d565090d69 100644 --- a/src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts +++ b/src/renderer/src/components/right-sidebar/useGitStatusPolling.rerender.test.ts @@ -3,7 +3,8 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { makeOpenFile, makeWorktree, TEST_REPO } from '@/store/slices/store-test-helpers' diff --git a/src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts b/src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts index 47d8d5e8fde..b1c6d3586d1 100644 --- a/src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts +++ b/src/renderer/src/components/right-sidebar/useGitStatusPolling.test.ts @@ -1,6 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as React from 'react' -import type { FsChangedPayload, GitPushTarget, GitStatusResult } from '../../../../shared/types' +import type { FsChangedPayload } from '../../../../shared/filesystem-entry-types' +import type { GitStatusResult } from '../../../../shared/git-status-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import { DEFAULT_GIT_STATUS_LIMIT } from '../../../../shared/git-status-limit' const worktree = { id: 'repo-1::/repo', repoId: 'repo-1', path: '/repo' } diff --git a/src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts b/src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts index c3dd7a10a9c..0d582ca508c 100644 --- a/src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts +++ b/src/renderer/src/components/right-sidebar/useSavedSourceControlAgentActionAutoStart.ts @@ -3,7 +3,9 @@ import type { SourceControlActionRecipe, SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isSourceControlAgentDetectedAndEnabled } from './source-control-agent-action-dialog-support' import { sourceControlActionRecipeMatchesTarget } from './source-control-action-recipe-match' diff --git a/src/renderer/src/components/right-sidebar/useSourceControlAgentActionDialog.ts b/src/renderer/src/components/right-sidebar/useSourceControlAgentActionDialog.ts index 4c129d862e4..d002d9d3a34 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlAgentActionDialog.ts +++ b/src/renderer/src/components/right-sidebar/useSourceControlAgentActionDialog.ts @@ -8,7 +8,7 @@ import { useAppStore } from '@/store' import { useRepoById } from '@/store/selectors' import { renderSourceControlActionCommandTemplate } from '../../../../shared/source-control-ai-actions' import { isTuiAgentEnabled } from '../../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SourceControlAgentActionDialogProps } from './SourceControlAgentActionDialog' import type { UseSourceControlAgentActionDialogResult } from './source-control-agent-action-dialog-result' import { useSavedSourceControlAgentActionAutoStart } from './useSavedSourceControlAgentActionAutoStart' diff --git a/src/renderer/src/components/right-sidebar/useSourceControlAgentActionStart.ts b/src/renderer/src/components/right-sidebar/useSourceControlAgentActionStart.ts index 3336348a2e5..7af2c97f8c6 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlAgentActionStart.ts +++ b/src/renderer/src/components/right-sidebar/useSourceControlAgentActionStart.ts @@ -5,7 +5,9 @@ import type { SourceControlLaunchActionId } from '../../../../shared/source-control-ai-actions' import type { SourceControlAiWriteTarget } from '../../../../shared/source-control-ai-recipe-save' -import type { GlobalSettings, Repo, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { buildSourceControlAgentDeliveryPlan } from './buildSourceControlAgentDeliveryPlan' import type { SourceControlAgentActionDeliveryPlanState } from './SourceControlAgentActionDialogForm' import { runSourceControlAgentActionStart } from './runSourceControlAgentActionStart' diff --git a/src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts b/src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts index 666e406e1cb..ccafa2ddc99 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts +++ b/src/renderer/src/components/right-sidebar/useSourceControlSelection.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { getSelectionRangeKeys, reconcileSelectionKeys, diff --git a/src/renderer/src/components/right-sidebar/useSourceControlSelection.ts b/src/renderer/src/components/right-sidebar/useSourceControlSelection.ts index e14ee5cdc5d..0fa525724a5 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlSelection.ts +++ b/src/renderer/src/components/right-sidebar/useSourceControlSelection.ts @@ -1,5 +1,5 @@ import { useState, useCallback, useEffect, useRef, type RefObject } from 'react' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import type { SourceControlRowOpenEvent } from './source-control-split-open' function isMacPlatform(): boolean { diff --git a/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx b/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx index 5b97bb8068f..527d641b843 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx +++ b/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.test.tsx @@ -15,7 +15,7 @@ import { useSourceControlSubmoduleStatus, type UseSourceControlSubmoduleStatusResult } from './useSourceControlSubmoduleStatus' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' const roots: Root[] = [] diff --git a/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.ts b/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.ts index fc91420b7eb..c7c799561f6 100644 --- a/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.ts +++ b/src/renderer/src/components/right-sidebar/useSourceControlSubmoduleStatus.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react' -import type { GitStatusEntry } from '../../../../shared/types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' import { getConnectionId } from '@/lib/connection-context' import { getRuntimeGitSubmoduleStatus, type RuntimeGitContext } from '@/runtime/runtime-git-client' import { diff --git a/src/renderer/src/components/settings/AccountsPane.test.tsx b/src/renderer/src/components/settings/AccountsPane.test.tsx index 795caf9b5cf..bf7656856d5 100644 --- a/src/renderer/src/components/settings/AccountsPane.test.tsx +++ b/src/renderer/src/components/settings/AccountsPane.test.tsx @@ -2,7 +2,7 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { i18n } from '../../i18n/i18n' import { useAppStore } from '../../store' import { AccountsPane } from './AccountsPane' diff --git a/src/renderer/src/components/settings/AccountsPane.tsx b/src/renderer/src/components/settings/AccountsPane.tsx index c8500b99cfa..13b93c24596 100644 --- a/src/renderer/src/components/settings/AccountsPane.tsx +++ b/src/renderer/src/components/settings/AccountsPane.tsx @@ -4,12 +4,12 @@ error handling and restart prompts below; splitting them into separate files would scatter those flows without a meaningful abstraction boundary. */ import { useEffect, useRef, useState } from 'react' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState, - CodexSystemDefaultIdentity, - GlobalSettings -} from '../../../../shared/types' + CodexSystemDefaultIdentity +} from '../../../../shared/managed-account-types' import { resolveLocalAccountRuntimeTarget } from '../../../../shared/local-account-runtime' import { getRendererAppPlatform } from '../../lib/renderer-app-platform' import { Badge } from '../ui/badge' diff --git a/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts b/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts index 2de229d49d0..08a392fdecc 100644 --- a/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts +++ b/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { createHttpProxyBypassRulesDraftState, createHttpProxyUrlDraftState, diff --git a/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.tsx b/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.tsx index e5b8a3b81fe..6597dd1e15b 100644 --- a/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.tsx +++ b/src/renderer/src/components/settings/AdvancedNetworkSettingsSection.tsx @@ -1,7 +1,7 @@ import type React from 'react' import { useState } from 'react' import { ChevronDown } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { normalizeProxyBypassRules, normalizeProxyUrl } from '../../../../shared/network-proxy' import { cn } from '@/lib/utils' import { useAppStore } from '../../store' diff --git a/src/renderer/src/components/settings/AdvancedPane.tsx b/src/renderer/src/components/settings/AdvancedPane.tsx index f2b014e2805..df05dc71507 100644 --- a/src/renderer/src/components/settings/AdvancedPane.tsx +++ b/src/renderer/src/components/settings/AdvancedPane.tsx @@ -1,6 +1,6 @@ import { useRef, useState } from 'react' import { Info, Loader2, RotateCw } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useMountedRef } from '@/hooks/useMountedRef' import { Button } from '../ui/button' import { Label } from '../ui/label' diff --git a/src/renderer/src/components/settings/AgentAwakeSetting.tsx b/src/renderer/src/components/settings/AgentAwakeSetting.tsx index 216dff6facf..4d27b9ab9c6 100644 --- a/src/renderer/src/components/settings/AgentAwakeSetting.tsx +++ b/src/renderer/src/components/settings/AgentAwakeSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Label } from '../ui/label' import { getAgentAwakeDescription, diff --git a/src/renderer/src/components/settings/AgentCacheTimerSection.tsx b/src/renderer/src/components/settings/AgentCacheTimerSection.tsx index 554e9541090..2e99b4f7e6a 100644 --- a/src/renderer/src/components/settings/AgentCacheTimerSection.tsx +++ b/src/renderer/src/components/settings/AgentCacheTimerSection.tsx @@ -1,6 +1,6 @@ import type React from 'react' import { Timer } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useAppStore } from '../../store' import { Label } from '../ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' diff --git a/src/renderer/src/components/settings/AgentDashboardExperimentalSetting.tsx b/src/renderer/src/components/settings/AgentDashboardExperimentalSetting.tsx index 9c5f495b883..c22f5a9050a 100644 --- a/src/renderer/src/components/settings/AgentDashboardExperimentalSetting.tsx +++ b/src/renderer/src/components/settings/AgentDashboardExperimentalSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { Label } from '../ui/label' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/AgentRuntimeSetting.tsx b/src/renderer/src/components/settings/AgentRuntimeSetting.tsx index 220a380b943..877ce8d0065 100644 --- a/src/renderer/src/components/settings/AgentRuntimeSetting.tsx +++ b/src/renderer/src/components/settings/AgentRuntimeSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { GlobalWindowsRuntimeDefault } from '../../../../shared/project-execution-runtime' import { normalizeGlobalWindowsRuntimeDefault } from '../../../../shared/project-execution-runtime' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' diff --git a/src/renderer/src/components/settings/AgentsPane.test.tsx b/src/renderer/src/components/settings/AgentsPane.test.tsx index 3b2f7bb964b..1081f5d4553 100644 --- a/src/renderer/src/components/settings/AgentsPane.test.tsx +++ b/src/renderer/src/components/settings/AgentsPane.test.tsx @@ -2,7 +2,8 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { AGENT_CATALOG } from '@/lib/agent-catalog' import { useAppStore } from '../../store' import { getAgentGeneratedTabTitlesTitle } from './agent-generated-tab-title-copy' diff --git a/src/renderer/src/components/settings/AgentsPane.tsx b/src/renderer/src/components/settings/AgentsPane.tsx index 70ba5f64c3f..682468c5d06 100644 --- a/src/renderer/src/components/settings/AgentsPane.tsx +++ b/src/renderer/src/components/settings/AgentsPane.tsx @@ -11,7 +11,8 @@ import { RefreshCw, Terminal } from 'lucide-react' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { getAgentCatalog, AgentIcon } from '@/lib/agent-catalog' import { useDetectedAgents, type AgentDetectionTarget } from '@/hooks/useDetectedAgents' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/settings/AppearanceInterfaceSection.tsx b/src/renderer/src/components/settings/AppearanceInterfaceSection.tsx index 551485cb317..b78e9de335d 100644 --- a/src/renderer/src/components/settings/AppearanceInterfaceSection.tsx +++ b/src/renderer/src/components/settings/AppearanceInterfaceSection.tsx @@ -1,6 +1,6 @@ import type React from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' import { UIZoomControl } from './UIZoomControl' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/AppearancePane.test.tsx b/src/renderer/src/components/settings/AppearancePane.test.tsx index 139ade8064f..4a89d66cd03 100644 --- a/src/renderer/src/components/settings/AppearancePane.test.tsx +++ b/src/renderer/src/components/settings/AppearancePane.test.tsx @@ -6,7 +6,8 @@ import { I18nextProvider } from 'react-i18next' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { i18n } from '@/i18n/i18n' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings, StatusBarItem } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' const mocks = vi.hoisted(() => ({ state: { diff --git a/src/renderer/src/components/settings/AppearancePane.tsx b/src/renderer/src/components/settings/AppearancePane.tsx index f6c71840654..3c460b32694 100644 --- a/src/renderer/src/components/settings/AppearancePane.tsx +++ b/src/renderer/src/components/settings/AppearancePane.tsx @@ -2,7 +2,7 @@ import type React from 'react' import { useLayoutEffect, useState } from 'react' import { AppWindow, PanelLeft, TerminalSquare } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { AppearanceSection } from './AppearanceSection' import { AppearanceInterfaceSection } from './AppearanceInterfaceSection' diff --git a/src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx b/src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx index 1d7e5d8ec2c..c8d63b3866a 100644 --- a/src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx +++ b/src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx @@ -1,6 +1,7 @@ import type React from 'react' -import type { GlobalSettings, StatusBarItem } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' import type { FeatureInteractionId } from '../../../../shared/feature-interaction-catalog' import { SearchableSetting } from './SearchableSetting' import { AppearanceAdvancedDisclosure } from './AppearanceAdvancedDisclosure' diff --git a/src/renderer/src/components/settings/ArtifactsSettingsPane.tsx b/src/renderer/src/components/settings/ArtifactsSettingsPane.tsx index f561908d50a..60dd3e0c0c9 100644 --- a/src/renderer/src/components/settings/ArtifactsSettingsPane.tsx +++ b/src/renderer/src/components/settings/ArtifactsSettingsPane.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react' import { ArrowRight, Files } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '@/components/ui/button' import { SettingsSwitchRow } from './SettingsFormControls' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/settings/AutoRenameBranchFromWorkSetting.tsx b/src/renderer/src/components/settings/AutoRenameBranchFromWorkSetting.tsx index d31d9b69533..d44bc20c887 100644 --- a/src/renderer/src/components/settings/AutoRenameBranchFromWorkSetting.tsx +++ b/src/renderer/src/components/settings/AutoRenameBranchFromWorkSetting.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { ChevronDown } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { SourceControlAiSettingsPatch, SourceControlAiSettings diff --git a/src/renderer/src/components/settings/AutomationsSettingsPane.tsx b/src/renderer/src/components/settings/AutomationsSettingsPane.tsx index 5984698b65b..991081e4739 100644 --- a/src/renderer/src/components/settings/AutomationsSettingsPane.tsx +++ b/src/renderer/src/components/settings/AutomationsSettingsPane.tsx @@ -1,5 +1,5 @@ import { ArrowRight, CalendarClock } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '@/components/ui/button' import { SettingsSwitchRow } from './SettingsFormControls' import { useAppStore } from '@/store' diff --git a/src/renderer/src/components/settings/BrowserLinkRoutingModifierSetting.tsx b/src/renderer/src/components/settings/BrowserLinkRoutingModifierSetting.tsx index b0c55e87204..55edebeea9a 100644 --- a/src/renderer/src/components/settings/BrowserLinkRoutingModifierSetting.tsx +++ b/src/renderer/src/components/settings/BrowserLinkRoutingModifierSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { SearchableSetting } from './SearchableSetting' import { SettingsSwitchRow } from './SettingsFormControls' import { diff --git a/src/renderer/src/components/settings/BrowserLinkRoutingSetting.tsx b/src/renderer/src/components/settings/BrowserLinkRoutingSetting.tsx index fa7f26f135b..7ec1bc47ff3 100644 --- a/src/renderer/src/components/settings/BrowserLinkRoutingSetting.tsx +++ b/src/renderer/src/components/settings/BrowserLinkRoutingSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Label } from '../ui/label' import { Switch } from '../ui/switch' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/BrowserLocalhostWorktreeLabelsSetting.tsx b/src/renderer/src/components/settings/BrowserLocalhostWorktreeLabelsSetting.tsx index 1dfc0492318..fb18663e497 100644 --- a/src/renderer/src/components/settings/BrowserLocalhostWorktreeLabelsSetting.tsx +++ b/src/renderer/src/components/settings/BrowserLocalhostWorktreeLabelsSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' import { SettingsSwitchRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/BrowserPane.tsx b/src/renderer/src/components/settings/BrowserPane.tsx index 1bc078cfcca..c0b2a370e67 100644 --- a/src/renderer/src/components/settings/BrowserPane.tsx +++ b/src/renderer/src/components/settings/BrowserPane.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useRef, useState, type MutableRefObject } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useAppStore } from '../../store' import { matchesSettingsSearch } from './settings-search' import { getBrowserPaneSearchEntries } from './browser-search' diff --git a/src/renderer/src/components/settings/BrowserProfileRow.tsx b/src/renderer/src/components/settings/BrowserProfileRow.tsx index a6324661901..05447bb7758 100644 --- a/src/renderer/src/components/settings/BrowserProfileRow.tsx +++ b/src/renderer/src/components/settings/BrowserProfileRow.tsx @@ -1,7 +1,10 @@ import { Import, Loader2, Trash2 } from 'lucide-react' import { toast } from 'sonner' import { emitBrowserCookieImportToast } from '@/lib/browser-cookie-import-toast' -import type { BrowserCookieImportSummary, BrowserSessionProfile } from '../../../../shared/types' +import type { + BrowserCookieImportSummary, + BrowserSessionProfile +} from '../../../../shared/browser-workspace-types' import { Button } from '../ui/button' import { DropdownMenu, diff --git a/src/renderer/src/components/settings/BrowserSessionCookiesSection.tsx b/src/renderer/src/components/settings/BrowserSessionCookiesSection.tsx index 8fa1e6c9a60..3f4fbbb992d 100644 --- a/src/renderer/src/components/settings/BrowserSessionCookiesSection.tsx +++ b/src/renderer/src/components/settings/BrowserSessionCookiesSection.tsx @@ -1,5 +1,5 @@ import { Plus } from 'lucide-react' -import type { BrowserSessionProfile } from '../../../../shared/types' +import type { BrowserSessionProfile } from '../../../../shared/browser-workspace-types' import { Button } from '../ui/button' import { Label } from '../ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' diff --git a/src/renderer/src/components/settings/BrowserTerminalLinkActionsSetting.tsx b/src/renderer/src/components/settings/BrowserTerminalLinkActionsSetting.tsx index 2ba4fa50a00..b658052db81 100644 --- a/src/renderer/src/components/settings/BrowserTerminalLinkActionsSetting.tsx +++ b/src/renderer/src/components/settings/BrowserTerminalLinkActionsSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { BROWSER_TERMINAL_LINK_ACTIONS_SETTINGS_TARGET_ID } from '@/lib/settings-navigation-types' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/CliSection.tsx b/src/renderer/src/components/settings/CliSection.tsx index e37a45ef3d6..32cbb3e5766 100644 --- a/src/renderer/src/components/settings/CliSection.tsx +++ b/src/renderer/src/components/settings/CliSection.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { FolderOpen, RefreshCw } from 'lucide-react' import { toast } from 'sonner' import type { CliInstallStatus } from '../../../../shared/cli-install-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { ORCA_CLI_SKILL_INSTALL_COMMAND, ORCA_CLI_SKILL_NAME, diff --git a/src/renderer/src/components/settings/CliSkillRuntimeSetup.tsx b/src/renderer/src/components/settings/CliSkillRuntimeSetup.tsx index 2b68c2e0945..913b6356322 100644 --- a/src/renderer/src/components/settings/CliSkillRuntimeSetup.tsx +++ b/src/renderer/src/components/settings/CliSkillRuntimeSetup.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { deriveGlobalWindowsRuntimeDefaultFromLegacySettings, normalizeGlobalWindowsRuntimeDefault diff --git a/src/renderer/src/components/settings/CommitMessageAiPane.test.tsx b/src/renderer/src/components/settings/CommitMessageAiPane.test.tsx index fba530089bf..95c3e2567b8 100644 --- a/src/renderer/src/components/settings/CommitMessageAiPane.test.tsx +++ b/src/renderer/src/components/settings/CommitMessageAiPane.test.tsx @@ -1,7 +1,7 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { SourceControlAiSettings } from '../../../../shared/source-control-ai-types' import { getCommitMessageModelDiscoveryHostKey, diff --git a/src/renderer/src/components/settings/CommitMessageAiPane.tsx b/src/renderer/src/components/settings/CommitMessageAiPane.tsx index ecc01cc4c11..d14ff189c72 100644 --- a/src/renderer/src/components/settings/CommitMessageAiPane.tsx +++ b/src/renderer/src/components/settings/CommitMessageAiPane.tsx @@ -1,6 +1,7 @@ import { useRef } from 'react' import type React from 'react' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { SourceControlAiSettingsPatch, SourceControlAiSettings diff --git a/src/renderer/src/components/settings/CompareAgainstUpstreamSetting.tsx b/src/renderer/src/components/settings/CompareAgainstUpstreamSetting.tsx index 0fb266867b0..532e25be0d2 100644 --- a/src/renderer/src/components/settings/CompareAgainstUpstreamSetting.tsx +++ b/src/renderer/src/components/settings/CompareAgainstUpstreamSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' import { SettingsRow, SettingsSegmentedControl } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.tsx b/src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.tsx index 827def4c2b2..a952e37eea8 100644 --- a/src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.tsx +++ b/src/renderer/src/components/settings/DefaultWindowsProjectRuntimeSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { GlobalWindowsRuntimeDefault } from '../../../../shared/project-execution-runtime' import { normalizeGlobalWindowsRuntimeDefault } from '../../../../shared/project-execution-runtime' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' diff --git a/src/renderer/src/components/settings/EditorFontFamilySetting.tsx b/src/renderer/src/components/settings/EditorFontFamilySetting.tsx index 911a4e2fde1..f771fa24c7a 100644 --- a/src/renderer/src/components/settings/EditorFontFamilySetting.tsx +++ b/src/renderer/src/components/settings/EditorFontFamilySetting.tsx @@ -1,5 +1,5 @@ import type React from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' import { FontAutocomplete, SettingsRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/EditorWordWrapSetting.tsx b/src/renderer/src/components/settings/EditorWordWrapSetting.tsx index b3dfbb853c4..c9283daf731 100644 --- a/src/renderer/src/components/settings/EditorWordWrapSetting.tsx +++ b/src/renderer/src/components/settings/EditorWordWrapSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' import { Label } from '../ui/label' diff --git a/src/renderer/src/components/settings/EphemeralVmRecipeRow.tsx b/src/renderer/src/components/settings/EphemeralVmRecipeRow.tsx index 1e09e65c4ab..8a42283ff51 100644 --- a/src/renderer/src/components/settings/EphemeralVmRecipeRow.tsx +++ b/src/renderer/src/components/settings/EphemeralVmRecipeRow.tsx @@ -1,6 +1,6 @@ import { Play } from 'lucide-react' import type React from 'react' -import type { OrcaHooks } from '../../../../shared/types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' import { Button } from '../ui/button' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/settings/EphemeralVmsExperimentalSetting.tsx b/src/renderer/src/components/settings/EphemeralVmsExperimentalSetting.tsx index 543744136cc..dd4db727bc4 100644 --- a/src/renderer/src/components/settings/EphemeralVmsExperimentalSetting.tsx +++ b/src/renderer/src/components/settings/EphemeralVmsExperimentalSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { Label } from '../ui/label' import { EphemeralVmsPane } from './EphemeralVmsPane' diff --git a/src/renderer/src/components/settings/ExperimentalPane.test.tsx b/src/renderer/src/components/settings/ExperimentalPane.test.tsx index e230ba7b670..54264e1a4f6 100644 --- a/src/renderer/src/components/settings/ExperimentalPane.test.tsx +++ b/src/renderer/src/components/settings/ExperimentalPane.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getDefaultSettings } from '../../../../shared/constants' import { ExperimentalPane } from './ExperimentalPane' import { getExperimentalPaneSearchEntries } from './experimental-search' diff --git a/src/renderer/src/components/settings/ExperimentalPane.tsx b/src/renderer/src/components/settings/ExperimentalPane.tsx index 25c161d0da9..bccd7989a90 100644 --- a/src/renderer/src/components/settings/ExperimentalPane.tsx +++ b/src/renderer/src/components/settings/ExperimentalPane.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Label } from '../ui/label' import { Switch } from '../ui/switch' import { useAppStore } from '../../store' diff --git a/src/renderer/src/components/settings/FloatingWorkspacePane.tsx b/src/renderer/src/components/settings/FloatingWorkspacePane.tsx index 14ace880d92..16c7b55c9cd 100644 --- a/src/renderer/src/components/settings/FloatingWorkspacePane.tsx +++ b/src/renderer/src/components/settings/FloatingWorkspacePane.tsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react' import { FolderOpen } from 'lucide-react' -import type { FloatingTerminalTriggerLocation, GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { FloatingTerminalTriggerLocation } from '../../../../shared/ui-chrome-types' import { Button } from '../ui/button' import { Input } from '../ui/input' import { ToggleGroup, ToggleGroupItem } from '../ui/toggle-group' diff --git a/src/renderer/src/components/settings/GeneralEditorSettingsSection.tsx b/src/renderer/src/components/settings/GeneralEditorSettingsSection.tsx index b8d710b6886..6b3b211f628 100644 --- a/src/renderer/src/components/settings/GeneralEditorSettingsSection.tsx +++ b/src/renderer/src/components/settings/GeneralEditorSettingsSection.tsx @@ -1,6 +1,6 @@ import type React from 'react' import { useState } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { DEFAULT_EDITOR_AUTO_SAVE_DELAY_MS, MAX_EDITOR_AUTO_SAVE_DELAY_MS, diff --git a/src/renderer/src/components/settings/GeneralPane.tsx b/src/renderer/src/components/settings/GeneralPane.tsx index 021fc5d7111..f688f500567 100644 --- a/src/renderer/src/components/settings/GeneralPane.tsx +++ b/src/renderer/src/components/settings/GeneralPane.tsx @@ -1,5 +1,5 @@ import type React from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useAppStore } from '../../store' import { Separator } from '../ui/separator' import { CliSection } from './CliSection' diff --git a/src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.tsx b/src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.tsx index 474628a5cf0..7531790a7a1 100644 --- a/src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.tsx +++ b/src/renderer/src/components/settings/GeneralWorkspaceSettingsSection.tsx @@ -1,5 +1,5 @@ import type React from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { OpenInMenuSetting } from './OpenInMenuSetting' import { SearchableSetting } from './SearchableSetting' import { SettingsSubsectionHeader, SettingsSwitchRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/GhosttyImportModal.test.ts b/src/renderer/src/components/settings/GhosttyImportModal.test.ts index 67590e710f2..bad4d4118fc 100644 --- a/src/renderer/src/components/settings/GhosttyImportModal.test.ts +++ b/src/renderer/src/components/settings/GhosttyImportModal.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { GhosttyImportPreview } from '../../../../shared/types' +import type { GhosttyImportPreview } from '../../../../shared/global-settings-types' import { GhosttyImportModal } from './GhosttyImportModal' import { Button } from '../ui/button' diff --git a/src/renderer/src/components/settings/GhosttyImportModal.tsx b/src/renderer/src/components/settings/GhosttyImportModal.tsx index 7bdcc08ad6a..cc515405c96 100644 --- a/src/renderer/src/components/settings/GhosttyImportModal.tsx +++ b/src/renderer/src/components/settings/GhosttyImportModal.tsx @@ -1,4 +1,4 @@ -import type { GhosttyImportPreview } from '../../../../shared/types' +import type { GhosttyImportPreview } from '../../../../shared/global-settings-types' import { Button } from '../ui/button' import { Dialog, diff --git a/src/renderer/src/components/settings/GitPane.test.tsx b/src/renderer/src/components/settings/GitPane.test.tsx index 6edf003c370..70cc28c3289 100644 --- a/src/renderer/src/components/settings/GitPane.test.tsx +++ b/src/renderer/src/components/settings/GitPane.test.tsx @@ -1,7 +1,7 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getDefaultSettings } from '../../../../shared/constants' import { TooltipProvider } from '../ui/tooltip' import { GitPane } from './GitPane' diff --git a/src/renderer/src/components/settings/GitPane.tsx b/src/renderer/src/components/settings/GitPane.tsx index 72eb70f15c2..af739b6aa56 100644 --- a/src/renderer/src/components/settings/GitPane.tsx +++ b/src/renderer/src/components/settings/GitPane.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef, useState } from 'react' -import type { GlobalSettings, SourceControlGroupOrder } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { SourceControlGroupOrder } from '../../../../shared/ui-chrome-types' import type { SourceControlAiSettingsPatch } from '../../../../shared/source-control-ai-types' import { DEFAULT_SOURCE_CONTROL_GROUP_ORDER } from '../../../../shared/source-control-group-order' import { Input } from '../ui/input' diff --git a/src/renderer/src/components/settings/InputPane.tsx b/src/renderer/src/components/settings/InputPane.tsx index 55f64d550da..286c7ebe351 100644 --- a/src/renderer/src/components/settings/InputPane.tsx +++ b/src/renderer/src/components/settings/InputPane.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Label } from '../ui/label' import { Switch } from '../ui/switch' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/LeftSidebarAppearanceSetting.tsx b/src/renderer/src/components/settings/LeftSidebarAppearanceSetting.tsx index bf4cb1a81b7..165d92a2817 100644 --- a/src/renderer/src/components/settings/LeftSidebarAppearanceSetting.tsx +++ b/src/renderer/src/components/settings/LeftSidebarAppearanceSetting.tsx @@ -1,5 +1,6 @@ import type React from 'react' -import type { GlobalSettings, LeftSidebarAppearanceMode } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { LeftSidebarAppearanceMode } from '../../../../shared/ui-chrome-types' import { DEFAULT_LEFT_SIDEBAR_TINT_COLOR, DEFAULT_LEFT_SIDEBAR_TINT_OPACITY, diff --git a/src/renderer/src/components/settings/McpConfigSection.tsx b/src/renderer/src/components/settings/McpConfigSection.tsx index ce9b3d8db4a..e4ceac4c892 100644 --- a/src/renderer/src/components/settings/McpConfigSection.tsx +++ b/src/renderer/src/components/settings/McpConfigSection.tsx @@ -2,7 +2,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { AlertCircle, FileCode2, LoaderCircle, Plus, RefreshCw } from 'lucide-react' import { toast } from 'sonner' import { useMountedRef } from '@/hooks/useMountedRef' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' import { canInspectLocalMcpConfigRoot, diff --git a/src/renderer/src/components/settings/MobileEmulatorSettingsPane.tsx b/src/renderer/src/components/settings/MobileEmulatorSettingsPane.tsx index e4f5adaa47f..6453e27d3f7 100644 --- a/src/renderer/src/components/settings/MobileEmulatorSettingsPane.tsx +++ b/src/renderer/src/components/settings/MobileEmulatorSettingsPane.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { Loader2, RefreshCw } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { cn } from '@/lib/utils' import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' import { Badge } from '../ui/badge' diff --git a/src/renderer/src/components/settings/NativeChatExperimentalSetting.tsx b/src/renderer/src/components/settings/NativeChatExperimentalSetting.tsx index 464b1ca7797..d7ea704c553 100644 --- a/src/renderer/src/components/settings/NativeChatExperimentalSetting.tsx +++ b/src/renderer/src/components/settings/NativeChatExperimentalSetting.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { Label } from '../ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' diff --git a/src/renderer/src/components/settings/NotificationSoundSection.tsx b/src/renderer/src/components/settings/NotificationSoundSection.tsx index da1fe4e11cc..e90489741ae 100644 --- a/src/renderer/src/components/settings/NotificationSoundSection.tsx +++ b/src/renderer/src/components/settings/NotificationSoundSection.tsx @@ -1,6 +1,6 @@ import { useState } from 'react' import { toast } from 'sonner' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Label } from '../ui/label' import { Slider } from '../ui/slider' import { diff --git a/src/renderer/src/components/settings/NotificationsPane.test.tsx b/src/renderer/src/components/settings/NotificationsPane.test.tsx index 08d43709a3e..7828efad6ce 100644 --- a/src/renderer/src/components/settings/NotificationsPane.test.tsx +++ b/src/renderer/src/components/settings/NotificationsPane.test.tsx @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { renderToStaticMarkup } from 'react-dom/server' -import type { GlobalSettings, NotificationDispatchRequest } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { NotificationDispatchRequest } from '../../../../shared/notification-settings-types' import { getNotificationSoundOptions } from '@/components/notification-sound-options' import { createNotificationVolumeDraftState, diff --git a/src/renderer/src/components/settings/NotificationsPane.tsx b/src/renderer/src/components/settings/NotificationsPane.tsx index 5d1bb6a23d3..e80f3e49512 100644 --- a/src/renderer/src/components/settings/NotificationsPane.tsx +++ b/src/renderer/src/components/settings/NotificationsPane.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef, useState } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '../ui/button' import { Separator } from '../ui/separator' import { BellRing, Bot, Siren } from 'lucide-react' diff --git a/src/renderer/src/components/settings/OpenInMenuSetting.tsx b/src/renderer/src/components/settings/OpenInMenuSetting.tsx index b6c3f50f4ae..aa18ec951f1 100644 --- a/src/renderer/src/components/settings/OpenInMenuSetting.tsx +++ b/src/renderer/src/components/settings/OpenInMenuSetting.tsx @@ -1,7 +1,8 @@ import type React from 'react' import { useState } from 'react' import { Check, ChevronDown, Pencil, Trash2 } from 'lucide-react' -import type { GlobalSettings, OpenInApplication } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OpenInApplication } from '../../../../shared/ui-chrome-types' import { OPEN_IN_APPLICATIONS_MAX } from '../../../../shared/open-in-applications' import { Button } from '../ui/button' import { diff --git a/src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx b/src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx index db731518101..74f12f0779c 100644 --- a/src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx +++ b/src/renderer/src/components/settings/PluginsSettingsSection.lifecycle.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { PluginHostListEntry } from '../../../../preload/api-types' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { PluginsSettingsSection } from './PluginsSettingsSection' vi.mock('./SettingsSection', () => ({ diff --git a/src/renderer/src/components/settings/PluginsSettingsSection.tsx b/src/renderer/src/components/settings/PluginsSettingsSection.tsx index 30b54aa4284..c76fd6b846f 100644 --- a/src/renderer/src/components/settings/PluginsSettingsSection.tsx +++ b/src/renderer/src/components/settings/PluginsSettingsSection.tsx @@ -1,7 +1,7 @@ import { useEffect, useRef, useState } from 'react' import { Plus } from 'lucide-react' import type { PluginHostInstallSource, PluginHostListEntry } from '../../../../preload/api-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { Button } from '../ui/button' import { PluginConsentDialog } from './PluginConsentDialog' diff --git a/src/renderer/src/components/settings/PrivacyPane.test.ts b/src/renderer/src/components/settings/PrivacyPane.test.ts index 751e1b5627a..5739e39e1d5 100644 --- a/src/renderer/src/components/settings/PrivacyPane.test.ts +++ b/src/renderer/src/components/settings/PrivacyPane.test.ts @@ -15,7 +15,7 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { TelemetryConsentState } from '../../../../shared/telemetry-consent-types' const { getConsentStateMock, setOptInMock } = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/settings/PrivacyPane.tsx b/src/renderer/src/components/settings/PrivacyPane.tsx index f36765e4ffc..9d24b34ffd3 100644 --- a/src/renderer/src/components/settings/PrivacyPane.tsx +++ b/src/renderer/src/components/settings/PrivacyPane.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react' import { ShieldCheck } from 'lucide-react' import { useMountedRef } from '@/hooks/useMountedRef' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { TelemetryConsentState } from '../../../../shared/telemetry-consent-types' import { Label } from '../ui/label' import { Switch } from '../ui/switch' diff --git a/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx b/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx index 94ea998bb8e..6caa188c9d1 100644 --- a/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx +++ b/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.test.tsx @@ -5,7 +5,7 @@ import { createRoot } from 'react-dom/client' import { renderToStaticMarkup } from 'react-dom/server' import { describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { Project } from '../../../../shared/types' +import type { Project } from '../../../../shared/project-types' import { ProjectWindowsRuntimeSetting } from './ProjectWindowsRuntimeSetting' const project: Project = { diff --git a/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.tsx b/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.tsx index 84beb4296e5..8dc75a4bf16 100644 --- a/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.tsx +++ b/src/renderer/src/components/settings/ProjectWindowsRuntimeSetting.tsx @@ -1,4 +1,5 @@ -import type { GlobalSettings, Project, ProjectUpdateArgs } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Project, ProjectUpdateArgs } from '../../../../shared/project-types' import type { LocalWindowsRuntimePreference } from '../../../../shared/project-execution-runtime' import { normalizeProjectRuntimePreference, diff --git a/src/renderer/src/components/settings/QuickCommandsList.tsx b/src/renderer/src/components/settings/QuickCommandsList.tsx index 3a0042b32a8..d86fe657010 100644 --- a/src/renderer/src/components/settings/QuickCommandsList.tsx +++ b/src/renderer/src/components/settings/QuickCommandsList.tsx @@ -1,9 +1,9 @@ import { Check, Copy, Pencil, TerminalSquare, Trash2 } from 'lucide-react' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, TerminalQuickCommand, TerminalQuickCommandScope -} from '../../../../shared/types' +} from '../../../../shared/terminal-quick-command-types' import { getTerminalQuickCommandBody, getTerminalQuickCommandScope, diff --git a/src/renderer/src/components/settings/QuickCommandsPane.tsx b/src/renderer/src/components/settings/QuickCommandsPane.tsx index a4f1ea85fe4..2305a034227 100644 --- a/src/renderer/src/components/settings/QuickCommandsPane.tsx +++ b/src/renderer/src/components/settings/QuickCommandsPane.tsx @@ -1,5 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import type { GlobalSettings, TerminalQuickCommand } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { getTerminalQuickCommandScope } from '../../../../shared/terminal-quick-commands' import { createTerminalQuickCommandDraft, diff --git a/src/renderer/src/components/settings/QuickCommandsScopeFilter.tsx b/src/renderer/src/components/settings/QuickCommandsScopeFilter.tsx index 749d554b783..c878d34b015 100644 --- a/src/renderer/src/components/settings/QuickCommandsScopeFilter.tsx +++ b/src/renderer/src/components/settings/QuickCommandsScopeFilter.tsx @@ -1,6 +1,6 @@ import { Check, ChevronsUpDown } from 'lucide-react' import type { Dispatch, SetStateAction } from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { Button } from '../ui/button' import { Command, CommandItem, CommandList } from '../ui/command' import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover' diff --git a/src/renderer/src/components/settings/QuickCommandsToolbar.tsx b/src/renderer/src/components/settings/QuickCommandsToolbar.tsx index 65e034eeb3f..202e148b1e3 100644 --- a/src/renderer/src/components/settings/QuickCommandsToolbar.tsx +++ b/src/renderer/src/components/settings/QuickCommandsToolbar.tsx @@ -1,6 +1,6 @@ import type { Dispatch, SetStateAction } from 'react' import { Plus, Search } from 'lucide-react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import { Button } from '../ui/button' import { Input } from '../ui/input' diff --git a/src/renderer/src/components/settings/RecentTabOrderControl.tsx b/src/renderer/src/components/settings/RecentTabOrderControl.tsx index 84e54c617b5..adb8432973b 100644 --- a/src/renderer/src/components/settings/RecentTabOrderControl.tsx +++ b/src/renderer/src/components/settings/RecentTabOrderControl.tsx @@ -1,5 +1,5 @@ import React from 'react' -import type { CtrlTabOrderMode } from '../../../../shared/types' +import type { CtrlTabOrderMode } from '../../../../shared/tab-types' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select' import { SearchableSetting } from './SearchableSetting' import { SettingsRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/RepositoryForkSyncSection.tsx b/src/renderer/src/components/settings/RepositoryForkSyncSection.tsx index f3279d59f1e..3a399f16e38 100644 --- a/src/renderer/src/components/settings/RepositoryForkSyncSection.tsx +++ b/src/renderer/src/components/settings/RepositoryForkSyncSection.tsx @@ -1,7 +1,8 @@ import { useRef, useState } from 'react' import { RefreshCw } from 'lucide-react' import { toast } from 'sonner' -import type { ForkSyncMode, GitForkSyncResult, Repo } from '../../../../shared/types' +import type { ForkSyncMode, GitForkSyncResult } from '../../../../shared/git-fork-sync' +import type { Repo } from '../../../../shared/repo-types' import { Button } from '../ui/button' import { SearchableSetting } from './SearchableSetting' import { SettingsSegmentedControl } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/RepositoryHooksSection.test.ts b/src/renderer/src/components/settings/RepositoryHooksSection.test.ts index 6ca17d9fca3..114c7195e82 100644 --- a/src/renderer/src/components/settings/RepositoryHooksSection.test.ts +++ b/src/renderer/src/components/settings/RepositoryHooksSection.test.ts @@ -3,7 +3,7 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getLocalCommandSourcePolicyNotice, RepositoryHooksSection } from './RepositoryHooksSection' vi.mock('@/store', () => ({ diff --git a/src/renderer/src/components/settings/RepositoryHooksSection.tsx b/src/renderer/src/components/settings/RepositoryHooksSection.tsx index bec7ba52a28..e6270dce42b 100644 --- a/src/renderer/src/components/settings/RepositoryHooksSection.tsx +++ b/src/renderer/src/components/settings/RepositoryHooksSection.tsx @@ -4,11 +4,11 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import type { HookCommandSourcePolicy, OrcaHooks, - Repo, RepoHookSettings, SetupAgentStartupPolicy, SetupRunPolicy -} from '../../../../shared/types' +} from '../../../../shared/orca-yaml-hook-types' +import type { Repo } from '../../../../shared/repo-types' import { AlertTriangle, ChevronRight, Plus } from 'lucide-react' import { toast } from 'sonner' import { useTranslation } from 'react-i18next' diff --git a/src/renderer/src/components/settings/RepositoryHostSetupActions.tsx b/src/renderer/src/components/settings/RepositoryHostSetupActions.tsx index e6edcbe68dc..a3527747681 100644 --- a/src/renderer/src/components/settings/RepositoryHostSetupActions.tsx +++ b/src/renderer/src/components/settings/RepositoryHostSetupActions.tsx @@ -5,7 +5,7 @@ import type { ProjectHostSetup, ProjectHostSetupCreateResult, ProjectHostSetupResult -} from '../../../../shared/types' +} from '../../../../shared/project-types' import { translate } from '@/i18n/i18n' import { Button } from '../ui/button' import { Label } from '../ui/label' diff --git a/src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx b/src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx index c448002aa6b..7af24b68947 100644 --- a/src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx +++ b/src/renderer/src/components/settings/RepositoryHostSetupsSection.test.tsx @@ -9,7 +9,8 @@ import { RUNTIME_PROTOCOL_VERSION, WORKSPACE_RUN_CONTEXT_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { useAppStore } from '../../store' import { RepositoryHostSetupsSection } from './RepositoryHostSetupsSection' diff --git a/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx b/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx index 9fa983138bf..71b292059a4 100644 --- a/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx +++ b/src/renderer/src/components/settings/RepositoryHostSetupsSection.tsx @@ -7,7 +7,8 @@ import { } from '../../../../shared/execution-host' import { buildExecutionHostRegistry } from '../../../../shared/execution-host-registry' import { getHostDisplayLabelOverrides } from '../../../../shared/host-setting-overrides' -import type { ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { useAppStore } from '../../store' import { getProjectHostSetupProjectionFromState } from '../../store/selectors' import { cn } from '../../lib/utils' diff --git a/src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx b/src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx index 81cdefa0a55..f6a4badabbb 100644 --- a/src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx +++ b/src/renderer/src/components/settings/RepositoryHostSetupsSection.workspace-window.test.tsx @@ -9,7 +9,8 @@ import { WORKSPACE_RUN_CONTEXT_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' import type { RuntimeStatus } from '../../../../shared/runtime-types' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { useAppStore } from '../../store' import { RepositoryHostSetupsSection } from './RepositoryHostSetupsSection' diff --git a/src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx b/src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx index 996261ab3e9..2d2da75d483 100644 --- a/src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx +++ b/src/renderer/src/components/settings/RepositoryIconPicker.github-avatar-refresh.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { RepositoryIconPicker } from './RepositoryIconPicker' vi.mock('@/runtime/runtime-rpc-client', () => ({ diff --git a/src/renderer/src/components/settings/RepositoryIconPicker.tsx b/src/renderer/src/components/settings/RepositoryIconPicker.tsx index 51edc955fb5..033bf24391e 100644 --- a/src/renderer/src/components/settings/RepositoryIconPicker.tsx +++ b/src/renderer/src/components/settings/RepositoryIconPicker.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { toast } from 'sonner' import { RotateCcw } from 'lucide-react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { RepoIcon } from '../../../../shared/repo-icon' import { DEFAULT_REPO_BADGE_COLOR } from '../../../../shared/constants' import { normalizeRepoBadgeColor } from '../../../../shared/repo-badge-color' diff --git a/src/renderer/src/components/settings/RepositoryPane.test.ts b/src/renderer/src/components/settings/RepositoryPane.test.ts index 47c00a0a601..54518e4932b 100644 --- a/src/renderer/src/components/settings/RepositoryPane.test.ts +++ b/src/renderer/src/components/settings/RepositoryPane.test.ts @@ -5,7 +5,9 @@ import { createRoot, type Root } from 'react-dom/client' import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { Project, Repo, TerminalTab } from '../../../../shared/types' +import type { Project } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { useAppStore } from '../../store' import { diff --git a/src/renderer/src/components/settings/RepositoryPane.tsx b/src/renderer/src/components/settings/RepositoryPane.tsx index ecec034cec2..6b0963ef009 100644 --- a/src/renderer/src/components/settings/RepositoryPane.tsx +++ b/src/renderer/src/components/settings/RepositoryPane.tsx @@ -1,11 +1,7 @@ import { useCallback, useRef, useState } from 'react' -import type { - OrcaHooks, - Project, - ProjectUpdateArgs, - Repo, - RepoHookSettings -} from '../../../../shared/types' +import type { OrcaHooks, RepoHookSettings } from '../../../../shared/orca-yaml-hook-types' +import type { Project, ProjectUpdateArgs } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoKindLabel, isFolderRepo } from '../../../../shared/repo-kind' import { getRepoExecutionHostId, type ExecutionHostId } from '../../../../shared/execution-host' import { Button } from '../ui/button' diff --git a/src/renderer/src/components/settings/RepositorySourceControlAiActionRows.tsx b/src/renderer/src/components/settings/RepositorySourceControlAiActionRows.tsx index 9fcfe68c077..a9a766d8b83 100644 --- a/src/renderer/src/components/settings/RepositorySourceControlAiActionRows.tsx +++ b/src/renderer/src/components/settings/RepositorySourceControlAiActionRows.tsx @@ -1,6 +1,6 @@ import type React from 'react' import { Terminal } from 'lucide-react' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { CUSTOM_AGENT_ID } from '../../../../shared/commit-message-agent-spec' import type { RepoSourceControlAiOverrides, diff --git a/src/renderer/src/components/settings/RepositorySourceControlAiSection.tsx b/src/renderer/src/components/settings/RepositorySourceControlAiSection.tsx index 7e600b11bf6..9eec7bf2319 100644 --- a/src/renderer/src/components/settings/RepositorySourceControlAiSection.tsx +++ b/src/renderer/src/components/settings/RepositorySourceControlAiSection.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react' import type React from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { normalizeSourceControlAiSettings } from '../../../../shared/source-control-ai' import type { SourceControlAiRepoUpdate } from '../../../../shared/source-control-ai-recipe-save' import { useAppStore } from '../../store' diff --git a/src/renderer/src/components/settings/RepositoryWindowsRuntimeSection.tsx b/src/renderer/src/components/settings/RepositoryWindowsRuntimeSection.tsx index 23831b7f601..7c5743c196b 100644 --- a/src/renderer/src/components/settings/RepositoryWindowsRuntimeSection.tsx +++ b/src/renderer/src/components/settings/RepositoryWindowsRuntimeSection.tsx @@ -1,4 +1,5 @@ -import type { GlobalSettings, Project, ProjectUpdateArgs } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Project, ProjectUpdateArgs } from '../../../../shared/project-types' import { SearchableSetting } from './SearchableSetting' import type { SettingsSearchEntry } from './settings-search' import { matchesSettingsSearch } from './settings-search' diff --git a/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx b/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx index eaf2b453988..03164eeb261 100644 --- a/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx +++ b/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.test.tsx @@ -3,7 +3,7 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { RepositoryWorktreeDefaultsSection } from './RepositoryWorktreeDefaultsSection' vi.mock('../../store', () => ({ diff --git a/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.tsx b/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.tsx index e9bef371510..1aaa4662a4c 100644 --- a/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.tsx +++ b/src/renderer/src/components/settings/RepositoryWorktreeDefaultsSection.tsx @@ -1,4 +1,5 @@ -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { Button } from '../ui/button' import { Label } from '../ui/label' import { BaseRefPicker } from './BaseRefPicker' diff --git a/src/renderer/src/components/settings/RichMarkdownSpellcheckSetting.tsx b/src/renderer/src/components/settings/RichMarkdownSpellcheckSetting.tsx index c59a6302386..214bff3282d 100644 --- a/src/renderer/src/components/settings/RichMarkdownSpellcheckSetting.tsx +++ b/src/renderer/src/components/settings/RichMarkdownSpellcheckSetting.tsx @@ -1,5 +1,5 @@ import type React from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' import { SettingsSwitchRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx b/src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx index bd7d31f9652..a9e46b647ad 100644 --- a/src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx +++ b/src/renderer/src/components/settings/RuntimeEnvironmentsPane.tsx @@ -15,7 +15,7 @@ import { import { useCallback, useEffect, useRef, useState } from 'react' import { toast } from 'sonner' import { useMountedRef } from '@/hooks/useMountedRef' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { isUserManagedRuntimeEnvironment, type PublicKnownRuntimeEnvironment diff --git a/src/renderer/src/components/settings/Settings.tsx b/src/renderer/src/components/settings/Settings.tsx index cf07ff934cd..e346de234ef 100644 --- a/src/renderer/src/components/settings/Settings.tsx +++ b/src/renderer/src/components/settings/Settings.tsx @@ -10,7 +10,10 @@ import { type MutableRefObject } from 'react' import { toast } from 'sonner' -import type { GlobalSettings, OrcaHooks, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import type { SpeechModelState } from '../../../../shared/speech-types' import type { SourceControlAiSettings, diff --git a/src/renderer/src/components/settings/SettingsSidebar.test.tsx b/src/renderer/src/components/settings/SettingsSidebar.test.tsx index 75b5785be36..c7125b1109e 100644 --- a/src/renderer/src/components/settings/SettingsSidebar.test.tsx +++ b/src/renderer/src/components/settings/SettingsSidebar.test.tsx @@ -7,7 +7,7 @@ import { getDefaultSettings } from '../../../../shared/constants' import { SettingsSidebar } from './SettingsSidebar' import { TooltipProvider } from '../ui/tooltip' import type { SettingsSetupGuideProgress } from './settings-setup-guide-progress' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' const mocks = vi.hoisted(() => ({ useSettingsSetupGuideProgress: vi.fn() diff --git a/src/renderer/src/components/settings/SettingsSidebar.tsx b/src/renderer/src/components/settings/SettingsSidebar.tsx index c56e71b96d0..11f73b3016d 100644 --- a/src/renderer/src/components/settings/SettingsSidebar.tsx +++ b/src/renderer/src/components/settings/SettingsSidebar.tsx @@ -3,7 +3,8 @@ import { useMemo } from 'react' import { ArrowLeft, Search, Server } from 'lucide-react' import type { RepoIcon } from '../../../../shared/repo-icon' import type { SettingsNavIcon, SettingsNavInstallStatus } from '@/lib/settings-navigation-types' -import type { GitHubRepositoryIdentity, GlobalSettings } from '../../../../shared/types' +import type { GitHubRepositoryIdentity } from '../../../../shared/github/pull-request-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useShortcutKeyComboDetails } from '@/hooks/useShortcutLabel' import { ShortcutKeyCombo } from '../ShortcutKeyCombo' import { cn } from '@/lib/utils' diff --git a/src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx b/src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx index cb0b4c8dc5a..1bdacd6e024 100644 --- a/src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx +++ b/src/renderer/src/components/settings/SourceControlActionRecipeRow.tsx @@ -1,5 +1,6 @@ import { Terminal } from 'lucide-react' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { CustomAgentId } from '../../../../shared/commit-message-agent-spec' import { CUSTOM_AGENT_ID, isCustomAgentId } from '../../../../shared/commit-message-agent-spec' import { diff --git a/src/renderer/src/components/settings/SourceControlAiActionRecipeDefaults.tsx b/src/renderer/src/components/settings/SourceControlAiActionRecipeDefaults.tsx index 56906be96d3..9d00e6505cd 100644 --- a/src/renderer/src/components/settings/SourceControlAiActionRecipeDefaults.tsx +++ b/src/renderer/src/components/settings/SourceControlAiActionRecipeDefaults.tsx @@ -1,7 +1,8 @@ import { useMemo } from 'react' import type React from 'react' import { toast } from 'sonner' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isFolderRepo } from '../../../../shared/repo-kind' import type { SourceControlAiSettings, diff --git a/src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx b/src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx index bcdfccf6e51..271f66d6570 100644 --- a/src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx +++ b/src/renderer/src/components/settings/SparsePresetSettingsSection.test.tsx @@ -1,6 +1,6 @@ import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import { SparsePresetSettingsSection } from './SparsePresetSettingsSection' const storeMock = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/settings/SparsePresetSettingsSection.tsx b/src/renderer/src/components/settings/SparsePresetSettingsSection.tsx index a59f8344e44..4c641bb8125 100644 --- a/src/renderer/src/components/settings/SparsePresetSettingsSection.tsx +++ b/src/renderer/src/components/settings/SparsePresetSettingsSection.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { Plus } from 'lucide-react' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import { useAppStore } from '../../store' import { parseSparsePresetDirectories } from '@/lib/sparse-preset-draft' import { useMountedRef } from '@/hooks/useMountedRef' diff --git a/src/renderer/src/components/settings/TasksPane.test.tsx b/src/renderer/src/components/settings/TasksPane.test.tsx index e87df95c0db..80376ab87d7 100644 --- a/src/renderer/src/components/settings/TasksPane.test.tsx +++ b/src/renderer/src/components/settings/TasksPane.test.tsx @@ -4,7 +4,8 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings, TaskProvider } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TaskProvider } from '../../../../shared/task-providers' import type { TaskProviderReadiness } from './task-source-setup-state' import { TasksPane } from './TasksPane' diff --git a/src/renderer/src/components/settings/TasksPane.tsx b/src/renderer/src/components/settings/TasksPane.tsx index c5b547b3850..8b1eb14929a 100644 --- a/src/renderer/src/components/settings/TasksPane.tsx +++ b/src/renderer/src/components/settings/TasksPane.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { Github, Gitlab } from 'lucide-react' -import type { GlobalSettings, TaskProvider } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TaskProvider } from '../../../../shared/task-providers' import { TASK_PROVIDERS, normalizeVisibleTaskProviders, diff --git a/src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx b/src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx index a9f361d7ce3..f06fe63775a 100644 --- a/src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx +++ b/src/renderer/src/components/settings/TerminalAdvancedSection.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { TerminalAdvancedSection } from './TerminalAdvancedSection' vi.mock('@/i18n/i18n', () => ({ diff --git a/src/renderer/src/components/settings/TerminalAdvancedSection.tsx b/src/renderer/src/components/settings/TerminalAdvancedSection.tsx index 27d29ed4241..a0a2df5c569 100644 --- a/src/renderer/src/components/settings/TerminalAdvancedSection.tsx +++ b/src/renderer/src/components/settings/TerminalAdvancedSection.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { DESKTOP_TERMINAL_SCROLLBACK_ROWS_MAX, DESKTOP_TERMINAL_SCROLLBACK_ROWS_MIN, diff --git a/src/renderer/src/components/settings/TerminalAdvancedTypographyControls.tsx b/src/renderer/src/components/settings/TerminalAdvancedTypographyControls.tsx index b6fd19db228..870314eb64e 100644 --- a/src/renderer/src/components/settings/TerminalAdvancedTypographyControls.tsx +++ b/src/renderer/src/components/settings/TerminalAdvancedTypographyControls.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { DEFAULT_TERMINAL_FONT_WEIGHT, DEFAULT_TERMINAL_FONT_WEIGHT_BOLD, diff --git a/src/renderer/src/components/settings/TerminalAppearanceSection.tsx b/src/renderer/src/components/settings/TerminalAppearanceSection.tsx index d0ee90eb03c..b13f535a83a 100644 --- a/src/renderer/src/components/settings/TerminalAppearanceSection.tsx +++ b/src/renderer/src/components/settings/TerminalAppearanceSection.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { matchesSettingsSearch, normalizeSettingsSearchQuery, diff --git a/src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx b/src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx index 09219834edd..5188f0e3424 100644 --- a/src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx +++ b/src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { NumberField, SettingsRow, diff --git a/src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx b/src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx index d5e6ecc54bd..949dffbb6a7 100644 --- a/src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx +++ b/src/renderer/src/components/settings/TerminalFontSizeSetting.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { TerminalFontSizeSetting } from './TerminalFontSizeSetting' vi.mock('@/i18n/i18n', () => ({ diff --git a/src/renderer/src/components/settings/TerminalFontSizeSetting.tsx b/src/renderer/src/components/settings/TerminalFontSizeSetting.tsx index 61a451c7377..a879136717f 100644 --- a/src/renderer/src/components/settings/TerminalFontSizeSetting.tsx +++ b/src/renderer/src/components/settings/TerminalFontSizeSetting.tsx @@ -1,5 +1,5 @@ import { Minus, Plus } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '../ui/button' import { Input } from '../ui/input' import { SettingsRow } from './SettingsFormControls' diff --git a/src/renderer/src/components/settings/TerminalInteractionSection.tsx b/src/renderer/src/components/settings/TerminalInteractionSection.tsx index 4ad9d67e762..f7c92e998a4 100644 --- a/src/renderer/src/components/settings/TerminalInteractionSection.tsx +++ b/src/renderer/src/components/settings/TerminalInteractionSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { RotateCcw } from 'lucide-react' import { Slider } from '../ui/slider' import { Button } from '../ui/button' diff --git a/src/renderer/src/components/settings/TerminalMacKeyboardSection.tsx b/src/renderer/src/components/settings/TerminalMacKeyboardSection.tsx index 0e4036f2478..f02cbf3d614 100644 --- a/src/renderer/src/components/settings/TerminalMacKeyboardSection.tsx +++ b/src/renderer/src/components/settings/TerminalMacKeyboardSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useDetectedOptionAsAlt } from '@/lib/keyboard-layout/use-effective-mac-option-as-alt' import { translate } from '@/i18n/i18n' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/TerminalPane.tsx b/src/renderer/src/components/settings/TerminalPane.tsx index a2e463edfa2..aacaeffab13 100644 --- a/src/renderer/src/components/settings/TerminalPane.tsx +++ b/src/renderer/src/components/settings/TerminalPane.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Separator } from '../ui/separator' import { matchesSettingsSearch } from './settings-search' import { useAppStore } from '../../store' diff --git a/src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx b/src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx index bb4e3f79397..f9d07b8d63f 100644 --- a/src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx +++ b/src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { DEFAULT_TERMINAL_INACTIVE_PANE_OPACITY } from '../../../../shared/constants' import { NumberField, SettingsSubsectionHeader } from './SettingsFormControls' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/TerminalRenderingSection.tsx b/src/renderer/src/components/settings/TerminalRenderingSection.tsx index 5917247171f..47e3017d353 100644 --- a/src/renderer/src/components/settings/TerminalRenderingSection.tsx +++ b/src/renderer/src/components/settings/TerminalRenderingSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { SettingsRow, SettingsSegmentedControl, diff --git a/src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx b/src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx index 211424b09be..fd2ffa0345e 100644 --- a/src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx +++ b/src/renderer/src/components/settings/TerminalSettingsPreview.lifecycle.test.tsx @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { Mock } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' type Cleanup = () => void diff --git a/src/renderer/src/components/settings/TerminalSettingsPreview.tsx b/src/renderer/src/components/settings/TerminalSettingsPreview.tsx index 20b70ca2139..b3a881f9cd0 100644 --- a/src/renderer/src/components/settings/TerminalSettingsPreview.tsx +++ b/src/renderer/src/components/settings/TerminalSettingsPreview.tsx @@ -14,7 +14,7 @@ import { resolveTerminalLigaturesEnabled } from '../../../../shared/terminal-lig import { normalizeTerminalLineHeight } from '../../../../shared/terminal-line-height-settings' import { PREVIEW_BUFFER } from './terminal-preview-content' import { SettingsSwitch } from './SettingsFormControls' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' // Why: pinned so PREVIEW_BUFFER never wraps; 36 cols fits the 32-char longest line + margin (larger fonts clip, not wrap). diff --git a/src/renderer/src/components/settings/TerminalSetupScriptSection.tsx b/src/renderer/src/components/settings/TerminalSetupScriptSection.tsx index c3b6f549cd8..92bb6fa44a3 100644 --- a/src/renderer/src/components/settings/TerminalSetupScriptSection.tsx +++ b/src/renderer/src/components/settings/TerminalSetupScriptSection.tsx @@ -1,4 +1,5 @@ -import type { GlobalSettings, SetupScriptLaunchMode } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { SetupScriptLaunchMode } from '../../../../shared/worktree/launch-types' import { ToggleGroup, ToggleGroupItem } from '../ui/toggle-group' import { SettingsRow, SettingsSubsectionHeader } from './SettingsFormControls' import { SearchableSetting } from './SearchableSetting' diff --git a/src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts b/src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts index 0114ea3ebf4..39cd8763001 100644 --- a/src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts +++ b/src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { UseWarpThemeImportReturn } from './useWarpThemeImport' let themeTarget: 'dark' | 'light' | undefined = 'dark' diff --git a/src/renderer/src/components/settings/TerminalThemeSections.tsx b/src/renderer/src/components/settings/TerminalThemeSections.tsx index 1fa765bb271..133801aa497 100644 --- a/src/renderer/src/components/settings/TerminalThemeSections.tsx +++ b/src/renderer/src/components/settings/TerminalThemeSections.tsx @@ -1,5 +1,5 @@ import { useState, type Dispatch, type ReactNode, type SetStateAction } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { ColorField, SettingsSegmentedControl, diff --git a/src/renderer/src/components/settings/TerminalWindowSection.tsx b/src/renderer/src/components/settings/TerminalWindowSection.tsx index 0c38f5c00b6..863d7fa11b0 100644 --- a/src/renderer/src/components/settings/TerminalWindowSection.tsx +++ b/src/renderer/src/components/settings/TerminalWindowSection.tsx @@ -1,6 +1,6 @@ import { useRef, useState } from 'react' import { RotateCw } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { Button } from '../ui/button' import { Label } from '../ui/label' import { Switch } from '../ui/switch' diff --git a/src/renderer/src/components/settings/TerminalWindowsShellSection.tsx b/src/renderer/src/components/settings/TerminalWindowsShellSection.tsx index 8a191087092..6009e551653 100644 --- a/src/renderer/src/components/settings/TerminalWindowsShellSection.tsx +++ b/src/renderer/src/components/settings/TerminalWindowsShellSection.tsx @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { WINDOWS_GIT_BASH_SHELL } from '../../../../shared/windows-terminal-shell' import { SettingsRow, diff --git a/src/renderer/src/components/settings/VoicePane.test.tsx b/src/renderer/src/components/settings/VoicePane.test.tsx index 84f6bbd5393..1cf41781125 100644 --- a/src/renderer/src/components/settings/VoicePane.test.tsx +++ b/src/renderer/src/components/settings/VoicePane.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { DeveloperPermissionRequestResult } from '../../../../shared/developer-permissions-types' import type { SpeechModelManifest } from '../../../../shared/speech-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getDefaultVoiceSettings } from '../../../../shared/constants' import { handleVoiceDictationToggle, VoicePane } from './VoicePane' diff --git a/src/renderer/src/components/settings/VoicePane.tsx b/src/renderer/src/components/settings/VoicePane.tsx index f6729301702..7d4d938325f 100644 --- a/src/renderer/src/components/settings/VoicePane.tsx +++ b/src/renderer/src/components/settings/VoicePane.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getDefaultVoiceSettings } from '../../../../shared/constants' import type { SpeechModelManifest, VoiceSettings } from '../../../../shared/speech-types' import { Separator } from '../ui/separator' diff --git a/src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx b/src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx index d55a2336af7..26b86e50373 100644 --- a/src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx +++ b/src/renderer/src/components/settings/WorkspaceDirectorySetting.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { WorkspaceDirectorySetting } from './WorkspaceDirectorySetting' vi.mock('../sidebar/use-sidebar-host-scope-options', () => ({ diff --git a/src/renderer/src/components/settings/WorkspaceDirectorySetting.tsx b/src/renderer/src/components/settings/WorkspaceDirectorySetting.tsx index 8633b735a96..6ca5e985170 100644 --- a/src/renderer/src/components/settings/WorkspaceDirectorySetting.tsx +++ b/src/renderer/src/components/settings/WorkspaceDirectorySetting.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useId, useRef, useState } from 'react' import { FolderOpen, RotateCcw } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getEffectiveHostSetting, getHostSettingOverride, diff --git a/src/renderer/src/components/settings/WorktreeSymlinksSection.tsx b/src/renderer/src/components/settings/WorktreeSymlinksSection.tsx index 33a918a9cdf..02f90518df3 100644 --- a/src/renderer/src/components/settings/WorktreeSymlinksSection.tsx +++ b/src/renderer/src/components/settings/WorktreeSymlinksSection.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useState } from 'react' import { Folder, Link2, Plus, X } from 'lucide-react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { Button } from '../ui/button' import { Command, CommandEmpty, CommandInput, CommandItem, CommandList } from '../ui/command' import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover' diff --git a/src/renderer/src/components/settings/appearance-interface-summary.ts b/src/renderer/src/components/settings/appearance-interface-summary.ts index e37a4f2aa66..ee2497be488 100644 --- a/src/renderer/src/components/settings/appearance-interface-summary.ts +++ b/src/renderer/src/components/settings/appearance-interface-summary.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getUiLanguageChoiceLabel, SHOW_UI_LANGUAGE_SETTING, diff --git a/src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts b/src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts index 68c6513bb72..0b0474e85e7 100644 --- a/src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts +++ b/src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts @@ -1,4 +1,4 @@ -import type { StatusBarItem } from '../../../../shared/types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/appearance-status-bar-grok-toggle-search.ts b/src/renderer/src/components/settings/appearance-status-bar-grok-toggle-search.ts index 3ff4295238e..f2709bbe8a7 100644 --- a/src/renderer/src/components/settings/appearance-status-bar-grok-toggle-search.ts +++ b/src/renderer/src/components/settings/appearance-status-bar-grok-toggle-search.ts @@ -1,4 +1,4 @@ -import type { StatusBarItem } from '../../../../shared/types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/appearance-status-bar-search.ts b/src/renderer/src/components/settings/appearance-status-bar-search.ts index 02403c24f4b..9be73da6a91 100644 --- a/src/renderer/src/components/settings/appearance-status-bar-search.ts +++ b/src/renderer/src/components/settings/appearance-status-bar-search.ts @@ -1,4 +1,4 @@ -import type { StatusBarItem } from '../../../../shared/types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' import { createLocalizedCatalog } from '@/i18n/localized-catalog' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/codex-account-auth-warning.ts b/src/renderer/src/components/settings/codex-account-auth-warning.ts index 9db1e3ae8e5..85fce048857 100644 --- a/src/renderer/src/components/settings/codex-account-auth-warning.ts +++ b/src/renderer/src/components/settings/codex-account-auth-warning.ts @@ -2,7 +2,7 @@ import type { ProviderRateLimits, RateLimitRuntimeTarget } from '../../../../shared/rate-limit-types' -import type { CodexSystemDefaultIdentity } from '../../../../shared/types' +import type { CodexSystemDefaultIdentity } from '../../../../shared/managed-account-types' import { isCodexAuthError } from '../../../../shared/codex-auth-errors' type AccountRuntime = { diff --git a/src/renderer/src/components/settings/codex-session-source-home-control.test.tsx b/src/renderer/src/components/settings/codex-session-source-home-control.test.tsx index 731398c3d0b..fdf27134754 100644 --- a/src/renderer/src/components/settings/codex-session-source-home-control.test.tsx +++ b/src/renderer/src/components/settings/codex-session-source-home-control.test.tsx @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { buildCodexSessionSourceHomeControl } from './codex-session-source-home-control' function settingsWith( diff --git a/src/renderer/src/components/settings/codex-session-source-home-control.tsx b/src/renderer/src/components/settings/codex-session-source-home-control.tsx index 6a49a7b6042..b459d9ffb9d 100644 --- a/src/renderer/src/components/settings/codex-session-source-home-control.tsx +++ b/src/renderer/src/components/settings/codex-session-source-home-control.tsx @@ -1,6 +1,6 @@ import { useState } from 'react' import { Info } from 'lucide-react' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { normalizeGlobalWindowsRuntimeDefault } from '../../../../shared/project-execution-runtime' import { Button } from '../ui/button' import { Input } from '../ui/input' diff --git a/src/renderer/src/components/settings/notification-settings-copy.ts b/src/renderer/src/components/settings/notification-settings-copy.ts index f2d06aeab16..266e2183d75 100644 --- a/src/renderer/src/components/settings/notification-settings-copy.ts +++ b/src/renderer/src/components/settings/notification-settings-copy.ts @@ -1,5 +1,5 @@ import { toast } from 'sonner' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' type SystemNotificationSettingsCopy = { diff --git a/src/renderer/src/components/settings/provider-account-scope.ts b/src/renderer/src/components/settings/provider-account-scope.ts index 5687de9adf8..f6745b3ed9c 100644 --- a/src/renderer/src/components/settings/provider-account-scope.ts +++ b/src/renderer/src/components/settings/provider-account-scope.ts @@ -1,6 +1,6 @@ import { translate } from '@/i18n/i18n' import { getLocalExecutionHostLabel } from '../../../../shared/execution-host' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export type ProviderAccountScope = { label: string diff --git a/src/renderer/src/components/settings/provider-account-visibility.test.ts b/src/renderer/src/components/settings/provider-account-visibility.test.ts index 7c18062c5de..551584779ca 100644 --- a/src/renderer/src/components/settings/provider-account-visibility.test.ts +++ b/src/renderer/src/components/settings/provider-account-visibility.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState -} from '../../../../shared/types' +} from '../../../../shared/managed-account-types' import { getProviderAccountActiveIdForView, getProviderAccountRuntime, diff --git a/src/renderer/src/components/settings/provider-account-visibility.ts b/src/renderer/src/components/settings/provider-account-visibility.ts index a572d2f4ab2..cb6ac050814 100644 --- a/src/renderer/src/components/settings/provider-account-visibility.ts +++ b/src/renderer/src/components/settings/provider-account-visibility.ts @@ -3,7 +3,7 @@ import type { ClaudeRateLimitAccountsState, CodexManagedAccountRuntimeSelection, CodexRateLimitAccountsState -} from '../../../../shared/types' +} from '../../../../shared/managed-account-types' type ProviderAccount = | ClaudeRateLimitAccountsState['accounts'][number] diff --git a/src/renderer/src/components/settings/repository-git-author-search-entries.ts b/src/renderer/src/components/settings/repository-git-author-search-entries.ts index eb202d55209..e18437c05cc 100644 --- a/src/renderer/src/components/settings/repository-git-author-search-entries.ts +++ b/src/renderer/src/components/settings/repository-git-author-search-entries.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { SettingsSearchEntry } from './settings-search' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/repository-git-hooks-search-entries.ts b/src/renderer/src/components/settings/repository-git-hooks-search-entries.ts index a5323265f5b..281622b66db 100644 --- a/src/renderer/src/components/settings/repository-git-hooks-search-entries.ts +++ b/src/renderer/src/components/settings/repository-git-hooks-search-entries.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { SettingsSearchEntry } from './settings-search' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/repository-git-worktree-search-entries.ts b/src/renderer/src/components/settings/repository-git-worktree-search-entries.ts index 2aacea52b61..46d6e3ff529 100644 --- a/src/renderer/src/components/settings/repository-git-worktree-search-entries.ts +++ b/src/renderer/src/components/settings/repository-git-worktree-search-entries.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { SettingsSearchEntry } from './settings-search' import { translate } from '@/i18n/i18n' import { translateSearchKeyword } from './settings-search-keywords' diff --git a/src/renderer/src/components/settings/repository-host-setup-options.ts b/src/renderer/src/components/settings/repository-host-setup-options.ts index c66d8fd1442..987bcd80f53 100644 --- a/src/renderer/src/components/settings/repository-host-setup-options.ts +++ b/src/renderer/src/components/settings/repository-host-setup-options.ts @@ -4,7 +4,7 @@ import { PROJECT_HOST_SETUP_RUNTIME_CAPABILITY, WORKSPACE_RUN_CONTEXT_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' -import type { ProjectHostSetup, ProjectHostSetupState } from '../../../../shared/types' +import type { ProjectHostSetup, ProjectHostSetupState } from '../../../../shared/project-types' import { translate } from '@/i18n/i18n' export type SetupHostOption = { diff --git a/src/renderer/src/components/settings/repository-icon-github.test.ts b/src/renderer/src/components/settings/repository-icon-github.test.ts index 2926d0fd2b4..3abb42ae89d 100644 --- a/src/renderer/src/components/settings/repository-icon-github.test.ts +++ b/src/renderer/src/components/settings/repository-icon-github.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { githubAvatarIcon } from '../../../../shared/repo-icon' import { buildRepositoryGitHubAvatarUpdate, diff --git a/src/renderer/src/components/settings/repository-icon-github.ts b/src/renderer/src/components/settings/repository-icon-github.ts index 0a44a88f030..f3dbee71fe7 100644 --- a/src/renderer/src/components/settings/repository-icon-github.ts +++ b/src/renderer/src/components/settings/repository-icon-github.ts @@ -1,4 +1,5 @@ -import type { GitHubRepositoryIdentity, Repo } from '../../../../shared/types' +import type { GitHubRepositoryIdentity } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' import { githubAvatarIcon, githubAvatarSlug, type RepoIcon } from '../../../../shared/repo-icon' import { githubRepoIdentityKey } from '../../../../shared/github/repository-identity-key' import { callRuntimeRpc, type getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/components/settings/repository-identity-search.ts b/src/renderer/src/components/settings/repository-identity-search.ts index 239090948ec..0be209f66d1 100644 --- a/src/renderer/src/components/settings/repository-identity-search.ts +++ b/src/renderer/src/components/settings/repository-identity-search.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { normalizeSettingsSearchQuery } from './settings-search' export function matchesRepositoryIdentitySearch(query: string, repo: Repo): boolean { diff --git a/src/renderer/src/components/settings/repository-search.ts b/src/renderer/src/components/settings/repository-search.ts index ea878ee2b8e..c9d2a91682f 100644 --- a/src/renderer/src/components/settings/repository-search.ts +++ b/src/renderer/src/components/settings/repository-search.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { isFolderRepo } from '../../../../shared/repo-kind' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' import type { SettingsSearchEntry } from './settings-search' diff --git a/src/renderer/src/components/settings/repository-source-control-ai-draft.ts b/src/renderer/src/components/settings/repository-source-control-ai-draft.ts index 370f60f3d2f..079b3d2cb43 100644 --- a/src/renderer/src/components/settings/repository-source-control-ai-draft.ts +++ b/src/renderer/src/components/settings/repository-source-control-ai-draft.ts @@ -7,7 +7,7 @@ import { type SourceControlActionId } from '../../../../shared/source-control-ai-actions' import type { RepoSourceControlAiOverrides } from '../../../../shared/source-control-ai-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { completeRepoActionRecipe } from './repository-source-control-ai-labels' import { SOURCE_CONTROL_TEXT_ACTION_ID_SET } from './source-control-action-recipe-options' diff --git a/src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts b/src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts index 9cce9bc30fe..a27db245e6d 100644 --- a/src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts +++ b/src/renderer/src/components/settings/repository-source-control-ai-global-ux.ts @@ -1,5 +1,6 @@ import { useEffect, useMemo, useRef, useState } from 'react' -import type { GlobalSettings, TuiAgent } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { CUSTOM_AGENT_ID } from '../../../../shared/commit-message-agent-spec' import type { RepoSourceControlAiOverrides, diff --git a/src/renderer/src/components/settings/repository-source-control-ai-labels.ts b/src/renderer/src/components/settings/repository-source-control-ai-labels.ts index 64f0a111080..afaa7c9e9eb 100644 --- a/src/renderer/src/components/settings/repository-source-control-ai-labels.ts +++ b/src/renderer/src/components/settings/repository-source-control-ai-labels.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { DEFAULT_SOURCE_CONTROL_ACTION_COMMAND_TEMPLATES, resolveSourceControlActionCommandTemplate, diff --git a/src/renderer/src/components/settings/setting-labels.ts b/src/renderer/src/components/settings/setting-labels.ts index 95eb3a26c7c..c2cec96322f 100644 --- a/src/renderer/src/components/settings/setting-labels.ts +++ b/src/renderer/src/components/settings/setting-labels.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export const SETTING_LABELS: Partial> = { terminalFontSize: 'Font Size', diff --git a/src/renderer/src/components/settings/settings-project-list.test.ts b/src/renderer/src/components/settings/settings-project-list.test.ts index 41f82a095bc..2b60d077ef3 100644 --- a/src/renderer/src/components/settings/settings-project-list.test.ts +++ b/src/renderer/src/components/settings/settings-project-list.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import type { ProjectHostSetup, Repo } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { buildRepoIdToHostSelection, buildRepoIdToRepresentative, diff --git a/src/renderer/src/components/settings/settings-project-list.ts b/src/renderer/src/components/settings/settings-project-list.ts index e963c034822..14de9f8d848 100644 --- a/src/renderer/src/components/settings/settings-project-list.ts +++ b/src/renderer/src/components/settings/settings-project-list.ts @@ -1,4 +1,5 @@ -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID, diff --git a/src/renderer/src/components/settings/shortcut-definition-catalog.ts b/src/renderer/src/components/settings/shortcut-definition-catalog.ts index 882f74ab7fc..758fcbb2202 100644 --- a/src/renderer/src/components/settings/shortcut-definition-catalog.ts +++ b/src/renderer/src/components/settings/shortcut-definition-catalog.ts @@ -5,7 +5,7 @@ import { type KeybindingDefinition, type KeybindingOverrides } from '../../../../shared/keybindings' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { ActivePluginCommand } from '@/store/plugin-panels' import { buildPluginCommandKeybindingDefinitions } from '@/lib/plugin-command-keybindings' import { disabledAgentTabActionIds, groupDefinitions, type ShortcutGroup } from './shortcut-groups' diff --git a/src/renderer/src/components/settings/shortcut-groups.ts b/src/renderer/src/components/settings/shortcut-groups.ts index 054a95baf27..495dbbfdd41 100644 --- a/src/renderer/src/components/settings/shortcut-groups.ts +++ b/src/renderer/src/components/settings/shortcut-groups.ts @@ -5,7 +5,7 @@ import { type KeybindingDefinition } from '../../../../shared/keybindings' import { normalizeDisabledTuiAgents } from '../../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type ShortcutGroup = { title: string diff --git a/src/renderer/src/components/settings/source-control-action-recipe-options.ts b/src/renderer/src/components/settings/source-control-action-recipe-options.ts index 1f109d5ed75..dfeaeda128b 100644 --- a/src/renderer/src/components/settings/source-control-action-recipe-options.ts +++ b/src/renderer/src/components/settings/source-control-action-recipe-options.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { SOURCE_CONTROL_TEXT_ACTION_IDS, type SourceControlActionId diff --git a/src/renderer/src/components/settings/sparse-preset-settings-row.tsx b/src/renderer/src/components/settings/sparse-preset-settings-row.tsx index 44cc9775a06..3c0fa0c4a0c 100644 --- a/src/renderer/src/components/settings/sparse-preset-settings-row.tsx +++ b/src/renderer/src/components/settings/sparse-preset-settings-row.tsx @@ -1,5 +1,5 @@ import { Bookmark, LoaderCircle, Pencil, Trash2 } from 'lucide-react' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import { cn } from '@/lib/utils' import { Button } from '../ui/button' import { formatSparsePresetUpdatedAt } from './sparse-preset-date' diff --git a/src/renderer/src/components/settings/task-source-setup-state.test.ts b/src/renderer/src/components/settings/task-source-setup-state.test.ts index d2e4e6a5c27..6eec46a34db 100644 --- a/src/renderer/src/components/settings/task-source-setup-state.test.ts +++ b/src/renderer/src/components/settings/task-source-setup-state.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TaskProvider } from '../../../../shared/types' +import type { TaskProvider } from '../../../../shared/task-providers' import { getAutoExpandedTaskProvider, getIncompleteVisibleTaskProviders, diff --git a/src/renderer/src/components/settings/task-source-setup-state.ts b/src/renderer/src/components/settings/task-source-setup-state.ts index 3ad27d48fa9..628de69dbf0 100644 --- a/src/renderer/src/components/settings/task-source-setup-state.ts +++ b/src/renderer/src/components/settings/task-source-setup-state.ts @@ -1,4 +1,4 @@ -import type { TaskProvider } from '../../../../shared/types' +import type { TaskProvider } from '../../../../shared/task-providers' import type { IntegrationStatusTone } from '@/components/integration-status-pill' export type TaskProviderReadiness = { diff --git a/src/renderer/src/components/settings/terminal-window-color-groups.tsx b/src/renderer/src/components/settings/terminal-window-color-groups.tsx index 652d9ffc04c..41021681b06 100644 --- a/src/renderer/src/components/settings/terminal-window-color-groups.tsx +++ b/src/renderer/src/components/settings/terminal-window-color-groups.tsx @@ -1,4 +1,4 @@ -import type { TerminalColorOverrides } from '../../../../shared/types' +import type { TerminalColorOverrides } from '../../../../shared/terminal-color-overrides' import { translate } from '@/i18n/i18n' export const COLOR_OVERRIDE_GROUPS: { diff --git a/src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx b/src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx index cb2cb636692..d00a358996f 100644 --- a/src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx +++ b/src/renderer/src/components/settings/use-task-source-provider-readiness.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TaskProvider } from '../../../../shared/types' +import type { TaskProvider } from '../../../../shared/task-providers' import type { TaskProviderReadiness } from './task-source-setup-state' import { useTaskSourceProviderReadiness } from './use-task-source-provider-readiness' diff --git a/src/renderer/src/components/settings/use-task-source-provider-readiness.ts b/src/renderer/src/components/settings/use-task-source-provider-readiness.ts index 97db089a677..6b9fa6171ba 100644 --- a/src/renderer/src/components/settings/use-task-source-provider-readiness.ts +++ b/src/renderer/src/components/settings/use-task-source-provider-readiness.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import type { TaskProvider } from '../../../../shared/types' +import type { TaskProvider } from '../../../../shared/task-providers' import { GLOBAL_AGENT_SKILL_SOURCE_KINDS, useInstalledAgentSkillNames diff --git a/src/renderer/src/components/settings/useGhosttyImport.test.ts b/src/renderer/src/components/settings/useGhosttyImport.test.ts index 26326b99286..ee3cb6560b6 100644 --- a/src/renderer/src/components/settings/useGhosttyImport.test.ts +++ b/src/renderer/src/components/settings/useGhosttyImport.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GhosttyImportPreview, GlobalSettings } from '../../../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../../../shared/global-settings-types' const mockStateValues: unknown[] = [] let mockStateIndex = 0 diff --git a/src/renderer/src/components/settings/useGhosttyImport.ts b/src/renderer/src/components/settings/useGhosttyImport.ts index 8031008d21a..39e25f9d044 100644 --- a/src/renderer/src/components/settings/useGhosttyImport.ts +++ b/src/renderer/src/components/settings/useGhosttyImport.ts @@ -1,5 +1,5 @@ import { useState } from 'react' -import type { GhosttyImportPreview, GlobalSettings } from '../../../../shared/types' +import type { GhosttyImportPreview, GlobalSettings } from '../../../../shared/global-settings-types' import { useMountedRef } from '../../hooks/useMountedRef' export type UseGhosttyImportReturn = { diff --git a/src/renderer/src/components/settings/useWarpThemeImport.test.ts b/src/renderer/src/components/settings/useWarpThemeImport.test.ts index cc0a31288dd..c76850cfbda 100644 --- a/src/renderer/src/components/settings/useWarpThemeImport.test.ts +++ b/src/renderer/src/components/settings/useWarpThemeImport.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { MAX_TERMINAL_CUSTOM_THEMES, type WarpThemeImportPreview diff --git a/src/renderer/src/components/settings/useWarpThemeImport.ts b/src/renderer/src/components/settings/useWarpThemeImport.ts index 615df1a0f54..94eadcda7ba 100644 --- a/src/renderer/src/components/settings/useWarpThemeImport.ts +++ b/src/renderer/src/components/settings/useWarpThemeImport.ts @@ -1,6 +1,6 @@ import { useState } from 'react' import { toast } from 'sonner' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { MAX_TERMINAL_CUSTOM_THEMES, normalizeTerminalCustomThemes, diff --git a/src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts b/src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts index f74ffeaa612..629e9ff0a23 100644 --- a/src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts +++ b/src/renderer/src/components/setup-guide/setup-guide-progress-readiness.ts @@ -1,6 +1,7 @@ import { getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import type { ComputerUsePermissionStatusResult } from '../../../../shared/computer-use-permissions-types' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' export type SetupScriptProbeState = { signature: string | null diff --git a/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx b/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx index 7310d450a69..cb793b2bab6 100644 --- a/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx +++ b/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.test.tsx @@ -1,7 +1,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type * as ReactModule from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' type ButtonCapture = { label: string diff --git a/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.tsx b/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.tsx index f3ef3b43c22..a7873acf0fc 100644 --- a/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.tsx +++ b/src/renderer/src/components/sidebar/AddProjectFromFolderDialog.tsx @@ -12,7 +12,7 @@ import { import { Button } from '@/components/ui/button' import { useMountedRef } from '@/hooks/useMountedRef' import { useAppStore } from '@/store' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { isGitRepoKind } from '../../../../shared/repo-kind' import { finishProjectAddWithDefaultCheckout } from './project-added-default-checkout' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx b/src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx index abdd169d4fd..4e3bcdc17fd 100644 --- a/src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx +++ b/src/renderer/src/components/sidebar/AddRepoDialogStepContent.test.tsx @@ -4,7 +4,7 @@ import type { ComponentProps } from 'react' import { Dialog } from '@/components/ui/dialog' import { TooltipProvider } from '@/components/ui/tooltip' import { AddRepoDialogStepContent } from './AddRepoDialogStepContent' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' const nestedScan: NestedRepoScanResult = { selectedPath: '/workspace/platform', diff --git a/src/renderer/src/components/sidebar/AddRepoDialogStepContent.tsx b/src/renderer/src/components/sidebar/AddRepoDialogStepContent.tsx index 9a0da649f8c..5e405d7c134 100644 --- a/src/renderer/src/components/sidebar/AddRepoDialogStepContent.tsx +++ b/src/renderer/src/components/sidebar/AddRepoDialogStepContent.tsx @@ -6,7 +6,7 @@ import { AddRepoLocalStartStep } from './AddRepoStartSteps' import { AddRepoServerPathStartStep } from './AddRepoServerStartStep' import { AddRepoNestedImportStep } from './AddRepoNestedImportStep' import type { AddRepoDialogStep } from './add-repo-dialog-types' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import type { SshConnectionState, SshTarget } from '../../../../shared/ssh-types' import type { GitAvailability } from './create-project-defaults' diff --git a/src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx b/src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx index ff243a3a5cc..437f9e4d875 100644 --- a/src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx +++ b/src/renderer/src/components/sidebar/AddRepoNestedImportStep.test.tsx @@ -7,7 +7,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { AddRepoNestedImportStep } from './AddRepoNestedImportStep' import { TooltipProvider } from '@/components/ui/tooltip' import { Dialog } from '@/components/ui/dialog' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' const scan: NestedRepoScanResult = { selectedPath: '/workspace/platform', diff --git a/src/renderer/src/components/sidebar/AddRepoNestedImportStep.tsx b/src/renderer/src/components/sidebar/AddRepoNestedImportStep.tsx index ef41edbf1a1..6366214bb66 100644 --- a/src/renderer/src/components/sidebar/AddRepoNestedImportStep.tsx +++ b/src/renderer/src/components/sidebar/AddRepoNestedImportStep.tsx @@ -6,7 +6,7 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { NestedRepoChecklist } from '@/components/repo/NestedRepoChecklist' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import { NestedRepoScanLimitNotice } from '../repo/NestedRepoScanLimitNotice' import { getRuntimePathBasename } from '../../../../shared/cross-platform-path' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts b/src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts index fc8829474ee..6ca5d28f16f 100644 --- a/src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts +++ b/src/renderer/src/components/sidebar/AddRepoSteps.default-checkout.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const mocks = vi.hoisted(() => ({ stateValues: [] as unknown[], diff --git a/src/renderer/src/components/sidebar/AddRepoSteps.tsx b/src/renderer/src/components/sidebar/AddRepoSteps.tsx index 0acdaa888b1..248bcd87058 100644 --- a/src/renderer/src/components/sidebar/AddRepoSteps.tsx +++ b/src/renderer/src/components/sidebar/AddRepoSteps.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { toast } from 'sonner' import { useAppStore } from '@/store' import { useMountedRef } from '@/hooks/useMountedRef' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import type { SshTarget, SshConnectionState } from '../../../../shared/ssh-types' import { createNestedRepoTelemetryAttemptId } from '../../../../shared/nested-repo-telemetry' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx b/src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx index 65700ef574b..a36eca15297 100644 --- a/src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx +++ b/src/renderer/src/components/sidebar/DeleteWorktreeDialog.test.tsx @@ -1,7 +1,9 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ButtonHTMLAttributes, ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree, WorktreeLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' const mocks = vi.hoisted(() => { const state = { diff --git a/src/renderer/src/components/sidebar/DeleteWorktreeLineageNotice.tsx b/src/renderer/src/components/sidebar/DeleteWorktreeLineageNotice.tsx index 427b96308cc..8e442f27d39 100644 --- a/src/renderer/src/components/sidebar/DeleteWorktreeLineageNotice.tsx +++ b/src/renderer/src/components/sidebar/DeleteWorktreeLineageNotice.tsx @@ -1,6 +1,6 @@ import { Workflow } from 'lucide-react' import type { JSX } from 'react' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { DeleteWorktreeDirtyChangeHint } from './DeleteWorktreeDirtyChangeHint' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.tsx b/src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.tsx index e6165e8c437..9f557af4324 100644 --- a/src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.tsx +++ b/src/renderer/src/components/sidebar/DeleteWorktreeTargetPreview.tsx @@ -1,7 +1,7 @@ import type { JSX } from 'react' import { LoaderCircle } from 'lucide-react' import { ScrollArea } from '@/components/ui/scroll-area' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { DeleteWorktreeDirtyChangeHint } from './DeleteWorktreeDirtyChangeHint' type DeleteState = { diff --git a/src/renderer/src/components/sidebar/HiddenWorktreeRecoveryList.tsx b/src/renderer/src/components/sidebar/HiddenWorktreeRecoveryList.tsx index 8f842bee693..567428702b8 100644 --- a/src/renderer/src/components/sidebar/HiddenWorktreeRecoveryList.tsx +++ b/src/renderer/src/components/sidebar/HiddenWorktreeRecoveryList.tsx @@ -4,7 +4,8 @@ import { useVirtualizer } from '@tanstack/react-virtual' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { translate } from '@/i18n/i18n' -import type { DetectedWorktreeListResult, Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { DetectedWorktreeListResult } from '../../../../shared/worktree/types' import { getHiddenImportableExternalWorktrees, getVisibleNonOrcaWorktrees diff --git a/src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx b/src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx index a392374762d..5b78c067d46 100644 --- a/src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx +++ b/src/renderer/src/components/sidebar/NonGitFolderDialog.test.tsx @@ -1,7 +1,8 @@ import { renderToStaticMarkup } from 'react-dom/server' import type * as ReactModule from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' type ButtonCapture = { label: string diff --git a/src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx b/src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx index f3580472439..8a9651aa6a8 100644 --- a/src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx +++ b/src/renderer/src/components/sidebar/ProjectAddedDialog.test.tsx @@ -1,7 +1,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import type * as ReactModule from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const mocks = vi.hoisted(() => ({ state: { diff --git a/src/renderer/src/components/sidebar/RemoteFileBrowser.tsx b/src/renderer/src/components/sidebar/RemoteFileBrowser.tsx index dc43f2bb8fe..9ec07ccf651 100644 --- a/src/renderer/src/components/sidebar/RemoteFileBrowser.tsx +++ b/src/renderer/src/components/sidebar/RemoteFileBrowser.tsx @@ -20,7 +20,7 @@ import { import { driveBreadcrumbPath, splitBrowsePath } from './remote-file-browser-drive-paths' import { browseRuntimeServerDirectory } from '@/runtime/runtime-server-directory-browser' import { translate } from '@/i18n/i18n' -import type { FilesystemPathFlavor } from '../../../../shared/types' +import type { FilesystemPathFlavor } from '../../../../shared/filesystem-entry-types' type RemoteFileBrowserProps = ( | { targetId: string; runtimeEnvironmentId?: never } diff --git a/src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts b/src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts index aa3dc5bc07d..18a1941298c 100644 --- a/src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts +++ b/src/renderer/src/components/sidebar/SetupScriptPromptCard.test.ts @@ -6,7 +6,7 @@ import { } from './setup-script-prompt-render-state' import type { SetupScriptPromptInspection } from '@/lib/setup-script-prompt' import { getRepoHostIdentityForParts } from '@/store/slices/repo-host-identity' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' function repoIdentity(repoId: string, hostId: string): string { return getRepoHostIdentityForParts(repoId, hostId) diff --git a/src/renderer/src/components/sidebar/Sidebar.test.tsx b/src/renderer/src/components/sidebar/Sidebar.test.tsx index 6704020676b..098ed7f203c 100644 --- a/src/renderer/src/components/sidebar/Sidebar.test.tsx +++ b/src/renderer/src/components/sidebar/Sidebar.test.tsx @@ -6,7 +6,7 @@ import { tmpdir } from 'node:os' import { cleanup, render } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' const mocks = vi.hoisted(() => ({ state: {} as Record, diff --git a/src/renderer/src/components/sidebar/SidebarFeedbackDialog.tsx b/src/renderer/src/components/sidebar/SidebarFeedbackDialog.tsx index 1bdd1050a68..f0d034edefe 100644 --- a/src/renderer/src/components/sidebar/SidebarFeedbackDialog.tsx +++ b/src/renderer/src/components/sidebar/SidebarFeedbackDialog.tsx @@ -13,7 +13,7 @@ import { } from '@/components/ui/dialog' import { useMountedRef } from '@/hooks/useMountedRef' import { cn } from '@/lib/utils' -import type { GitHubViewer } from '../../../../shared/types' +import type { GitHubViewer } from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' import { extractImageFilesFromDataTransfer, diff --git a/src/renderer/src/components/sidebar/SidebarHostScopeMenuSection.tsx b/src/renderer/src/components/sidebar/SidebarHostScopeMenuSection.tsx index b310ba988c6..9f3920fa615 100644 --- a/src/renderer/src/components/sidebar/SidebarHostScopeMenuSection.tsx +++ b/src/renderer/src/components/sidebar/SidebarHostScopeMenuSection.tsx @@ -6,7 +6,10 @@ import { DropdownMenuSubTrigger } from '@/components/ui/dropdown-menu' import { ALL_EXECUTION_HOSTS_SCOPE, type ExecutionHostId } from '../../../../shared/execution-host' -import type { VisibleWorkspaceHostIds, WorkspaceHostScope } from '../../../../shared/types' +import type { + VisibleWorkspaceHostIds, + WorkspaceHostScope +} from '../../../../shared/ui-chrome-types' import { getSidebarHostHealthLabel, type SidebarHostOption } from './sidebar-host-options' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/SidebarNav.test.tsx b/src/renderer/src/components/sidebar/SidebarNav.test.tsx index d76022b77ac..87b51ee5b23 100644 --- a/src/renderer/src/components/sidebar/SidebarNav.test.tsx +++ b/src/renderer/src/components/sidebar/SidebarNav.test.tsx @@ -6,7 +6,8 @@ import { waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { TooltipProvider } from '@/components/ui/tooltip' import { getDefaultSettings } from '../../../../shared/constants' -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { i18n } from '../../i18n/i18n' import { PSEUDO_LOCALIZATION_LOCALE } from '../../i18n/pseudo-localization' diff --git a/src/renderer/src/components/sidebar/SidebarNav.tsx b/src/renderer/src/components/sidebar/SidebarNav.tsx index 98333ba6287..45ea99e30f7 100644 --- a/src/renderer/src/components/sidebar/SidebarNav.tsx +++ b/src/renderer/src/components/sidebar/SidebarNav.tsx @@ -3,7 +3,7 @@ import { Bell, CalendarClock, EyeOff, Files, Search, Smartphone } from 'lucide-r import { useTranslation } from 'react-i18next' import { useAppStore } from '@/store' import { cn } from '@/lib/utils' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { useActivityUnreadCount } from '@/components/activity/useActivityUnreadCount' import { useShortcutKeyComboDetails } from '@/hooks/useShortcutLabel' import { ShortcutKeyCombo } from '@/components/ShortcutKeyCombo' diff --git a/src/renderer/src/components/sidebar/SidebarProjectFilterPanel.tsx b/src/renderer/src/components/sidebar/SidebarProjectFilterPanel.tsx index b9a705a9295..9057038b427 100644 --- a/src/renderer/src/components/sidebar/SidebarProjectFilterPanel.tsx +++ b/src/renderer/src/components/sidebar/SidebarProjectFilterPanel.tsx @@ -11,7 +11,7 @@ import { } from '@/components/ui/command' import RepoBadgeLabel from '@/components/repo/RepoBadgeLabel' import { searchRepos } from '@/lib/repo-search' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { translate } from '@/i18n/i18n' function projectCommandFilter(_value: string, search: string, keywords?: string[]): number { diff --git a/src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.tsx b/src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.tsx index 8aa62ac9f61..65623ee8983 100644 --- a/src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.tsx +++ b/src/renderer/src/components/sidebar/SidebarRepositoryFilterSection.tsx @@ -6,7 +6,7 @@ import { DropdownMenuSubTrigger } from '@/components/ui/dropdown-menu' import { SidebarProjectFilterPanel } from './SidebarProjectFilterPanel' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { translate } from '@/i18n/i18n' function getProjectFilterVisibilityLabel({ diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanCard.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanCard.tsx index cd7b94dd725..aa515e40eff 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanCard.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanCard.tsx @@ -1,7 +1,8 @@ import React from 'react' import { Pin } from 'lucide-react' import { Badge } from '@/components/ui/badge' -import type { Repo, WorkspaceStatus, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import WorktreeCard from './WorktreeCard' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx index f1dd7234eaf..f7fcb4d4bc8 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.search.test.tsx @@ -5,7 +5,9 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { WORKTREE_PALETTE_QUERY_MAX_BYTES } from '@/lib/worktree-palette-query-bounds' import { useAppStore } from '@/store' -import type { Repo, Worktree, WorktreeMeta } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { Worktree } from '../../../../shared/worktree/types' import WorkspaceKanbanDrawer from './WorkspaceKanbanDrawer' import type { WorkspaceKanbanLaneView } from './workspace-kanban-search' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx index 25ae48868db..cf56ebe275f 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.task-status-sync.test.tsx @@ -4,7 +4,8 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import WorkspaceKanbanDrawer from './WorkspaceKanbanDrawer' import type * as WorkspaceBoardTaskStatusSync from './workspace-board-task-status-sync' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.tsx index b457c378a15..1158e844abd 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawer.tsx @@ -49,7 +49,8 @@ import { shouldWriteManualOrderForGroupDrop, type WorktreeDragGroup } from './worktree-manual-order' -import type { WorkspaceStatus, Worktree, WorktreeMeta } from '../../../../shared/types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import { makeWorkspaceStatusId } from '../../../../shared/workspace-statuses' import { STATUS_BAR_RESERVE_HEIGHT, WORKSPACE_TOP_CHROME_HEIGHT } from './workspace-chrome-metrics' import { useContextualTour } from '@/components/contextual-tours/use-contextual-tour' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx index ce59a22718b..fd0f12c45a2 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.test.tsx @@ -1,7 +1,7 @@ import React, { isValidElement } from 'react' import { describe, expect, it, vi } from 'vitest' import { SheetHeader, SheetTitle } from '@/components/ui/sheet' -import type { WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import SidebarFilter from './SidebarFilter' import WorkspaceKanbanDrawerHeader from './WorkspaceKanbanDrawerHeader' import WorkspaceKanbanSearchField from './WorkspaceKanbanSearchField' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.tsx index 051a46057c7..0df7680333c 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanDrawerHeader.tsx @@ -2,7 +2,7 @@ import React from 'react' import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet' -import type { WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import SidebarFilter from './SidebarFilter' import WorkspaceKanbanSearchField from './WorkspaceKanbanSearchField' import WorkspaceKanbanSettingsMenu from './WorkspaceKanbanSettingsMenu' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx index d5b9b5c4176..b1ccfcccd3e 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.test.tsx @@ -11,7 +11,8 @@ import { cleanup, render } from '@testing-library/react' import { createRef } from 'react' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' const WINDOW_START = 20 const WINDOW_END = 25 diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.tsx index 49b9232839b..6b3ce32689a 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneCardList.tsx @@ -1,6 +1,7 @@ import React, { useCallback, useLayoutEffect, useMemo, useRef } from 'react' import { useVirtualizer } from '@tanstack/react-virtual' -import type { Repo, WorkspaceStatus, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import WorkspaceKanbanCard from './WorkspaceKanbanCard' import { registerWorkspaceKanbanVirtualLaneLayout } from './workspace-kanban-virtual-lane-layout' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx index 161bb9ff597..f5a81bdb3bc 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.test.tsx @@ -2,7 +2,8 @@ import { act, cleanup, fireEvent, render } from '@testing-library/react' import React, { createRef } from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, WorkspaceStatusDefinition, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types' const virtualWindow = vi.hoisted(() => ({ startIndex: 0, visibleCount: 4 })) const animationFrames = new Map() diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.tsx index 48d77c9b7f7..a13468fc340 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanLaneGrid.tsx @@ -8,12 +8,12 @@ import React, { useState } from 'react' import { useVirtualizer, type Range } from '@tanstack/react-virtual' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, WorkspaceStatus, WorkspaceStatusDefinition, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' import type { WorkspaceKanbanLaneView } from './workspace-kanban-search' import { extractWorkspaceKanbanLaneRange } from './workspace-kanban-lane-range' import WorkspaceKanbanStatusLane from './WorkspaceKanbanStatusLane' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx index bba46379d77..40dead0e341 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.test.tsx @@ -2,7 +2,7 @@ import { createRoot, type Root } from 'react-dom/client' import { act, type ReactNode } from 'react' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' const statuses: WorkspaceStatusDefinition[] = [{ id: 'todo', label: 'Todo' }] ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.tsx index a7fd4693143..d4bceb02494 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanSettingsMenu.tsx @@ -10,7 +10,7 @@ import { import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import { SettingsSwitch } from '../settings/SettingsFormControls' -import type { WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import { getWorkspaceStatusVisualMeta } from './workspace-status' import WorkspaceStatusAppearancePopover from './WorkspaceStatusAppearancePopover' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx index 91987985d59..fc2a3e5e9bc 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.test.tsx @@ -3,7 +3,8 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { serializeWorkspaceLaneFullIds } from './workspace-kanban-filtered-drop-index' import WorkspaceKanbanStatusLane from './WorkspaceKanbanStatusLane' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.tsx index cceda5e12ee..1379246c5be 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanStatusLane.tsx @@ -1,11 +1,11 @@ import React, { useMemo, useRef } from 'react' import { Plus } from 'lucide-react' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, WorkspaceStatus, WorkspaceStatusDefinition, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' import { WORKSPACE_BOARD_COLUMN_WIDTH_MAX, WORKSPACE_BOARD_COLUMN_WIDTH_MIN diff --git a/src/renderer/src/components/sidebar/WorkspaceStatusAppearancePopover.tsx b/src/renderer/src/components/sidebar/WorkspaceStatusAppearancePopover.tsx index c018d7ae048..fb0ececf03a 100644 --- a/src/renderer/src/components/sidebar/WorkspaceStatusAppearancePopover.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceStatusAppearancePopover.tsx @@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' -import type { WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import { getWorkspaceStatusColorOptions, getWorkspaceStatusIconOptions, diff --git a/src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx index f9b3976a826..73927976237 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.affiliate-list-mode.test.tsx @@ -3,7 +3,10 @@ import { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings, Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' const openModal = vi.fn() const setRenamingWorktreeId = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx index 707ce16ec61..a3097460ea7 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx @@ -3,7 +3,10 @@ import React, { type ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/dashboard/useDashboardData' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { GlobalSettings, Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorkspacePortScanResult } from '../../../../shared/workspace-ports' const fetchHostedReviewForBranch = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx index 5aee22c8b16..e8376a64f08 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.compact-ports-hover-independence.test.tsx @@ -4,7 +4,10 @@ import React, { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { DashboardAgentRow as DashboardAgentRowData } from '@/components/dashboard/useDashboardData' -import type { GlobalSettings, Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorkspacePortScanResult } from '../../../../shared/workspace-ports' const fetchHostedReviewForBranch = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx index 98c2a1b3712..6d9fa6d1b5d 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.hosted-review-refresh.test.tsx @@ -3,7 +3,9 @@ import type { ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { act } from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' const fetchHostedReviewForBranch = vi.fn() const fetchIssue = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx index cbbf5a35b86..1e26254e712 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.lineage.test.tsx @@ -1,7 +1,9 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' const fetchHostedReviewForBranch = vi.fn() const fetchIssue = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx index 02927202e29..7c9669a22f9 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.merged-pr-display.test.tsx @@ -2,13 +2,11 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { - GlobalSettings, - PRInfo, - Repo, - Worktree, - WorktreeCardProperty -} from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' const fetchHostedReviewForBranch = vi.fn() const fetchIssue = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx index 9da7873b388..47017f87fab 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.pinned-repo-icon.test.tsx @@ -1,7 +1,10 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GlobalSettings, Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' const fetchHostedReviewForBranch = vi.fn() const fetchIssue = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx index 4c31d82e153..1ae9026cc74 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.pr-display.test.tsx @@ -2,13 +2,11 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { - GlobalSettings, - PRInfo, - Repo, - Worktree, - WorktreeCardProperty -} from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import { COMPACT_WORKTREE_CARD_PROPERTIES } from '../../../../shared/worktree/card-properties' import type { WorkspacePortScanResult } from '../../../../shared/workspace-ports' diff --git a/src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx index 7456cce2faa..ffef859d9ca 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.quick-actions.test.tsx @@ -1,13 +1,11 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import type { - GitConflictOperation, - GlobalSettings, - Repo, - Worktree, - WorktreeCardProperty -} from '../../../../shared/types' +import type { GitConflictOperation } from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import type WorktreeCardComponent from './WorktreeCard' import type * as WorkspaceDeleteQuickAction from './workspace-delete-quick-action' diff --git a/src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx b/src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx index 19ca3a4e441..1fe2f4b9530 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCard.ssh-reconnect-prompt.test.tsx @@ -1,7 +1,9 @@ import { renderToStaticMarkup } from 'react-dom/server' import type { ReactNode } from 'react' import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import type WorktreeCardComponent from './WorktreeCard' const fetchHostedReviewForBranch = vi.fn() diff --git a/src/renderer/src/components/sidebar/WorktreeCard.test.ts b/src/renderer/src/components/sidebar/WorktreeCard.test.ts index abc03a3c4fd..35c351f3457 100644 --- a/src/renderer/src/components/sidebar/WorktreeCard.test.ts +++ b/src/renderer/src/components/sidebar/WorktreeCard.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' vi.mock('@/lib/agent-status', () => ({ detectAgentStatusFromTitle: vi.fn((title: string) => { diff --git a/src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.tsx b/src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.tsx index 7d8ebd2de99..1ba6a45ce48 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardAutomationDetailSection.tsx @@ -1,7 +1,7 @@ import React from 'react' import { CalendarClock, PlayCircle } from 'lucide-react' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { AutomationWorkspaceProvenance } from '../../../../shared/types' +import type { AutomationWorkspaceProvenance } from '../../../../shared/worktree/types' import { WorktreeCardDetailSection, WorktreeCardDetailSectionContent diff --git a/src/renderer/src/components/sidebar/WorktreeCardCliDetailSection.tsx b/src/renderer/src/components/sidebar/WorktreeCardCliDetailSection.tsx index c5903340002..b636fc015e6 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardCliDetailSection.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardCliDetailSection.tsx @@ -1,6 +1,6 @@ import React from 'react' import { SquareTerminal } from 'lucide-react' -import type { CliWorkspaceProvenance } from '../../../../shared/types' +import type { CliWorkspaceProvenance } from '../../../../shared/worktree/types' import { formatAgentTypeLabel } from '../../../../shared/agent-type-label' import { WorktreeCardDetailSection, diff --git a/src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.tsx b/src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.tsx index 535ab541435..1c9cd781052 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardDisplayMenuSection.tsx @@ -10,7 +10,10 @@ import { DropdownMenuSubContent, DropdownMenuSubTrigger } from '@/components/ui/dropdown-menu' -import type { AgentActivityDisplayMode, WorktreeCardProperty } from '../../../../shared/types' +import type { + AgentActivityDisplayMode, + WorktreeCardProperty +} from '../../../../shared/ui-chrome-types' import { AGENT_ACTIVITY_DISPLAY_OPTIONS, CARD_LAYOUT_OPTIONS, diff --git a/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx b/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx index 2d2d081b067..5d5900af933 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardHelpers.tsx @@ -1,5 +1,7 @@ import React from 'react' -import type { CheckStatus, GitConflictOperation, TerminalTab } from '../../../../shared/types' +import type { GitConflictOperation } from '../../../../shared/git-status-types' +import type { CheckStatus } from '../../../../shared/github/pull-request-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' // ── Pure helper functions ──────────────────────────────────────────── diff --git a/src/renderer/src/components/sidebar/WorktreeCardMetadataStatusBadges.tsx b/src/renderer/src/components/sidebar/WorktreeCardMetadataStatusBadges.tsx index 3cd3fece64c..21b064cc323 100644 --- a/src/renderer/src/components/sidebar/WorktreeCardMetadataStatusBadges.tsx +++ b/src/renderer/src/components/sidebar/WorktreeCardMetadataStatusBadges.tsx @@ -4,7 +4,7 @@ import { CircleCheck, CircleDot, CircleX, Clock, GitMerge } from 'lucide-react' import { cn } from '@/lib/utils' import { PullRequestIcon, checksLabel } from './WorktreeCardHelpers' import type { WorktreeCardPrDisplay } from './worktree-card-pr-display' -import type { IssueInfo } from '../../../../shared/types' +import type { IssueInfo } from '../../../../shared/github/pull-request-types' import { translate } from '@/i18n/i18n' function MetadataStatusBadge({ diff --git a/src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts b/src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts index 31f2e297f68..b4fc426a79e 100644 --- a/src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts +++ b/src/renderer/src/components/sidebar/WorktreeContextMenu.test.ts @@ -14,7 +14,8 @@ import { selectMenuScopedMap, shouldRevealWorktreeDeveloperMenu } from './WorktreeContextMenu' -import type { Worktree, WorktreeLineage, WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types' describe('shouldRevealWorktreeDeveloperMenu', () => { it('stays hidden for an ordinary right-click', () => { diff --git a/src/renderer/src/components/sidebar/WorktreeContextMenu.tsx b/src/renderer/src/components/sidebar/WorktreeContextMenu.tsx index be61dd64d3d..d2c20fff721 100644 --- a/src/renderer/src/components/sidebar/WorktreeContextMenu.tsx +++ b/src/renderer/src/components/sidebar/WorktreeContextMenu.tsx @@ -34,12 +34,12 @@ import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { useAllWorktrees, useRepoById, useRepoMap, useWorktreeMap } from '@/store/selectors' import { cn } from '@/lib/utils' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, - Worktree, WorkspaceStatus, - WorkspaceStatusDefinition -} from '../../../../shared/types' + WorkspaceStatusDefinition, + Worktree +} from '../../../../shared/worktree/types' import { deferWorktreeContextMenuDeleteIntent, type WorktreeContextMenuDeleteIntent diff --git a/src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx b/src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx index 7816939efb2..6955e14ac60 100644 --- a/src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeDeveloperMenuReveal.test.tsx @@ -8,7 +8,7 @@ import { cleanup, fireEvent, render, screen } from '@testing-library/react' import type { ReactNode } from 'react' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' vi.mock('@/store', () => { const state = { diff --git a/src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx b/src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx index 5c9dda301d3..8278eb3482b 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.card-memo-stability.test.tsx @@ -4,7 +4,9 @@ import { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { Repo, Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' globalThis.IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx b/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx index 5a644f0d265..01c9847d980 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.lineage-agent-expansion-coupling.test.tsx @@ -20,13 +20,11 @@ import type { AgentStatusEntry, AgentStatusOrchestrationContext } from '../../../../shared/agent-status-types' -import type { - Repo, - TerminalTab, - Worktree, - WorktreeCardProperty, - WorktreeLineage -} from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { clearWorktreeAgentExpansionStateForTests } from './worktree-card-agents-expansion-state' globalThis.IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts b/src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts index 4e8896fb44d..756c99d8522 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts +++ b/src/renderer/src/components/sidebar/WorktreeList.lineage-child-card.test.ts @@ -2,13 +2,11 @@ import React from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { beforeAll, describe, expect, it, vi } from 'vitest' -import type { - FolderWorkspace, - ProjectGroup, - Repo, - Worktree, - WorktreeLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import type * as WorktreeListModule from './WorktreeList' import { cloneDefaultWorkspaceStatuses } from '../../../../shared/workspace-statuses' diff --git a/src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx b/src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx index 52f3a591473..d36aa264f02 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.lineage-child-real-card.test.tsx @@ -4,12 +4,10 @@ import { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { - Repo, - Worktree, - WorktreeCardProperty, - WorktreeLineage -} from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { FLUSH_CARD_MIN_CONTENT_INSET, LINEAGE_CHILDREN_INLINE_OFFSET, diff --git a/src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx b/src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx index 00c9e47a0c8..47cc038799d 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.status-lane-lineage-drop.test.tsx @@ -3,14 +3,11 @@ import { act, type ReactNode } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import type { - Repo, - WorkspaceStatus, - Worktree, - WorktreeCardProperty, - WorktreeLineage, - WorktreeMeta -} from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import { DEFAULT_WORKSPACE_STATUSES } from '../../../../shared/workspace-status-defaults' import { WORKSPACE_STATUS_DRAG_IDS_TYPE, diff --git a/src/renderer/src/components/sidebar/WorktreeList.tsx b/src/renderer/src/components/sidebar/WorktreeList.tsx index 0202dd41d70..138f36a3a2f 100644 --- a/src/renderer/src/components/sidebar/WorktreeList.tsx +++ b/src/renderer/src/components/sidebar/WorktreeList.tsx @@ -57,18 +57,17 @@ import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { cn } from '@/lib/utils' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { ProjectOrderBy } from '../../../../shared/ui-chrome-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' import type { - Worktree, - Repo, - FolderWorkspace, - ProjectGroup, - ProjectOrderBy, - WorktreeLineage, - WorktreeMeta, - WorkspaceLineage, WorkspaceStatus, - WorkspaceStatusDefinition -} from '../../../../shared/types' + WorkspaceStatusDefinition, + Worktree +} from '../../../../shared/worktree/types' import { DEFAULT_SHOW_SLEEPING_WORKSPACES } from '../../../../shared/constants' import { buildWorktreeComparator, compareWorktreeSortLabel } from './smart-sort' import { diff --git a/src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx b/src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx index 66de27601e5..13b4bbac1b8 100644 --- a/src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeMetaDialog.test.tsx @@ -4,13 +4,11 @@ import { act, type ReactNode } from 'react' import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' -import type { - FolderWorkspace, - LinearIssue, - Repo, - Worktree, - WorktreeMeta -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' // Why: Radix tooltips need a provider the dialog does not own, and the menu's diff --git a/src/renderer/src/components/sidebar/WorktreeOpenInMenu.tsx b/src/renderer/src/components/sidebar/WorktreeOpenInMenu.tsx index d5242211256..ad4636860df 100644 --- a/src/renderer/src/components/sidebar/WorktreeOpenInMenu.tsx +++ b/src/renderer/src/components/sidebar/WorktreeOpenInMenu.tsx @@ -15,7 +15,8 @@ import { OpenInApplicationIcon } from '@/lib/open-in-app-catalog' import { getExternalEditorOpenCapability } from '@/lib/external-editor-open-capability' import { NO_OPEN_IN_APPLICATIONS } from '@/lib/open-in-application-selection' import type { ShellOpenExternalEditorResult } from '../../../../shared/shell-open-types' -import type { GlobalSettings, OpenInApplication } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { OpenInApplication } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' export { getLocalFileManagerLabel } from '@/lib/local-file-manager-label' diff --git a/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts b/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts index 4f7df50e9d3..f26f6f96f5d 100644 --- a/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts +++ b/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { getWorktreeParentPickerFocusRestoreTarget, handleWorktreeParentPickerKeyDown, diff --git a/src/renderer/src/components/sidebar/WorktreeParentPickerRow.tsx b/src/renderer/src/components/sidebar/WorktreeParentPickerRow.tsx index 1d78102cfb7..7a747061449 100644 --- a/src/renderer/src/components/sidebar/WorktreeParentPickerRow.tsx +++ b/src/renderer/src/components/sidebar/WorktreeParentPickerRow.tsx @@ -5,7 +5,8 @@ import { getWorktreeStatusLabel, type WorktreeStatus } from '@/lib/worktree-stat import { translate } from '@/i18n/i18n' import { branchDisplayName } from './WorktreeCardHelpers' import StatusIndicator from './StatusIndicator' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' // Why: presentational and memoized — the picker resolves every row's status // from one batched store read so the rows themselves hold no subscriptions. diff --git a/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx b/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx index 7dfd864ce95..7b3a3eb6e5d 100644 --- a/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx +++ b/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx @@ -4,7 +4,11 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import type { ReactNode } from 'react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { DetectedWorktree, DetectedWorktreeListResult, Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { + DetectedWorktree, + DetectedWorktreeListResult +} from '../../../../shared/worktree/types' globalThis.IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.tsx b/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.tsx index baa73875d79..e4a8ce45616 100644 --- a/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.tsx +++ b/src/renderer/src/components/sidebar/WorktreeVisibilityDialog.tsx @@ -35,7 +35,7 @@ import WorktreeVisibilitySourceList, { type WorktreeVisibilitySourceAddResult, type WorktreeVisibilitySourceRow } from './WorktreeVisibilitySourceList' -import type { CustomWorktreeVisibilitySource, Repo } from '../../../../shared/types' +import type { CustomWorktreeVisibilitySource, Repo } from '../../../../shared/repo-types' import { MAX_CUSTOM_WORKTREE_VISIBILITY_SOURCES, buildWorktreeSourcePreferenceUpdate, diff --git a/src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.tsx b/src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.tsx index f7caa8bdee6..ca23f122550 100644 --- a/src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.tsx +++ b/src/renderer/src/components/sidebar/WorktreeVisibilitySourceList.tsx @@ -9,9 +9,9 @@ import { translate } from '@/i18n/i18n' import type { BuiltInWorktreeVisibilitySourceId, CustomWorktreeVisibilitySource, - DetectedWorktree, Repo -} from '../../../../shared/types' +} from '../../../../shared/repo-types' +import type { DetectedWorktree } from '../../../../shared/worktree/types' import { createWorktreeVisibilitySourceMatcher, effectiveBuiltInWorktreeSourceVisibility, diff --git a/src/renderer/src/components/sidebar/active-worktree-focus-after-delete.ts b/src/renderer/src/components/sidebar/active-worktree-focus-after-delete.ts index 18b24dcfafe..f1042c8466c 100644 --- a/src/renderer/src/components/sidebar/active-worktree-focus-after-delete.ts +++ b/src/renderer/src/components/sidebar/active-worktree-focus-after-delete.ts @@ -2,7 +2,8 @@ import { useAppStore } from '@/store' import { getRepoMapFromState, getWorktreeMapFromState } from '@/store/selectors' import { activateAndRevealWorktree } from '@/lib/worktree-activation' import { isRuntimeOwnedSshTargetId, parseExecutionHostId } from '../../../../shared/execution-host' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' type AppStoreState = ReturnType diff --git a/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts b/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts index 57a202a57b4..2c33f406f62 100644 --- a/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts +++ b/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildAddRepoExistingWorkspacesDetectedEvent, buildAddRepoExistingWorkspacesTelemetry, diff --git a/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.ts b/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.ts index 695cb983f43..d74cf898923 100644 --- a/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.ts +++ b/src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.ts @@ -2,7 +2,7 @@ import type { AddRepoExistingWorkspaceSource, EventProps } from '../../../../shared/telemetry-events' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { compareWorktreeDisplayName } from '@/lib/worktree-display-name-order' type ExistingWorkspacesDetectedProps = EventProps<'add_repo_existing_workspaces_detected'> diff --git a/src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts b/src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts index de9c6f430cf..8f1808f4c24 100644 --- a/src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts +++ b/src/renderer/src/components/sidebar/add-repo-skip-finalization.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { finalizeImportedRepoAfterSkip, type AddRepoSkipFinalizationState diff --git a/src/renderer/src/components/sidebar/add-repo-skip-finalization.ts b/src/renderer/src/components/sidebar/add-repo-skip-finalization.ts index 7c9c69357ce..f22a8d9d251 100644 --- a/src/renderer/src/components/sidebar/add-repo-skip-finalization.ts +++ b/src/renderer/src/components/sidebar/add-repo-skip-finalization.ts @@ -1,5 +1,5 @@ -import type { Worktree } from '../../../../shared/types' -import { isDefaultBranchWorkspace } from './visible-worktrees' +import type { Worktree } from '../../../../shared/worktree/types' +import { isDefaultBranchWorkspace } from './default-branch-workspace' export type AddRepoSkipFinalizationState = { activeRepoId: string | null diff --git a/src/renderer/src/components/sidebar/add-repo-store-upsert.ts b/src/renderer/src/components/sidebar/add-repo-store-upsert.ts index 1593b3cda1c..4a085462948 100644 --- a/src/renderer/src/components/sidebar/add-repo-store-upsert.ts +++ b/src/renderer/src/components/sidebar/add-repo-store-upsert.ts @@ -4,7 +4,7 @@ import { toRuntimeExecutionHostId, toSshExecutionHostId } from '../../../../shared/execution-host' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { useAppStore } from '@/store' import { getRepoHostIdentity } from '@/store/slices/repo-host-identity' diff --git a/src/renderer/src/components/sidebar/complete-nested-folder-open.ts b/src/renderer/src/components/sidebar/complete-nested-folder-open.ts index 329027b6af2..f02fff1c428 100644 --- a/src/renderer/src/components/sidebar/complete-nested-folder-open.ts +++ b/src/renderer/src/components/sidebar/complete-nested-folder-open.ts @@ -1,6 +1,6 @@ import { toast } from 'sonner' import { useAppStore } from '@/store' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import type { CapturedRuntimeOwner } from './add-repo-runtime-owner' import { trackNestedFolderOpen } from './track-nested-folder-open' diff --git a/src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts b/src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts index 9f06dda9df2..a0452e2f508 100644 --- a/src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts +++ b/src/renderer/src/components/sidebar/default-branch-visible-under-hide-sleeping.test.ts @@ -1,10 +1,8 @@ import { describe, expect, it } from 'vitest' -import { - computeVisibleWorktreeIds, - isDefaultBranchWorkspace, - type SidebarFilterState -} from './visible-worktrees' -import type { Repo, Worktree } from '../../../../shared/types' +import { computeVisibleWorktreeIds, type SidebarFilterState } from './visible-worktrees' +import { isDefaultBranchWorkspace } from './default-branch-workspace' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' /** diff --git a/src/renderer/src/components/sidebar/default-branch-workspace.ts b/src/renderer/src/components/sidebar/default-branch-workspace.ts index 5289b3d2d4c..43404232066 100644 --- a/src/renderer/src/components/sidebar/default-branch-workspace.ts +++ b/src/renderer/src/components/sidebar/default-branch-workspace.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' /** Keeps provisioned roots visible because they are the recipe-created workspace, not a source-repo row. */ export function isDefaultBranchWorkspace(worktree: Worktree): boolean { diff --git a/src/renderer/src/components/sidebar/delete-worktree-dialog-copy.ts b/src/renderer/src/components/sidebar/delete-worktree-dialog-copy.ts index 7f761fcbd8d..862df883b54 100644 --- a/src/renderer/src/components/sidebar/delete-worktree-dialog-copy.ts +++ b/src/renderer/src/components/sidebar/delete-worktree-dialog-copy.ts @@ -1,5 +1,6 @@ import { isFolderRepo } from '../../../../shared/repo-kind' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' type WorktreeRepoRef = Pick diff --git a/src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.ts b/src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.ts index 3a0f709caae..339251046d5 100644 --- a/src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.ts +++ b/src/renderer/src/components/sidebar/delete-worktree-dirty-change-counts.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorktreeDeleteState } from '../../store/slices/worktree-helpers' import { isFolderWorkspaceDelete } from './delete-worktree-dialog-copy' diff --git a/src/renderer/src/components/sidebar/delete-worktree-preference-toast.ts b/src/renderer/src/components/sidebar/delete-worktree-preference-toast.ts index 188e1bdbbaf..9c048e0829c 100644 --- a/src/renderer/src/components/sidebar/delete-worktree-preference-toast.ts +++ b/src/renderer/src/components/sidebar/delete-worktree-preference-toast.ts @@ -1,7 +1,7 @@ import { toast } from 'sonner' import { translate } from '@/i18n/i18n' import type { SettingsNavTarget } from '@/lib/settings-navigation-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export function persistDeleteWorktreeConfirmSkipPreference({ updateSettings, diff --git a/src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts b/src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts index 8a33151f73a..c8042ed6b4a 100644 --- a/src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts +++ b/src/renderer/src/components/sidebar/empty-project-placeholder-repos.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getEmptyProjectPlaceholderRepoIds } from './empty-project-placeholder-repos' const repo: Repo = { diff --git a/src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts b/src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts index 57aee59c1bd..29e30d196bf 100644 --- a/src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts +++ b/src/renderer/src/components/sidebar/empty-project-placeholder-repos.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorktreeGroupBy } from './worktree-list-groups' export function getEmptyProjectPlaceholderRepoIds(args: { diff --git a/src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts b/src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts index c3cd300892e..465f1362a59 100644 --- a/src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts +++ b/src/renderer/src/components/sidebar/focused-agent-row-highlight.test.ts @@ -4,7 +4,7 @@ import type { MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { getFocusedAgentPaneKeyForWorktree, type FocusedAgentRowHighlightState diff --git a/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts b/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts index dc971a0603e..4ca0078e2b3 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.test.ts @@ -1,12 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { - CheckStatus, - PRInfo, - Repo, - Worktree, - WorktreeLineage, - WorkspaceLineage -} from '../../../../shared/types' +import type { CheckStatus, PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../../shared/workspace-scope' import { getFolderWorkspaceCardPrDisplay } from './folder-workspace-card-pr-display' diff --git a/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.ts b/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.ts index 3f71970ec33..5914520603e 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-card-pr-display.ts @@ -1,5 +1,7 @@ import type { AppState } from '@/store/types' -import type { Repo, Worktree, WorktreeLineage, WorkspaceLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey, parseWorkspaceKey } from '../../../../shared/workspace-scope' import { buildParentPrChecksRows, diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts b/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts index 0f43496ee54..73648ebfd02 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ProjectGroup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { getFolderSourceRepos, getFolderWorkspacePrimaryActionLabel diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.ts b/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.ts index c6b920bd9d8..a63a2caf920 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-helpers.ts @@ -17,14 +17,12 @@ import { } from '../../../../shared/execution-host' import { getProjectGroupSubtreeIds } from '../../../../shared/project-groups' import { isGitRepoKind } from '../../../../shared/repo-kind' -import type { - FolderWorkspace, - GitHubWorkItem, - GitLabWorkItem, - LinearIssue, - ProjectGroup, - Repo -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../../shared/gitlab-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import type { SmartWorkspaceNameSelection } from '@/components/new-workspace/SmartWorkspaceNameField' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx b/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx index 6c5f3523561..e13c5c2c14c 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { useAppStore } from '@/store' import { useFolderWorkspaceComposerPathStatus } from './folder-workspace-composer-path-status' diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.ts b/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.ts index 51369b6b8ea..911c373191d 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-path-status.ts @@ -7,7 +7,7 @@ import { getFolderWorkspacePathStatusTitle } from '@/lib/folder-workspace-path-status' import { isConfirmedStaleFolderPathStatus } from '../../../../shared/folder-workspace-path-status' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' export function useFolderWorkspaceComposerPathStatus( projectGroup: ProjectGroup | null, diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts b/src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts index 4f129edf853..51432bc1e5f 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-submit.test.ts @@ -1,7 +1,8 @@ // @vitest-environment happy-dom import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import type * as NewWorkspaceModule from '@/lib/new-workspace' diff --git a/src/renderer/src/components/sidebar/folder-workspace-composer-submit.ts b/src/renderer/src/components/sidebar/folder-workspace-composer-submit.ts index 2b64f589e68..35b3240ccb6 100644 --- a/src/renderer/src/components/sidebar/folder-workspace-composer-submit.ts +++ b/src/renderer/src/components/sidebar/folder-workspace-composer-submit.ts @@ -16,7 +16,9 @@ import { activateAndRevealFolderWorkspace } from '@/lib/worktree-activation' import { isWorkItemLookupText } from '@/lib/work-item-lookup-text' import { TUI_AGENT_CONFIG } from '../../../../shared/tui-agent-config' import { isWindowsAbsolutePathLike } from '../../../../shared/cross-platform-path' -import type { FolderWorkspace, ProjectGroup, TuiAgent } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isWslUncPath } from '../../../../shared/wsl-paths' import { resolveLocalWindowsAgentStartupShell } from '../../../../shared/windows-terminal-shell' import type { AgentStartupShell } from '../../../../shared/tui-agent-startup-shell' diff --git a/src/renderer/src/components/sidebar/host-rename-remove.ts b/src/renderer/src/components/sidebar/host-rename-remove.ts index dc1dfec6c84..03ade9762fe 100644 --- a/src/renderer/src/components/sidebar/host-rename-remove.ts +++ b/src/renderer/src/components/sidebar/host-rename-remove.ts @@ -4,7 +4,8 @@ import { getHostSettingOverride, setHostSettingOverride } from '../../../../shared/host-setting-overrides' -import type { GlobalSettings, HostSettingOverrides } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { HostSettingOverrides } from '../../../../shared/host-setting-overrides' type OverridesSlice = Pick type OverridesMap = Partial> diff --git a/src/renderer/src/components/sidebar/host-section-rows.test.ts b/src/renderer/src/components/sidebar/host-section-rows.test.ts index 702356e26a6..1d8cc55a14b 100644 --- a/src/renderer/src/components/sidebar/host-section-rows.test.ts +++ b/src/renderer/src/components/sidebar/host-section-rows.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { PINNED_GROUP_KEY, type Row } from './worktree-list-groups' import { addHostSectionRows, type HostSectionRow } from './host-section-rows' diff --git a/src/renderer/src/components/sidebar/host-section-rows.ts b/src/renderer/src/components/sidebar/host-section-rows.ts index 7ca084d7520..1371f57ed05 100644 --- a/src/renderer/src/components/sidebar/host-section-rows.ts +++ b/src/renderer/src/components/sidebar/host-section-rows.ts @@ -11,7 +11,9 @@ import { import type { ExecutionHostHealth } from '../../../../shared/execution-host-registry' import type { RuntimeCompatVerdict } from '../../../../shared/protocol-compat' import type { SshConnectionStatus } from '../../../../shared/ssh-types' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import type { Row } from './worktree-list-groups' export type HostHeaderRow = { diff --git a/src/renderer/src/components/sidebar/imported-worktrees-card-actions.ts b/src/renderer/src/components/sidebar/imported-worktrees-card-actions.ts index ea4f758d3df..a40688cbb8a 100644 --- a/src/renderer/src/components/sidebar/imported-worktrees-card-actions.ts +++ b/src/renderer/src/components/sidebar/imported-worktrees-card-actions.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { mergeExternalWorktreeInboxPaths } from '../../../../shared/external-worktree-inbox' export type ImportedWorktreeCardActionState = { diff --git a/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts b/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts index 5a6ed56abfc..1ea7886d55a 100644 --- a/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts +++ b/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.test.ts @@ -4,12 +4,12 @@ import { buildImportedWorktreesCardCandidates, getHiddenImportedWorktrees } from './imported-worktrees-card-candidates' +import type { Repo } from '../../../../shared/repo-types' import type { DetectedWorktree, DetectedWorktreeListResult, - Repo, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' const repo: Repo = { id: 'repo-1', diff --git a/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts b/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts index e827d1662ef..d530d2c6d17 100644 --- a/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts +++ b/src/renderer/src/components/sidebar/imported-worktrees-card-candidates.ts @@ -1,4 +1,5 @@ -import type { DetectedWorktreeListResult, Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { getHiddenExternalWorktrees } from '../../../../shared/external-worktree-inbox' import { isGitRepoKind } from '../../../../shared/repo-kind' import { diff --git a/src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts b/src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts index 46b047a4bc1..d816c387313 100644 --- a/src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts +++ b/src/renderer/src/components/sidebar/linear-agent-skill-runtime.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import type { SkillDiscoveryTarget } from '../../../../shared/skills' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx b/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx index 88e5b8cb236..8c31110242c 100644 --- a/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx +++ b/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.test.tsx @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import { toast } from 'sonner' import type { AppState } from '@/store/types' -import type { LocalBaseRefUpdateSuggestion } from '../../../../shared/types' +import type { LocalBaseRefUpdateSuggestion } from '../../../../shared/worktree/base-ref-drift-types' import { showLocalBaseRefUpdateSuggestionToast } from './local-base-ref-suggestion-toast' vi.mock('sonner', () => ({ diff --git a/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.tsx b/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.tsx index 97bd71e196a..18b0e619cd7 100644 --- a/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.tsx +++ b/src/renderer/src/components/sidebar/local-base-ref-suggestion-toast.tsx @@ -1,6 +1,6 @@ import { toast } from 'sonner' import type { AppState } from '@/store/types' -import type { LocalBaseRefUpdateSuggestion } from '../../../../shared/types' +import type { LocalBaseRefUpdateSuggestion } from '../../../../shared/worktree/base-ref-drift-types' import { Button } from '../ui/button' import { KEEP_LOCAL_MAIN_UP_TO_DATE_SECTION_ID, diff --git a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts index 3435870dbd4..9f3abcc281a 100644 --- a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts +++ b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { importNewExternalWorktreeInboxPaths, keepNewExternalWorktreeInboxHidden, diff --git a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.ts b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.ts index 289d068d97f..f9a4534410d 100644 --- a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.ts +++ b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-actions.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { mergeExternalWorktreeInboxPaths } from '../../../../shared/external-worktree-inbox' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts index d099a63945c..cfab500f410 100644 --- a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts +++ b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.test.ts @@ -1,11 +1,11 @@ import { describe, expect, it } from 'vitest' +import type { Repo } from '../../../../shared/repo-types' import type { DetectedWorktree, DetectedWorktreeListResult, - Repo, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' import { buildNewExternalWorktreesInboxCandidates } from './new-external-worktrees-inbox-candidates' const repo: Repo = { diff --git a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts index aeda87cf710..8b7e3423dc7 100644 --- a/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts +++ b/src/renderer/src/components/sidebar/new-external-worktrees-inbox-candidates.ts @@ -1,4 +1,5 @@ -import type { DetectedWorktreeListResult, Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { getNewExternalWorktreeInboxWorktrees } from '../../../../shared/external-worktree-inbox' import { isGitRepoKind } from '../../../../shared/repo-kind' import type { NewExternalWorktreesInboxCandidate } from './worktree-list-groups' diff --git a/src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx b/src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx index 24f768af4af..3424c372581 100644 --- a/src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx +++ b/src/renderer/src/components/sidebar/preserved-branch-toast.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import { toast } from 'sonner' -import type { RemoveWorktreeResult } from '../../../../shared/types' +import type { RemoveWorktreeResult } from '../../../../shared/worktree/create-types' import { showPreservedBranchToast } from './preserved-branch-toast' vi.mock('sonner', () => ({ diff --git a/src/renderer/src/components/sidebar/preserved-branch-toast.tsx b/src/renderer/src/components/sidebar/preserved-branch-toast.tsx index 03529ad4657..43b01513f53 100644 --- a/src/renderer/src/components/sidebar/preserved-branch-toast.tsx +++ b/src/renderer/src/components/sidebar/preserved-branch-toast.tsx @@ -1,6 +1,7 @@ import { Trash2 } from 'lucide-react' import { toast } from 'sonner' -import type { RemoveWorktreeResult, Worktree } from '../../../../shared/types' +import type { RemoveWorktreeResult } from '../../../../shared/worktree/create-types' +import type { Worktree } from '../../../../shared/worktree/types' import { translate } from '@/i18n/i18n' import { Button } from '../ui/button' diff --git a/src/renderer/src/components/sidebar/project-added-default-checkout.test.ts b/src/renderer/src/components/sidebar/project-added-default-checkout.test.ts index 8b4b42d8d44..24d1fd7b76a 100644 --- a/src/renderer/src/components/sidebar/project-added-default-checkout.test.ts +++ b/src/renderer/src/components/sidebar/project-added-default-checkout.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultOnboardingState } from '../../../../shared/constants' +import type { Repo } from '../../../../shared/repo-types' import type { DetectedWorktree, DetectedWorktreeListResult, - Repo, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' import { finishProjectAddWithDefaultCheckout, getProjectDefaultCheckout, diff --git a/src/renderer/src/components/sidebar/project-added-default-checkout.ts b/src/renderer/src/components/sidebar/project-added-default-checkout.ts index dabf089a8a0..33ab7dadd07 100644 --- a/src/renderer/src/components/sidebar/project-added-default-checkout.ts +++ b/src/renderer/src/components/sidebar/project-added-default-checkout.ts @@ -5,7 +5,7 @@ import type { AddRepoDefaultCheckoutHandoffSource, EventProps } from '../../../../shared/telemetry-events' -import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { relativePathInsideRoot } from '../../../../shared/cross-platform-path' import { markOnboardingProjectAdded } from '@/lib/onboarding-project-checklist' import { finalizeImportedRepoAfterSkip } from './add-repo-skip-finalization' diff --git a/src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts b/src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts index 3c1b0384f41..43ff9581712 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drag-commit.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import { commitProjectGroupHeaderDragDrop } from './project-group-header-drag-commit' import type { ProjectGroupHeaderDragSession } from './project-group-header-drag-contract' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' function group(id: string, overrides: Partial = {}): ProjectGroup { return { diff --git a/src/renderer/src/components/sidebar/project-group-header-drag-commit.ts b/src/renderer/src/components/sidebar/project-group-header-drag-commit.ts index 6f3db2f1260..225b1792c95 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drag-commit.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drag-commit.ts @@ -1,6 +1,6 @@ import { getProjectGroupTabOrderUpdatesForSidebarDrop } from './project-group-header-drop' import type { ProjectGroupHeaderDragSession } from './project-group-header-drag-contract' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' export function commitProjectGroupHeaderDragDrop(args: { session: ProjectGroupHeaderDragSession diff --git a/src/renderer/src/components/sidebar/project-group-header-drag-contract.ts b/src/renderer/src/components/sidebar/project-group-header-drag-contract.ts index bedcefcfc59..9021d9c7636 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drag-contract.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drag-contract.ts @@ -5,7 +5,7 @@ import type { ProjectGroupHeaderDragRect } from './project-group-header-drop' import { REPO_HEADER_ACTION_SELECTOR } from './project-header-drag-contract' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' export type ProjectGroupDragState = { draggingGroupId: string | null diff --git a/src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts b/src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts index ef53dc54175..efb8c7b3959 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drag-start.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { createProjectGroupHeaderDragSession } from './project-group-header-drag-start' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' function group(id: string, overrides: Partial = {}): ProjectGroup { return { diff --git a/src/renderer/src/components/sidebar/project-group-header-drag-start.ts b/src/renderer/src/components/sidebar/project-group-header-drag-start.ts index 89eb5bd9dd0..46616c2053d 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drag-start.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drag-start.ts @@ -10,7 +10,7 @@ import { isProjectGroupHeaderDragHandleTarget, type ProjectGroupHeaderDragSession } from './project-group-header-drag-contract' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' export function createProjectGroupHeaderDragSession(args: { event: PointerEvent diff --git a/src/renderer/src/components/sidebar/project-group-header-drop.test.ts b/src/renderer/src/components/sidebar/project-group-header-drop.test.ts index 8fa20c47b49..3e843cf7543 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drop.test.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drop.test.ts @@ -9,7 +9,8 @@ import { mapSidebarProjectGroupDropIndexToSiblingInsertIndex } from './project-group-header-drop' import type { Row } from './worktree-list-groups' -import type { ProjectGroup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' function group(id: string, overrides: Partial = {}): ProjectGroup { return { diff --git a/src/renderer/src/components/sidebar/project-group-header-drop.ts b/src/renderer/src/components/sidebar/project-group-header-drop.ts index 81382372784..73f4415cd00 100644 --- a/src/renderer/src/components/sidebar/project-group-header-drop.ts +++ b/src/renderer/src/components/sidebar/project-group-header-drop.ts @@ -3,7 +3,7 @@ import { type WorktreeSidebarHeaderDropPreview } from './worktree-sidebar-header-drop-preview' import type { Row } from './worktree-list-groups' -import type { ProjectGroup } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' export type ProjectGroupHeaderDragBucketKey = string diff --git a/src/renderer/src/components/sidebar/project-header-drag-commit.test.ts b/src/renderer/src/components/sidebar/project-header-drag-commit.test.ts index 7b5a72def55..32fc47acef3 100644 --- a/src/renderer/src/components/sidebar/project-header-drag-commit.test.ts +++ b/src/renderer/src/components/sidebar/project-header-drag-commit.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest' import { commitProjectHeaderDragDrop } from './project-header-drag-commit' import type { ProjectHeaderDragSession } from './project-header-drag-contract' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' function makeRepo(id: string, overrides: Partial = {}): Repo { return { diff --git a/src/renderer/src/components/sidebar/project-header-drag-commit.ts b/src/renderer/src/components/sidebar/project-header-drag-commit.ts index 2ab63663d71..0a89742097b 100644 --- a/src/renderer/src/components/sidebar/project-header-drag-commit.ts +++ b/src/renderer/src/components/sidebar/project-header-drag-commit.ts @@ -6,7 +6,7 @@ import { mapSidebarRepoDropIndexToAllRepoInsertAt } from './project-header-drop' import type { ProjectHeaderDragSession } from './project-header-drag-contract' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export function commitProjectHeaderDragDrop(args: { session: ProjectHeaderDragSession diff --git a/src/renderer/src/components/sidebar/project-header-drag-contract.ts b/src/renderer/src/components/sidebar/project-header-drag-contract.ts index 9923c8c0979..f28f34eaffb 100644 --- a/src/renderer/src/components/sidebar/project-header-drag-contract.ts +++ b/src/renderer/src/components/sidebar/project-header-drag-contract.ts @@ -1,7 +1,7 @@ import type { PointerEvent } from 'react' import type { ProjectHeaderDragBucketKey, ProjectHeaderDragRect } from './project-header-drop' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export type RepoDragState = { draggingRepoId: string | null diff --git a/src/renderer/src/components/sidebar/project-header-drag-start.test.ts b/src/renderer/src/components/sidebar/project-header-drag-start.test.ts index 6fa80295e67..da1a07c26cf 100644 --- a/src/renderer/src/components/sidebar/project-header-drag-start.test.ts +++ b/src/renderer/src/components/sidebar/project-header-drag-start.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest' import { createProjectHeaderDragSession } from './project-header-drag-start' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' function createRepo(id: string, projectGroupId: string | null = null): Repo { return { diff --git a/src/renderer/src/components/sidebar/project-header-drag-start.ts b/src/renderer/src/components/sidebar/project-header-drag-start.ts index 04c306a869e..0a0429f1bf4 100644 --- a/src/renderer/src/components/sidebar/project-header-drag-start.ts +++ b/src/renderer/src/components/sidebar/project-header-drag-start.ts @@ -10,7 +10,7 @@ import { isRepoHeaderActionTarget, type ProjectHeaderDragSession } from './project-header-drag-contract' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export function createProjectHeaderDragSession(args: { event: PointerEvent diff --git a/src/renderer/src/components/sidebar/project-header-drop.test.ts b/src/renderer/src/components/sidebar/project-header-drop.test.ts index c0382a5f162..92baaf72b73 100644 --- a/src/renderer/src/components/sidebar/project-header-drop.test.ts +++ b/src/renderer/src/components/sidebar/project-header-drop.test.ts @@ -12,7 +12,7 @@ import { mapSidebarRepoDropIndexToAllRepoInsertAt } from './project-header-drop' import type { Row } from './worktree-list-groups' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' describe('getProjectHeaderDragBucketKey', () => { it('uses ungrouped for repos without a project group', () => { diff --git a/src/renderer/src/components/sidebar/project-header-drop.ts b/src/renderer/src/components/sidebar/project-header-drop.ts index 1f7418f805c..c2de72bcaf3 100644 --- a/src/renderer/src/components/sidebar/project-header-drop.ts +++ b/src/renderer/src/components/sidebar/project-header-drop.ts @@ -4,7 +4,7 @@ import { type WorktreeSidebarHeaderDropPreview } from './worktree-sidebar-header-drop-preview' import type { Row } from './worktree-list-groups' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export type ProjectHeaderDragBucketKey = string diff --git a/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts b/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts index 69232f64f6f..d568c1d8508 100644 --- a/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts +++ b/src/renderer/src/components/sidebar/prompt-cache-timer-selection.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { parsePaneKey } from '../../../../shared/stable-pane-id' export type PromptCacheCountdownSelection = { diff --git a/src/renderer/src/components/sidebar/remote-file-browser-drive-paths.ts b/src/renderer/src/components/sidebar/remote-file-browser-drive-paths.ts index 52e507aadf2..7e68874dfae 100644 --- a/src/renderer/src/components/sidebar/remote-file-browser-drive-paths.ts +++ b/src/renderer/src/components/sidebar/remote-file-browser-drive-paths.ts @@ -59,4 +59,4 @@ export function driveBreadcrumbPath( const kept = segments.slice(0, endIndex + 1) return kept.length === 0 ? driveRoot : `${driveRoot}${kept.join('\\')}` } -import type { FilesystemPathFlavor } from '../../../../shared/types' +import type { FilesystemPathFlavor } from '../../../../shared/filesystem-entry-types' diff --git a/src/renderer/src/components/sidebar/remote-file-browser-helpers.ts b/src/renderer/src/components/sidebar/remote-file-browser-helpers.ts index a9508a76364..54c0107376d 100644 --- a/src/renderer/src/components/sidebar/remote-file-browser-helpers.ts +++ b/src/renderer/src/components/sidebar/remote-file-browser-helpers.ts @@ -1,7 +1,7 @@ import { translate } from '@/i18n/i18n' import { shouldHandleTextControlPaste } from '@/lib/text-control-paste' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' -import type { FilesystemPathFlavor } from '../../../../shared/types' +import type { FilesystemPathFlavor } from '../../../../shared/filesystem-entry-types' import { driveRootOf, isDrivePath, diff --git a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts index 0f549db9f23..2cb14d6894d 100644 --- a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts +++ b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.test.ts @@ -2,7 +2,10 @@ import { afterEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import { getVisibleWorktreeIds, setVisibleWorktreeIds } from './visible-worktrees' import type { AppState } from '@/store/types' -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' const initialState = useAppStore.getInitialState() diff --git a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts index fccdc79955c..bc2c038e8d2 100644 --- a/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts +++ b/src/renderer/src/components/sidebar/rendered-sidebar-worktree-order.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AppState } from '@/store/types' import { getHostDisplayLabelOverrides } from '../../../../shared/host-setting-overrides' import { diff --git a/src/renderer/src/components/sidebar/repo-header-create-state.test.ts b/src/renderer/src/components/sidebar/repo-header-create-state.test.ts index a6421b15c5b..6f4a121cb4c 100644 --- a/src/renderer/src/components/sidebar/repo-header-create-state.test.ts +++ b/src/renderer/src/components/sidebar/repo-header-create-state.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { SshConnectionStatus } from '../../../../shared/ssh-types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoHeaderCreateState } from './repo-header-create-state' function makeRepo(overrides: Partial = {}): Repo { diff --git a/src/renderer/src/components/sidebar/repo-header-create-state.ts b/src/renderer/src/components/sidebar/repo-header-create-state.ts index 6b369f1e287..6b061932a9e 100644 --- a/src/renderer/src/components/sidebar/repo-header-create-state.ts +++ b/src/renderer/src/components/sidebar/repo-header-create-state.ts @@ -1,5 +1,5 @@ import type { SshConnectionStatus } from '../../../../shared/ssh-types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { isGitRepoKind } from '../../../../shared/repo-kind' import { getSelectedRepoSshGate } from '../../lib/new-workspace-ssh-gate' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/setup-script-prompt-render-state.ts b/src/renderer/src/components/sidebar/setup-script-prompt-render-state.ts index 0e80337118d..2b7a6c79900 100644 --- a/src/renderer/src/components/sidebar/setup-script-prompt-render-state.ts +++ b/src/renderer/src/components/sidebar/setup-script-prompt-render-state.ts @@ -1,4 +1,6 @@ -import type { GlobalSettings, Repo, Worktree } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { SetupScriptPromptInspection } from '@/lib/setup-script-prompt' import { findRepoForHost } from '@/store/slices/repo-host-identity' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' diff --git a/src/renderer/src/components/sidebar/sidebar-filter-state.test.ts b/src/renderer/src/components/sidebar/sidebar-filter-state.test.ts index e46f6163985..c6945a7f041 100644 --- a/src/renderer/src/components/sidebar/sidebar-filter-state.test.ts +++ b/src/renderer/src/components/sidebar/sidebar-filter-state.test.ts @@ -1,11 +1,11 @@ import { describe, expect, it } from 'vitest' import { computeClearFilterActions, - isDefaultBranchWorkspace, isSleepingSweepExemptionNarrowingList, sidebarHasActiveFilters } from './visible-worktrees' -import type { Worktree } from '../../../../shared/types' +import { isDefaultBranchWorkspace } from './default-branch-workspace' +import type { Worktree } from '../../../../shared/worktree/types' function makeWorktree(id: string, repoId = 'repo1'): Worktree { return { diff --git a/src/renderer/src/components/sidebar/sidebar-host-options.ts b/src/renderer/src/components/sidebar/sidebar-host-options.ts index dc764112bcc..29d03ec1419 100644 --- a/src/renderer/src/components/sidebar/sidebar-host-options.ts +++ b/src/renderer/src/components/sidebar/sidebar-host-options.ts @@ -1,4 +1,6 @@ -import type { GlobalSettings, Repo, WorkspaceHostScope } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceHostScope } from '../../../../shared/ui-chrome-types' import { ALL_EXECUTION_HOSTS_SCOPE, LOCAL_EXECUTION_HOST_ID, diff --git a/src/renderer/src/components/sidebar/sidebar-project-drop.ts b/src/renderer/src/components/sidebar/sidebar-project-drop.ts index fc61c049e38..1793bfc9bcc 100644 --- a/src/renderer/src/components/sidebar/sidebar-project-drop.ts +++ b/src/renderer/src/components/sidebar/sidebar-project-drop.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' export type SidebarProjectDropPathResolution = diff --git a/src/renderer/src/components/sidebar/sidebar-workspace-option-items.ts b/src/renderer/src/components/sidebar/sidebar-workspace-option-items.ts index e804131b6ae..717dd2302d3 100644 --- a/src/renderer/src/components/sidebar/sidebar-workspace-option-items.ts +++ b/src/renderer/src/components/sidebar/sidebar-workspace-option-items.ts @@ -1,4 +1,7 @@ -import type { AgentActivityDisplayMode, WorktreeCardProperty } from '../../../../shared/types' +import type { + AgentActivityDisplayMode, + WorktreeCardProperty +} from '../../../../shared/ui-chrome-types' import { TASK_WORKTREE_CARD_PROPERTIES } from '../../../../shared/constants' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/smart-attention.test.ts b/src/renderer/src/components/sidebar/smart-attention.test.ts index 8723cf937fc..d04aed078bf 100644 --- a/src/renderer/src/components/sidebar/smart-attention.test.ts +++ b/src/renderer/src/components/sidebar/smart-attention.test.ts @@ -11,7 +11,8 @@ import { resolveAttention, type PaneInput } from './smart-attention' -import type { TerminalLayoutSnapshot, TerminalTab, Worktree } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' function hookPane(entry: AgentStatusEntry): PaneInput { return { kind: 'hook', entry } diff --git a/src/renderer/src/components/sidebar/smart-attention.ts b/src/renderer/src/components/sidebar/smart-attention.ts index 5238a9091eb..44abd4082b7 100644 --- a/src/renderer/src/components/sidebar/smart-attention.ts +++ b/src/renderer/src/components/sidebar/smart-attention.ts @@ -4,7 +4,8 @@ import { migrationUnsupportedToAgentStatusEntry } from '@/lib/migration-unsuppor import { tabHasLivePty } from '@/lib/tab-has-live-pty' import { resolveRuntimePaneTitleLeafId } from '@/lib/runtime-pane-title-leaf-id' import type { AgentStatus } from '../../../../shared/agent-detection' -import type { TerminalLayoutSnapshot, TerminalTab, Worktree } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { AGENT_STATUS_STALE_AFTER_MS, type AgentStateHistoryEntry, diff --git a/src/renderer/src/components/sidebar/smart-sort.test.ts b/src/renderer/src/components/sidebar/smart-sort.test.ts index 75af8fae1cc..60700e59c95 100644 --- a/src/renderer/src/components/sidebar/smart-sort.test.ts +++ b/src/renderer/src/components/sidebar/smart-sort.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildWorktreeComparator, CREATE_GRACE_MS, diff --git a/src/renderer/src/components/sidebar/smart-sort.ts b/src/renderer/src/components/sidebar/smart-sort.ts index 84474df4047..b30d60f755a 100644 --- a/src/renderer/src/components/sidebar/smart-sort.ts +++ b/src/renderer/src/components/sidebar/smart-sort.ts @@ -1,4 +1,6 @@ -import type { Worktree, Repo, TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AgentStatusEntry, MigrationUnsupportedPtyEntry diff --git a/src/renderer/src/components/sidebar/ssh-host-remove-resolution.ts b/src/renderer/src/components/sidebar/ssh-host-remove-resolution.ts index 4949ab3db6c..3c0d41d8cc6 100644 --- a/src/renderer/src/components/sidebar/ssh-host-remove-resolution.ts +++ b/src/renderer/src/components/sidebar/ssh-host-remove-resolution.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { SshConnectionState } from '../../../../shared/ssh-types' /** diff --git a/src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.ts b/src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.ts index 72243c5f370..6a723349809 100644 --- a/src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.ts +++ b/src/renderer/src/components/sidebar/ssh-workspace-forget-resolution.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { SshConnectionState } from '../../../../shared/ssh-types' import { isRuntimeOwnedSshTargetId } from '../../../../shared/execution-host' diff --git a/src/renderer/src/components/sidebar/track-nested-folder-open.ts b/src/renderer/src/components/sidebar/track-nested-folder-open.ts index add9c4aae19..19871701d3f 100644 --- a/src/renderer/src/components/sidebar/track-nested-folder-open.ts +++ b/src/renderer/src/components/sidebar/track-nested-folder-open.ts @@ -3,7 +3,7 @@ import { buildNestedRepoImportActionTelemetry, type NestedRepoTelemetryRuntimeKind } from '../../../../shared/nested-repo-telemetry' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' export function trackNestedFolderOpen(args: { attemptId: string | null diff --git a/src/renderer/src/components/sidebar/use-add-repo-remote-nested-scan.ts b/src/renderer/src/components/sidebar/use-add-repo-remote-nested-scan.ts index c57557f0cc1..436a0618ff0 100644 --- a/src/renderer/src/components/sidebar/use-add-repo-remote-nested-scan.ts +++ b/src/renderer/src/components/sidebar/use-add-repo-remote-nested-scan.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react' import { track } from '@/lib/telemetry' import { buildNestedRepoScanTelemetry } from '../../../../shared/nested-repo-telemetry' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' export function useAddRepoRemoteNestedScan({ setActiveNestedScanId, diff --git a/src/renderer/src/components/sidebar/use-delete-worktree-status-hydration.ts b/src/renderer/src/components/sidebar/use-delete-worktree-status-hydration.ts index 2a88a430c50..02972d6a907 100644 --- a/src/renderer/src/components/sidebar/use-delete-worktree-status-hydration.ts +++ b/src/renderer/src/components/sidebar/use-delete-worktree-status-hydration.ts @@ -3,7 +3,8 @@ import { useAppStore } from '@/store' import { getConnectionId } from '@/lib/connection-context' import { getSettingsForWorktreeRuntimeOwner } from '@/lib/worktree-runtime-owner' import { getRuntimeGitStatus } from '@/runtime/runtime-git-client' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { isFolderWorkspaceDelete } from './delete-worktree-dialog-copy' export function useDeleteWorktreeStatusHydration({ diff --git a/src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.ts b/src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.ts index 180ef7d6daf..1262dc92edb 100644 --- a/src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.ts +++ b/src/renderer/src/components/sidebar/use-visible-workspace-kanban-worktree-ids.ts @@ -1,6 +1,7 @@ import { useMemo } from 'react' import { useAppStore } from '@/store' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { computeVisibleWorktreeIds } from './visible-worktrees' import { getWorktreeIdsWithLiveAgent } from '@/lib/worktree-activity-state' import { getSettingsFocusedExecutionHostId } from '../../../../shared/execution-host' diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.ts index 19a67a31663..d03add3da13 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.ts +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-card-pointer-drag.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef } from 'react' import type React from 'react' -import type { WorkspaceStatus, Worktree } from '../../../../shared/types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import { CARD_SELECTOR, getCardDropTarget, diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-create-worktree.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-create-worktree.ts index aae79fc9d8b..bd218580cb9 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-create-worktree.ts +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-create-worktree.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react' import { useAppStore } from '@/store' -import type { WorkspaceStatus } from '../../../../shared/types' +import type { WorkspaceStatus } from '../../../../shared/worktree/types' export function useWorkspaceKanbanCreateWorktree(): { canCreateWorktree: boolean diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-search.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-search.ts index df5f3e0455f..e782b419ab3 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-search.ts +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-search.ts @@ -1,6 +1,7 @@ import { useCallback, useDeferredValue, useMemo, useState } from 'react' import { isWorktreePaletteQueryTooLarge } from '@/lib/worktree-palette-query-bounds' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { matchWorkspaceBoardWorktrees } from './workspace-kanban-search' function areWorktreeIdSetsEqual(a: ReadonlySet, b: ReadonlySet): boolean { diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx b/src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx index 7d20d7c7523..abf1067895e 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-selection.test.tsx @@ -3,7 +3,7 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { useWorkspaceKanbanSelection } from './use-workspace-kanban-selection' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-selection.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-selection.ts index 54efeccdec3..f1a20a57147 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-selection.ts +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-selection.ts @@ -1,5 +1,5 @@ import React, { useCallback, useMemo, useState } from 'react' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { areWorktreeSelectionsEqual, getWorktreeSelectionIntent, diff --git a/src/renderer/src/components/sidebar/use-workspace-status-drop.ts b/src/renderer/src/components/sidebar/use-workspace-status-drop.ts index eac45bb668d..5a5b441521d 100644 --- a/src/renderer/src/components/sidebar/use-workspace-status-drop.ts +++ b/src/renderer/src/components/sidebar/use-workspace-status-drop.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react' import type React from 'react' -import type { WorkspaceStatus } from '../../../../shared/types' +import type { WorkspaceStatus } from '../../../../shared/worktree/types' import { hasWorkspaceDragData, readWorkspaceDragDataIds } from './workspace-status' const WORKSPACE_STATUS_DROP_TARGET = '[data-workspace-status-drop-target]' diff --git a/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx b/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx index aac20f34b97..17ff8d18cd3 100644 --- a/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx +++ b/src/renderer/src/components/sidebar/use-worktree-activity-status.test.tsx @@ -2,7 +2,7 @@ import { renderToStaticMarkup } from 'react-dom/server' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { useWorktreeActivityStatus } from './use-worktree-activity-status' const LEAF_ID = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/components/sidebar/use-worktree-card-linked-details.ts b/src/renderer/src/components/sidebar/use-worktree-card-linked-details.ts index fcf91b71a93..a2ec8e0774e 100644 --- a/src/renderer/src/components/sidebar/use-worktree-card-linked-details.ts +++ b/src/renderer/src/components/sidebar/use-worktree-card-linked-details.ts @@ -2,7 +2,8 @@ import React from 'react' import { translate } from '@/i18n/i18n' import { useAppStore } from '@/store' -import type { IssueInfo, LinearIssue } from '../../../../shared/types' +import type { IssueInfo } from '../../../../shared/github/pull-request-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' import { getWorktreeCardJiraIssueDisplay } from './worktree-card-jira-issue-display' import type { WorktreeCardIssueDisplay } from './WorktreeCardMeta' import { diff --git a/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx b/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx index 693dba8f412..146f4e10916 100644 --- a/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx +++ b/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.store-subscriptions.test.tsx @@ -5,7 +5,8 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import { readStoreListenerCount } from '@/store/store-listener-census' -import type { GlobalSettings, Worktree } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Worktree } from '../../../../shared/worktree/types' import { usePromptCacheCountdownStartedAt } from './CacheTimer' import { useWorktreeCardSecondaryDetails } from './use-worktree-card-secondary-details' import { useWorktreeAgentRows } from './useWorktreeAgentRows' diff --git a/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.ts b/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.ts index ebc7cf483c8..64e9da831a6 100644 --- a/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.ts +++ b/src/renderer/src/components/sidebar/use-worktree-card-secondary-details.ts @@ -1,6 +1,6 @@ import React, { useCallback } from 'react' -import type { GitHubWorkItem } from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' import { hasWorktreeCardDetails } from './WorktreeCardMeta' import { usePromptCacheCountdownStartedAt } from './CacheTimer' import { useWorktreeAgentRows } from './useWorktreeAgentRows' diff --git a/src/renderer/src/components/sidebar/use-worktree-meta-workspace.ts b/src/renderer/src/components/sidebar/use-worktree-meta-workspace.ts index 336725efc1e..6e581d9c77e 100644 --- a/src/renderer/src/components/sidebar/use-worktree-meta-workspace.ts +++ b/src/renderer/src/components/sidebar/use-worktree-meta-workspace.ts @@ -1,7 +1,7 @@ import { useMemo } from 'react' import { useAppStore } from '@/store' import { findIndexedWorktreeOwner } from '@/lib/worktree-runtime-owner-index' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspace-worktree' import type { IssueLinkProvider } from '../../../../shared/issue-link-input' diff --git a/src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts b/src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts index 57958126563..b9cd2bdd976 100644 --- a/src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts +++ b/src/renderer/src/components/sidebar/useAddRepoCloneFlow.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const mocks = vi.hoisted(() => ({ stateValues: [] as unknown[], diff --git a/src/renderer/src/components/sidebar/useAddRepoCloneFlow.ts b/src/renderer/src/components/sidebar/useAddRepoCloneFlow.ts index 24d27523942..f181929ddff 100644 --- a/src/renderer/src/components/sidebar/useAddRepoCloneFlow.ts +++ b/src/renderer/src/components/sidebar/useAddRepoCloneFlow.ts @@ -3,7 +3,7 @@ import { toast } from 'sonner' import { useAppStore } from '@/store' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import type { AddRepoExistingWorkspaceSource } from '../../../../shared/telemetry-events' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getCloneDestinationAutoFill } from './clone-defaults' import type { AddRepoDialogStep } from './add-repo-dialog-types' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts b/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts index acc96258cb6..e3759cc13a0 100644 --- a/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts +++ b/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { NestedRepoScanResult, Repo } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' vi.mock('react', async (importOriginal) => { const actual = await importOriginal() diff --git a/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.ts b/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.ts index 859698f19f8..cf4c6b13ba5 100644 --- a/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.ts +++ b/src/renderer/src/components/sidebar/useAddRepoLocalFolderFlow.ts @@ -8,7 +8,8 @@ import { type NestedRepoTelemetryRuntimeKind } from '../../../../shared/nested-repo-telemetry' import type { AddRepoExistingWorkspaceSource } from '../../../../shared/telemetry-events' -import type { NestedRepoScanResult, Repo } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import type { WorktreeFetchOptions } from '@/store/slices/worktree-helpers' import type { RepoSlice } from '@/store/slices/repos' import { createNestedRepoScanId } from './add-repo-dialog-types' diff --git a/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts b/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts index 6f56f454edd..4ed1f739f1a 100644 --- a/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts +++ b/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.test.ts @@ -1,6 +1,10 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { NestedRepoScanResult, ProjectGroupImportResult, Repo } from '../../../../shared/types' +import type { + NestedRepoScanResult, + ProjectGroupImportResult +} from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' vi.mock('react', async (importOriginal) => { const actual = await importOriginal() diff --git a/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.ts b/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.ts index c0c505cc97c..d52109bf0d7 100644 --- a/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.ts +++ b/src/renderer/src/components/sidebar/useAddRepoNestedImportFlow.ts @@ -10,7 +10,10 @@ import { type NestedRepoTelemetryRuntimeKind } from '../../../../shared/nested-repo-telemetry' import type { AddRepoExistingWorkspaceSource } from '../../../../shared/telemetry-events' -import type { NestedRepoScanResult, ProjectGroupImportResult } from '../../../../shared/types' +import type { + NestedRepoScanResult, + ProjectGroupImportResult +} from '../../../../shared/project-group-types' import type { WorktreeFetchOptions } from '@/store/slices/worktree-helpers' import { translate } from '@/i18n/i18n' import { worktreeRefreshOptions, type CapturedRuntimeOwner } from './add-repo-runtime-owner' diff --git a/src/renderer/src/components/sidebar/useAddRepoNestedReviewController.ts b/src/renderer/src/components/sidebar/useAddRepoNestedReviewController.ts index a5f47153736..f015883762b 100644 --- a/src/renderer/src/components/sidebar/useAddRepoNestedReviewController.ts +++ b/src/renderer/src/components/sidebar/useAddRepoNestedReviewController.ts @@ -1,6 +1,6 @@ import type { Dispatch, SetStateAction } from 'react' import type { AddRepoExistingWorkspaceSource } from '../../../../shared/telemetry-events' -import type { ProjectGroupImportResult } from '../../../../shared/types' +import type { ProjectGroupImportResult } from '../../../../shared/project-group-types' import type { WorktreeFetchOptions } from '@/store/slices/worktree-helpers' import { useAddRepoNestedImportFlow } from './useAddRepoNestedImportFlow' import { useAddRepoNestedReviewState } from './useAddRepoNestedReviewState' diff --git a/src/renderer/src/components/sidebar/useAddRepoNestedReviewState.ts b/src/renderer/src/components/sidebar/useAddRepoNestedReviewState.ts index a8f41592fbd..8e44b5a4076 100644 --- a/src/renderer/src/components/sidebar/useAddRepoNestedReviewState.ts +++ b/src/renderer/src/components/sidebar/useAddRepoNestedReviewState.ts @@ -1,6 +1,6 @@ import { useCallback, useRef, useState, type Dispatch, type SetStateAction } from 'react' import type { NestedRepoTelemetryRuntimeKind } from '../../../../shared/nested-repo-telemetry' -import type { NestedRepoScanResult } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' import { defaultProjectGroupNameForPath, type AddRepoDialogStep } from './add-repo-dialog-types' type ShowNestedRepoReviewArgs = { diff --git a/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts b/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts index 53d2b334112..2d0135bb420 100644 --- a/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts +++ b/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const mocks = vi.hoisted(() => ({ stateValues: [] as unknown[], diff --git a/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.ts b/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.ts index a02bdbcf3f4..9810be00be8 100644 --- a/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.ts +++ b/src/renderer/src/components/sidebar/useAddRepoServerPathFlow.ts @@ -8,7 +8,8 @@ import { type NestedRepoTelemetryRuntimeKind } from '../../../../shared/nested-repo-telemetry' import type { AddRepoExistingWorkspaceSource } from '../../../../shared/telemetry-events' -import type { NestedRepoScanResult, Repo } from '../../../../shared/types' +import type { NestedRepoScanResult } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import type { WorktreeFetchOptions } from '@/store/slices/worktree-helpers' import { createNestedRepoScanId } from './add-repo-dialog-types' import { worktreeRefreshOptions } from './add-repo-runtime-owner' diff --git a/src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts b/src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts index 832ce5b26dc..117e09d6fbe 100644 --- a/src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts +++ b/src/renderer/src/components/sidebar/useCreateRepo.default-checkout.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactModule from 'react' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const mocks = vi.hoisted(() => ({ stateValues: [] as unknown[], diff --git a/src/renderer/src/components/sidebar/useCreateRepo.ts b/src/renderer/src/components/sidebar/useCreateRepo.ts index a9c6c8c6525..103fb59f966 100644 --- a/src/renderer/src/components/sidebar/useCreateRepo.ts +++ b/src/renderer/src/components/sidebar/useCreateRepo.ts @@ -8,7 +8,7 @@ import { activateAndRevealWorktree } from '@/lib/worktree-activation' import { markOnboardingProjectAdded } from '@/lib/onboarding-project-checklist' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import { isGitRepoKind } from '../../../../shared/repo-kind' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { translate } from '@/i18n/i18n' import { extractIpcErrorMessage } from '@/lib/ipc-error' import { upsertAddedRepoWithProjectHostSetup } from './add-repo-store-upsert' diff --git a/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx b/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx index cb4e364d1b2..672d7130b5b 100644 --- a/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx +++ b/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.test.tsx @@ -4,7 +4,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { useSetupScriptPromptRevalidation } from './useSetupScriptPromptRevalidation' import type { SetupScriptPromptState } from './setup-script-prompt-render-state' import { getRepoHostIdentityForParts } from '@/store/slices/repo-host-identity' diff --git a/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.ts b/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.ts index ce6a5e78fce..867b21052e7 100644 --- a/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.ts +++ b/src/renderer/src/components/sidebar/useSetupScriptPromptRevalidation.ts @@ -1,7 +1,7 @@ import { useEffect, useRef } from 'react' import { useAppStore } from '@/store' import { isGitRepoKind } from '../../../../shared/repo-kind' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoHostIdentity } from '@/store/slices/repo-host-identity' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' import type { SetupScriptPromptState } from './setup-script-prompt-render-state' diff --git a/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts b/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts index 913e197691a..bd410ddc2a2 100644 --- a/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts +++ b/src/renderer/src/components/sidebar/useWorktreeAgentRows.test.ts @@ -3,7 +3,7 @@ import { AGENT_STATUS_STALE_AFTER_MS, type AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import { applyAgentRowLineage } from '@/components/dashboard/agent-row-lineage' import { makePaneKey } from '../../../../shared/stable-pane-id' diff --git a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts index c96aa38d50d..c18c3cbceed 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { BrowserWorkspace, TerminalTab } from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { getVisibleWorktreeBrowserActivityTabs, getVisibleWorktreeTerminalActivityTabs diff --git a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts index d843e8d20c1..683b984cca8 100644 --- a/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts +++ b/src/renderer/src/components/sidebar/visible-worktree-activity-inputs.ts @@ -1,4 +1,5 @@ -import type { BrowserWorkspace, TerminalTab } from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' export type TerminalActivityTab = Pick export type BrowserActivityTab = Pick diff --git a/src/renderer/src/components/sidebar/visible-worktrees.test.ts b/src/renderer/src/components/sidebar/visible-worktrees.test.ts index 07e2d32a4b3..597d4b91e61 100644 --- a/src/renderer/src/components/sidebar/visible-worktrees.test.ts +++ b/src/renderer/src/components/sidebar/visible-worktrees.test.ts @@ -1,7 +1,10 @@ import { describe, expect, it } from 'vitest' import { computeVisibleWorktreeIds } from './visible-worktrees' import { getPairedDeviceIdsByEnvironment } from './workspace-creator-visibility' -import type { Repo, TerminalTab, Worktree, WorktreeLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { LOCAL_EXECUTION_HOST_ID } from '../../../../shared/execution-host' function makeTab(id: string, worktreeId: string, ptyId: string | null): TerminalTab { diff --git a/src/renderer/src/components/sidebar/visible-worktrees.ts b/src/renderer/src/components/sidebar/visible-worktrees.ts index 927033c5bfa..270809d49da 100644 --- a/src/renderer/src/components/sidebar/visible-worktrees.ts +++ b/src/renderer/src/components/sidebar/visible-worktrees.ts @@ -1,4 +1,7 @@ -import type { Worktree, Repo, TerminalTab, WorktreeLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildWorktreeComparator, sortWorktreesSmart } from './smart-sort' import { getWorktreeIdsWithLiveAgent, isInactiveWorkspace } from '@/lib/worktree-activity-state' import { useAppStore } from '@/store' @@ -28,8 +31,6 @@ import { } from './workspace-creator-visibility' import { isDefaultBranchWorkspace } from './default-branch-workspace' -export { isDefaultBranchWorkspace } from './default-branch-workspace' - /** * Whether the "Hide sleeping" sweep must keep this row (#8873). * diff --git a/src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts b/src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts index 17c0c2d2f14..880b03289d9 100644 --- a/src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts +++ b/src/renderer/src/components/sidebar/workspace-board-task-status-sync.test.ts @@ -1,10 +1,7 @@ import { describe, expect, it, vi } from 'vitest' -import type { - LinearIssue, - LinearWorkflowState, - WorkspaceStatusDefinition, - Worktree -} from '../../../../shared/types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { LinearWorkflowState } from '../../../../shared/linear/workspace-types' +import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types' import type { LinearMutationResult } from '@/runtime/runtime-linear-client' import { getWorkspaceBoardTaskStatusSyncRequest, diff --git a/src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts b/src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts index 15409ddcfe6..505459a99fd 100644 --- a/src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts +++ b/src/renderer/src/components/sidebar/workspace-board-task-status-sync.ts @@ -5,13 +5,13 @@ import { type LinearMutationResult, type RuntimeLinearSettings } from '@/runtime/runtime-linear-client' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { LinearWorkflowState } from '../../../../shared/linear/workspace-types' import type { - LinearIssue, - LinearWorkflowState, WorkspaceStatus, WorkspaceStatusDefinition, Worktree -} from '../../../../shared/types' +} from '../../../../shared/worktree/types' import { getWorkspaceStatus } from '../../../../shared/workspace-statuses' export type WorkspaceBoardTaskStatusSyncResult = { diff --git a/src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts b/src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts index 1cbd5eedb08..f21c61c5279 100644 --- a/src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts +++ b/src/renderer/src/components/sidebar/workspace-creator-visibility.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' import { filterFolderWorkspacesFromOtherDevices } from './workspace-creator-visibility' function makeFolderWorkspace( diff --git a/src/renderer/src/components/sidebar/workspace-creator-visibility.ts b/src/renderer/src/components/sidebar/workspace-creator-visibility.ts index 1cc4e208cfd..ca0b929a40c 100644 --- a/src/renderer/src/components/sidebar/workspace-creator-visibility.ts +++ b/src/renderer/src/components/sidebar/workspace-creator-visibility.ts @@ -1,6 +1,7 @@ import type { RuntimeStatus } from '../../../../shared/runtime-types' import type { PublicKnownRuntimeEnvironment } from '../../../../shared/runtime-environments' -import type { FolderWorkspace, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspace-worktree' import { normalizeWorkspaceCreatorProvenance } from '../../../../shared/workspace-creator-provenance' diff --git a/src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts b/src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts index b5679409cc5..b368cb93133 100644 --- a/src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts +++ b/src/renderer/src/components/sidebar/workspace-delete-lineage.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { LOCAL_EXECUTION_HOST_ID, toSshExecutionHostId } from '../../../../shared/execution-host' -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getWorkspaceDeleteLineage } from './workspace-delete-lineage' function makeWorktree(id: string, path: string): Worktree { diff --git a/src/renderer/src/components/sidebar/workspace-delete-lineage.ts b/src/renderer/src/components/sidebar/workspace-delete-lineage.ts index ca6c78c1b67..55d62fc71fd 100644 --- a/src/renderer/src/components/sidebar/workspace-delete-lineage.ts +++ b/src/renderer/src/components/sidebar/workspace-delete-lineage.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getProjectedWorktreeLineageChildrenByParentId } from './worktree-lineage-projection' type WorkspaceDeleteLineage = { diff --git a/src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.ts b/src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.ts index dd59d430ab9..768fd3cd2bd 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-card-pointer-drag-dom.ts @@ -1,4 +1,4 @@ -import type { WorkspaceStatus } from '../../../../shared/types' +import type { WorkspaceStatus } from '../../../../shared/worktree/types' import { resolveWorkspaceKanbanVirtualLaneDropIndex, resolveWorkspaceKanbanVirtualLaneDropIndicatorY diff --git a/src/renderer/src/components/sidebar/workspace-kanban-search.test.ts b/src/renderer/src/components/sidebar/workspace-kanban-search.test.ts index d5b42c45cde..0eb1d42d377 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-search.test.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-search.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { WORKTREE_PALETTE_QUERY_MAX_BYTES } from '@/lib/worktree-palette-query-bounds' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildWorkspaceKanbanLaneViews, matchWorkspaceBoardWorktrees diff --git a/src/renderer/src/components/sidebar/workspace-kanban-search.ts b/src/renderer/src/components/sidebar/workspace-kanban-search.ts index a7f8b0840d0..c76fb230610 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-search.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-search.ts @@ -1,6 +1,7 @@ import { isWorktreePaletteQueryTooLarge } from '@/lib/worktree-palette-query-bounds' import { searchWorktrees, type PaletteMatchedField } from '@/lib/worktree-palette-search' -import type { Repo, WorkspaceStatus, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' export type WorkspaceKanbanLaneView = { items: readonly Worktree[] diff --git a/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts b/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts index 5a4a3d62b4c..bdd9928ff17 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/types' +import type { WorkspaceStatusDefinition, Worktree } from '../../../../shared/worktree/types' import { serializeWorkspaceLaneFullIds } from './workspace-kanban-filtered-drop-index' import { buildWorkspaceKanbanSidebarDropUpdates, diff --git a/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.ts b/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.ts index 8475d91cdd8..53600b5b20b 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-sidebar-drop.ts @@ -1,9 +1,9 @@ +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' import type { WorkspaceStatus, WorkspaceStatusDefinition, - Worktree, - WorktreeMeta -} from '../../../../shared/types' + Worktree +} from '../../../../shared/worktree/types' import { parseWorkspaceLaneFullIds, resolveFullLaneDropIndex diff --git a/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts b/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts index 00fbbe84067..e705a12f9fe 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { groupWorkspaceKanbanWorktrees } from './workspace-kanban-worktree-groups' function worktree({ diff --git a/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.ts b/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.ts index 1f85cf3682c..b26ba6e7367 100644 --- a/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.ts +++ b/src/renderer/src/components/sidebar/workspace-kanban-worktree-groups.ts @@ -1,4 +1,8 @@ -import type { WorkspaceStatus, WorkspaceStatusDefinition, Worktree } from '../../../../shared/types' +import type { + WorkspaceStatus, + WorkspaceStatusDefinition, + Worktree +} from '../../../../shared/worktree/types' import type { SortBy } from './smart-sort' import { getWorkspaceStatus } from './workspace-status' import { compareWorktreeDisplayName } from '@/lib/worktree-display-name-order' diff --git a/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts b/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts index cc9d4646584..f4a06ccfada 100644 --- a/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts +++ b/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getWorkspaceLineageMenuActions, hasSleepableWorkspaceActivity diff --git a/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.ts b/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.ts index 64dd1260534..1ff8c20ea6c 100644 --- a/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.ts +++ b/src/renderer/src/components/sidebar/workspace-lineage-menu-actions.ts @@ -1,6 +1,7 @@ import { useMemo } from 'react' import { tabHasLivePty } from '@/lib/tab-has-live-pty' -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getWorkspaceDeleteLineage } from './workspace-delete-lineage' type WorkspaceActivityMaps = { diff --git a/src/renderer/src/components/sidebar/workspace-status.ts b/src/renderer/src/components/sidebar/workspace-status.ts index a35f7dff4fd..5229831dcac 100644 --- a/src/renderer/src/components/sidebar/workspace-status.ts +++ b/src/renderer/src/components/sidebar/workspace-status.ts @@ -1,6 +1,6 @@ import React from 'react' import { CircleDot } from 'lucide-react' -import type { WorkspaceStatus, WorkspaceStatusDefinition } from '../../../../shared/types' +import type { WorkspaceStatus, WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import { DEFAULT_WORKSPACE_STATUS_COLOR_ID, DEFAULT_WORKSPACE_STATUS_ICON_ID, diff --git a/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts b/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts index bc1f06cc7b5..ed086d7c94e 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-activity-summary.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { shallow } from 'zustand/shallow' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { selectWorktreeAgentActivitySummary, type AgentActivityInput diff --git a/src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts b/src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts index b52b0dd9024..098c7eadcb4 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-freshness-selector.test.ts @@ -4,7 +4,7 @@ import { type AgentStatusEntry } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { createWorktreeAgentFreshnessSelector } from './worktree-agent-freshness-selector' const WT_1_PANE = makePaneKey('tab-1', '11111111-1111-4111-8111-111111111111') diff --git a/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts b/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts index 808664cbc7c..665cbb07896 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-orchestration-batch.test.ts @@ -5,7 +5,7 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { EMPTY_WORKTREE_AGENT_ORCHESTRATION, selectRuntimeAgentOrchestrationBatch diff --git a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts index 2bd549481c0..e7881d95aff 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-orchestration-index.test.ts @@ -4,7 +4,7 @@ import type { AgentStatusOrchestrationContext } from '../../../../shared/agent-status-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { makePaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' import { EMPTY_WORKTREE_AGENT_ORCHESTRATION, diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts b/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts index d722d39c4bb..9a0b6185a1a 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-fallback-tab.ts @@ -1,6 +1,6 @@ import type { AgentStatusEntry } from '../../../../shared/agent-status-types' import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' export function effectiveWorktreeAgentRowStartedAt(entry: AgentStatusEntry): number { return entry.stateHistory[0]?.startedAt ?? entry.stateStartedAt diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts index 46f75858ee9..29b30fa34ba 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.test.ts @@ -3,7 +3,7 @@ import type { AgentStatusEntry, MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import { makePaneKey } from '../../../../shared/stable-pane-id' import { getLiveEntriesFullRebuildCountForTests } from './worktree-agent-live-index-patch' diff --git a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts index 75de25923f2..e9a6b5fde0b 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-row-selectors.ts @@ -13,7 +13,7 @@ import { recordLiveEntriesFullRebuild } from './worktree-agent-live-index-patch' import { selectWorktreeAgentOrchestration } from './worktree-agent-orchestration-index' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' const EMPTY_LIVE_ENTRIES: AgentStatusEntry[] = [] const EMPTY_MIGRATION_UNSUPPORTED_ENTRIES: MigrationUnsupportedPtyEntry[] = [] diff --git a/src/renderer/src/components/sidebar/worktree-agent-rows.ts b/src/renderer/src/components/sidebar/worktree-agent-rows.ts index da4a33650e6..1fbca0fc743 100644 --- a/src/renderer/src/components/sidebar/worktree-agent-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-agent-rows.ts @@ -16,7 +16,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../../shared/types' +} from '../../../../shared/terminal-tab-types' import { resolveRuntimePaneTitleLeafId } from '@/lib/runtime-pane-title-leaf-id' import { buildTitleDerivedAgentRows, diff --git a/src/renderer/src/components/sidebar/worktree-card-display-property-options.ts b/src/renderer/src/components/sidebar/worktree-card-display-property-options.ts index e5256b48312..7a009b384fa 100644 --- a/src/renderer/src/components/sidebar/worktree-card-display-property-options.ts +++ b/src/renderer/src/components/sidebar/worktree-card-display-property-options.ts @@ -1,4 +1,4 @@ -import type { WorktreeCardProperty } from '../../../../shared/types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' import { translate } from '@/i18n/i18n' export const PROPERTY_OPTIONS: { id: WorktreeCardProperty; label: string }[] = [ diff --git a/src/renderer/src/components/sidebar/worktree-card-header.tsx b/src/renderer/src/components/sidebar/worktree-card-header.tsx index 0c063e28dee..8fb715b01ca 100644 --- a/src/renderer/src/components/sidebar/worktree-card-header.tsx +++ b/src/renderer/src/components/sidebar/worktree-card-header.tsx @@ -7,7 +7,7 @@ import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { translate } from '@/i18n/i18n' import { cn } from '@/lib/utils' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { resolveRepoHeaderColor } from './project-header-color' import { formatSparseDirectoryPreview, shouldBeginWorktreeRename } from './worktree-card-model' import type { WorktreeCardPresentation } from './worktree-card-presentation' diff --git a/src/renderer/src/components/sidebar/worktree-card-jira-issue-display.ts b/src/renderer/src/components/sidebar/worktree-card-jira-issue-display.ts index b9373e1092a..a072c51c33f 100644 --- a/src/renderer/src/components/sidebar/worktree-card-jira-issue-display.ts +++ b/src/renderer/src/components/sidebar/worktree-card-jira-issue-display.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeCardProperty } from '../../../../shared/types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorktreeCardJiraIssueDisplay } from './worktree-card-meta-types' function withoutRepeatedJiraIdentifier(title: string, identifier: string): string { diff --git a/src/renderer/src/components/sidebar/worktree-card-meta-types.ts b/src/renderer/src/components/sidebar/worktree-card-meta-types.ts index 75373a14699..0be771e7534 100644 --- a/src/renderer/src/components/sidebar/worktree-card-meta-types.ts +++ b/src/renderer/src/components/sidebar/worktree-card-meta-types.ts @@ -1,9 +1,9 @@ import type { ExecutionHostId } from '../../../../shared/execution-host' +import type { IssueInfo } from '../../../../shared/github/pull-request-types' import type { AutomationWorkspaceProvenance, - CliWorkspaceProvenance, - IssueInfo -} from '../../../../shared/types' + CliWorkspaceProvenance +} from '../../../../shared/worktree/types' import type { WorktreeCardPrDisplay } from './worktree-card-pr-display' import type { WorktreeCardDetailsHoverControl } from './worktree-card-details-hover-state' diff --git a/src/renderer/src/components/sidebar/worktree-card-model.ts b/src/renderer/src/components/sidebar/worktree-card-model.ts index 2331b92d2cd..e10cf2da703 100644 --- a/src/renderer/src/components/sidebar/worktree-card-model.ts +++ b/src/renderer/src/components/sidebar/worktree-card-model.ts @@ -1,6 +1,7 @@ import type React from 'react' -import type { Repo, WorkspaceStatus, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceStatus, Worktree } from '../../../../shared/worktree/types' import type { WorktreeCardPrDisplay } from './worktree-card-pr-display' export type WorktreeRenameRequest = { diff --git a/src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts b/src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts index 8cc6d45ac5a..7e677708b50 100644 --- a/src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts +++ b/src/renderer/src/components/sidebar/worktree-card-pr-display.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' import { getWorktreeCardPrDisplay, isCachedMergedBranchPRCurrentForWorktree diff --git a/src/renderer/src/components/sidebar/worktree-card-pr-display.ts b/src/renderer/src/components/sidebar/worktree-card-pr-display.ts index 27027e09183..12dcddfac03 100644 --- a/src/renderer/src/components/sidebar/worktree-card-pr-display.ts +++ b/src/renderer/src/components/sidebar/worktree-card-pr-display.ts @@ -1,5 +1,6 @@ import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { PRInfo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Worktree } from '../../../../shared/worktree/types' type LinkedReviewMetadataProvider = Exclude diff --git a/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts b/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts index 0030e7d931e..7d366b845e8 100644 --- a/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts +++ b/src/renderer/src/components/sidebar/worktree-card-status-inputs.test.ts @@ -4,7 +4,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../../shared/types' +} from '../../../../shared/terminal-tab-types' import { selectLivePtyIdsForWorktree, selectTerminalLayoutRootsForWorktree, diff --git a/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts b/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts index e06894441cf..128afafe03d 100644 --- a/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts +++ b/src/renderer/src/components/sidebar/worktree-card-status-inputs.ts @@ -1,5 +1,5 @@ import type { AppState } from '@/store/types' -import type { TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' // Why: these selectors return fresh maps whose top-level values preserve // underlying per-tab references, so callers must compare them shallowly. diff --git a/src/renderer/src/components/sidebar/worktree-delete-execution.ts b/src/renderer/src/components/sidebar/worktree-delete-execution.ts index 889587306d0..f105acedcdf 100644 --- a/src/renderer/src/components/sidebar/worktree-delete-execution.ts +++ b/src/renderer/src/components/sidebar/worktree-delete-execution.ts @@ -7,7 +7,7 @@ import { isPathInsideOrEqual, normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { prepareActiveWorktreeFocusAfterDelete } from './active-worktree-focus-after-delete' import { showDeleteWorktreeFailureToast } from './delete-worktree-failure-toast' import { showWorkspaceListChangedToast } from './stale-workspace-list-toast' diff --git a/src/renderer/src/components/sidebar/worktree-delete-request.ts b/src/renderer/src/components/sidebar/worktree-delete-request.ts index 71ef9e87cda..df357d8c55e 100644 --- a/src/renderer/src/components/sidebar/worktree-delete-request.ts +++ b/src/renderer/src/components/sidebar/worktree-delete-request.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import type { PreservedBranchCleanup } from '@/lib/preserved-branch-cleanup' export type WorktreeBatchDeleteOptions = { diff --git a/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts b/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts index 9241dd2cf11..65ae3befbc7 100644 --- a/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts +++ b/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getCyclicProjectedWorktreeLineageIds } from './worktree-lineage-projection' import { getReorderedWorktreeIdsToUnnest, diff --git a/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.ts b/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.ts index f171ce5d2a6..5f63768aac3 100644 --- a/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.ts +++ b/src/renderer/src/components/sidebar/worktree-lineage-drag-drop.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getLineageRenderInfo } from './worktree-lineage-projection' const WORKTREE_CARD_CONTENT_TARGET_SELECTOR = '[data-worktree-card-hover-trigger]' diff --git a/src/renderer/src/components/sidebar/worktree-lineage-projection.ts b/src/renderer/src/components/sidebar/worktree-lineage-projection.ts index 040a40eb737..337140f586c 100644 --- a/src/renderer/src/components/sidebar/worktree-lineage-projection.ts +++ b/src/renderer/src/components/sidebar/worktree-lineage-projection.ts @@ -2,7 +2,8 @@ import { getCyclicWorktreeLineageChildIds, isValidResolvedWorktreeLineageEdge } from '../../../../shared/resolved-worktree-lineage' -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' export type LineageRenderInfo = | { state: 'none' } diff --git a/src/renderer/src/components/sidebar/worktree-list-folder-reveal.test.ts b/src/renderer/src/components/sidebar/worktree-list-folder-reveal.test.ts index 9b472ab7be7..61eca2889de 100644 --- a/src/renderer/src/components/sidebar/worktree-list-folder-reveal.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-folder-reveal.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { getFolderWorkspaceRevealGroupKeys, diff --git a/src/renderer/src/components/sidebar/worktree-list-folder-reveal.ts b/src/renderer/src/components/sidebar/worktree-list-folder-reveal.ts index 21c70db9384..de8ca2c278c 100644 --- a/src/renderer/src/components/sidebar/worktree-list-folder-reveal.ts +++ b/src/renderer/src/components/sidebar/worktree-list-folder-reveal.ts @@ -1,4 +1,6 @@ -import type { FolderWorkspace, ProjectGroup, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspace-worktree' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { getProjectGroupHeaderKey } from './worktree-list-groups' diff --git a/src/renderer/src/components/sidebar/worktree-list-groups.test.ts b/src/renderer/src/components/sidebar/worktree-list-groups.test.ts index c5a7f9606b2..dacfcb3a139 100644 --- a/src/renderer/src/components/sidebar/worktree-list-groups.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-groups.test.ts @@ -20,16 +20,12 @@ import { REPO_HEADER_ACTION_REVEAL_CLASS } from './repo-header-action-button-class' import { getWorktreeLineageAncestors } from './worktree-lineage-projection' -import type { - DetectedWorktree, - Project, - ProjectHostSetup, - FolderWorkspace, - Repo, - ProjectGroup, - Worktree, - WorktreeLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { DetectedWorktree, Worktree } from '../../../../shared/worktree/types' const LOCAL_HOST_LABEL = getExecutionHostLabel('local') diff --git a/src/renderer/src/components/sidebar/worktree-list-groups.ts b/src/renderer/src/components/sidebar/worktree-list-groups.ts index a154eea8263..068da94edb7 100644 --- a/src/renderer/src/components/sidebar/worktree-list-groups.ts +++ b/src/renderer/src/components/sidebar/worktree-list-groups.ts @@ -1,18 +1,17 @@ /* eslint-disable max-lines -- Why: sidebar row construction keeps every grouping mode in one pure module so reveal, virtualized rendering, and tests share the same flat row contract. */ import { CircleX, FolderTree, List, Pin } from 'lucide-react' import type React from 'react' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { ProjectOrderBy } from '../../../../shared/ui-chrome-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { DetectedWorktree, - Project, - ProjectHostSetup, - FolderWorkspace, - Repo, - ProjectGroup, - ProjectOrderBy, - Worktree, - WorktreeLineage, - WorkspaceStatusDefinition -} from '../../../../shared/types' + WorkspaceStatusDefinition, + Worktree +} from '../../../../shared/worktree/types' import { branchName } from '../../lib/git-utils' import { getWorkspaceStatus, diff --git a/src/renderer/src/components/sidebar/worktree-list-host-filtering.test.ts b/src/renderer/src/components/sidebar/worktree-list-host-filtering.test.ts index 2321971231e..179e3ee8379 100644 --- a/src/renderer/src/components/sidebar/worktree-list-host-filtering.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-host-filtering.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { getFolderPathStatusRouteOptionsForRows, getFolderWorkspaceExecutionHostIdForRows, diff --git a/src/renderer/src/components/sidebar/worktree-list-host-filtering.ts b/src/renderer/src/components/sidebar/worktree-list-host-filtering.ts index 655c4e4f2ff..8071b56bcb7 100644 --- a/src/renderer/src/components/sidebar/worktree-list-host-filtering.ts +++ b/src/renderer/src/components/sidebar/worktree-list-host-filtering.ts @@ -7,7 +7,8 @@ import { type ExecutionHostScope } from '../../../../shared/execution-host' import type { FolderWorkspacePathStatusRequest } from '../../../../shared/folder-workspace-path-status' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' /** null means "no host filter" — every host is visible. */ export function getVisibleSidebarHostIdSet( diff --git a/src/renderer/src/components/sidebar/worktree-list-imported-rows.test.ts b/src/renderer/src/components/sidebar/worktree-list-imported-rows.test.ts index 67f3760c91c..9cda62a93b4 100644 --- a/src/renderer/src/components/sidebar/worktree-list-imported-rows.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-imported-rows.test.ts @@ -6,7 +6,8 @@ import { getWorktreeDragIndexes, renderRowContainsWorktree } from './WorktreeList' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { Row } from './worktree-list-groups' const repo: Repo = { diff --git a/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.test.ts b/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.test.ts index 4960445c342..714fe0e64b4 100644 --- a/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { shallow } from 'zustand/shallow' -import type { FolderWorkspace } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' import { EMPTY_WORKTREE_LIST_REVIEW_CACHE_INPUTS, selectWorktreeListReviewCacheInputs, diff --git a/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.ts b/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.ts index 9ea780c89ea..690da091f3c 100644 --- a/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.ts +++ b/src/renderer/src/components/sidebar/worktree-list-review-cache-inputs.ts @@ -1,5 +1,5 @@ import type { AppState } from '@/store/types' -import type { WorktreeCardProperty } from '../../../../shared/types' +import type { WorktreeCardProperty } from '../../../../shared/ui-chrome-types' import type { WorktreeGroupBy } from './worktree-list-groups' export type WorktreeListReviewCacheState = Pick< diff --git a/src/renderer/src/components/sidebar/worktree-list-scroll-adjustment.test.ts b/src/renderer/src/components/sidebar/worktree-list-scroll-adjustment.test.ts index 924a4edc88a..f5b9d586f63 100644 --- a/src/renderer/src/components/sidebar/worktree-list-scroll-adjustment.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-scroll-adjustment.test.ts @@ -12,7 +12,7 @@ import { GROUP_HEADER_ROW_HEIGHT, getActiveStickyHeaderIndexForScroll } from './worktree-list-virtual-rows' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { Row } from './worktree-list-groups' const repo: Repo = { diff --git a/src/renderer/src/components/sidebar/worktree-list-sticky-headers.test.ts b/src/renderer/src/components/sidebar/worktree-list-sticky-headers.test.ts index 777560a9484..1c8efdfe9a0 100644 --- a/src/renderer/src/components/sidebar/worktree-list-sticky-headers.test.ts +++ b/src/renderer/src/components/sidebar/worktree-list-sticky-headers.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from 'vitest' import { buildRows } from './worktree-list-groups' import { getStickyHeaderIndexes } from './worktree-list-virtual-rows' -import type { ProjectGroup, Repo, Worktree } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { Row } from './worktree-list-groups' const repo: Repo = { diff --git a/src/renderer/src/components/sidebar/worktree-meta-updates.test.ts b/src/renderer/src/components/sidebar/worktree-meta-updates.test.ts index 3ce6ffb74b4..38985cf7330 100644 --- a/src/renderer/src/components/sidebar/worktree-meta-updates.test.ts +++ b/src/renderer/src/components/sidebar/worktree-meta-updates.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorktreeMeta } from '../../../../shared/types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' import { buildWorktreeMetaUpdates, type WorktreeMetaDraft, diff --git a/src/renderer/src/components/sidebar/worktree-meta-updates.ts b/src/renderer/src/components/sidebar/worktree-meta-updates.ts index 20afdf8af26..b8f06c43d8c 100644 --- a/src/renderer/src/components/sidebar/worktree-meta-updates.ts +++ b/src/renderer/src/components/sidebar/worktree-meta-updates.ts @@ -5,7 +5,8 @@ import { } from '../../../../shared/linear/links' import { parseIssueLinkInput, type IssueLinkProvider } from '../../../../shared/issue-link-input' import type { WorkspaceSourceProvider } from '../../../../shared/new-workspace/workspace-source' -import type { WorkspaceLinkedItem, WorktreeMeta } from '../../../../shared/types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { WorkspaceLinkedItem } from '../../../../shared/worktree/types' export type WorktreeMetaSavedPayload = { worktreeId: string diff --git a/src/renderer/src/components/sidebar/worktree-parent-candidates.ts b/src/renderer/src/components/sidebar/worktree-parent-candidates.ts index 981ea7e3a7d..b95d2c1fbd3 100644 --- a/src/renderer/src/components/sidebar/worktree-parent-candidates.ts +++ b/src/renderer/src/components/sidebar/worktree-parent-candidates.ts @@ -1,5 +1,7 @@ import { getWorktreeExecutionHostId } from '../../../../shared/execution-host' -import type { Repo, Worktree, WorktreeLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { canAssignWorktreeParent } from './worktree-parent-eligibility' import { getCyclicProjectedWorktreeLineageIds } from './worktree-lineage-projection' diff --git a/src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts b/src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts index 7dfe0360f02..64400b7dedd 100644 --- a/src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts +++ b/src/renderer/src/components/sidebar/worktree-parent-eligibility.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import { join } from 'node:path' -import type { Repo, Worktree, WorktreeLineage } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { canAssignWorktreeParent } from './worktree-parent-eligibility' import { getEligibleWorktreeParents, isEligibleWorktreeParent } from './worktree-parent-candidates' diff --git a/src/renderer/src/components/sidebar/worktree-parent-eligibility.ts b/src/renderer/src/components/sidebar/worktree-parent-eligibility.ts index fe2c4261064..f620f19133d 100644 --- a/src/renderer/src/components/sidebar/worktree-parent-eligibility.ts +++ b/src/renderer/src/components/sidebar/worktree-parent-eligibility.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { Worktree } from '../../../../shared/worktree/types' import { getCyclicProjectedWorktreeLineageIds, getLineageRenderInfo diff --git a/src/renderer/src/components/sidebar/worktree-parent-picker-filtering.ts b/src/renderer/src/components/sidebar/worktree-parent-picker-filtering.ts index 3c07c35b1e4..b15154440e6 100644 --- a/src/renderer/src/components/sidebar/worktree-parent-picker-filtering.ts +++ b/src/renderer/src/components/sidebar/worktree-parent-picker-filtering.ts @@ -1,6 +1,6 @@ import { defaultFilter } from 'cmdk' import { branchDisplayName } from './WorktreeCardHelpers' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' export function getWorktreeParentPickerItemValue(candidate: Worktree): string { return `${candidate.displayName} ${branchDisplayName(candidate.branch)} ${candidate.path}` diff --git a/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts b/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts index cd4672dc9a7..c8b49f10b1f 100644 --- a/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts +++ b/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostSectionRow } from './host-section-rows' import { getRenderedWorktreesInSidebarOrder } from './worktree-sidebar-row-preference' diff --git a/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts b/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts index c73107cbed8..0495375b691 100644 --- a/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts +++ b/src/renderer/src/components/sidebar/worktree-sidebar-row-preference.ts @@ -1,5 +1,5 @@ import { folderWorkspaceToWorktree } from '../../../../shared/folder-workspace-worktree' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostSectionRow } from './host-section-rows' import { PINNED_GROUP_KEY, diff --git a/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts b/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts index 2a76bb0799c..5135eea6933 100644 --- a/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-subagent-child-rows.ts @@ -1,6 +1,6 @@ import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' /** Row-identity key for an in-process subagent child row. The NUL separator * cannot appear in real pane keys, so synthetic keys can never collide with diff --git a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts index 44c3e7f2639..6fcd0a6719c 100644 --- a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts +++ b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { applyAgentRowLineage } from '@/components/dashboard/agent-row-lineage' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { makePaneKey } from '../../../../shared/stable-pane-id' import { buildWorktreeAgentRows } from './worktree-agent-rows' diff --git a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts index 9224fe2cba3..70289b4b3fb 100644 --- a/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts +++ b/src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts @@ -14,7 +14,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../../shared/types' +} from '../../../../shared/terminal-tab-types' import { normalizeCompatibleAgentTitleForOwner, resolveCompatibleAgentTypeForOwner diff --git a/src/renderer/src/components/sidebar/worktree-visibility-update-error.ts b/src/renderer/src/components/sidebar/worktree-visibility-update-error.ts index 74605160e68..3e82a24d0ac 100644 --- a/src/renderer/src/components/sidebar/worktree-visibility-update-error.ts +++ b/src/renderer/src/components/sidebar/worktree-visibility-update-error.ts @@ -1,5 +1,5 @@ import { translate } from '@/i18n/i18n' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' export function worktreeVisibilityUpdateError( updateSucceeded: boolean, diff --git a/src/renderer/src/components/sparse/SparseCheckoutPresetSelect.tsx b/src/renderer/src/components/sparse/SparseCheckoutPresetSelect.tsx index 8ff4f7bfed8..a25f4337c9c 100644 --- a/src/renderer/src/components/sparse/SparseCheckoutPresetSelect.tsx +++ b/src/renderer/src/components/sparse/SparseCheckoutPresetSelect.tsx @@ -7,7 +7,7 @@ import { useAppStore } from '@/store' import { cn } from '@/lib/utils' import { parseSparsePresetDirectories } from '@/lib/sparse-preset-draft' import { useMountedRef } from '@/hooks/useMountedRef' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import { translate } from '@/i18n/i18n' import { SparseCheckoutPresetDraftForm, diff --git a/src/renderer/src/components/status-bar/PetStatusSegment.tsx b/src/renderer/src/components/status-bar/PetStatusSegment.tsx index b927e29351e..48cd2f0292b 100644 --- a/src/renderer/src/components/status-bar/PetStatusSegment.tsx +++ b/src/renderer/src/components/status-bar/PetStatusSegment.tsx @@ -15,7 +15,7 @@ import { } from '@/components/ui/dropdown-menu' import { useAppStore } from '../../store' import { BUNDLED_PET, BUNDLED_PETS, findBundledPet, isBundledPetId } from '../pet/pet-models' -import { PET_SIZE_MAX, PET_SIZE_MIN } from '../../../../shared/types' +import { PET_SIZE_MAX, PET_SIZE_MIN } from '../../../../shared/pet-types' import { translate } from '@/i18n/i18n' // Why: cluster pet-related controls (show/hide, character picker, custom diff --git a/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx b/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx index 3bf507646da..783202de0cb 100644 --- a/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx +++ b/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.rows.test.tsx @@ -4,7 +4,7 @@ import React, { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' import { ORPHAN_WORKTREE_ID } from '../../../../shared/constants' -import type { BrowserWorkspace } from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' import type { UnifiedSessionRow, UnifiedWorktreeRow } from './resource-usage-merge-types' vi.mock('@/store', () => { diff --git a/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.tsx b/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.tsx index c4690a1c79a..688d59c9a14 100644 --- a/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.tsx +++ b/src/renderer/src/components/status-bar/ResourceUsageStatusSegment.tsx @@ -31,7 +31,9 @@ import { useAppStore } from '../../store' import { useWorktreeMap } from '../../store/selectors' import { runWorktreeDelete } from '../sidebar/delete-worktree-flow' import { useDaemonActions, DaemonActionDialog } from '../shared/useDaemonActions' -import type { AppMemory, BrowserWorkspace, UsageValues, Worktree } from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { AppMemory, UsageValues } from '../../../../shared/process-stats-types' +import type { Worktree } from '../../../../shared/worktree/types' import { ORPHAN_WORKTREE_ID } from '../../../../shared/constants' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../../shared/execution-host' import { countEstimatedInactiveWorkspaces } from '../workspace-cleanup/inactive-workspace-estimate' diff --git a/src/renderer/src/components/status-bar/StatusBar.tsx b/src/renderer/src/components/status-bar/StatusBar.tsx index 1c4af8fdff8..0243c5f8dee 100644 --- a/src/renderer/src/components/status-bar/StatusBar.tsx +++ b/src/renderer/src/components/status-bar/StatusBar.tsx @@ -38,11 +38,11 @@ import { } from '@/components/ui/dropdown-menu' import { useAppStore } from '../../store' import { selectFloatingWorkspaceHasUnread } from '../../store/selectors' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ClaudeRateLimitAccountsState, - CodexRateLimitAccountsState, - GlobalSettings -} from '../../../../shared/types' + CodexRateLimitAccountsState +} from '../../../../shared/managed-account-types' import type { ProviderRateLimits, RateLimitRuntimeTarget, diff --git a/src/renderer/src/components/status-bar/WorkspaceSpaceManagerPanel.tsx b/src/renderer/src/components/status-bar/WorkspaceSpaceManagerPanel.tsx index 453e3553792..8a4c23c6a38 100644 --- a/src/renderer/src/components/status-bar/WorkspaceSpaceManagerPanel.tsx +++ b/src/renderer/src/components/status-bar/WorkspaceSpaceManagerPanel.tsx @@ -29,7 +29,10 @@ import type { AgentStatusEntry, MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status-types' -import type { GitStatusResult, Repo, TerminalTab, Worktree } from '../../../../shared/types' +import type { GitStatusResult } from '../../../../shared/git-status-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorkspaceSpaceItem, WorkspaceSpaceWorktree diff --git a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts index a2fb18c1193..8536518728e 100644 --- a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts +++ b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.test.ts @@ -1,11 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { - BrowserWorkspace, - MemorySnapshot, - TerminalTab, - Worktree, - WorktreeMemory -} from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { MemorySnapshot, WorktreeMemory } from '../../../../shared/process-stats-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { mergeSnapshotAndSessions, UNATTRIBUTED_REPO_ID } from './mergeSnapshotAndSessions' import { requiresKillConfirmation } from './resource-session-kill-confirmation' import type { DaemonSession, MergeContext } from './resource-usage-merge-types' diff --git a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts index 672e7c622c2..7f858242952 100644 --- a/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts +++ b/src/renderer/src/components/status-bar/mergeSnapshotAndSessions.ts @@ -17,7 +17,11 @@ * See docs/resource-usage-merge-spec.md for the full design. */ -import type { MemorySnapshot, SessionMemory, WorktreeMemory } from '../../../../shared/types' +import type { + MemorySnapshot, + SessionMemory, + WorktreeMemory +} from '../../../../shared/process-stats-types' import { parsePtySessionId } from '../../../../shared/pty-session-id-format' import { parsePaneKey as parseStablePaneKey } from '../../../../shared/stable-pane-id' import { diff --git a/src/renderer/src/components/status-bar/resource-memory-metric-copy.ts b/src/renderer/src/components/status-bar/resource-memory-metric-copy.ts index a847f7d53a9..50448bc4ae6 100644 --- a/src/renderer/src/components/status-bar/resource-memory-metric-copy.ts +++ b/src/renderer/src/components/status-bar/resource-memory-metric-copy.ts @@ -1,4 +1,4 @@ -import type { ProcessMemoryMetric } from '../../../../shared/types' +import type { ProcessMemoryMetric } from '../../../../shared/process-stats-types' import { translate } from '@/i18n/i18n' export type ResourceMemoryMetricCopy = { diff --git a/src/renderer/src/components/status-bar/resource-session-bindings.test.ts b/src/renderer/src/components/status-bar/resource-session-bindings.test.ts index 3845234d6ed..9cfefa99f3b 100644 --- a/src/renderer/src/components/status-bar/resource-session-bindings.test.ts +++ b/src/renderer/src/components/status-bar/resource-session-bindings.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { buildResourceSessionBindingIndex, countUnboundDaemonSessions, diff --git a/src/renderer/src/components/status-bar/resource-session-bindings.ts b/src/renderer/src/components/status-bar/resource-session-bindings.ts index 96240f82268..a0a46140072 100644 --- a/src/renderer/src/components/status-bar/resource-session-bindings.ts +++ b/src/renderer/src/components/status-bar/resource-session-bindings.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { mayDestroyWithoutOwnerEvidence } from '../../../../shared/pty-listed-session' import type { DaemonSession } from './resource-usage-merge-types' diff --git a/src/renderer/src/components/status-bar/resource-usage-merge-types.ts b/src/renderer/src/components/status-bar/resource-usage-merge-types.ts index c365329c110..5943b744dfd 100644 --- a/src/renderer/src/components/status-bar/resource-usage-merge-types.ts +++ b/src/renderer/src/components/status-bar/resource-usage-merge-types.ts @@ -1,9 +1,6 @@ -import type { - BrowserWorkspace, - TerminalLayoutSnapshot, - TerminalTab, - Worktree -} from '../../../../shared/types' +import type { BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AgentOwnershipEvidence, PtyListedSession diff --git a/src/renderer/src/components/status-bar/status-bar-agent-gating.ts b/src/renderer/src/components/status-bar/status-bar-agent-gating.ts index 4ded63147db..145abef3a90 100644 --- a/src/renderer/src/components/status-bar/status-bar-agent-gating.ts +++ b/src/renderer/src/components/status-bar/status-bar-agent-gating.ts @@ -1,4 +1,5 @@ -import type { StatusBarItem, TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' // Why: CLI-backed usage bars are surface noise when the underlying // CLI isn't installed (e.g. a fresh Ubuntu install showing "Gemini Usage" diff --git a/src/renderer/src/components/status-bar/status-bar-provider-visibility.ts b/src/renderer/src/components/status-bar/status-bar-provider-visibility.ts index e96fa09550a..f1afd97f5f4 100644 --- a/src/renderer/src/components/status-bar/status-bar-provider-visibility.ts +++ b/src/renderer/src/components/status-bar/status-bar-provider-visibility.ts @@ -1,5 +1,5 @@ import type { ProviderRateLimits } from '../../../../shared/rate-limit-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export type UsageProviderSettings = Pick< GlobalSettings, diff --git a/src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts b/src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts index 262cf1595f1..5e0c4a162de 100644 --- a/src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts +++ b/src/renderer/src/components/status-bar/status-bar-runtime-groups.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ClaudeRateLimitAccountsState, - CodexRateLimitAccountsState, - GlobalSettings -} from '../../../../shared/types' + CodexRateLimitAccountsState +} from '../../../../shared/managed-account-types' import { buildClaudeStatusSwitchGroups, buildCodexStatusSwitchGroups, diff --git a/src/renderer/src/components/status-bar/use-available-status-bar-toggles.ts b/src/renderer/src/components/status-bar/use-available-status-bar-toggles.ts index f693aa84d60..cda54a7b8bc 100644 --- a/src/renderer/src/components/status-bar/use-available-status-bar-toggles.ts +++ b/src/renderer/src/components/status-bar/use-available-status-bar-toggles.ts @@ -1,5 +1,5 @@ import { useAppStore } from '../../store' -import type { StatusBarItem } from '../../../../shared/types' +import type { StatusBarItem } from '../../../../shared/ui-chrome-types' import { isStatusBarItemAvailable } from './status-bar-agent-gating' /** Subscribes to detected-agent state and returns the toggles filtered to diff --git a/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts b/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts index 702f3c1d70a..1d600faed2a 100644 --- a/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts +++ b/src/renderer/src/components/status-bar/workspace-space-presentation.test.ts @@ -18,7 +18,8 @@ import { } from './workspace-space-presentation' import { getWorkspaceDecisionDetails } from './WorkspaceSpaceManagerPanel' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' function row(overrides: Partial): WorkspaceSpaceWorktree { return { diff --git a/src/renderer/src/components/status-bar/workspace-space-presentation.ts b/src/renderer/src/components/status-bar/workspace-space-presentation.ts index ad09532a652..5aab2dcefc5 100644 --- a/src/renderer/src/components/status-bar/workspace-space-presentation.ts +++ b/src/renderer/src/components/status-bar/workspace-space-presentation.ts @@ -6,7 +6,7 @@ import { type MigrationUnsupportedPtyEntry } from '../../../../shared/agent-status-types' import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { isClipboardTextByteLengthOverLimit } from '../../../../shared/clipboard-text' import type { WorkspaceSpaceItem, diff --git a/src/renderer/src/components/tab-bar/BrowserTab.test.tsx b/src/renderer/src/components/tab-bar/BrowserTab.test.tsx index c1e994301b9..951f2f9f132 100644 --- a/src/renderer/src/components/tab-bar/BrowserTab.test.tsx +++ b/src/renderer/src/components/tab-bar/BrowserTab.test.tsx @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { BrowserTab as BrowserTabState } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' const reactHookRuntime = vi.hoisted(() => ({ states: [] as unknown[], diff --git a/src/renderer/src/components/tab-bar/BrowserTab.tsx b/src/renderer/src/components/tab-bar/BrowserTab.tsx index e0ecca579d2..2ea3d2d42e5 100644 --- a/src/renderer/src/components/tab-bar/BrowserTab.tsx +++ b/src/renderer/src/components/tab-bar/BrowserTab.tsx @@ -21,7 +21,7 @@ import { import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { ORCA_BROWSER_BLANK_URL } from '../../../../shared/constants' import { redactKagiSessionToken } from '../../../../shared/browser-url' -import type { BrowserTab as BrowserTabState } from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' import { CLOSE_ALL_CONTEXT_MENUS_EVENT } from './SortableTab' import { getLiveBrowserUrl } from '../browser-pane/browser-runtime' import type { TabDragItemData } from '../tab-group/useTabDragSplit' diff --git a/src/renderer/src/components/tab-bar/EditorFileTab.tsx b/src/renderer/src/components/tab-bar/EditorFileTab.tsx index 4af4e4fcfc4..1dcc0e96c16 100644 --- a/src/renderer/src/components/tab-bar/EditorFileTab.tsx +++ b/src/renderer/src/components/tab-bar/EditorFileTab.tsx @@ -12,7 +12,7 @@ import { getFileTypeIcon } from '@/lib/file-type-icons' import { useRepoById, useWorktreeById } from '@/store/selectors' import { useAppStore } from '@/store' import { STATUS_COLORS, STATUS_LABELS } from '../right-sidebar/status-display' -import type { GitFileStatus } from '../../../../shared/types' +import type { GitFileStatus } from '../../../../shared/git-status-types' import type { OpenFile } from '../../store/slices/editor' import { getUntitledFileRoot } from '@/components/editor/untitled-file-rename-path' import { preventMiddleButtonDefault } from './middle-button-default-guard' diff --git a/src/renderer/src/components/tab-bar/QuickLaunchButton.tsx b/src/renderer/src/components/tab-bar/QuickLaunchButton.tsx index d2e086f7496..6af2508048c 100644 --- a/src/renderer/src/components/tab-bar/QuickLaunchButton.tsx +++ b/src/renderer/src/components/tab-bar/QuickLaunchButton.tsx @@ -8,7 +8,7 @@ import { useAgentDetectionTargetForWorktree } from '@/hooks/useAgentDetectionTar import { useDetectedAgents } from '@/hooks/useDetectedAgents' import { useOptionalShortcutLabel } from '@/hooks/useShortcutLabel' import { launchAgentInNewTab } from '@/lib/launch-agent-in-new-tab' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { LaunchSource } from '../../../../shared/telemetry-events' import { DEFAULT_DISABLED_TUI_AGENTS, diff --git a/src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx b/src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx index e0a0ab9f7f0..31f01c65996 100644 --- a/src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx +++ b/src/renderer/src/components/tab-bar/RecentTabSwitcher.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import type { AppState } from '../../store/types' const { activateCyclableTabMock, getStateMock } = vi.hoisted(() => ({ diff --git a/src/renderer/src/components/tab-bar/SortableTab.tsx b/src/renderer/src/components/tab-bar/SortableTab.tsx index cec2a0f0082..b1417b57c13 100644 --- a/src/renderer/src/components/tab-bar/SortableTab.tsx +++ b/src/renderer/src/components/tab-bar/SortableTab.tsx @@ -6,7 +6,7 @@ import { useTabAgent } from '@/lib/use-tab-agent' import { isImeCompositionKeyDown } from '@/lib/ime-composition-keyboard-event' import { Input } from '@/components/ui/input' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { TabDragItemData } from '../tab-group/useTabDragSplit' import { useAppStore } from '../../store' import { diff --git a/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx b/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx index 86d48961284..c10118dc45d 100644 --- a/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx +++ b/src/renderer/src/components/tab-bar/SortableTabContextMenu.tsx @@ -17,7 +17,7 @@ import { DropdownMenuShortcut, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { useAppStore } from '../../store' import { formatShortcutLabel, useOptionalShortcutLabel } from '@/hooks/useShortcutLabel' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx b/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx index bb51c99d14c..0480bbcac87 100644 --- a/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx +++ b/src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx @@ -3,7 +3,9 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Tab, TabGroup, TerminalTab, Worktree } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { TabEntryOption } from './tab-create-entry-action' import type { TabAgentLaunchOption } from './tab-agent-launch-options' // Unmocked on purpose: the empty-query message must stay in step with the diff --git a/src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx b/src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx index 776e7939b3e..ae831a418f9 100644 --- a/src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx +++ b/src/renderer/src/components/tab-bar/TabBarQuickCommandsButton.tsx @@ -13,7 +13,7 @@ import { import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { runQuickCommandInNewTab } from '@/lib/run-quick-command-in-new-tab' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { useConfirmationDialog } from '@/components/confirmation-dialog-context' import { translate } from '@/i18n/i18n' import { TabBarQuickCommandsMenu } from './TabBarQuickCommandsMenu' diff --git a/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx b/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx index 44c75c39586..431157b0731 100644 --- a/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx +++ b/src/renderer/src/components/tab-bar/TerminalTabLeadingIcon.tsx @@ -1,7 +1,8 @@ import { AgentStateDot } from '@/components/AgentStateDot' import { AgentIcon } from '@/lib/agent-catalog' import { cn } from '@/lib/utils' -import type { TerminalTab, TuiAgent } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { FilledBellIcon } from '../sidebar/WorktreeCardHelpers' import { ShellIcon } from './shell-icons' import { diff --git a/src/renderer/src/components/tab-bar/editor-tab-local-open-guard.ts b/src/renderer/src/components/tab-bar/editor-tab-local-open-guard.ts index 37302887f6d..574d6507232 100644 --- a/src/renderer/src/components/tab-bar/editor-tab-local-open-guard.ts +++ b/src/renderer/src/components/tab-bar/editor-tab-local-open-guard.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { isLocalPathOpenBlocked } from '@/lib/local-path-open-guard' import { settingsForRuntimeOwner } from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/components/tab-bar/group-tab-order.test.ts b/src/renderer/src/components/tab-bar/group-tab-order.test.ts index 5835288bbc8..797fea97848 100644 --- a/src/renderer/src/components/tab-bar/group-tab-order.test.ts +++ b/src/renderer/src/components/tab-bar/group-tab-order.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import type { AppState } from '../../store/types' import { getActiveTabNavOrder, getGroupVisibleTabOrder } from './group-tab-order' diff --git a/src/renderer/src/components/tab-bar/group-tab-order.ts b/src/renderer/src/components/tab-bar/group-tab-order.ts index 8a16e51786b..d9396e3a53c 100644 --- a/src/renderer/src/components/tab-bar/group-tab-order.ts +++ b/src/renderer/src/components/tab-bar/group-tab-order.ts @@ -1,4 +1,4 @@ -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import type { AppState } from '../../store/types' import { reconcileTabOrder } from './reconcile-order' diff --git a/src/renderer/src/components/tab-bar/open-tab-search-entries.ts b/src/renderer/src/components/tab-bar/open-tab-search-entries.ts index 1b16a7d845f..4a808bcf6ce 100644 --- a/src/renderer/src/components/tab-bar/open-tab-search-entries.ts +++ b/src/renderer/src/components/tab-bar/open-tab-search-entries.ts @@ -1,7 +1,8 @@ // Builds one worktree's tabs, browser pages and simulator tabs into the shapes // the three Cmd+J engines search. -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildSearchableBrowserPages } from '@/lib/browser-palette-page-entries' import type { SearchableBrowserPage } from '@/lib/browser-palette-search' import { diff --git a/src/renderer/src/components/tab-bar/open-tab-search.test.ts b/src/renderer/src/components/tab-bar/open-tab-search.test.ts index 1476bdaa3bb..75103fe80c3 100644 --- a/src/renderer/src/components/tab-bar/open-tab-search.test.ts +++ b/src/renderer/src/components/tab-bar/open-tab-search.test.ts @@ -1,11 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { - BrowserPage, - BrowserWorkspace, - Tab, - TabContentType, - Worktree -} from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { Tab, TabContentType } from '../../../../shared/tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { SearchableBrowserPage } from '@/lib/browser-palette-search' import type { SearchableSimulatorTab } from '@/lib/simulator-palette-search' import type { SearchableWorkspaceTab } from '@/lib/workspace-tab-palette-search' diff --git a/src/renderer/src/components/tab-bar/recent-tab-switching.test.ts b/src/renderer/src/components/tab-bar/recent-tab-switching.test.ts index 7f52e4ae1d1..49e0a4da7f6 100644 --- a/src/renderer/src/components/tab-bar/recent-tab-switching.test.ts +++ b/src/renderer/src/components/tab-bar/recent-tab-switching.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { AppState } from '../../store/types' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { buildRecentTabSwitcherModel, getNextRecentTabSwitcherIndex, diff --git a/src/renderer/src/components/tab-bar/recent-tab-switching.ts b/src/renderer/src/components/tab-bar/recent-tab-switching.ts index 89070ba14ec..a2b5fba9fab 100644 --- a/src/renderer/src/components/tab-bar/recent-tab-switching.ts +++ b/src/renderer/src/components/tab-bar/recent-tab-switching.ts @@ -1,4 +1,4 @@ -import type { CtrlTabOrderMode, Tab, TabContentType, TabGroup } from '../../../../shared/types' +import type { CtrlTabOrderMode, Tab, TabContentType, TabGroup } from '../../../../shared/tab-types' import { resolveUnifiedTabLabel } from '../../../../shared/tab-title-resolution' import type { AppState } from '../../store/types' import { sanitizeRecentTabIds } from '../../store/slices/tab-group-state' diff --git a/src/renderer/src/components/tab-bar/tab-agent-launch-options.ts b/src/renderer/src/components/tab-bar/tab-agent-launch-options.ts index b15f6f7c004..bc9fc575c20 100644 --- a/src/renderer/src/components/tab-bar/tab-agent-launch-options.ts +++ b/src/renderer/src/components/tab-bar/tab-agent-launch-options.ts @@ -1,6 +1,6 @@ import { getAgentCatalog } from '@/lib/agent-catalog' import { normalizeMatchQuery, tokenizeMatchValue } from './query-token-match' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type TabAgentLaunchOption = { agent: TuiAgent diff --git a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts index e460318e609..38d6f2e267f 100644 --- a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts +++ b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import { shallow } from 'zustand/shallow' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { findTabAgentEntry } from '../native-chat/native-chat-tab-agent-entry' import { createTabBarAgentProjectionSelector, diff --git a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts index b320d5e0ddc..420949992d8 100644 --- a/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts +++ b/src/renderer/src/components/tab-bar/tab-agent-types-by-tab-id.ts @@ -1,5 +1,5 @@ import type { AgentStatusEntry, AgentType } from '../../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { isNativeChatTabWideFallbackSafe, resolveNativeChatActiveLayoutLeafId diff --git a/src/renderer/src/components/tab-bar/tab-bar-item-model.ts b/src/renderer/src/components/tab-bar/tab-bar-item-model.ts index 89e2891908d..0eee66d7b68 100644 --- a/src/renderer/src/components/tab-bar/tab-bar-item-model.ts +++ b/src/renderer/src/components/tab-bar/tab-bar-item-model.ts @@ -1,9 +1,6 @@ -import type { - BrowserTab as BrowserTabState, - Tab, - TerminalTab, - WorkspaceVisibleTabType -} from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { Tab, WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveTerminalTabTitle } from '../../../../shared/tab-title-resolution' import type { OpenFile } from '../../store/slices/editor' import { getEditorDisplayLabel } from '@/components/editor/editor-labels' diff --git a/src/renderer/src/components/tab-bar/tab-bar-props.ts b/src/renderer/src/components/tab-bar/tab-bar-props.ts index 6f8d93ec0a7..59d2ef12fff 100644 --- a/src/renderer/src/components/tab-bar/tab-bar-props.ts +++ b/src/renderer/src/components/tab-bar/tab-bar-props.ts @@ -1,8 +1,6 @@ -import type { - BrowserTab as BrowserTabState, - TerminalTab, - WorkspaceVisibleTabType -} from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { OpenFile } from '../../store/slices/editor' import type { HoveredTabInsertion } from '../tab-group/useTabDragSplit' import type { TabCreateEntryArgs } from './tab-create-entry-action' diff --git a/src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts b/src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts index 8a11f2262ee..5f4a887574a 100644 --- a/src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts +++ b/src/renderer/src/components/tab-bar/tab-create-entry-local-path.test.ts @@ -1,5 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/components/tab-bar/tab-create-entry-props.ts b/src/renderer/src/components/tab-bar/tab-create-entry-props.ts index 56a4bca3abc..ba44b1d932e 100644 --- a/src/renderer/src/components/tab-bar/tab-create-entry-props.ts +++ b/src/renderer/src/components/tab-bar/tab-create-entry-props.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { TabCreateEntryArgs } from './tab-create-entry-action' import type { TabAgentLaunchOption } from './tab-agent-launch-options' import type { TabCreateMenuOption } from './tab-create-menu-options' diff --git a/src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts b/src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts index 5c9abb972a7..01dae6c0f98 100644 --- a/src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts +++ b/src/renderer/src/components/tab-bar/tab-move-to-pane-column.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '../../store' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { canMoveTabToNewPaneColumn, moveTabToNewPaneColumn } from './tab-move-to-pane-column' const WT = 'wt-1' diff --git a/src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx b/src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx index 8105e0f3263..05579cb7b4d 100644 --- a/src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx +++ b/src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx @@ -1,12 +1,10 @@ import { cloneElement, isValidElement, type ReactElement, type ReactNode } from 'react' import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { - BrowserTab as BrowserTabState, - GitFileStatus, - TerminalTab, - TuiAgent -} from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { GitFileStatus } from '../../../../shared/git-status-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { OpenFile } from '../../store/slices/editor' import type { TabDragItemData } from '../tab-group/useTabDragSplit' import BrowserTab from './BrowserTab' diff --git a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts index 133597431e0..e475ae49a4d 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { hasUnreadAgentCompletionForTerminalTab, resetTerminalTabActivityFlagsCacheForTest, diff --git a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts index abdcc584881..afba5dc4c90 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-activity-status.ts @@ -5,7 +5,7 @@ import { type AgentStatusEntry } from '../../../../shared/agent-status-types' import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' // Why: a terminal tab is a container of panes, exactly like a worktree card is // a container of tabs. Reuse the WorktreeCard status vocabulary and resolver so diff --git a/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts b/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts index 4259ff8ade3..caa14841166 100644 --- a/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts +++ b/src/renderer/src/components/tab-bar/terminal-tab-spinner-launch-agent.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resetTerminalTabActivityFlagsCacheForTest, resolveTerminalTabActivityStatus diff --git a/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts b/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts index 43a92cbf1f4..65c5cdb0908 100644 --- a/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts +++ b/src/renderer/src/components/tab-bar/use-open-tab-search.test.ts @@ -2,16 +2,11 @@ import { act, renderHook } from '@testing-library/react' import { beforeEach, describe, expect, it } from 'vitest' -import type { - BrowserPage, - BrowserWorkspace, - Repo, - Tab, - TabContentType, - TabGroup, - TerminalTab, - Worktree -} from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Tab, TabContentType, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { useOpenTabSearch } from './use-open-tab-search' diff --git a/src/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.ts b/src/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.ts index 7eb28f2bcc8..d12b275b556 100644 --- a/src/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.ts +++ b/src/renderer/src/components/tab-bar/use-tab-bar-create-menu-controller.ts @@ -1,6 +1,6 @@ import { useEffect, useMemo, useRef, useState } from 'react' import { toast } from 'sonner' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { translate } from '@/i18n/i18n' import { focusTerminalTabSurface } from '@/lib/focus-terminal-tab-surface' import { launchAgentInNewTab } from '@/lib/launch-agent-in-new-tab' diff --git a/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.ts b/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.ts index 0137c1f7cd7..3da80876b98 100644 --- a/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.ts +++ b/src/renderer/src/components/tab-bar/use-tab-bar-item-projection.ts @@ -1,5 +1,6 @@ import { useMemo } from 'react' -import type { GitFileStatus, Tab } from '../../../../shared/types' +import type { GitFileStatus } from '../../../../shared/git-status-types' +import type { Tab } from '../../../../shared/tab-types' import type { TabBarProps } from './tab-bar-props' import { buildOrderedTabItems, diff --git a/src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts b/src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts index df75eeae463..25058e3f44a 100644 --- a/src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts +++ b/src/renderer/src/components/tab-bar/use-tab-bar-quick-command-search-input.test.ts @@ -4,7 +4,7 @@ import { renderHook } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import { useTabBarQuickCommandSearchInput } from './use-tab-bar-quick-command-search-input' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' const command = { id: 'cmd-1', label: 'Run tests' } as unknown as TerminalQuickCommand diff --git a/src/renderer/src/components/tab-bar/use-tab-bar-runtime-model.ts b/src/renderer/src/components/tab-bar/use-tab-bar-runtime-model.ts index 4515de2a071..298c77f8777 100644 --- a/src/renderer/src/components/tab-bar/use-tab-bar-runtime-model.ts +++ b/src/renderer/src/components/tab-bar/use-tab-bar-runtime-model.ts @@ -1,6 +1,9 @@ import { useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { GitFileStatus, GlobalSettings, Tab, TuiAgent } from '../../../../shared/types' +import type { GitFileStatus } from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Tab } from '../../../../shared/tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import { useAppStore } from '../../store' import { buildStatusMap } from '../right-sidebar/status-display' diff --git a/src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts b/src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts index 58aa57400c4..1c90210820e 100644 --- a/src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts +++ b/src/renderer/src/components/tab-group/TabGroupPanel.context-menu.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Tab, TabContentType } from '../../../../shared/types' +import type { Tab, TabContentType } from '../../../../shared/tab-types' import { resolveGroupTabFromVisibleId } from './tab-group-visible-id' function tab(id: string, entityId: string, contentType: TabContentType, sortOrder: number): Tab { diff --git a/src/renderer/src/components/tab-group/TabGroupSplitLayout.tsx b/src/renderer/src/components/tab-group/TabGroupSplitLayout.tsx index 9a97ae673e4..77f04fb3023 100644 --- a/src/renderer/src/components/tab-group/TabGroupSplitLayout.tsx +++ b/src/renderer/src/components/tab-group/TabGroupSplitLayout.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { DndContext, DragOverlay } from '@dnd-kit/core' -import type { TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroupLayoutNode } from '../../../../shared/tab-types' import { useAppStore } from '../../store' import TabGroupPanel from './TabGroupPanel' import TabDragPreview from '../tab-bar/TabDragPreview' diff --git a/src/renderer/src/components/tab-group/tab-drag-data.ts b/src/renderer/src/components/tab-group/tab-drag-data.ts index ad55f0edd10..572385a0d14 100644 --- a/src/renderer/src/components/tab-group/tab-drag-data.ts +++ b/src/renderer/src/components/tab-group/tab-drag-data.ts @@ -1,4 +1,5 @@ -import type { TabGroup, TuiAgent } from '../../../../shared/types' +import type { TabGroup } from '../../../../shared/tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { TabSplitDirection } from '../../store/slices/tabs' export type TabDropZone = 'center' | TabSplitDirection diff --git a/src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts b/src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts index d6a373fc865..019b3e297ee 100644 --- a/src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts +++ b/src/renderer/src/components/tab-group/tab-drag-preview-activation.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { useAppStore } from '../../store' import { applyDragPreviewTab, diff --git a/src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts b/src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts index ceca4d16962..7f72c716fe3 100644 --- a/src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts +++ b/src/renderer/src/components/tab-group/tab-group-panel-split-target.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' import type { TabDragItemData } from './useTabDragSplit' import { captureTabGroupPanelGeometrySnapshot, diff --git a/src/renderer/src/components/tab-group/tab-group-panel-split-target.ts b/src/renderer/src/components/tab-group/tab-group-panel-split-target.ts index 80fefad4080..d7bab07f12f 100644 --- a/src/renderer/src/components/tab-group/tab-group-panel-split-target.ts +++ b/src/renderer/src/components/tab-group/tab-group-panel-split-target.ts @@ -1,5 +1,5 @@ import type { DragEndEvent, DragMoveEvent, DragOverEvent } from '@dnd-kit/core' -import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' import { isPaneColumnSplitDropNoOp } from '../../store/slices/pane-column-split-drop-no-op' import { resolvePaneColumnEdgeZone, diff --git a/src/renderer/src/components/tab-group/tab-group-visible-id.ts b/src/renderer/src/components/tab-group/tab-group-visible-id.ts index 1e94a3df964..92cca52df7d 100644 --- a/src/renderer/src/components/tab-group/tab-group-visible-id.ts +++ b/src/renderer/src/components/tab-group/tab-group-visible-id.ts @@ -1,4 +1,4 @@ -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' export function resolveGroupTabFromVisibleId( groupTabs: readonly Tab[], diff --git a/src/renderer/src/components/tab-group/useTabDragSplit.test.ts b/src/renderer/src/components/tab-group/useTabDragSplit.test.ts index fa825031762..2b372c2c2c4 100644 --- a/src/renderer/src/components/tab-group/useTabDragSplit.test.ts +++ b/src/renderer/src/components/tab-group/useTabDragSplit.test.ts @@ -4,7 +4,7 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' import { useAppStore } from '../../store' import type { TabDragItemData } from './useTabDragSplit' import { shouldActivateTabDragFromDistanceSample } from './tab-drag-pointer-sensor' diff --git a/src/renderer/src/components/tab-group/useTabDragSplit.ts b/src/renderer/src/components/tab-group/useTabDragSplit.ts index ce79cf03281..a3c5c49ce9c 100644 --- a/src/renderer/src/components/tab-group/useTabDragSplit.ts +++ b/src/renderer/src/components/tab-group/useTabDragSplit.ts @@ -14,7 +14,7 @@ import { useSensor, useSensors } from '@dnd-kit/core' -import type { TabGroup } from '../../../../shared/types' +import type { TabGroup } from '../../../../shared/tab-types' import { useAppStore } from '../../store' import { mirrorWebRuntimeTabMove } from '../tab-bar/web-runtime-tab-move-mirror' import { diff --git a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts index d2dcdcb965b..6bb2f7a5992 100644 --- a/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts +++ b/src/renderer/src/components/tab-group/useTabGroupWorkspaceModel.ts @@ -3,12 +3,9 @@ import { useCallback, useMemo } from 'react' import { toast } from 'sonner' import { useShallow } from 'zustand/react/shallow' import type { OpenFile } from '@/store/slices/editor' -import type { - BrowserTab as BrowserTabState, - Tab, - TabGroup, - TerminalTab -} from '../../../../shared/types' +import type { BrowserTab as BrowserTabState } from '../../../../shared/browser-workspace-types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveUnifiedTabLabel } from '../../../../shared/tab-title-resolution' import { useAppStore } from '../../store' import { destroyWorkspaceWebviews } from '../../store/slices/browser-webview-cleanup' diff --git a/src/renderer/src/components/task-page-cache-selectors.test.ts b/src/renderer/src/components/task-page-cache-selectors.test.ts index d06bf9ee623..968189a5417 100644 --- a/src/renderer/src/components/task-page-cache-selectors.test.ts +++ b/src/renderer/src/components/task-page-cache-selectors.test.ts @@ -2,7 +2,9 @@ import { describe, expect, it } from 'vitest' import { shallow } from 'zustand/shallow' import { workItemsCacheKey, type CacheEntry } from '@/store/slices/github' -import type { GitHubWorkItem, LinearCollectionResult, LinearIssue } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { LinearCollectionResult } from '../../../shared/linear/workspace-types' import { buildTaskPageRepoSourceState, selectTaskPageUnresolvedSourceRepos, diff --git a/src/renderer/src/components/task-page-cache-selectors.ts b/src/renderer/src/components/task-page-cache-selectors.ts index 525fa51a336..403a8a97dd1 100644 --- a/src/renderer/src/components/task-page-cache-selectors.ts +++ b/src/renderer/src/components/task-page-cache-selectors.ts @@ -4,7 +4,7 @@ import { type WorkItemsCacheError, type WorkItemsCacheSources } from '@/store/slices/github' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { taskPageWorkItemKey, taskPageWorkItemStatusSignature, diff --git a/src/renderer/src/components/task-page-checks-pill.ts b/src/renderer/src/components/task-page-checks-pill.ts index ba3252a46f3..d119f1eb69e 100644 --- a/src/renderer/src/components/task-page-checks-pill.ts +++ b/src/renderer/src/components/task-page-checks-pill.ts @@ -1,5 +1,5 @@ import { getProviderChecksLabel } from '../../../shared/provider-check-summary' -import type { ProviderCheckSummary } from '../../../shared/types' +import type { ProviderCheckSummary } from '../../../shared/github/pull-request-types' type ChecksPillItem = { checksSummary?: ProviderCheckSummary } diff --git a/src/renderer/src/components/task-page-default-repo-selection.test.ts b/src/renderer/src/components/task-page-default-repo-selection.test.ts index 957cd67a6e5..d87ceeec5ba 100644 --- a/src/renderer/src/components/task-page-default-repo-selection.test.ts +++ b/src/renderer/src/components/task-page-default-repo-selection.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { getDefaultTaskRepoSelection, getTaskEligibleRepos, diff --git a/src/renderer/src/components/task-page-default-repo-selection.ts b/src/renderer/src/components/task-page-default-repo-selection.ts index e1b2eca2ebd..e5c41c08b18 100644 --- a/src/renderer/src/components/task-page-default-repo-selection.ts +++ b/src/renderer/src/components/task-page-default-repo-selection.ts @@ -5,7 +5,7 @@ import { isProjectRemoteIdentityPending } from '../../../shared/project-host-setup-projection' import { isGitRepoKind } from '../../../shared/repo-kind' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' export type TaskProjectPickerGroup = { projectKey: string diff --git a/src/renderer/src/components/task-page-github-dialog-state-authority.test.ts b/src/renderer/src/components/task-page-github-dialog-state-authority.test.ts index 2f4d1646d21..b0bde81eb82 100644 --- a/src/renderer/src/components/task-page-github-dialog-state-authority.test.ts +++ b/src/renderer/src/components/task-page-github-dialog-state-authority.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from 'vitest' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { getTaskSourceCacheScope } from '../../../shared/task-source-context' import { assertTaskPageGitHubDialogStateAuthority } from './task-page-github-dialog-state-authority' import { diff --git a/src/renderer/src/components/task-page-github-dialog-state-authority.ts b/src/renderer/src/components/task-page-github-dialog-state-authority.ts index a372762e141..2918e1eb4d0 100644 --- a/src/renderer/src/components/task-page-github-dialog-state-authority.ts +++ b/src/renderer/src/components/task-page-github-dialog-state-authority.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { getTaskSourceCacheScope, type TaskSourceContext diff --git a/src/renderer/src/components/task-page-github-resume-cache.ts b/src/renderer/src/components/task-page-github-resume-cache.ts index c42ac9a0c3d..8cd4d14b029 100644 --- a/src/renderer/src/components/task-page-github-resume-cache.ts +++ b/src/renderer/src/components/task-page-github-resume-cache.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' export const TASK_PAGE_GITHUB_RESUME_CACHE_LIMIT = 5 export const TASK_PAGE_GITHUB_RESUME_CACHE_TTL_MS = 10 * 60_000 diff --git a/src/renderer/src/components/task-page-github-status-actions.test.ts b/src/renderer/src/components/task-page-github-status-actions.test.ts index b18226f6f88..d2105e722dd 100644 --- a/src/renderer/src/components/task-page-github-status-actions.test.ts +++ b/src/renderer/src/components/task-page-github-status-actions.test.ts @@ -5,7 +5,7 @@ import { getTaskPageGitHubDuplicateTargetErrorMessage, validateTaskPageGitHubDuplicateTarget } from './task-page-github-status-actions' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' describe('TaskPage GitHub status actions', () => { it('builds completed and not planned close updates', () => { diff --git a/src/renderer/src/components/task-page-github-status-actions.ts b/src/renderer/src/components/task-page-github-status-actions.ts index 1d3ed687767..3722678a310 100644 --- a/src/renderer/src/components/task-page-github-status-actions.ts +++ b/src/renderer/src/components/task-page-github-status-actions.ts @@ -1,8 +1,8 @@ +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { GitHubIssueCloseReason, - GitHubIssueUpdate, - GitHubWorkItem -} from '../../../shared/types' + GitHubIssueUpdate +} from '../../../shared/issue-mutation-types' export type TaskPageGitHubCloseAction = | { stateReason: Exclude } diff --git a/src/renderer/src/components/task-page-github-status-state.ts b/src/renderer/src/components/task-page-github-status-state.ts index 45adc29016d..a61cb20ed09 100644 --- a/src/renderer/src/components/task-page-github-status-state.ts +++ b/src/renderer/src/components/task-page-github-status-state.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' type GitHubStatusItem = Pick diff --git a/src/renderer/src/components/task-page-github-task-kind.ts b/src/renderer/src/components/task-page-github-task-kind.ts index 772fa2d1a6e..ab1b59bf896 100644 --- a/src/renderer/src/components/task-page-github-task-kind.ts +++ b/src/renderer/src/components/task-page-github-task-kind.ts @@ -1,6 +1,6 @@ import { getTaskPresetQuery } from '../../../shared/task-preset-query' import { parseTaskQuery } from '../../../shared/task-query' -import type { TaskViewPresetId } from '../../../shared/types' +import type { TaskViewPresetId } from '../../../shared/ui-chrome-types' import type { GitHubTaskKind } from '@/components/task-page-localized-options' export function isPRFocusedTaskView(preset: TaskViewPresetId | null, query: string): boolean { diff --git a/src/renderer/src/components/task-page-github-work-item-filter-membership.ts b/src/renderer/src/components/task-page-github-work-item-filter-membership.ts index b51ddd8bda3..e3607396b7b 100644 --- a/src/renderer/src/components/task-page-github-work-item-filter-membership.ts +++ b/src/renderer/src/components/task-page-github-work-item-filter-membership.ts @@ -1,5 +1,6 @@ import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { StickyHideEntry } from './task-page-github-work-item-mutation-registry' function includesLogin(users: readonly GitHubAssignableUser[] | undefined, login: string): boolean { diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-composition.ts b/src/renderer/src/components/task-page-github-work-item-mutation-composition.ts index 25616c3c059..6e98c29cb9b 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-composition.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-composition.ts @@ -1,5 +1,6 @@ import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { recomputeTaskPageGitHubItemSoftHide, shouldSoftHideTaskPageGitHubWorkItem diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-lifecycle.ts b/src/renderer/src/components/task-page-github-work-item-mutation-lifecycle.ts index 3bad977b3be..8a693381628 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-lifecycle.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-lifecycle.ts @@ -1,5 +1,5 @@ import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { applyTaskPageGitHubListOps } from './task-page-github-work-item-mutation-patches' import { diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-pages.ts b/src/renderer/src/components/task-page-github-work-item-mutation-pages.ts index 65b9ffba648..6b62509a05b 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-pages.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-pages.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { getRegistryMergedTaskPageGitHubWorkItem } from './task-page-github-work-item-mutation-composition' import { diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts b/src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts index dd5a305ccea..f32558adf09 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-patches.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { applyTaskPageGitHubListOps, buildTaskPageGitHubWorkItemMutationPatch, diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-patches.ts b/src/renderer/src/components/task-page-github-work-item-mutation-patches.ts index f06db3f1ef8..c72d0026105 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-patches.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-patches.ts @@ -1,4 +1,5 @@ -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskPageGitHubCloseAction } from './task-page-github-status-actions' import { taskPageGitHubListOpKey, diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-registry.ts b/src/renderer/src/components/task-page-github-work-item-mutation-registry.ts index bfd575ea4ab..6988ff7f7b3 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-registry.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-registry.ts @@ -1,4 +1,4 @@ -import type { GitHubAssignableUser } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' import type { PendingOp, StickyHideEntry, diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts b/src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts index fd931a8045b..a24a20e33b6 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-regressions.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { adoptQuietSearchFieldsForItem, advanceTaskPageQuietRevalidateScope, diff --git a/src/renderer/src/components/task-page-github-work-item-mutation-types.ts b/src/renderer/src/components/task-page-github-work-item-mutation-types.ts index f12310afc88..2aaa09e3bd0 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutation-types.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutation-types.ts @@ -1,5 +1,5 @@ import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import type { TaskPageGitHubMutationIntent } from './task-page-github-work-item-mutation-patches' import type { TaskPageGitHubMutationKey } from './task-page-github-work-item-mutation-registry' diff --git a/src/renderer/src/components/task-page-github-work-item-mutations.test.ts b/src/renderer/src/components/task-page-github-work-item-mutations.test.ts index ad59620ef68..f50c40d4021 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutations.test.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutations.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { adoptQuietSearchFieldsForItem, applyPendingTaskPageGitHubMutationsToItems, diff --git a/src/renderer/src/components/task-page-github-work-item-mutations.ts b/src/renderer/src/components/task-page-github-work-item-mutations.ts index 450c0abc4e9..28e05a1ccb4 100644 --- a/src/renderer/src/components/task-page-github-work-item-mutations.ts +++ b/src/renderer/src/components/task-page-github-work-item-mutations.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { getTaskSourceCacheScope, type TaskSourceContext diff --git a/src/renderer/src/components/task-page-github-work-item-quiet-adopt.ts b/src/renderer/src/components/task-page-github-work-item-quiet-adopt.ts index 269f07164ae..5547986ab2e 100644 --- a/src/renderer/src/components/task-page-github-work-item-quiet-adopt.ts +++ b/src/renderer/src/components/task-page-github-work-item-quiet-adopt.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { loginSetOfUsers, loginSetsEqual } from './task-page-github-work-item-mutation-patches' import { diff --git a/src/renderer/src/components/task-page-github-work-item-quiet-revalidate.ts b/src/renderer/src/components/task-page-github-work-item-quiet-revalidate.ts index 5895eb28f85..a482726f8c8 100644 --- a/src/renderer/src/components/task-page-github-work-item-quiet-revalidate.ts +++ b/src/renderer/src/components/task-page-github-work-item-quiet-revalidate.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { adoptQuietSearchFieldsForItem, diff --git a/src/renderer/src/components/task-page-github-work-item-registry-types.ts b/src/renderer/src/components/task-page-github-work-item-registry-types.ts index a1e93064812..fecd93c4465 100644 --- a/src/renderer/src/components/task-page-github-work-item-registry-types.ts +++ b/src/renderer/src/components/task-page-github-work-item-registry-types.ts @@ -1,4 +1,5 @@ -import type { GitHubAssignableUser, GitHubWorkItem } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' export type TaskPageGitHubListFamily = 'assignees' | 'reviewRequests' export type TaskPageGitHubMutationKey = { diff --git a/src/renderer/src/components/task-page-github-work-item-status.ts b/src/renderer/src/components/task-page-github-work-item-status.ts index 5e54688305b..d5eb8cf7102 100644 --- a/src/renderer/src/components/task-page-github-work-item-status.ts +++ b/src/renderer/src/components/task-page-github-work-item-status.ts @@ -1,5 +1,5 @@ import { translate } from '@/i18n/i18n' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' export type GitHubWorkItemStatusItem = Pick diff --git a/src/renderer/src/components/task-page-jira-cache-selectors.test.ts b/src/renderer/src/components/task-page-jira-cache-selectors.test.ts index f5f60d3cbe2..bc4a4c07ffa 100644 --- a/src/renderer/src/components/task-page-jira-cache-selectors.test.ts +++ b/src/renderer/src/components/task-page-jira-cache-selectors.test.ts @@ -3,7 +3,7 @@ import { getTaskSourceCacheScope, type TaskSourceContext } from '../../../shared/task-source-context' -import type { JiraIssue } from '../../../shared/types' +import type { JiraIssue } from '../../../shared/jira-types' import { findTaskPageJiraIssue } from './task-page-jira-cache-selectors' function jiraSourceContext(environmentId: string): TaskSourceContext { diff --git a/src/renderer/src/components/task-page-jira-cache-selectors.ts b/src/renderer/src/components/task-page-jira-cache-selectors.ts index 5426c404dbf..969160f13f8 100644 --- a/src/renderer/src/components/task-page-jira-cache-selectors.ts +++ b/src/renderer/src/components/task-page-jira-cache-selectors.ts @@ -3,7 +3,7 @@ import { getTaskSourceCacheScope, type TaskSourceContext } from '../../../shared/task-source-context' -import type { JiraIssue } from '../../../shared/types' +import type { JiraIssue } from '../../../shared/jira-types' type JiraIssueCache = Record> type JiraSearchCache = Record> diff --git a/src/renderer/src/components/task-page-jira-create-fields.test.ts b/src/renderer/src/components/task-page-jira-create-fields.test.ts index 8cc24872386..11210e347db 100644 --- a/src/renderer/src/components/task-page-jira-create-fields.test.ts +++ b/src/renderer/src/components/task-page-jira-create-fields.test.ts @@ -8,7 +8,7 @@ import { getJiraCreateOptionPayload, isVisibleJiraCreateField } from './task-page-jira-create-fields' -import type { JiraCreateField } from '../../../shared/types' +import type { JiraCreateField } from '../../../shared/jira-types' function field(overrides: Partial = {}): JiraCreateField { return { key: 'customfield_1', name: 'Custom', required: true, ...overrides } diff --git a/src/renderer/src/components/task-page-jira-create-fields.ts b/src/renderer/src/components/task-page-jira-create-fields.ts index 568621ee3e7..932e64c2bb1 100644 --- a/src/renderer/src/components/task-page-jira-create-fields.ts +++ b/src/renderer/src/components/task-page-jira-create-fields.ts @@ -1,5 +1,5 @@ import { buildJiraCreateTextAdf } from '@/components/jira-create-adf' -import type { JiraCreateField } from '../../../shared/types' +import type { JiraCreateField } from '../../../shared/jira-types' const JIRA_CREATE_SYSTEM_FIELD_KEYS = new Set(['project', 'issuetype', 'summary', 'description']) diff --git a/src/renderer/src/components/task-page-jira-grouping.test.ts b/src/renderer/src/components/task-page-jira-grouping.test.ts index 44d8bce4fbf..fbfa5e5b069 100644 --- a/src/renderer/src/components/task-page-jira-grouping.test.ts +++ b/src/renderer/src/components/task-page-jira-grouping.test.ts @@ -14,7 +14,7 @@ import { getSingleJiraProjectScope, loadTaskPageJiraProjectStatusOrder } from './task-page-jira-status-order' -import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/types' +import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/jira-types' const { jiraGetProjectStatusOrderMock } = vi.hoisted(() => ({ jiraGetProjectStatusOrderMock: vi.fn() diff --git a/src/renderer/src/components/task-page-jira-issue-list.tsx b/src/renderer/src/components/task-page-jira-issue-list.tsx index 104f591ab76..989e0911591 100644 --- a/src/renderer/src/components/task-page-jira-issue-list.tsx +++ b/src/renderer/src/components/task-page-jira-issue-list.tsx @@ -6,7 +6,7 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/component import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { translate } from '@/i18n/i18n' import { cn } from '@/lib/utils' -import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/types' +import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/jira-types' export type TaskPageJiraIssueSection = { key: string diff --git a/src/renderer/src/components/task-page-jira-item-source-context.test.ts b/src/renderer/src/components/task-page-jira-item-source-context.test.ts index 53917453655..a635fb86f30 100644 --- a/src/renderer/src/components/task-page-jira-item-source-context.test.ts +++ b/src/renderer/src/components/task-page-jira-item-source-context.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { JiraIssue, JiraSite } from '../../../shared/types' +import type { JiraIssue, JiraSite } from '../../../shared/jira-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { bindTaskPageJiraItemSourceContext } from './task-page-jira-item-source-context' diff --git a/src/renderer/src/components/task-page-jira-item-source-context.ts b/src/renderer/src/components/task-page-jira-item-source-context.ts index 1790797e3e6..be8ec6d4006 100644 --- a/src/renderer/src/components/task-page-jira-item-source-context.ts +++ b/src/renderer/src/components/task-page-jira-item-source-context.ts @@ -1,4 +1,4 @@ -import type { JiraIssue, JiraSite } from '../../../shared/types' +import type { JiraIssue, JiraSite } from '../../../shared/jira-types' import { normalizeTaskSourceContext, type TaskSourceContext diff --git a/src/renderer/src/components/task-page-jira-load-state.ts b/src/renderer/src/components/task-page-jira-load-state.ts index 77826b78126..0a542095ab0 100644 --- a/src/renderer/src/components/task-page-jira-load-state.ts +++ b/src/renderer/src/components/task-page-jira-load-state.ts @@ -1,4 +1,4 @@ -import type { JiraIssue } from '../../../shared/types' +import type { JiraIssue } from '../../../shared/jira-types' export type TaskPageJiraLoadError = { title: string diff --git a/src/renderer/src/components/task-page-jira-project-selection.test.ts b/src/renderer/src/components/task-page-jira-project-selection.test.ts index 82638f607cb..5f0bd24c884 100644 --- a/src/renderer/src/components/task-page-jira-project-selection.test.ts +++ b/src/renderer/src/components/task-page-jira-project-selection.test.ts @@ -4,7 +4,7 @@ import { compareJiraProjectsByDisplayLabel, getJiraProjectSelectionKey } from './task-page-jira-project-selection' -import type { JiraProject } from '../../../shared/types' +import type { JiraProject } from '../../../shared/jira-types' function project(overrides: Partial = {}): JiraProject { return { id: '1', key: 'AA', name: 'Alpha', ...overrides } diff --git a/src/renderer/src/components/task-page-jira-project-selection.ts b/src/renderer/src/components/task-page-jira-project-selection.ts index fe004b6cdf4..48a9af0dfc2 100644 --- a/src/renderer/src/components/task-page-jira-project-selection.ts +++ b/src/renderer/src/components/task-page-jira-project-selection.ts @@ -1,4 +1,4 @@ -import type { JiraProject } from '../../../shared/types' +import type { JiraProject } from '../../../shared/jira-types' export function getJiraProjectSelectionKey(project: JiraProject): string { return `${project.siteId ?? 'selected'}:${project.id}` diff --git a/src/renderer/src/components/task-page-jira-sorting.test.ts b/src/renderer/src/components/task-page-jira-sorting.test.ts index 767fbf7c1cb..0cdca7a6fe6 100644 --- a/src/renderer/src/components/task-page-jira-sorting.test.ts +++ b/src/renderer/src/components/task-page-jira-sorting.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { JiraIssue, JiraPriority } from '../../../shared/types' +import type { JiraIssue, JiraPriority } from '../../../shared/jira-types' import { getJiraPriorityWeight, sortJiraIssues } from './jira-issue-sorter' describe('TaskPage Jira sorting functionality', () => { diff --git a/src/renderer/src/components/task-page-jira-status-order.ts b/src/renderer/src/components/task-page-jira-status-order.ts index 8cb6ed39c37..e064f5732dc 100644 --- a/src/renderer/src/components/task-page-jira-status-order.ts +++ b/src/renderer/src/components/task-page-jira-status-order.ts @@ -1,4 +1,4 @@ -import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/types' +import type { JiraIssue, JiraProjectStatusOrder } from '../../../shared/jira-types' import { jiraGetProjectStatusOrder, type RuntimeJiraSettings } from '@/runtime/runtime-jira-client' import { createMetadataRequestStore, loadMetadata } from '@/hooks/metadata-request-cache' diff --git a/src/renderer/src/components/task-page-linear-cache-selectors.ts b/src/renderer/src/components/task-page-linear-cache-selectors.ts index d13536ea93f..31ac2730b27 100644 --- a/src/renderer/src/components/task-page-linear-cache-selectors.ts +++ b/src/renderer/src/components/task-page-linear-cache-selectors.ts @@ -1,5 +1,6 @@ import type { CacheEntry } from '@/store/slices/github' -import type { LinearCollectionResult, LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { LinearCollectionResult } from '../../../shared/linear/workspace-types' import { sortedStrings } from './task-page-work-item-signatures' type LinearIssueCache = Record> diff --git a/src/renderer/src/components/task-page-linear-in-orca-issues.test.ts b/src/renderer/src/components/task-page-linear-in-orca-issues.test.ts index 28804568fec..818bc9e60e5 100644 --- a/src/renderer/src/components/task-page-linear-in-orca-issues.test.ts +++ b/src/renderer/src/components/task-page-linear-in-orca-issues.test.ts @@ -7,7 +7,7 @@ import { linkedLinearIssueRefsSignature, readLinkedLinearIssuesWithLimit } from './task-page-linear-in-orca-issues' -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' function issue( partial: Partial & Pick diff --git a/src/renderer/src/components/task-page-linear-in-orca-issues.ts b/src/renderer/src/components/task-page-linear-in-orca-issues.ts index 55ae9293b85..36c66ea2c4c 100644 --- a/src/renderer/src/components/task-page-linear-in-orca-issues.ts +++ b/src/renderer/src/components/task-page-linear-in-orca-issues.ts @@ -1,4 +1,6 @@ -import type { LinearIssue, LinearWorkspace, Worktree } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { LinearWorkspace } from '../../../shared/linear/workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import { parseLinearIssueInput } from '../../../shared/linear/links' import { getTaskSourceCacheScope, diff --git a/src/renderer/src/components/task-page-linear-team-selection.test.ts b/src/renderer/src/components/task-page-linear-team-selection.test.ts index a3d1a207b12..6eb1878fbbd 100644 --- a/src/renderer/src/components/task-page-linear-team-selection.test.ts +++ b/src/renderer/src/components/task-page-linear-team-selection.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' import { reconcileLinearTeamSelection } from './task-page-linear-team-selection' function team(id: string): LinearTeam { diff --git a/src/renderer/src/components/task-page-linear-team-selection.ts b/src/renderer/src/components/task-page-linear-team-selection.ts index f6d7e52fa1f..3ec82284a59 100644 --- a/src/renderer/src/components/task-page-linear-team-selection.ts +++ b/src/renderer/src/components/task-page-linear-team-selection.ts @@ -1,4 +1,4 @@ -import type { LinearTeam } from '../../../shared/types' +import type { LinearTeam } from '../../../shared/linear/workspace-types' export function reconcileLinearTeamSelection( availableTeams: LinearTeam[], diff --git a/src/renderer/src/components/task-page-list-chrome-visibility.ts b/src/renderer/src/components/task-page-list-chrome-visibility.ts index e8b95e96288..e589ef2e579 100644 --- a/src/renderer/src/components/task-page-list-chrome-visibility.ts +++ b/src/renderer/src/components/task-page-list-chrome-visibility.ts @@ -1,4 +1,4 @@ -import type { TaskProvider } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' export type TaskPageListChromeVisibilityState = { taskSource: TaskProvider diff --git a/src/renderer/src/components/task-page-localized-options.tsx b/src/renderer/src/components/task-page-localized-options.tsx index 506f27add17..cd14317489d 100644 --- a/src/renderer/src/components/task-page-localized-options.tsx +++ b/src/renderer/src/components/task-page-localized-options.tsx @@ -15,7 +15,8 @@ import { type LinearViewMode } from '../../../shared/linear/issue-view-resume-state' import { getTaskPresetQuery } from '../../../shared/task-preset-query' -import type { TaskProvider, TaskViewPresetId } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' +import type { TaskViewPresetId } from '../../../shared/ui-chrome-types' export type GitLabTaskFilter = 'opened' | 'merged' | 'closed' | 'all' export type GitLabIssueFilter = 'opened' | 'assigned-to-me' diff --git a/src/renderer/src/components/task-page-new-issue-draft.test.ts b/src/renderer/src/components/task-page-new-issue-draft.test.ts index c5058f50989..42a63a68568 100644 --- a/src/renderer/src/components/task-page-new-issue-draft.test.ts +++ b/src/renderer/src/components/task-page-new-issue-draft.test.ts @@ -6,7 +6,7 @@ import { resolveVanishedNewIssueRepoReset } from './task-page-new-issue-draft' import type { NewIssueDraft } from '@/store/slices/new-issue-draft' -import type { GitHubAssignableUser } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' const assignee: GitHubAssignableUser = { login: 'octocat', name: 'Octo', avatarUrl: '' } diff --git a/src/renderer/src/components/task-page-new-issue-draft.ts b/src/renderer/src/components/task-page-new-issue-draft.ts index e252692f379..8b6de307fb7 100644 --- a/src/renderer/src/components/task-page-new-issue-draft.ts +++ b/src/renderer/src/components/task-page-new-issue-draft.ts @@ -1,4 +1,4 @@ -import type { GitHubAssignableUser } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' import type { NewIssueDraft } from '@/store/slices/new-issue-draft' export type NewIssueOpenSeed = { diff --git a/src/renderer/src/components/task-page-pr-check-summary.test.ts b/src/renderer/src/components/task-page-pr-check-summary.test.ts index ccd63d94c04..bc9360d4d4f 100644 --- a/src/renderer/src/components/task-page-pr-check-summary.test.ts +++ b/src/renderer/src/components/task-page-pr-check-summary.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import { deriveTaskPagePRCheckSummary } from './task-page-pr-check-summary' -import type { PRCheckDetail } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' function check(patch: Partial): PRCheckDetail { return { diff --git a/src/renderer/src/components/task-page-pr-check-summary.ts b/src/renderer/src/components/task-page-pr-check-summary.ts index c7531040923..156e92b70ab 100644 --- a/src/renderer/src/components/task-page-pr-check-summary.ts +++ b/src/renderer/src/components/task-page-pr-check-summary.ts @@ -1,5 +1,6 @@ import { summarizeProviderChecks } from '../../../shared/provider-check-summary' -import type { PRCheckDetail, ProviderCheckSummary } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' +import type { ProviderCheckSummary } from '../../../shared/github/pull-request-types' export function deriveTaskPagePRCheckSummary(checks: PRCheckDetail[]): ProviderCheckSummary { return summarizeProviderChecks(checks) diff --git a/src/renderer/src/components/task-page-pr-delta-summary.ts b/src/renderer/src/components/task-page-pr-delta-summary.ts index 9711d087cb0..091011a38ed 100644 --- a/src/renderer/src/components/task-page-pr-delta-summary.ts +++ b/src/renderer/src/components/task-page-pr-delta-summary.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' export function formatPRDelta(item: GitHubWorkItem): string | null { const parts: string[] = [] diff --git a/src/renderer/src/components/task-page-work-item-pagination.test.ts b/src/renderer/src/components/task-page-work-item-pagination.test.ts index 670c862be98..50b88579158 100644 --- a/src/renderer/src/components/task-page-work-item-pagination.test.ts +++ b/src/renderer/src/components/task-page-work-item-pagination.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import { accumulateWorkItemPages, applyEmptyPageClamp, diff --git a/src/renderer/src/components/task-page-work-item-pagination.ts b/src/renderer/src/components/task-page-work-item-pagination.ts index 8209b61bdf0..2876831f000 100644 --- a/src/renderer/src/components/task-page-work-item-pagination.ts +++ b/src/renderer/src/components/task-page-work-item-pagination.ts @@ -1,4 +1,5 @@ -import type { ClassifiedError, GitHubWorkItem } from '../../../shared/types' +import type { ClassifiedError } from '../../../shared/classified-error' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' /** * Cross-repo Tasks pagination is cursor-based on `updatedAt`: each page's oldest diff --git a/src/renderer/src/components/task-page-work-item-signatures.ts b/src/renderer/src/components/task-page-work-item-signatures.ts index 67875e2e15e..8abb2f07a19 100644 --- a/src/renderer/src/components/task-page-work-item-signatures.ts +++ b/src/renderer/src/components/task-page-work-item-signatures.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' export function taskPageWorkItemKey(item: GitHubWorkItem): string { return `${item.repoId}\u0000${item.id}` diff --git a/src/renderer/src/components/task-project-source-combobox-model.ts b/src/renderer/src/components/task-project-source-combobox-model.ts index 248adfcfa11..8229014e362 100644 --- a/src/renderer/src/components/task-project-source-combobox-model.ts +++ b/src/renderer/src/components/task-project-source-combobox-model.ts @@ -1,5 +1,5 @@ import { getRepoExecutionHostId } from '../../../shared/execution-host' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import type { TaskProjectPickerGroup } from './task-page-default-repo-selection' export function selectedTaskProjectGroups( diff --git a/src/renderer/src/components/task-project-source-combobox.tsx b/src/renderer/src/components/task-project-source-combobox.tsx index 0f3d0e33697..555089e75f7 100644 --- a/src/renderer/src/components/task-project-source-combobox.tsx +++ b/src/renderer/src/components/task-project-source-combobox.tsx @@ -7,7 +7,7 @@ import RepoBadgeLabel from '@/components/repo/RepoBadgeLabel' import { isRepoSearchQueryTooLarge, searchRepos } from '@/lib/repo-search' import { cn } from '@/lib/utils' import { translate } from '@/i18n/i18n' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import type { TaskProjectPickerGroup } from './task-page-default-repo-selection' import { getSelectedTaskProjectSource, diff --git a/src/renderer/src/components/task-source-context-summary.ts b/src/renderer/src/components/task-source-context-summary.ts index be1d5fa0790..af5e2879d0c 100644 --- a/src/renderer/src/components/task-source-context-summary.ts +++ b/src/renderer/src/components/task-source-context-summary.ts @@ -3,7 +3,7 @@ import { getExecutionHostLabel } from '../../../shared/execution-host' import type { ExecutionHostScope } from '../../../shared/execution-host' import type { ExecutionHostHealth } from '../../../shared/execution-host-registry' import type { SshConnectionStatus } from '../../../shared/ssh-types' -import type { TaskProvider } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' import type { TaskProviderIdentity, TaskSourceContext } from '../../../shared/task-source-context' export type TaskSourceContextSummary = { diff --git a/src/renderer/src/components/task-source-provider-availability.ts b/src/renderer/src/components/task-source-provider-availability.ts index e01e0fef057..5038ab7ea6a 100644 --- a/src/renderer/src/components/task-source-provider-availability.ts +++ b/src/renderer/src/components/task-source-provider-availability.ts @@ -1,5 +1,5 @@ import { parseExecutionHostId } from '../../../shared/execution-host' -import type { TaskProvider } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' import type { PreflightStatus } from '../../../preload/api-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import type { TaskSourceHostAvailability } from './task-source-context-summary' diff --git a/src/renderer/src/components/terminal-pane/TerminalContextMenu.tsx b/src/renderer/src/components/terminal-pane/TerminalContextMenu.tsx index c983b389760..73a9d508f4c 100644 --- a/src/renderer/src/components/terminal-pane/TerminalContextMenu.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalContextMenu.tsx @@ -25,7 +25,7 @@ import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { shouldIgnoreTerminalMenuPointerDownOutside } from './terminal-context-menu-dismiss' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import { formatPrimaryShortcutLabel } from '@/hooks/useShortcutLabel' import type { KeybindingOverrides } from '../../../../shared/keybindings' diff --git a/src/renderer/src/components/terminal-pane/TerminalPane.tsx b/src/renderer/src/components/terminal-pane/TerminalPane.tsx index 5546390b6db..79b7ab6bf13 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPane.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPane.tsx @@ -152,7 +152,10 @@ import { isHostAuthoritativeLayout, planTerminalLiveLayoutInsertions } from './terminal-live-layout-reconciliation' -import type { TerminalQuickCommand, TerminalQuickCommandScope } from '../../../../shared/types' +import type { + TerminalQuickCommand, + TerminalQuickCommandScope +} from '../../../../shared/terminal-quick-command-types' import { createRemotePaneLayoutPusher, type RemotePaneLayoutPusher diff --git a/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx b/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx index 2196f7ed094..2cb20783f53 100644 --- a/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalPaneOverlayLayer.tsx @@ -1,6 +1,7 @@ import { memo, useCallback, useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { Tab, TabGroup, TerminalTab } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { useAppStore } from '../../store' import { findActivityTerminalPortal, diff --git a/src/renderer/src/components/terminal-pane/TerminalQuickCommandsSubmenu.tsx b/src/renderer/src/components/terminal-pane/TerminalQuickCommandsSubmenu.tsx index ed650dc1463..df32a3d2505 100644 --- a/src/renderer/src/components/terminal-pane/TerminalQuickCommandsSubmenu.tsx +++ b/src/renderer/src/components/terminal-pane/TerminalQuickCommandsSubmenu.tsx @@ -8,7 +8,7 @@ import { DropdownMenuSubContent, DropdownMenuSubTrigger } from '@/components/ui/dropdown-menu' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import type { ExecutionHostId } from '../../../../shared/execution-host' import { isTerminalAgentQuickCommand } from '../../../../shared/terminal-quick-commands' import { AgentIcon } from '@/lib/agent-catalog' diff --git a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts index 097ecd792d5..a388ec17457 100644 --- a/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts +++ b/src/renderer/src/components/terminal-pane/agent-completion-coordinator-types.ts @@ -1,5 +1,5 @@ import type { ParsedAgentStatusPayload } from '../../../../shared/agent-status-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { RecognizedAgentProcess } from '../../../../shared/agent-process-recognition' import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' diff --git a/src/renderer/src/components/terminal-pane/agent-task-complete-policy.ts b/src/renderer/src/components/terminal-pane/agent-task-complete-policy.ts index 6275cc9553c..4ba348d3f32 100644 --- a/src/renderer/src/components/terminal-pane/agent-task-complete-policy.ts +++ b/src/renderer/src/components/terminal-pane/agent-task-complete-policy.ts @@ -8,7 +8,7 @@ * consumers can use it. */ import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' /** Delay before BEL/completion OS notifications so the richer * agent-task-complete notification can win a same-burst BEL race. */ diff --git a/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts b/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts index 1ad6528c935..b1d0ddb6747 100644 --- a/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts +++ b/src/renderer/src/components/terminal-pane/codex-detached-pane-restart.ts @@ -10,7 +10,7 @@ */ import { isTerminalLeafId, makePaneKey } from '../../../../shared/stable-pane-id' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' -import type { TerminalPaneLayoutNode, TerminalTab } from '../../../../shared/types' +import type { TerminalPaneLayoutNode, TerminalTab } from '../../../../shared/terminal-tab-types' import type { AppState } from '@/store' import { useAppStore } from '@/store' import { getWorktreeMapFromState } from '@/store/selectors' diff --git a/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts b/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts index 65f5f196ca0..ec0b65cd49a 100644 --- a/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts +++ b/src/renderer/src/components/terminal-pane/command-code-output-ownership.ts @@ -1,5 +1,5 @@ import type { AgentType } from '../../../../shared/agent-status-types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export function canCommandCodeOutputOwnPane(args: { foregroundAgent?: TuiAgent | null diff --git a/src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts b/src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts index 97e81b97135..b15bae2ec5b 100644 --- a/src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts +++ b/src/renderer/src/components/terminal-pane/compose-active-terminal-theme.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { composeActiveTerminalTheme } from './terminal-appearance' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' describe('composeActiveTerminalTheme', () => { function settingsWith(partial: Partial): GlobalSettings { diff --git a/src/renderer/src/components/terminal-pane/layout-serialization.test.ts b/src/renderer/src/components/terminal-pane/layout-serialization.test.ts index 626168ef265..597d5e54b58 100644 --- a/src/renderer/src/components/terminal-pane/layout-serialization.test.ts +++ b/src/renderer/src/components/terminal-pane/layout-serialization.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, beforeAll, vi } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' // --------------------------------------------------------------------------- // Provide a minimal HTMLElement so `instanceof HTMLElement` passes in Node env diff --git a/src/renderer/src/components/terminal-pane/layout-serialization.ts b/src/renderer/src/components/terminal-pane/layout-serialization.ts index 2f8d0fea2f9..c3807cffeac 100644 --- a/src/renderer/src/components/terminal-pane/layout-serialization.ts +++ b/src/renderer/src/components/terminal-pane/layout-serialization.ts @@ -2,7 +2,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalPaneSplitDirection -} from '../../../../shared/types' +} from '../../../../shared/terminal-tab-types' import { isTerminalLeafId } from '../../../../shared/stable-pane-id' import { POST_REPLAY_MODE_RESET } from '../../../../shared/terminal-mode-reset-profiles' import type { PaneManager } from '@/lib/pane-manager/pane-manager' diff --git a/src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.ts b/src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.ts index 20f24fb6986..4bf7b230ffa 100644 --- a/src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.ts +++ b/src/renderer/src/components/terminal-pane/native-chat-leaf-title-agent.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { resolveCommittedTitleAgentType } from '@/lib/pane-agent-evidence' export type NativeChatLeafTitlePane = { diff --git a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts index 189b91573b6..2a279abd110 100644 --- a/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts +++ b/src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.ts @@ -3,7 +3,7 @@ import { recognizeAgentProcess } from '../../../../shared/agent-process-recognition' import { isShellProcess } from '../../../../shared/shell-process-detection' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' // Why: settle after exec, then place the final generic retry beyond sequential diff --git a/src/renderer/src/components/terminal-pane/pty-connection-types.ts b/src/renderer/src/components/terminal-pane/pty-connection-types.ts index b2b5163ac93..9fef3423cbf 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection-types.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection-types.ts @@ -6,7 +6,8 @@ import type { AgentCompletionStatusSnapshot } from './agent-completion-coordinat import type { EventProps } from '../../../../shared/telemetry-events' import type { TerminalColorSchemeMode } from '../../../../shared/terminal-color-scheme-protocol' import type { StartupCommandDelivery } from '../../../../shared/codex-startup-delivery' -import type { SetupSplitDirection, TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { SetupSplitDirection } from '../../../../shared/worktree/launch-types' import type { AgentProviderSessionMetadata, SleepingAgentLaunchConfig diff --git a/src/renderer/src/components/terminal-pane/pty-connection.test.ts b/src/renderer/src/components/terminal-pane/pty-connection.test.ts index 6fbe70501f8..f4bd512fda9 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection.test.ts @@ -23,7 +23,8 @@ import type { AgentType } from '../../../../shared/agent-status-types' import { makePaneKey } from '../../../../shared/stable-pane-id' import { toAppSshPtyId } from '../../../../shared/ssh-pty-id' import type { SshConnectionState } from '../../../../shared/ssh-types' -import type { TerminalLayoutSnapshot, TuiAgent } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { YOLO_TUI_AGENT_ARGS } from '../../../../shared/tui-agent-permissions' import { SETUP_AGENT_SEQUENCE_STARTUP_COMMAND_ENV } from '../../../../shared/setup-agent-sequencing' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' diff --git a/src/renderer/src/components/terminal-pane/pty-connection.ts b/src/renderer/src/components/terminal-pane/pty-connection.ts index e2efbb0a9c4..8a67ba6b324 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection.ts @@ -310,7 +310,8 @@ import { isExpectedAgentProcess, recognizeAgentProcessFromCommandLine } from '../../../../shared/agent-process-recognition' -import type { SetupSplitDirection, TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { SetupSplitDirection } from '../../../../shared/worktree/launch-types' import { isTuiAgent, TUI_AGENT_CONFIG } from '../../../../shared/tui-agent-config' import { createDraftPasteReadyScanner } from '../../../../shared/draft-paste-ready-scanner' import { sendAgentDraftPasteContent } from '@/lib/agent-draft-paste-content' diff --git a/src/renderer/src/components/terminal-pane/pty-transport-types.ts b/src/renderer/src/components/terminal-pane/pty-transport-types.ts index 1ba841bd823..57e0c9e2e4e 100644 --- a/src/renderer/src/components/terminal-pane/pty-transport-types.ts +++ b/src/renderer/src/components/terminal-pane/pty-transport-types.ts @@ -11,7 +11,7 @@ import type { StartupCommandDelivery } from '../../../../shared/codex-startup-de import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import type { EventProps } from '../../../../shared/telemetry-events' import type { TerminalOscColorQueryReplyColors } from '../../../../shared/terminal-osc-color-reply' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { ExecutionHostId } from '../../../../shared/execution-host' import type { PtyDataMeta } from './pty-dispatcher' import type { RemoteRuntimeSnapshotOutcome } from '../../runtime/remote-runtime-terminal-multiplexer' diff --git a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts index d6d777f728c..737339f4705 100644 --- a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts +++ b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.test.ts @@ -6,7 +6,7 @@ * before the dedupe and 1 after. */ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' const updateWebRuntimePaneLayout = vi.fn() vi.mock('@/runtime/web-runtime-session', () => ({ diff --git a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts index 506bd7ea42f..963d4b78355 100644 --- a/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts +++ b/src/renderer/src/components/terminal-pane/remote-pane-layout-push.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { terminalLayoutEqual } from '@/lib/terminal-layout-equality' import { updateWebRuntimePaneLayout } from '@/runtime/web-runtime-session' diff --git a/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts b/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts index f9f9a63792b..806197d5323 100644 --- a/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-agent-session-continuation.ts @@ -7,7 +7,7 @@ import { import { useAppStore } from '@/store' import { makePaneKey } from '../../../../shared/stable-pane-id' import { isTuiAgent } from '../../../../shared/tui-agent-config' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { translate } from '@/i18n/i18n' type PrepareAgentSessionContinuationFromPaneArgs = { diff --git a/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts b/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts index 959b4a9a7e4..211c9589b64 100644 --- a/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts +++ b/src/renderer/src/components/terminal-pane/terminal-agent-session-fork.ts @@ -11,7 +11,7 @@ import { makePaneKey } from '../../../../shared/stable-pane-id' import { TUI_AGENT_CONFIG } from '../../../../shared/tui-agent-config' import { slugifyForWorkspaceName } from '../../../../shared/workspace-name' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isWslUncPath } from '../../../../shared/wsl-paths' import type { ProjectExecutionRuntimeResolution } from '../../../../shared/project-execution-runtime' import { getLocalProjectExecutionRuntimeContext } from '@/lib/local-preflight-context' diff --git a/src/renderer/src/components/terminal-pane/terminal-appearance.ts b/src/renderer/src/components/terminal-pane/terminal-appearance.ts index a0d5bff3a04..bb61a50fbbc 100644 --- a/src/renderer/src/components/terminal-pane/terminal-appearance.ts +++ b/src/renderer/src/components/terminal-pane/terminal-appearance.ts @@ -1,6 +1,6 @@ import type { ITheme } from '@xterm/xterm' import type { PaneManager } from '@/lib/pane-manager/pane-manager' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { resolveTerminalFontWeights } from '../../../../shared/terminal-fonts' import { resolveTerminalLigaturesEnabled } from '../../../../shared/terminal-ligatures' import { diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx index 902c3254557..5f4db2d3878 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-pre-gate-loop.react185.test.tsx @@ -3,7 +3,8 @@ import { act, StrictMode } from 'react' import type * as ReactModule from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Tab, TabGroup, TerminalTab } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx b/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx index 08fadd307fe..769c7e45c67 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-verdict-loop.test.tsx @@ -17,7 +17,7 @@ import { act, useEffect, useRef, useState } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts index a72867e3c22..75ca204c5cd 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { ParkVerdictFlipRecord } from './terminal-park-verdict-flip-telemetry' import { withholdUnparkableTerminalTabs } from './terminal-cold-park-withheld-tabs' diff --git a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts index 35be4446cb5..d35270bd170 100644 --- a/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts +++ b/src/renderer/src/components/terminal-pane/terminal-cold-park-withheld-tabs.ts @@ -6,7 +6,7 @@ * is returned because it is also the only remaining recheck wakeup once damping * has stopped the churn that was waking the parking effect. */ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { getParkVerdictUnparkPinUntilMs, type ParkVerdictFlipRecord diff --git a/src/renderer/src/components/terminal-pane/terminal-fit-restore.ts b/src/renderer/src/components/terminal-pane/terminal-fit-restore.ts index 6503d13f58c..685ba20b9c9 100644 --- a/src/renderer/src/components/terminal-pane/terminal-fit-restore.ts +++ b/src/renderer/src/components/terminal-pane/terminal-fit-restore.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { mapWithConcurrency } from '../../../../shared/map-with-concurrency' import { TERMINAL_FIT_RESTORE_DEADLINE_MS } from '../../../../shared/terminal-fit-restore-deadline' import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-delivery-gate.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-delivery-gate.ts index 0950b05508e..96d6a0eed07 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-delivery-gate.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-delivery-gate.ts @@ -7,7 +7,7 @@ * picks which observer records mode-2031 subscriptions (byte scan vs fact), * so it must never flip per chunk. */ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' // Why: cached once per session — the blocking read should only ever run on // the pre-hydration startup path, never per pane bind. diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts index 2efcff11f4d..a6aa4d676a7 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-view-parking.ts @@ -3,7 +3,7 @@ import { getRemoteRuntimePtyEnvironmentId } from '@/runtime/runtime-terminal-str import { PTY_SESSION_ID_SEPARATOR } from '../../../../shared/pty-session-id-format' import { TERMINAL_PAIRED_PARKING_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' // Why: cold-park hysteresis keeps a hidden pane mounted for 30s so quick tab // flips never pay a re-hydrate; hot-retain keeps a bounded recently-visible diff --git a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts index 856f976cce0..105ca4fd43e 100644 --- a/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts +++ b/src/renderer/src/components/terminal-pane/terminal-hidden-worktree-retention.ts @@ -8,7 +8,7 @@ import { type ColdParkRetainCandidate, type TerminalColdParkPolicyOverrides } from './terminal-hidden-view-parking' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' // Why these sizes: a retained hidden pane costs a measured ~2.5MB of V8 heap // at the 5k-row default scrollback and ~19MB at 50k (plus per-pane queues), diff --git a/src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.ts b/src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.ts index 89fb02cbd67..674d0620c1b 100644 --- a/src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.ts +++ b/src/renderer/src/components/terminal-pane/terminal-keyboard-protocol-pane-agent.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' type PaneKeyboardProtocolStartup = { launchAgent?: TuiAgent diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts index 782113e1641..8a610702558 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { detachTerminalLayoutLeaf } from './terminal-layout-leaf-detach' const LEAF_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts index 7ca537b014d..4287e4eeee2 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-detach.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' import { collectLeafIdsInOrder, normalizeTerminalLayoutSnapshot, diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts index 5f05376fd58..187f0a0d081 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' import { normalizeTerminalLayoutSnapshot, resolvePtyBoundActiveLeafId, diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts index 9f21c39056b..37870c03d70 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-leaf-ids.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' import { isTerminalLeafId, type TerminalLeafId } from '../../../../shared/stable-pane-id' import { mintStablePaneId } from '@/lib/pane-manager/mint-stable-pane-id' import { normalizeTerminalLayoutPtyOwnership } from './terminal-layout-pty-ownership' diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts index a7e3fa4fc5a..a22eb50b97f 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership-depth.test.ts @@ -1,5 +1,5 @@ import { expect, it } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' import { normalizeTerminalLayoutPtyOwnership } from './terminal-layout-pty-ownership' it('prunes deeply nested duplicate ownership without recursive stack growth', () => { diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts index 92a0def1df1..ddacb05ccd8 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { normalizeTerminalLayoutSnapshot } from './terminal-layout-leaf-ids' import { normalizeTerminalLayoutPtyOwnership } from './terminal-layout-pty-ownership' diff --git a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.ts b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.ts index 4c44c3e6ead..3687621f151 100644 --- a/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.ts +++ b/src/renderer/src/components/terminal-pane/terminal-layout-pty-ownership.ts @@ -1,4 +1,5 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' +import { collectLeafIds, pruneLeaves } from './terminal-pane-layout-tree' type TerminalLayoutPtyOwnershipNormalization = { snapshot: TerminalLayoutSnapshot @@ -10,68 +11,6 @@ type DuplicatePtyLeafReplacements = { retainedLeafIdByRemovedLeafId: Map } -function collectLeafIds(node: TerminalPaneLayoutNode | null | undefined): string[] { - if (!node) { - return [] - } - const leafIds: string[] = [] - const pending = [node] - while (pending.length > 0) { - const current = pending.pop()! - if (current.type === 'leaf') { - leafIds.push(current.leafId) - continue - } - pending.push(current.second, current.first) - } - return leafIds -} - -function pruneLeaves( - node: TerminalPaneLayoutNode, - retainedLeafIdByRemovedLeafId: ReadonlyMap, - retainedSelfLeafIds: Set -): TerminalPaneLayoutNode | null { - const pending: { node: TerminalPaneLayoutNode; visited: boolean }[] = [{ node, visited: false }] - const pruned: (TerminalPaneLayoutNode | null)[] = [] - while (pending.length > 0) { - const current = pending.pop()! - if (current.node.type === 'leaf') { - const retainedLeafId = retainedLeafIdByRemovedLeafId.get(current.node.leafId) - if (!retainedLeafId) { - pruned.push(current.node) - } else if ( - retainedLeafId === current.node.leafId && - !retainedSelfLeafIds.has(current.node.leafId) - ) { - retainedSelfLeafIds.add(current.node.leafId) - pruned.push(current.node) - } else { - pruned.push(null) - } - continue - } - if (!current.visited) { - pending.push({ node: current.node, visited: true }) - pending.push({ node: current.node.second, visited: false }) - pending.push({ node: current.node.first, visited: false }) - continue - } - const second = pruned.pop() ?? null - const first = pruned.pop() ?? null - if (first && second) { - pruned.push( - first === current.node.first && second === current.node.second - ? current.node - : { ...current.node, first, second } - ) - } else { - pruned.push(first ?? second) - } - } - return pruned[0] ?? null -} - function resolveRetainedLeafId( leafId: string, retainedLeafIdByRemovedLeafId: ReadonlyMap diff --git a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts index 50b51941701..06b321d0d04 100644 --- a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.test.ts @@ -3,7 +3,7 @@ import { isHostAuthoritativeLayout, planTerminalLiveLayoutInsertions } from './terminal-live-layout-reconciliation' -import type { TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' const LOCAL_PTY = 'pty-local-123' const REMOTE_PTY = 'remote:env-1@@term_abc' diff --git a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts index 152c90f82e1..7de00009a73 100644 --- a/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-live-layout-reconciliation.ts @@ -1,4 +1,7 @@ -import type { TerminalPaneLayoutNode, TerminalPaneSplitDirection } from '../../../../shared/types' +import type { + TerminalPaneLayoutNode, + TerminalPaneSplitDirection +} from '../../../../shared/terminal-tab-types' import { isRemoteRuntimePtyId } from '@/runtime/runtime-terminal-inspection' /** diff --git a/src/renderer/src/components/terminal-pane/terminal-notification-pane-visibility.ts b/src/renderer/src/components/terminal-pane/terminal-notification-pane-visibility.ts index ac4eb9717d0..00166365084 100644 --- a/src/renderer/src/components/terminal-pane/terminal-notification-pane-visibility.ts +++ b/src/renderer/src/components/terminal-pane/terminal-notification-pane-visibility.ts @@ -1,5 +1,5 @@ import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' type NotificationPaneVisibilityState = { activeWorktreeId: string | null diff --git a/src/renderer/src/components/terminal-pane/terminal-notification-state.ts b/src/renderer/src/components/terminal-pane/terminal-notification-state.ts index a14b5b8e39e..ac2d1c6d227 100644 --- a/src/renderer/src/components/terminal-pane/terminal-notification-state.ts +++ b/src/renderer/src/components/terminal-pane/terminal-notification-state.ts @@ -3,7 +3,7 @@ import type { useAppStore } from '@/store' import { getWorktreeMapFromState } from '@/store/selectors' import { AGENT_STATUS_STALE_AFTER_MS } from '../../../../shared/agent-status-types' import { parsePaneKey } from '../../../../shared/stable-pane-id' -import type { TerminalPaneLayoutNode } from '../../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' type StoreSnapshot = ReturnType diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts b/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts index 2325241098f..4d0487b5bad 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-close-identity.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' export function shouldClearLaunchAgentForClosedPane( tab: Pick | null | undefined, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-layout-tree.ts b/src/renderer/src/components/terminal-pane/terminal-pane-layout-tree.ts new file mode 100644 index 00000000000..5e36a9904ba --- /dev/null +++ b/src/renderer/src/components/terminal-pane/terminal-pane-layout-tree.ts @@ -0,0 +1,63 @@ +import type { TerminalPaneLayoutNode } from '../../../../shared/terminal-tab-types' + +export function collectLeafIds(node: TerminalPaneLayoutNode | null | undefined): string[] { + if (!node) { + return [] + } + const leafIds: string[] = [] + const pending = [node] + while (pending.length > 0) { + const current = pending.pop()! + if (current.type === 'leaf') { + leafIds.push(current.leafId) + continue + } + pending.push(current.second, current.first) + } + return leafIds +} + +export function pruneLeaves( + node: TerminalPaneLayoutNode, + retainedLeafIdByRemovedLeafId: ReadonlyMap, + retainedSelfLeafIds: Set +): TerminalPaneLayoutNode | null { + const pending: { node: TerminalPaneLayoutNode; visited: boolean }[] = [{ node, visited: false }] + const pruned: (TerminalPaneLayoutNode | null)[] = [] + while (pending.length > 0) { + const current = pending.pop()! + if (current.node.type === 'leaf') { + const retainedLeafId = retainedLeafIdByRemovedLeafId.get(current.node.leafId) + if (!retainedLeafId) { + pruned.push(current.node) + } else if ( + retainedLeafId === current.node.leafId && + !retainedSelfLeafIds.has(current.node.leafId) + ) { + retainedSelfLeafIds.add(current.node.leafId) + pruned.push(current.node) + } else { + pruned.push(null) + } + continue + } + if (!current.visited) { + pending.push({ node: current.node, visited: true }) + pending.push({ node: current.node.second, visited: false }) + pending.push({ node: current.node.first, visited: false }) + continue + } + const second = pruned.pop() ?? null + const first = pruned.pop() ?? null + if (first && second) { + pruned.push( + first === current.node.first && second === current.node.second + ? current.node + : { ...current.node, first, second } + ) + } else { + pruned.push(first ?? second) + } + } + return pruned[0] ?? null +} diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts index 8cfbc886925..d421ca04102 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { AppState } from '@/store' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { detachTerminalPaneToTab, resolveTerminalTabStripDropTarget, diff --git a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts index f6cac5c5aca..0d8f7d72de9 100644 --- a/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts +++ b/src/renderer/src/components/terminal-pane/terminal-pane-tab-detach.ts @@ -1,6 +1,6 @@ import type { PaneExternalDropTarget } from '@/lib/pane-manager/pane-manager' import type { AppState } from '@/store' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { detachTerminalLayoutLeaf } from './terminal-layout-leaf-detach' const TAB_GROUP_STRIP_SELECTOR = '[data-tab-group-strip-id][data-worktree-id]' diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts b/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts index 5376cb9ed13..0b2939aade8 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-watcher-reconciliation.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { useAppStore } from '@/store' import { collectLeafIdsInOrder, diff --git a/src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.ts b/src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.ts index e8e96e8e58c..39d49d02c86 100644 --- a/src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.ts +++ b/src/renderer/src/components/terminal-pane/terminal-quick-command-dispatch.ts @@ -1,4 +1,4 @@ -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { buildTerminalQuickCommandInput, flattenTerminalQuickCommand, diff --git a/src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts b/src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts index f6d225dcd09..4ae94968f75 100644 --- a/src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts +++ b/src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts @@ -1,6 +1,6 @@ import { isGeminiTerminalTitle } from '@/lib/agent-status' import type { AgentType } from '../../../../shared/agent-status-types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' export type TerminalGpuAccelerationMode = GlobalSettings['terminalGpuAcceleration'] diff --git a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts index dcbf3782f4b..9e2b375939c 100644 --- a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from '../../../../shared/terminal-scrollback-limits' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { getUtf8ByteLength } from '../../../../shared/utf8-byte-limits' const LEAF_ID = '11111111-1111-4111-8111-111111111111' as const diff --git a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts index 006a76b913f..f43d8026bd0 100644 --- a/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts +++ b/src/renderer/src/components/terminal-pane/terminal-shutdown-layout-capture.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import type { ManagedPane } from '@/lib/pane-manager/pane-manager' import type { PtyTransport } from './pty-transport' import { flushTerminalOutput } from '@/lib/pane-manager/pane-terminal-output-scheduler' diff --git a/src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.ts b/src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.ts index 578a4147375..527fbb46b95 100644 --- a/src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.ts +++ b/src/renderer/src/components/terminal-pane/terminal-side-effect-facts-handler.ts @@ -12,7 +12,7 @@ * where pre-mount output produces no attention side effects. The one exception * is a PTY whose consumer just unregistered: see the handoff buffer below. */ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { ParsedAgentStatusPayload } from '../../../../shared/agent-status-types' import type { TerminalGitHubPRLink } from '../../../../shared/terminal-github-pr-link-detector' import type { diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts index a31fc9b0ec4..a3f7d7320f1 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { getCachedTerminalTabForWorktree } from './terminal-tab-lookup' function makeTab(id: string): TerminalTab { diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts index 74447f0a87e..576ad570e00 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-lookup.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' const terminalTabLookupByArray = new WeakMap>() diff --git a/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts b/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts index cb0e357b280..527bbac536d 100644 --- a/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts +++ b/src/renderer/src/components/terminal-pane/terminal-tab-park-candidates.ts @@ -1,5 +1,5 @@ /** Builds the stateful per-tab cold-park candidate list. */ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { TerminalTabColdParkCandidate } from './terminal-hidden-view-parking' import type { TerminalTabActivationOrder } from './terminal-tab-activation-order' diff --git a/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts b/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts index 18872bf04bb..c4eaff387dc 100644 --- a/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' import { getCachedTerminalGroupIdForWorktree, getCachedUnifiedTerminalTabForWorktree diff --git a/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.ts b/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.ts index 2113121b29f..11889344b75 100644 --- a/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.ts +++ b/src/renderer/src/components/terminal-pane/terminal-unified-tab-lookup.ts @@ -1,4 +1,4 @@ -import type { Tab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' const terminalTabLookupByUnifiedTabs = new WeakMap>() diff --git a/src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts b/src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts index aeecb1a6f48..f785b59ff12 100644 --- a/src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts +++ b/src/renderer/src/components/terminal-pane/terminal-view-attributes-publisher.ts @@ -9,7 +9,7 @@ * are app-global, so identical snapshots publish once. */ import type { ITheme } from '@xterm/xterm' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { TerminalColorSchemeMode } from '../../../../shared/terminal-color-scheme-protocol' import type { TerminalViewAttributes, diff --git a/src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts b/src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts index 1ca3490ef56..0fa4e74dd88 100644 --- a/src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts +++ b/src/renderer/src/components/terminal-pane/use-notification-dispatch.test.ts @@ -4,7 +4,7 @@ import { AGENT_STATUS_STALE_AFTER_MS, type AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { buildAgentNotificationId } from '../../../../shared/agent-notification-id' type MockState = { diff --git a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx index f3ea986601f..5d364aba721 100644 --- a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx +++ b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.react185.test.tsx @@ -2,7 +2,7 @@ import { act, StrictMode, useEffect } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts index 1ee7ba8c2d0..ca533cccd88 100644 --- a/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts +++ b/src/renderer/src/components/terminal-pane/use-parked-terminal-watcher-synchronization.ts @@ -1,6 +1,6 @@ import { useEffect, useRef } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { useAppStore } from '../../store' import { disposeParkedTerminalWatchersForWorktree, diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts index c8264945744..b785d085772 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-context-menu.ts @@ -7,7 +7,7 @@ import type { PtyTransport } from './pty-transport' import { getConnectionId } from '@/lib/connection-context' import { getRuntimeEnvironmentIdForWorktree } from '@/lib/worktree-runtime-owner' import type { PaneCwdMap } from './resolve-split-cwd' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { isTerminalAgentQuickCommand } from '../../../../shared/terminal-quick-commands' import { sendTerminalQuickCommandToPane } from './terminal-quick-command-dispatch' import { pasteTerminalText } from './terminal-bracketed-paste' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.ts b/src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.ts index 97e6b7f31bd..de5cc7aeadd 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.ts @@ -57,13 +57,10 @@ import { } from '@/lib/http-link-routing' import { resolveTerminalHttpLinkSourceOwner } from './terminal-http-link-source-owner' import { canOpenWorkspaceBrowserTabOnRuntime } from '@/lib/workspace-browser-tab-open' -import type { - GlobalSettings, - SetupSplitDirection, - TerminalTab, - TerminalLayoutSnapshot, - TuiAgent -} from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { SetupSplitDirection } from '../../../../shared/worktree/launch-types' import type { TerminalPaneSplitSource } from '../../../../shared/feature-education-telemetry' import type { EventProps } from '../../../../shared/telemetry-events' import type { StartupCommandDelivery } from '../../../../shared/codex-startup-delivery' diff --git a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts index 783ff7af574..58f4cbd2c46 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.test.ts @@ -1,7 +1,7 @@ // @vitest-environment happy-dom import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' const mocks = vi.hoisted(() => ({ storeState: { diff --git a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts index 94df8daf738..c078eed66c9 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-tab-cold-parking.ts @@ -7,7 +7,7 @@ * render a slot as null. */ import { useEffect, useMemo, useRef, useState } from 'react' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { useAppStore } from '../../store' import { findActivityTerminalPortal, diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandAdvancedSection.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandAdvancedSection.tsx index af196b2c628..cca68ca54aa 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandAdvancedSection.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandAdvancedSection.tsx @@ -1,6 +1,7 @@ import type { Dispatch, MutableRefObject, SetStateAction } from 'react' import { ChevronDown } from 'lucide-react' -import type { Repo, TerminalQuickCommand } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import type { getTerminalQuickCommandScope } from '../../../../shared/terminal-quick-commands' import { isTerminalAgentQuickCommand } from '../../../../shared/terminal-quick-commands' import { Button } from '@/components/ui/button' diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx index 19967b0daba..5402ddb8dc4 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandContentSection.tsx @@ -1,5 +1,6 @@ import type { Dispatch, MutableRefObject, SetStateAction } from 'react' -import type { TerminalQuickCommand, TuiAgent } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isTerminalAgentQuickCommand, supportsTerminalAgentQuickCommand diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx index 050dc3a1dfa..3b9bd8095e3 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it, vi } from 'vitest' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { TerminalQuickCommandDialog } from './TerminalQuickCommandDialog' const mountedRoots: Root[] = [] diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx index 1c9c615d72d..0e8eadc2ff3 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandDialog.tsx @@ -1,10 +1,10 @@ import { useRef, useState } from 'react' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, TerminalQuickCommand, - TerminalQuickCommandScope, - TuiAgent -} from '../../../../shared/types' + TerminalQuickCommandScope +} from '../../../../shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { getTerminalQuickCommandAction, getTerminalQuickCommandScope, diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandLabelField.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandLabelField.tsx index a337be4361e..7fb30e8d683 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandLabelField.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandLabelField.tsx @@ -1,5 +1,5 @@ import type { Dispatch, SetStateAction } from 'react' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandScopeField.tsx b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandScopeField.tsx index 58cd0ea8fd2..7af1f31b53f 100644 --- a/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandScopeField.tsx +++ b/src/renderer/src/components/terminal-quick-commands/TerminalQuickCommandScopeField.tsx @@ -1,9 +1,9 @@ import type { Dispatch, SetStateAction } from 'react' +import type { Repo } from '../../../../shared/repo-types' import type { - Repo, TerminalQuickCommand, TerminalQuickCommandScope -} from '../../../../shared/types' +} from '../../../../shared/terminal-quick-command-types' import { Label } from '@/components/ui/label' import { Select, diff --git a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts index c0ad04b4159..82b44ae990a 100644 --- a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts +++ b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts @@ -1,7 +1,7 @@ import type { AgentCatalogEntry } from '@/lib/agent-catalog' import { getAgentCatalog } from '@/lib/agent-catalog' import { supportsTerminalAgentQuickCommand } from '../../../../shared/terminal-quick-commands' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' const QUICK_COMMAND_AGENT_PRESENTATION_ORDER = [ 'claude', diff --git a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts index d4397d4fd2e..becc121fb15 100644 --- a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts +++ b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { createTerminalQuickCommandDialogDraftMemory, switchTerminalQuickCommandDialogAction diff --git a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.ts b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.ts index ce61efb4d1a..01dc86367c7 100644 --- a/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.ts +++ b/src/renderer/src/components/terminal-quick-commands/terminal-quick-command-dialog-draft.ts @@ -2,7 +2,8 @@ import { getTerminalQuickCommandScope, isTerminalAgentQuickCommand } from '../../../../shared/terminal-quick-commands' -import type { TerminalQuickCommand, TuiAgent } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type TerminalQuickCommandDialogAction = 'terminal-command' | 'agent-prompt' diff --git a/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx b/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx index ab3ff3ac45e..3e8395b1327 100644 --- a/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx +++ b/src/renderer/src/components/terminal/active-terminal-repair-loop.react185.test.tsx @@ -3,7 +3,8 @@ import { act, useMemo } from 'react' import { createRoot } from 'react-dom/client' import { afterEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' -import type { Tab, TabGroup, TerminalTab } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { useActiveTerminalRepair } from './use-active-terminal-repair' ;(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true diff --git a/src/renderer/src/components/terminal/active-terminal-repair.test.ts b/src/renderer/src/components/terminal/active-terminal-repair.test.ts index f62cd0e4da7..4dfb08cf084 100644 --- a/src/renderer/src/components/terminal/active-terminal-repair.test.ts +++ b/src/renderer/src/components/terminal/active-terminal-repair.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveRepairedActiveTerminalTabId, shouldRepairActiveTerminalTab diff --git a/src/renderer/src/components/terminal/active-terminal-repair.ts b/src/renderer/src/components/terminal/active-terminal-repair.ts index 81dc5b2c6d3..539644b6fc8 100644 --- a/src/renderer/src/components/terminal/active-terminal-repair.ts +++ b/src/renderer/src/components/terminal/active-terminal-repair.ts @@ -1,4 +1,5 @@ -import type { TerminalTab, WorkspaceVisibleTabType } from '../../../../shared/types' +import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' export function shouldRepairActiveTerminalTab(args: { activeTabType: WorkspaceVisibleTabType diff --git a/src/renderer/src/components/terminal/split-group-mount.test.ts b/src/renderer/src/components/terminal/split-group-mount.test.ts index 79316fbe6b1..4a66f6d6f80 100644 --- a/src/renderer/src/components/terminal/split-group-mount.test.ts +++ b/src/renderer/src/components/terminal/split-group-mount.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { getEffectiveLayoutForWorktree, anyMountedWorktreeHasLayout } from './split-group-mount' -import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' function makeGroup(id: string, worktreeId: string): TabGroup { return { id, worktreeId, activeTabId: null, tabOrder: [] } diff --git a/src/renderer/src/components/terminal/split-group-mount.ts b/src/renderer/src/components/terminal/split-group-mount.ts index ca10c331bc5..f9fccd56683 100644 --- a/src/renderer/src/components/terminal/split-group-mount.ts +++ b/src/renderer/src/components/terminal/split-group-mount.ts @@ -1,4 +1,4 @@ -import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' /** * Derive the effective layout for a worktree: either its explicit layout diff --git a/src/renderer/src/components/terminal/terminal-tab-bulk-actions.ts b/src/renderer/src/components/terminal/terminal-tab-bulk-actions.ts index f9a649eb2ad..3bca59bd476 100644 --- a/src/renderer/src/components/terminal/terminal-tab-bulk-actions.ts +++ b/src/renderer/src/components/terminal/terminal-tab-bulk-actions.ts @@ -1,4 +1,4 @@ -import type { TabContentType } from '../../../../shared/types' +import type { TabContentType } from '../../../../shared/tab-types' import { hasUnroutableTerminalWorktreeOwner, resolveTerminalWorktreeRoute diff --git a/src/renderer/src/components/terminal/use-active-terminal-repair.ts b/src/renderer/src/components/terminal/use-active-terminal-repair.ts index d495c80c330..81197f29fd2 100644 --- a/src/renderer/src/components/terminal/use-active-terminal-repair.ts +++ b/src/renderer/src/components/terminal/use-active-terminal-repair.ts @@ -1,5 +1,6 @@ import { useEffect } from 'react' -import type { TerminalTab, WorkspaceVisibleTabType } from '../../../../shared/types' +import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveRepairedActiveTerminalTabId } from './active-terminal-repair' type ActiveTerminalRepairInput = { diff --git a/src/renderer/src/components/ui/repo-multi-combobox.test.ts b/src/renderer/src/components/ui/repo-multi-combobox.test.ts index a0a4a747e31..3248e743afc 100644 --- a/src/renderer/src/components/ui/repo-multi-combobox.test.ts +++ b/src/renderer/src/components/ui/repo-multi-combobox.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoMultiComboboxDetail } from './repo-multi-combobox' function repo(overrides: Partial = {}): Repo { diff --git a/src/renderer/src/components/ui/repo-multi-combobox.tsx b/src/renderer/src/components/ui/repo-multi-combobox.tsx index f3dfef437d0..5af4313ebda 100644 --- a/src/renderer/src/components/ui/repo-multi-combobox.tsx +++ b/src/renderer/src/components/ui/repo-multi-combobox.tsx @@ -11,7 +11,7 @@ import { import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { searchRepos } from '@/lib/repo-search' import { cn } from '@/lib/utils' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import RepoBadgeLabel from '@/components/repo/RepoBadgeLabel' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.test.ts b/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.test.ts index e2546210158..0cb2b0329d0 100644 --- a/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.test.ts +++ b/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { countEstimatedInactiveWorkspaces } from './inactive-workspace-estimate' const NOW = 1_800_000_000_000 diff --git a/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.ts b/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.ts index a0103360f5f..23524b5e904 100644 --- a/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.ts +++ b/src/renderer/src/components/workspace-cleanup/inactive-workspace-estimate.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { isFolderRepo } from '../../../../shared/repo-kind' import { getPersistedWorkspaceCleanupActivityAt, diff --git a/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation-fixtures.ts b/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation-fixtures.ts index 4538c9619c5..17f5f2f7c05 100644 --- a/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation-fixtures.ts +++ b/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation-fixtures.ts @@ -1,7 +1,8 @@ import type { AppState } from '@/store/types' import { translate } from '@/i18n/i18n' import type { HostedReviewInfo } from '../../../../shared/hosted-review' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorkspaceCleanupCandidate } from '../../../../shared/workspace-cleanup' import type { WorkspaceCleanupFilters } from './workspace-cleanup-presentation' diff --git a/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.ts b/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.ts index bfcc64cc0fa..1accef346ca 100644 --- a/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.ts +++ b/src/renderer/src/components/workspace-cleanup/workspace-cleanup-presentation.ts @@ -3,7 +3,8 @@ import { getHostedReviewCacheKey } from '@/store/slices/hosted-review' import type { AppState } from '@/store/types' import { translate } from '@/i18n/i18n' import type { HostedReviewInfo, HostedReviewProvider } from '../../../../shared/hosted-review' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { WorkspaceCleanupCandidate } from '../../../../shared/workspace-cleanup' export type WorkspaceCleanupSortKey = 'activity' | 'name' | 'repo' | 'review' | 'git' diff --git a/src/renderer/src/components/worktree-base-fallback-notice.ts b/src/renderer/src/components/worktree-base-fallback-notice.ts index fc314732b4a..1d31517b224 100644 --- a/src/renderer/src/components/worktree-base-fallback-notice.ts +++ b/src/renderer/src/components/worktree-base-fallback-notice.ts @@ -1,4 +1,4 @@ -import type { WorktreeCreateBaseFallback } from '../../../shared/types' +import type { WorktreeCreateBaseFallback } from '../../../shared/worktree/create-types' const notices: WorktreeCreateBaseFallback[] = [] const listeners = new Set<() => void>() diff --git a/src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx b/src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx index 425522acbb3..7ed47d72512 100644 --- a/src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx +++ b/src/renderer/src/components/worktree-jump-palette-interleaved-sections.test.tsx @@ -4,7 +4,10 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as ReactI18Next from 'react-i18next' -import type { Repo, Tab, TabGroup, TerminalTab, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { diff --git a/src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts b/src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts index 05ac5130e36..a5410ec7dbb 100644 --- a/src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts +++ b/src/renderer/src/components/worktree-jump-palette-sleeping-filter.test.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { describe, expect, it } from 'vitest' import { isSleepingSweepExemptWorkspace } from './sidebar/visible-worktrees' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' const source = readFileSync(join(__dirname, 'WorktreeJumpPalette.tsx'), 'utf8') diff --git a/src/renderer/src/components/worktree-jump-palette-test-fixtures.ts b/src/renderer/src/components/worktree-jump-palette-test-fixtures.ts index f707b445d5a..5dfbcdaf6a8 100644 --- a/src/renderer/src/components/worktree-jump-palette-test-fixtures.ts +++ b/src/renderer/src/components/worktree-jump-palette-test-fixtures.ts @@ -1,4 +1,7 @@ -import type { Repo, Tab, TabGroup, TerminalTab, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import type { AgentStatusEntry, AgentStatusState } from '../../../shared/agent-status-types' import { makePaneKey } from '../../../shared/stable-pane-id' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/hooks/direct-ssh-host-hydration.test.ts b/src/renderer/src/hooks/direct-ssh-host-hydration.test.ts index 3f8a00813eb..4aa654cf33a 100644 --- a/src/renderer/src/hooks/direct-ssh-host-hydration.test.ts +++ b/src/renderer/src/hooks/direct-ssh-host-hydration.test.ts @@ -3,7 +3,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { HostLineageSnapshot } from '../../../shared/host-lineage-contract' import type { HostRepoCatalogSnapshot } from '../../../shared/host-repo-catalog-contract' import type { DirectSshAuthority, SshProviderEpoch } from '../../../shared/ssh-types' -import type { Repo, WorktreeLineage, WorkspaceLineage } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../shared/worktree/lineage-types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../shared/workspace-scope' import type { AppState } from '../store/types' import { createDirectSshHostHydration } from './direct-ssh-host-hydration' diff --git a/src/renderer/src/hooks/ipc-events-test-harness.ts b/src/renderer/src/hooks/ipc-events-test-harness.ts index e2226460a7b..509aff00b04 100644 --- a/src/renderer/src/hooks/ipc-events-test-harness.ts +++ b/src/renderer/src/hooks/ipc-events-test-harness.ts @@ -1,6 +1,6 @@ import { vi } from 'vitest' import type * as ReactModule from 'react' -import type { TerminalPaneLayoutNode } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' export type CreateTerminalRequest = { requestId?: string diff --git a/src/renderer/src/hooks/remote-workspace-session-merge.ts b/src/renderer/src/hooks/remote-workspace-session-merge.ts index 0f772ff8794..c5a31073184 100644 --- a/src/renderer/src/hooks/remote-workspace-session-merge.ts +++ b/src/renderer/src/hooks/remote-workspace-session-merge.ts @@ -1,4 +1,5 @@ -import type { TerminalTab, WorkspaceSessionState } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { splitWorktreeId } from '../../../shared/worktree/id' import type { AppState } from '../store/types' diff --git a/src/renderer/src/hooks/remote-workspace-target-sync.ts b/src/renderer/src/hooks/remote-workspace-target-sync.ts index 79bc3d9690e..836fd763fc6 100644 --- a/src/renderer/src/hooks/remote-workspace-target-sync.ts +++ b/src/renderer/src/hooks/remote-workspace-target-sync.ts @@ -3,7 +3,7 @@ import type { RemoteWorkspacePatchResult, RemoteWorkspaceSnapshot } from '../../../shared/remote-workspace-types' -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import type { DirectSshAuthority } from '../../../shared/ssh-types' import { translate } from '@/i18n/i18n' import { buildWorkspaceSessionPayload } from '../lib/workspace-session' diff --git a/src/renderer/src/hooks/resolve-zoom-target.ts b/src/renderer/src/hooks/resolve-zoom-target.ts index 5e3c2171a3c..cc727f4c8a7 100644 --- a/src/renderer/src/hooks/resolve-zoom-target.ts +++ b/src/renderer/src/hooks/resolve-zoom-target.ts @@ -54,4 +54,4 @@ export function resolveZoomTarget(args: { } return 'ui' } -import type { TopLevelView } from '../../../shared/types' +import type { TopLevelView } from '../../../shared/ui-chrome-types' diff --git a/src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts b/src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts index c3014b35d8c..fe14513ecf3 100644 --- a/src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts +++ b/src/renderer/src/hooks/use-terminal-quick-command-hosts.test.ts @@ -5,7 +5,7 @@ import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../shared/constants' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RuntimeTerminalQuickCommands } from '@/store/slices/terminal-quick-command-hosts' const testState = vi.hoisted(() => ({ diff --git a/src/renderer/src/hooks/use-terminal-quick-command-hosts.ts b/src/renderer/src/hooks/use-terminal-quick-command-hosts.ts index df70bb58fdc..28483b4ecb1 100644 --- a/src/renderer/src/hooks/use-terminal-quick-command-hosts.ts +++ b/src/renderer/src/hooks/use-terminal-quick-command-hosts.ts @@ -1,6 +1,7 @@ import { useCallback, useEffect, useMemo } from 'react' import { useShallow } from 'zustand/react/shallow' -import type { GlobalSettings, TerminalQuickCommand } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' import { LOCAL_EXECUTION_HOST_ID, parseExecutionHostId, diff --git a/src/renderer/src/hooks/useAgentDetectionTarget.test.ts b/src/renderer/src/hooks/useAgentDetectionTarget.test.ts index dd8f1b8176c..16cf58acf1f 100644 --- a/src/renderer/src/hooks/useAgentDetectionTarget.test.ts +++ b/src/renderer/src/hooks/useAgentDetectionTarget.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { diff --git a/src/renderer/src/hooks/useAutoAckViewedAgent.ts b/src/renderer/src/hooks/useAutoAckViewedAgent.ts index 1e6052342ba..4e471aa5eed 100644 --- a/src/renderer/src/hooks/useAutoAckViewedAgent.ts +++ b/src/renderer/src/hooks/useAutoAckViewedAgent.ts @@ -2,7 +2,7 @@ import { useEffect } from 'react' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../shared/agent-status-types' import type { RetainedAgentEntry } from '@/store/slices/agent-status' -import type { TerminalLayoutSnapshot } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' function resolveActiveLeafId( diff --git a/src/renderer/src/hooks/useComposerState.ts b/src/renderer/src/hooks/useComposerState.ts index 8356f379a84..2993d6dc4d4 100644 --- a/src/renderer/src/hooks/useComposerState.ts +++ b/src/renderer/src/hooks/useComposerState.ts @@ -39,26 +39,27 @@ import { normalizeTaskSourceContext, type TaskSourceContext } from '../../../shared/task-source-context' +import type { GitHubRepositoryIdentity } from '../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { GitLabWorkItem } from '../../../shared/gitlab-types' +import type { JiraIssue } from '../../../shared/jira-types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import type { - GitHubRepositoryIdentity, - GitHubWorkItem, - GitHubPrStartPoint, - GitPushTarget, - GitLabWorkItem, - JiraIssue, - LinearIssue, OrcaHooks, RepoHookSettings, SetupAgentStartupPolicy, - SetupDecision, - SetupRunPolicy, - SparsePreset, - TuiAgent, - WorktreeMeta, - WorkspaceStatus, - WorkspaceCreateTelemetrySource, - ProjectGroup -} from '../../../shared/types' + SetupRunPolicy +} from '../../../shared/orca-yaml-hook-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../shared/workspace-source' +import type { SetupDecision, SparsePreset } from '../../../shared/worktree/create-types' +import type { WorktreeMeta } from '../../../shared/worktree/meta-types' +import type { + GitHubPrStartPoint, + GitPushTarget, + WorkspaceStatus +} from '../../../shared/worktree/types' import { githubRepoIdentityKey } from '../../../shared/github/repository-identity-key' import { isWorkspaceStatusId } from '../../../shared/workspace-statuses' import { diff --git a/src/renderer/src/hooks/useDetectedAgents.ts b/src/renderer/src/hooks/useDetectedAgents.ts index 3015e524aa4..284083b287d 100644 --- a/src/renderer/src/hooks/useDetectedAgents.ts +++ b/src/renderer/src/hooks/useDetectedAgents.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef } from 'react' import { useAppStore } from '@/store' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' export type UseDetectedAgentsResult = { /** Null while detection is in flight on first load. */ diff --git a/src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts b/src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts index cfcb973d968..f6e726f5a1f 100644 --- a/src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts +++ b/src/renderer/src/hooks/useEditorExternalWatch-complexity.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as EditorAutosaveModule from '@/components/editor/editor-autosave' import type * as CrossPlatformPathModule from '../../../shared/cross-platform-path' -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' const pathOperationCounts = vi.hoisted(() => ({ aliasComparisons: 0, diff --git a/src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts b/src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts index a9fbd0e2c61..523e00420ca 100644 --- a/src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts +++ b/src/renderer/src/hooks/useEditorExternalWatch-self-move.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as EditorAutosaveModule from '@/components/editor/editor-autosave' -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' vi.mock('@/store', () => ({ useAppStore: { getState: vi.fn() } diff --git a/src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts b/src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts index 256632dfd58..930dc1167f6 100644 --- a/src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts +++ b/src/renderer/src/hooks/useEditorExternalWatch-wsl-repro.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as EditorAutosaveModule from '@/components/editor/editor-autosave' -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' vi.mock('@/store', () => ({ useAppStore: { getState: vi.fn() } })) vi.mock('@/components/editor/editor-autosave', async (importOriginal) => { diff --git a/src/renderer/src/hooks/useEditorExternalWatch.test.ts b/src/renderer/src/hooks/useEditorExternalWatch.test.ts index 891bbc35e4e..c006d2612d5 100644 --- a/src/renderer/src/hooks/useEditorExternalWatch.test.ts +++ b/src/renderer/src/hooks/useEditorExternalWatch.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi, afterEach } from 'vitest' import type * as EditorAutosaveModule from '@/components/editor/editor-autosave' -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' vi.mock('@/store', () => ({ useAppStore: { diff --git a/src/renderer/src/hooks/useEditorExternalWatch.ts b/src/renderer/src/hooks/useEditorExternalWatch.ts index c07f9bd25c1..304390a6b42 100644 --- a/src/renderer/src/hooks/useEditorExternalWatch.ts +++ b/src/renderer/src/hooks/useEditorExternalWatch.ts @@ -22,7 +22,7 @@ import { hasActiveEditorPathMoves, isActiveMoveSourcePath } from '@/components/editor/editor-path-move-inflight' -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' import { findWorktreeById } from '@/store/slices/worktree-helpers' import type { OpenFile } from '@/store/slices/editor' import { readRuntimeFileContent, subscribeRuntimeFileChanges } from '@/runtime/runtime-file-client' diff --git a/src/renderer/src/hooks/useEphemeralVmRecipeOptions.ts b/src/renderer/src/hooks/useEphemeralVmRecipeOptions.ts index 6ebf489f894..3cf47e7a707 100644 --- a/src/renderer/src/hooks/useEphemeralVmRecipeOptions.ts +++ b/src/renderer/src/hooks/useEphemeralVmRecipeOptions.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import type { OrcaVmRecipe } from '../../../shared/types' +import type { OrcaVmRecipe } from '../../../shared/orca-yaml-hook-types' type EphemeralVmRecipeOptionsArgs = { enabled: boolean diff --git a/src/renderer/src/hooks/useGitHubSlugMetadata.ts b/src/renderer/src/hooks/useGitHubSlugMetadata.ts index a268a7bbc93..8b7ab1b4c62 100644 --- a/src/renderer/src/hooks/useGitHubSlugMetadata.ts +++ b/src/renderer/src/hooks/useGitHubSlugMetadata.ts @@ -1,5 +1,6 @@ import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' -import type { GitHubAssignableUser, GlobalSettings } from '../../../shared/types' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { ListAssignableUsersBySlugResult, ListLabelsBySlugResult diff --git a/src/renderer/src/hooks/useGlobalFileDrop.ts b/src/renderer/src/hooks/useGlobalFileDrop.ts index b151809fd76..1ddc557f49b 100644 --- a/src/renderer/src/hooks/useGlobalFileDrop.ts +++ b/src/renderer/src/hooks/useGlobalFileDrop.ts @@ -12,7 +12,7 @@ import { statRuntimePath, type RuntimeFileOperationArgs } from '@/runtime/runtime-file-client' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' import type { WorktreeRuntimeOwnerState } from '@/lib/worktree-runtime-owner' import { diff --git a/src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx b/src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx index 61070599652..3c379e1c1f2 100644 --- a/src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx +++ b/src/renderer/src/hooks/useInstalledAgentSkills.react.test.tsx @@ -9,7 +9,7 @@ import type { SkillDiscoveryTarget } from '../../../shared/skills' import type { ProjectExecutionRuntimeResolution } from '../../../shared/project-execution-runtime' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { createCompatibleRuntimeStatusResponseIfNeeded } from '@/runtime/runtime-compatibility-test-fixture' import { clearRuntimeCompatibilityCacheForTests } from '@/runtime/runtime-rpc-client' import { useAppStore } from '@/store' diff --git a/src/renderer/src/hooks/useIpcEvents.test.ts b/src/renderer/src/hooks/useIpcEvents.test.ts index c19fe942461..392750fe861 100644 --- a/src/renderer/src/hooks/useIpcEvents.test.ts +++ b/src/renderer/src/hooks/useIpcEvents.test.ts @@ -33,7 +33,8 @@ import type { AgentStatusClearIpcPayload, MigrationUnsupportedPtyEntry } from '../../../shared/agent-status-types' -import type { TerminalPaneLayoutNode, TuiAgent } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type * as CmdJRowIndexJump from '@/lib/cmd-j-row-index-jump' import { makePaneKey } from '../../../shared/stable-pane-id' import { folderWorkspaceKey } from '../../../shared/workspace-scope' @@ -900,6 +901,7 @@ describe('useIpcEvents browser tab create routing', () => { | ((data: { requestId: string worktreeId?: string | null + browserPageId?: string url: string sessionProfileId?: string }) => void) @@ -961,10 +963,15 @@ describe('useIpcEvents browser tab create routing', () => { ] }, createBrowserTab: vi.fn( - (_worktreeId: string, _url: string, options: { activate?: boolean }) => { - const workspace = { id: 'workspace-new', activePageId: 'page-new', pageIds: ['page-new'] } + ( + _worktreeId: string, + _url: string, + options: { activate?: boolean; browserPageId?: string } + ) => { + const pageId = options.browserPageId ?? 'page-new' + const workspace = { id: 'workspace-new', activePageId: pageId, pageIds: [pageId] } state.browserTabsByWorktree['wt-1'].push(workspace) - state.browserPagesByWorkspace['workspace-new'] = [{ id: 'page-new', worktreeId: 'wt-1' }] + state.browserPagesByWorkspace['workspace-new'] = [{ id: pageId, worktreeId: 'wt-1' }] expect(options.activate).toBe(false) return workspace } @@ -1128,20 +1135,21 @@ describe('useIpcEvents browser tab create routing', () => { requestTabCreateListenerRef.current?.({ requestId: 'req-create', worktreeId: 'wt-1', + browserPageId: 'page-canonical', url: 'https://example.com' }) - expect(acquireBrowserAutomationVisibility).toHaveBeenCalledWith('page-new') + expect(acquireBrowserAutomationVisibility).toHaveBeenCalledWith('page-canonical') expect(acquireBrowserAutomationVisibility).not.toHaveBeenCalledWith('page-active') expect(state.createBrowserTab).toHaveBeenCalledWith( 'wt-1', 'https://example.com', - expect.objectContaining({ activate: false }) + expect.objectContaining({ activate: false, browserPageId: 'page-canonical' }) ) expect(state.createBrowserTab.mock.calls[0]?.[2]).not.toHaveProperty('allowWindowClose') expect(replyTabCreate).toHaveBeenCalledWith({ requestId: 'req-create', - browserPageId: 'page-new' + browserPageId: 'page-canonical' }) expect(dispatchEvent).toHaveBeenCalled() expect(releaseBrowserAutomationVisibility).not.toHaveBeenCalled() @@ -3707,6 +3715,46 @@ describe('useIpcEvents browser tab close routing', () => { ) }) + it('refuses to close a browser page outside the requested worktree', async () => { + const requestTabCloseListenerRef: { current: RequestTabCloseListener | null } = { + current: null + } + const closeBrowserTab = vi.fn() + const closeBrowserPage = vi.fn() + const replyTabClose = vi.fn() + + await useIpcEventsForCloseRouting({ + requestTabCloseListenerRef, + replyTabClose, + getState: () => ({ + closeBrowserTab, + closeBrowserPage, + browserTabsByWorktree: { + 'wt-1': [{ id: 'workspace-1' }], + 'wt-2': [{ id: 'workspace-2' }] + }, + browserPagesByWorkspace: { + 'workspace-1': [{ id: 'page-1', workspaceId: 'workspace-1' }], + 'workspace-2': [{ id: 'page-2', workspaceId: 'workspace-2' }] + } + }) + }) + + requestTabCloseListenerRef.current?.({ + requestId: 'req-wrong-worktree', + tabId: 'page-2', + worktreeId: 'wt-1' + }) + + expect(closeBrowserPage).not.toHaveBeenCalled() + expect(closeBrowserTab).not.toHaveBeenCalled() + expect(replyTabClose).toHaveBeenCalledWith({ + requestId: 'req-wrong-worktree', + code: 'browser_tab_not_found', + error: 'Browser tab page-2 not found' + }) + }) + it('closes the active browser tab for the requested worktree when main does not provide a tab id', async () => { const closeBrowserTab = vi.fn() const closeBrowserPage = vi.fn() @@ -4361,6 +4409,7 @@ describe('useIpcEvents browser tab close routing', () => { expect(closeBrowserTab).not.toHaveBeenCalled() expect(replyTabClose).toHaveBeenCalledWith({ requestId: 'req-3', + code: 'browser_tab_not_found', error: 'Browser tab missing-page not found' }) }) diff --git a/src/renderer/src/hooks/useIpcEvents.ts b/src/renderer/src/hooks/useIpcEvents.ts index eb53914e3a9..d9f3727232d 100644 --- a/src/renderer/src/hooks/useIpcEvents.ts +++ b/src/renderer/src/hooks/useIpcEvents.ts @@ -28,9 +28,9 @@ import { nextEditorFontZoomLevel, computeEditorFontSize } from '@/lib/editor-fon import { canConnectSshStatus } from '@/ssh/ssh-connection-recoverability' import type { TerminalLayoutSnapshot, - TerminalPaneLayoutNode, - UpdateStatus -} from '../../../shared/types' + TerminalPaneLayoutNode +} from '../../../shared/terminal-tab-types' +import type { UpdateStatus } from '../../../shared/update-status-types' import type { RateLimitState } from '../../../shared/rate-limit-types' import type { DirectSshAuthority, SshConnectionState } from '../../../shared/ssh-types' import { @@ -2316,6 +2316,7 @@ export function useIpcEvents(): void { // Agent/automation opens stay in the background (activate:false) in the active browser group. const workspace = store.createBrowserTab(worktreeId, data.url, { title: data.url, + browserPageId: data.browserPageId, targetGroupId: data.activate ? undefined : activeBrowserUnifiedTab?.groupId, sessionProfileId: data.sessionProfileId, sessionPartition: data.sessionPartition, @@ -2404,6 +2405,17 @@ export function useIpcEvents(): void { } const store = useAppStore.getState() const explicitTargetId = data.tabId ?? null + const replyBrowserTabNotFound = (tabId: string): void => { + window.api.ui.replyTabClose({ + requestId: data.requestId, + code: 'browser_tab_not_found', + error: translate( + 'auto.hooks.useIpcEvents.0e3cf53060', + 'Browser tab {{value0}} not found', + { value0: tabId } + ) + }) + } const replyPinnedBrowserCloseCanceled = (tabId: string): void => { window.api.ui.replyTabClose({ requestId: data.requestId, @@ -2455,11 +2467,15 @@ export function useIpcEvents(): void { ) if (owningWorkspace) { const [workspaceId, pages] = owningWorkspace + const owningWorktreeId = + Object.entries(store.browserTabsByWorktree).find(([, tabs]) => + tabs.some((tab) => tab.id === workspaceId) + )?.[0] ?? null + if (data.worktreeId && owningWorktreeId !== data.worktreeId) { + replyBrowserTabNotFound(tabToClose) + return + } if (pages.length <= 1) { - const owningWorktreeId = - Object.entries(store.browserTabsByWorktree).find(([, tabs]) => - tabs.some((tab) => tab.id === workspaceId) - )?.[0] ?? null if (owningWorktreeId) { closeBrowserWorkspaceWithReply(owningWorktreeId, workspaceId) return @@ -2477,18 +2493,15 @@ export function useIpcEvents(): void { tabs.some((tab) => tab.id === tabToClose) )?.[0] ?? null if (owningWorktreeId) { + if (data.worktreeId && owningWorktreeId !== data.worktreeId) { + replyBrowserTabNotFound(tabToClose) + return + } closeBrowserWorkspaceWithReply(owningWorktreeId, tabToClose) return } if (explicitTargetId) { - window.api.ui.replyTabClose({ - requestId: data.requestId, - error: translate( - 'auto.hooks.useIpcEvents.0e3cf53060', - 'Browser tab {{value0}} not found', - { value0: explicitTargetId } - ) - }) + replyBrowserTabNotFound(explicitTargetId) return } store.closeBrowserTab(tabToClose) diff --git a/src/renderer/src/hooks/useIssueMetadata.ts b/src/renderer/src/hooks/useIssueMetadata.ts index 8d8a44599ef..3dc10686323 100644 --- a/src/renderer/src/hooks/useIssueMetadata.ts +++ b/src/renderer/src/hooks/useIssueMetadata.ts @@ -6,12 +6,12 @@ import { linearTeamStates, type RuntimeLinearSettings } from '@/runtime/runtime-linear-client' +import type { GitHubAssignableUser } from '../../../shared/github/pull-request-types' import type { - GitHubAssignableUser, - LinearWorkflowState, LinearLabel, - LinearMember -} from '../../../shared/types' + LinearMember, + LinearWorkflowState +} from '../../../shared/linear/workspace-types' import { getTaskSourceRuntimeSettings } from '../../../shared/task-source-context' import { unionLinearMetadataById } from '../components/linear-issue-attribute-filter-team-ids' import { diff --git a/src/renderer/src/hooks/useLinearProviderConnected.test.tsx b/src/renderer/src/hooks/useLinearProviderConnected.test.tsx index c10afed44c5..622d6fcd95f 100644 --- a/src/renderer/src/hooks/useLinearProviderConnected.test.tsx +++ b/src/renderer/src/hooks/useLinearProviderConnected.test.tsx @@ -3,7 +3,7 @@ import { act } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, describe, expect, it } from 'vitest' -import type { LinearConnectionStatus } from '../../../shared/types' +import type { LinearConnectionStatus } from '../../../shared/linear/workspace-types' import { getProviderRuntimeContextKey } from '@/lib/provider-runtime-context' import { useAppStore } from '@/store' import { useLinearProviderConnected } from './useLinearProviderConnected' diff --git a/src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx b/src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx index 1cb259a8578..fc0e4e04464 100644 --- a/src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx +++ b/src/renderer/src/hooks/useSettingsNavigationMetadata.capability-owner.test.tsx @@ -4,7 +4,7 @@ import { act, createElement } from 'react' import { createRoot, type Root } from 'react-dom/client' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../shared/constants' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { SettingsNavSection } from '@/lib/settings-navigation-types' import { resetWindowsTerminalCapabilitiesForTests } from '@/lib/windows-terminal-capabilities' diff --git a/src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts b/src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts index 6008db31856..6cc9f641280 100644 --- a/src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts +++ b/src/renderer/src/hooks/useSettingsNavigationMetadata.test.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs' import { resolve } from 'node:path' import { describe, expect, it } from 'vitest' import { buildSettingsNavigationMetadata } from './useSettingsNavigationMetadata' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' const repo = { id: 'repo-1', diff --git a/src/renderer/src/hooks/useSettingsNavigationMetadata.ts b/src/renderer/src/hooks/useSettingsNavigationMetadata.ts index c0c85b115ed..77d9a885f7e 100644 --- a/src/renderer/src/hooks/useSettingsNavigationMetadata.ts +++ b/src/renderer/src/hooks/useSettingsNavigationMetadata.ts @@ -39,7 +39,7 @@ import { } from 'lucide-react' import { OrcaLogoSettingsIcon } from '@/components/settings/orca-logo-settings-icon' import { LinearIcon } from '@/components/icons/LinearIcon' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { getRepoKindLabel } from '../../../shared/repo-kind' import { useAppStore } from '@/store' import { isMacUserAgent, isWindowsUserAgent } from '@/components/terminal-pane/pane-helpers' diff --git a/src/renderer/src/hooks/useTaskPageGitHubWorkItemMutation.ts b/src/renderer/src/hooks/useTaskPageGitHubWorkItemMutation.ts index 9b80be9a6c4..24b6a969c68 100644 --- a/src/renderer/src/hooks/useTaskPageGitHubWorkItemMutation.ts +++ b/src/renderer/src/hooks/useTaskPageGitHubWorkItemMutation.ts @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { toast } from 'sonner' import { parseExecutionHostId } from '../../../shared/execution-host' import type { ParsedTaskQuery } from '../../../shared/task-query' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/hooks/worktree-file-change-event.ts b/src/renderer/src/hooks/worktree-file-change-event.ts index 67c234202bb..1cfe6fca1ae 100644 --- a/src/renderer/src/hooks/worktree-file-change-event.ts +++ b/src/renderer/src/hooks/worktree-file-change-event.ts @@ -1,4 +1,4 @@ -import type { FsChangedPayload } from '../../../shared/types' +import type { FsChangedPayload } from '../../../shared/filesystem-entry-types' export const ORCA_WORKTREE_FILE_CHANGE_EVENT = 'orca:worktree-file-change' diff --git a/src/renderer/src/hooks/worktree-head-identity-apply.test.ts b/src/renderer/src/hooks/worktree-head-identity-apply.test.ts index 3df3e92297e..35028c5fa7f 100644 --- a/src/renderer/src/hooks/worktree-head-identity-apply.test.ts +++ b/src/renderer/src/hooks/worktree-head-identity-apply.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { applyWorktreeHeadIdentities } from './worktree-head-identity-apply' function makeWorktree(overrides: Partial): Worktree { diff --git a/src/renderer/src/hooks/worktree-head-identity-apply.ts b/src/renderer/src/hooks/worktree-head-identity-apply.ts index 29be23b6022..c419b17fcf6 100644 --- a/src/renderer/src/hooks/worktree-head-identity-apply.ts +++ b/src/renderer/src/hooks/worktree-head-identity-apply.ts @@ -1,4 +1,4 @@ -import type { Worktree, WorktreeHeadIdentity } from '../../../shared/types' +import type { Worktree, WorktreeHeadIdentity } from '../../../shared/worktree/types' import { normalizeRuntimePathForComparison } from '../../../shared/cross-platform-path' export type WorktreeHeadIdentityApplyDeps = { diff --git a/src/renderer/src/lib/active-agent-note-send.test.ts b/src/renderer/src/lib/active-agent-note-send.test.ts index 2abcdd0d772..bad9faf7daf 100644 --- a/src/renderer/src/lib/active-agent-note-send.test.ts +++ b/src/renderer/src/lib/active-agent-note-send.test.ts @@ -10,7 +10,7 @@ import { } from './active-agent-note-send' import type { AgentStatusEntry } from '../../../shared/agent-status-types' import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' const LEAF_ID = '11111111-1111-4111-8111-111111111111' const OTHER_LEAF_ID = '22222222-2222-4222-8222-222222222222' diff --git a/src/renderer/src/lib/active-agent-note-target.ts b/src/renderer/src/lib/active-agent-note-target.ts index 326a44dbb0b..dbacc97e4c1 100644 --- a/src/renderer/src/lib/active-agent-note-target.ts +++ b/src/renderer/src/lib/active-agent-note-target.ts @@ -11,7 +11,7 @@ import { } from '@/lib/worktree-runtime-owner' import { toRuntimeWorktreeSelector } from '@/runtime/runtime-worktree-selector' import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' import { classifyTitleActivity, isExplicitAgentStatusFresh, diff --git a/src/renderer/src/lib/active-view-persist.ts b/src/renderer/src/lib/active-view-persist.ts index 79f965b33aa..dfd77e70b44 100644 --- a/src/renderer/src/lib/active-view-persist.ts +++ b/src/renderer/src/lib/active-view-persist.ts @@ -1,4 +1,5 @@ -import type { PersistedUIState, TopLevelView } from '../../../shared/types' +import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' +import type { TopLevelView } from '../../../shared/ui-chrome-types' type ActiveViewUnloadState = { activeView: TopLevelView diff --git a/src/renderer/src/lib/activity-thread-display.ts b/src/renderer/src/lib/activity-thread-display.ts index f1933a06146..ea6603edeac 100644 --- a/src/renderer/src/lib/activity-thread-display.ts +++ b/src/renderer/src/lib/activity-thread-display.ts @@ -3,7 +3,8 @@ import type { AgentStatusEntry, AgentStatusState } from '../../../shared/agent-status-types' -import type { TerminalTab, Worktree } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { getAgentRowPrimaryText, isOrcaDispatchPrompt, diff --git a/src/renderer/src/lib/agent-background-draft-delivery.ts b/src/renderer/src/lib/agent-background-draft-delivery.ts index 745248f7239..6976745c30d 100644 --- a/src/renderer/src/lib/agent-background-draft-delivery.ts +++ b/src/renderer/src/lib/agent-background-draft-delivery.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { pasteDraftWhenAgentReady } from '@/lib/agent-paste-draft' import { showAutomationPromptNotSentToast } from '@/lib/agent-background-session-timeout-toast' diff --git a/src/renderer/src/lib/agent-background-session-contract.ts b/src/renderer/src/lib/agent-background-session-contract.ts index fe793aa24d3..26145d313dd 100644 --- a/src/renderer/src/lib/agent-background-session-contract.ts +++ b/src/renderer/src/lib/agent-background-session-contract.ts @@ -1,6 +1,6 @@ import type { ParsedAgentStatusPayload } from '../../../shared/agent-status-types' import type { LaunchSource } from '../../../shared/telemetry-events' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { AgentStartupPlan } from '@/lib/tui-agent-startup' import type { AutomationTerminalOwnership } from '@/lib/automation-terminal-ownership' diff --git a/src/renderer/src/lib/agent-background-session-timeout-toast.ts b/src/renderer/src/lib/agent-background-session-timeout-toast.ts index d6d2751b38a..71870958fd7 100644 --- a/src/renderer/src/lib/agent-background-session-timeout-toast.ts +++ b/src/renderer/src/lib/agent-background-session-timeout-toast.ts @@ -1,7 +1,7 @@ import { toast } from 'sonner' import { translate } from '@/i18n/i18n' import { track, tuiAgentToAgentKind } from '@/lib/telemetry' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' export function showAutomationPromptNotSentToast(agent: TuiAgent): void { toast.message( diff --git a/src/renderer/src/lib/agent-catalog.tsx b/src/renderer/src/lib/agent-catalog.tsx index ffac60fe4ca..650668bc1a0 100644 --- a/src/renderer/src/lib/agent-catalog.tsx +++ b/src/renderer/src/lib/agent-catalog.tsx @@ -1,7 +1,7 @@ import type React from 'react' import { ClaudeIcon, DroidIcon, OpenAIIcon } from '@/components/status-bar/icons' import openClaudeLogoUrl from '../../../../resources/openclaude-logo.png?url' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { getTuiAgentLaunchCommand, TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' import { AgentLetterIcon, diff --git a/src/renderer/src/lib/agent-draft-paste-content.ts b/src/renderer/src/lib/agent-draft-paste-content.ts index 526e717de27..a76086b6790 100644 --- a/src/renderer/src/lib/agent-draft-paste-content.ts +++ b/src/renderer/src/lib/agent-draft-paste-content.ts @@ -1,5 +1,5 @@ import { yieldToEventLoop } from '../../../shared/event-loop-yield' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { getUtf8ByteLengthForCodePoint, readUtf8CodePointAt diff --git a/src/renderer/src/lib/agent-draft-readiness.ts b/src/renderer/src/lib/agent-draft-readiness.ts index 248137ab313..8980f1aeb5c 100644 --- a/src/renderer/src/lib/agent-draft-readiness.ts +++ b/src/renderer/src/lib/agent-draft-readiness.ts @@ -1,5 +1,5 @@ import type { DraftPasteReadySignal } from '../../../shared/tui-agent-config' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { subscribeToPtyData } from '@/components/terminal-pane/pty-data-sidecar-subscriptions' import { isRemoteRuntimePtyId } from '@/runtime/runtime-terminal-inspection' import { subscribeToRuntimeTerminalData } from '@/runtime/runtime-terminal-stream' diff --git a/src/renderer/src/lib/agent-favicon-assets.ts b/src/renderer/src/lib/agent-favicon-assets.ts index dd1489e14bd..565437f75be 100644 --- a/src/renderer/src/lib/agent-favicon-assets.ts +++ b/src/renderer/src/lib/agent-favicon-assets.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import grokUrl from '../../../shared/agent-icons/grok.png?url' import mimoCodeUrl from '../../../shared/agent-icons/mimo-code.png?url' import anteUrl from '../../../shared/agent-icons/ante.png?url' diff --git a/src/renderer/src/lib/agent-followup-delivery.ts b/src/renderer/src/lib/agent-followup-delivery.ts index 0042cb0f2e4..bdcf0b4a92f 100644 --- a/src/renderer/src/lib/agent-followup-delivery.ts +++ b/src/renderer/src/lib/agent-followup-delivery.ts @@ -7,7 +7,7 @@ import { isExpectedAgentProcess } from '../../../shared/agent-process-recognition' import { isShellProcess } from '../../../shared/shell-process-detection' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' type RuntimeOwnerSettings = Pick | null | undefined diff --git a/src/renderer/src/lib/agent-hibernation-coordinator.test.ts b/src/renderer/src/lib/agent-hibernation-coordinator.test.ts index e6b7d41951f..f87c59591b6 100644 --- a/src/renderer/src/lib/agent-hibernation-coordinator.test.ts +++ b/src/renderer/src/lib/agent-hibernation-coordinator.test.ts @@ -2,7 +2,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { useAppStore } from '@/store' import { DEFAULT_AGENT_HIBERNATION_IDLE_MS } from './agent-hibernation-planner' import { diff --git a/src/renderer/src/lib/agent-hibernation-planner.test.ts b/src/renderer/src/lib/agent-hibernation-planner.test.ts index 4c3a550642f..f825fc9758d 100644 --- a/src/renderer/src/lib/agent-hibernation-planner.test.ts +++ b/src/renderer/src/lib/agent-hibernation-planner.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { AgentStatusEntry } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { DEFAULT_AGENT_HIBERNATION_IDLE_MS, MAX_AGENT_HIBERNATION_IDLE_MS, diff --git a/src/renderer/src/lib/agent-hibernation-planner.ts b/src/renderer/src/lib/agent-hibernation-planner.ts index f5631ffc8ed..c350296d9b3 100644 --- a/src/renderer/src/lib/agent-hibernation-planner.ts +++ b/src/renderer/src/lib/agent-hibernation-planner.ts @@ -7,7 +7,8 @@ import { import { parsePaneKey } from '../../../shared/stable-pane-id' import { lastInputBlocksHibernation } from './agent-hibernation-input-guard' import { isCompletedPiCompatibleAgentWithLiveRecoveryRecord } from './pi-compatible-live-recovery-record' -import type { GlobalSettings, TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { parseRemoteRuntimePtyId } from '@/runtime/runtime-terminal-stream' export const DEFAULT_AGENT_HIBERNATION_IDLE_MS = 30 * 60 * 1000 diff --git a/src/renderer/src/lib/agent-launch-prompt-delivery.ts b/src/renderer/src/lib/agent-launch-prompt-delivery.ts index de76c6f4d14..87680462cce 100644 --- a/src/renderer/src/lib/agent-launch-prompt-delivery.ts +++ b/src/renderer/src/lib/agent-launch-prompt-delivery.ts @@ -3,7 +3,7 @@ import { pasteDraftWhenAgentReady } from '@/lib/agent-paste-draft' import { canMirrorLaunchDraftToNativeChat } from '@/lib/native-chat-launch-draft-mirrorability' import { isNativeChatSupportedAgent } from '@/lib/native-chat-supported-agent' import { useAppStore } from '@/store' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' /** Seed the chat-composer copy of launch context that reaches only the TUI * input (argv prefill or startup paste). No-op for agents without a diff --git a/src/renderer/src/lib/agent-native-draft-prefill.ts b/src/renderer/src/lib/agent-native-draft-prefill.ts index 797b25e7827..750f68c39ca 100644 --- a/src/renderer/src/lib/agent-native-draft-prefill.ts +++ b/src/renderer/src/lib/agent-native-draft-prefill.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' // Why: agents with a native draft-prefill flag/env launch with the prompt diff --git a/src/renderer/src/lib/agent-paste-draft.ts b/src/renderer/src/lib/agent-paste-draft.ts index 4e53f4ac102..1275535b93f 100644 --- a/src/renderer/src/lib/agent-paste-draft.ts +++ b/src/renderer/src/lib/agent-paste-draft.ts @@ -1,4 +1,5 @@ -import type { TuiAgent, GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' import { useAppStore } from '@/store' import { diff --git a/src/renderer/src/lib/agent-session-continuation.ts b/src/renderer/src/lib/agent-session-continuation.ts index 2747f001cfd..3e910fd5d36 100644 --- a/src/renderer/src/lib/agent-session-continuation.ts +++ b/src/renderer/src/lib/agent-session-continuation.ts @@ -1,6 +1,6 @@ import { buildBoundedSessionTranscript } from '@/lib/agent-session-fork-context' import type { LaunchSource } from '../../../shared/telemetry-events' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' export type AgentSessionContinuationContextMode = 'focused' | 'full' diff --git a/src/renderer/src/lib/agent-status-count.test.ts b/src/renderer/src/lib/agent-status-count.test.ts index dac9294b3e3..1bc880af293 100644 --- a/src/renderer/src/lib/agent-status-count.test.ts +++ b/src/renderer/src/lib/agent-status-count.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab, Worktree } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { countWorkingAgents, getWorkingAgentsPerWorktree } from './agent-status' function makeTab(overrides: Partial = {}): TerminalTab { diff --git a/src/renderer/src/lib/agent-status.ts b/src/renderer/src/lib/agent-status.ts index 11d966cb8bf..94933a05bff 100644 --- a/src/renderer/src/lib/agent-status.ts +++ b/src/renderer/src/lib/agent-status.ts @@ -1,4 +1,6 @@ -import type { TerminalTab, TuiAgent, Worktree } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { Worktree } from '../../../shared/worktree/types' import type { AgentStatusState, AgentType } from '../../../shared/agent-status-types' import { tabHasLivePty } from './tab-has-live-pty' import type { WorktreeStatus } from './worktree-status' diff --git a/src/renderer/src/lib/agent-tab-shortcuts.ts b/src/renderer/src/lib/agent-tab-shortcuts.ts index f3fac9912bd..55995d88064 100644 --- a/src/renderer/src/lib/agent-tab-shortcuts.ts +++ b/src/renderer/src/lib/agent-tab-shortcuts.ts @@ -5,7 +5,7 @@ import { } from '../../../shared/keybindings' import { ALL_TUI_AGENTS } from '../../../shared/tui-agent-display-names' import { normalizeDisabledTuiAgents, pickTuiAgent } from '../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' export type BoundAgentTabAction = { agent: TuiAgent diff --git a/src/renderer/src/lib/ai-vault-resume-target.ts b/src/renderer/src/lib/ai-vault-resume-target.ts index 2cab097ca3d..fffc0c8c4bd 100644 --- a/src/renderer/src/lib/ai-vault-resume-target.ts +++ b/src/renderer/src/lib/ai-vault-resume-target.ts @@ -6,7 +6,7 @@ import { toSshExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { isWslUncPath } from '../../../shared/wsl-paths' diff --git a/src/renderer/src/lib/ai-vault-tab-title-requests.ts b/src/renderer/src/lib/ai-vault-tab-title-requests.ts index a5a6de5bdd9..1efeb48e001 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-requests.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-requests.ts @@ -4,7 +4,7 @@ import type { AiVaultSessionTitle } from '../../../shared/ai-vault-session-title import { isAiVaultTitleAgent } from '../../../shared/ai-vault-session-title' import type { ExecutionHostId } from '../../../shared/execution-host' import { parsePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { getExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts index 5693b57cdd3..569d79b0dc8 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-sync-inputs.ts @@ -1,6 +1,6 @@ import type { AgentProviderSessionMetadata } from '../../../shared/agent-session-resume' import { isAiVaultTitleAgent } from '../../../shared/ai-vault-session-title' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { getExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import type { AppState } from '@/store/types' import { collectAiVaultTitleRequests } from './ai-vault-tab-title-requests' diff --git a/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts b/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts index 26cecdd0014..a062b9df906 100644 --- a/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts +++ b/src/renderer/src/lib/ai-vault-tab-title-sync.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' import type { AiVaultSessionTitlesResult } from '../../../shared/ai-vault-session-title' import { resolveTerminalTabTitle } from '../../../shared/tab-title-resolution' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { collectAiVaultTitleRequests, type AiVaultTitleRequest diff --git a/src/renderer/src/lib/automation-session-reuse.ts b/src/renderer/src/lib/automation-session-reuse.ts index 0d5c22049d6..0672a86872a 100644 --- a/src/renderer/src/lib/automation-session-reuse.ts +++ b/src/renderer/src/lib/automation-session-reuse.ts @@ -1,6 +1,6 @@ import type { AgentStatusEntry } from '../../../shared/agent-status-types' import type { AutomationRun } from '../../../shared/automations-types' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { parsePaneKey } from '../../../shared/stable-pane-id' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/lib/automation-terminal-ownership.ts b/src/renderer/src/lib/automation-terminal-ownership.ts index 1cf0c9a4742..9b6ec37d77b 100644 --- a/src/renderer/src/lib/automation-terminal-ownership.ts +++ b/src/renderer/src/lib/automation-terminal-ownership.ts @@ -1,6 +1,6 @@ import { useAppStore } from '@/store' import type { AppState } from '@/store/types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { parsePaneKey } from '../../../shared/stable-pane-id' import { singlePaneLayoutSnapshot } from '@/store/slices/terminal-helpers' import { readLastTerminalInputAt } from './terminal-input-activity-coalescing' diff --git a/src/renderer/src/lib/browser-cookie-import-toast.test.ts b/src/renderer/src/lib/browser-cookie-import-toast.test.ts index 40f2800102e..3479887b419 100644 --- a/src/renderer/src/lib/browser-cookie-import-toast.test.ts +++ b/src/renderer/src/lib/browser-cookie-import-toast.test.ts @@ -9,7 +9,7 @@ vi.mock('sonner', () => ({ toast: { success: successToastMock, warning: warningToastMock } })) -import type { BrowserCookieImportSummary } from '../../../shared/types' +import type { BrowserCookieImportSummary } from '../../../shared/browser-workspace-types' import { emitBrowserCookieImportToast } from './browser-cookie-import-toast' const summary: BrowserCookieImportSummary = { diff --git a/src/renderer/src/lib/browser-cookie-import-toast.ts b/src/renderer/src/lib/browser-cookie-import-toast.ts index ced4c3cfdbd..9e18e3c96c8 100644 --- a/src/renderer/src/lib/browser-cookie-import-toast.ts +++ b/src/renderer/src/lib/browser-cookie-import-toast.ts @@ -1,5 +1,5 @@ import { toast } from 'sonner' -import type { BrowserCookieImportSummary } from '../../../shared/types' +import type { BrowserCookieImportSummary } from '../../../shared/browser-workspace-types' import { translate } from '@/i18n/i18n' type CookieImportWarning = NonNullable diff --git a/src/renderer/src/lib/browser-page-palette-activation.test.ts b/src/renderer/src/lib/browser-page-palette-activation.test.ts index d2264698c02..97dbf66ef77 100644 --- a/src/renderer/src/lib/browser-page-palette-activation.test.ts +++ b/src/renderer/src/lib/browser-page-palette-activation.test.ts @@ -1,14 +1,10 @@ // @vitest-environment happy-dom import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { - BrowserPage, - BrowserWorkspace, - FolderWorkspace, - Tab, - TabGroup, - Worktree -} from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { ORCA_BROWSER_BLANK_URL } from '../../../shared/constants' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { useAppStore } from '@/store' diff --git a/src/renderer/src/lib/browser-palette-page-entries.test.ts b/src/renderer/src/lib/browser-palette-page-entries.test.ts index 6fefc35b51b..f367ac85e73 100644 --- a/src/renderer/src/lib/browser-palette-page-entries.test.ts +++ b/src/renderer/src/lib/browser-palette-page-entries.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { BrowserPage, BrowserWorkspace, Worktree } from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import { buildSearchableBrowserPages } from './browser-palette-page-entries' import { searchBrowserPages } from './browser-palette-search' diff --git a/src/renderer/src/lib/browser-palette-page-entries.ts b/src/renderer/src/lib/browser-palette-page-entries.ts index 05e30a0d806..226180597ef 100644 --- a/src/renderer/src/lib/browser-palette-page-entries.ts +++ b/src/renderer/src/lib/browser-palette-page-entries.ts @@ -1,4 +1,5 @@ -import type { BrowserPage, BrowserWorkspace, Worktree } from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import type { SearchableBrowserPage } from './browser-palette-search' type BrowserPaletteActiveTabType = 'browser' | 'editor' | 'terminal' | 'simulator' diff --git a/src/renderer/src/lib/browser-palette-search.test.ts b/src/renderer/src/lib/browser-palette-search.test.ts index 23cf0196984..2eb66623abd 100644 --- a/src/renderer/src/lib/browser-palette-search.test.ts +++ b/src/renderer/src/lib/browser-palette-search.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { BrowserPage, BrowserWorkspace, Worktree } from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import { BROWSER_PALETTE_QUERY_MAX_BYTES, searchBrowserPages, diff --git a/src/renderer/src/lib/browser-palette-search.ts b/src/renderer/src/lib/browser-palette-search.ts index 7c76e9f9ead..4bcb044fb5e 100644 --- a/src/renderer/src/lib/browser-palette-search.ts +++ b/src/renderer/src/lib/browser-palette-search.ts @@ -1,5 +1,6 @@ import { ORCA_BROWSER_BLANK_URL } from '../../../shared/constants' -import type { BrowserPage, BrowserWorkspace, Worktree } from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' import { compareBaseSensitivityLocaleText } from './locale-text-collators' import { resolveWorktreeDisplayName } from './worktree-default-display-name' diff --git a/src/renderer/src/lib/cmd-j-github-url-lookup.test.ts b/src/renderer/src/lib/cmd-j-github-url-lookup.test.ts index 82b533c859d..790122e0d2f 100644 --- a/src/renderer/src/lib/cmd-j-github-url-lookup.test.ts +++ b/src/renderer/src/lib/cmd-j-github-url-lookup.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { GitHubWorkItem } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' const { lookupGitHubWorkItemByOwnerRepoForSource } = vi.hoisted(() => ({ lookupGitHubWorkItemByOwnerRepoForSource: vi.fn() diff --git a/src/renderer/src/lib/cmd-j-github-url-lookup.ts b/src/renderer/src/lib/cmd-j-github-url-lookup.ts index ba7fcc03d5a..260e74afa7c 100644 --- a/src/renderer/src/lib/cmd-j-github-url-lookup.ts +++ b/src/renderer/src/lib/cmd-j-github-url-lookup.ts @@ -1,5 +1,6 @@ import type { GitHubIssueOrPRLink } from '../../../shared/github/links' -import type { GitHubWorkItem, Repo } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { Repo } from '../../../shared/repo-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { lookupGitHubWorkItemByOwnerRepoForSource } from './github-work-item-source-lookup' diff --git a/src/renderer/src/lib/cmd-j-match-relevance.test.ts b/src/renderer/src/lib/cmd-j-match-relevance.test.ts index 07711ac97bc..ee4d2f74263 100644 --- a/src/renderer/src/lib/cmd-j-match-relevance.test.ts +++ b/src/renderer/src/lib/cmd-j-match-relevance.test.ts @@ -6,7 +6,7 @@ import { scorePaletteRelevance } from './cmd-j-match-relevance' import type { PaletteSearchResult } from './worktree-palette-search' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' function makeWorktree(overrides: Partial = {}): Worktree { return { diff --git a/src/renderer/src/lib/cmd-j-match-relevance.ts b/src/renderer/src/lib/cmd-j-match-relevance.ts index 44015d0d4f1..58e77d3fe9c 100644 --- a/src/renderer/src/lib/cmd-j-match-relevance.ts +++ b/src/renderer/src/lib/cmd-j-match-relevance.ts @@ -3,7 +3,7 @@ import { resolveWorktreeDisplayName } from './worktree-default-display-name' import type { MatchRange, PaletteSearchResult } from './worktree-palette-search' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' // Why: worktrees and open tabs are searched by separate scorers whose scales encode list position, // so neither can say which section holds the better hit. Relevance is the one shared scale: which diff --git a/src/renderer/src/lib/codex-pane-restart-eligibility.ts b/src/renderer/src/lib/codex-pane-restart-eligibility.ts index dc9f63b6f7b..f986408c5dd 100644 --- a/src/renderer/src/lib/codex-pane-restart-eligibility.ts +++ b/src/renderer/src/lib/codex-pane-restart-eligibility.ts @@ -3,7 +3,7 @@ import { recognizeAgentProcess } from '../../../shared/agent-process-recognition' import { isShellProcess } from '../../../shared/shell-process-detection' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { RuntimeTerminalProcessInspection } from '@/runtime/runtime-terminal-inspection' function normalizeProcessName(processName: string | null): string | null { diff --git a/src/renderer/src/lib/codex-pane-selection-lane.ts b/src/renderer/src/lib/codex-pane-selection-lane.ts index e6c8a6877da..56ea2108074 100644 --- a/src/renderer/src/lib/codex-pane-selection-lane.ts +++ b/src/renderer/src/lib/codex-pane-selection-lane.ts @@ -14,7 +14,8 @@ import { } from '../../../shared/local-windows-terminal-runtime' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' import { resolveTerminalStartupCwd } from '../../../shared/terminal-startup-cwd' -import type { GlobalSettings, TerminalTab } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { parseWslUncPath } from '../../../shared/wsl-paths' import { getLocalProjectExecutionRuntimeContext } from './local-preflight-context' diff --git a/src/renderer/src/lib/codex-session-restart.test.ts b/src/renderer/src/lib/codex-session-restart.test.ts index 0f659aa2521..93bde5ed353 100644 --- a/src/renderer/src/lib/codex-session-restart.test.ts +++ b/src/renderer/src/lib/codex-session-restart.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import { shouldUseShellReadyStartupDelivery } from '../../../shared/codex-startup-delivery' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { CODEX_ACCOUNT_RESTART_STARTUP, markLiveCodexSessionsForRestart, diff --git a/src/renderer/src/lib/codex-session-restart.ts b/src/renderer/src/lib/codex-session-restart.ts index 4b3ed2e43b2..01d6a5fab00 100644 --- a/src/renderer/src/lib/codex-session-restart.ts +++ b/src/renderer/src/lib/codex-session-restart.ts @@ -18,7 +18,7 @@ import { resolveCodexPaneSelectionLane } from './codex-pane-selection-lane' import type { CodexAccountSelectionTarget } from '../../../shared/codex-selection-lane' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' // Why: prompt integrations such as Starship can outlast the daemon's 300ms // Codex fast-path timeout; account restarts must wait until the shell accepts input. diff --git a/src/renderer/src/lib/composer-issue-command.ts b/src/renderer/src/lib/composer-issue-command.ts index ddb841bb7ea..3ac90dcda7b 100644 --- a/src/renderer/src/lib/composer-issue-command.ts +++ b/src/renderer/src/lib/composer-issue-command.ts @@ -3,7 +3,7 @@ import { canUseIssueCommandForLinkedItemProvider, renderIssueCommandTemplate } from '@/lib/new-workspace' -import type { FolderWorkspaceLinkedTask } from '../../../shared/types' +import type { FolderWorkspaceLinkedTask } from '../../../shared/folder-workspace-types' type ComposerIssueCommandInput = { enabled: boolean diff --git a/src/renderer/src/lib/connection-context.test.ts b/src/renderer/src/lib/connection-context.test.ts index 27bfbe3a77a..2ef70ba95e2 100644 --- a/src/renderer/src/lib/connection-context.test.ts +++ b/src/renderer/src/lib/connection-context.test.ts @@ -1,5 +1,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { diff --git a/src/renderer/src/lib/create-untitled-markdown.ts b/src/renderer/src/lib/create-untitled-markdown.ts index fc9ff482f06..01c4b7f9a28 100644 --- a/src/renderer/src/lib/create-untitled-markdown.ts +++ b/src/renderer/src/lib/create-untitled-markdown.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { createRuntimePath, deleteRuntimePath, diff --git a/src/renderer/src/lib/diff-comment-compat.test.ts b/src/renderer/src/lib/diff-comment-compat.test.ts index 48b6e3b22b3..7ab54e94b83 100644 --- a/src/renderer/src/lib/diff-comment-compat.test.ts +++ b/src/renderer/src/lib/diff-comment-compat.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { getDiffCommentLineLabel, getDiffCommentSource, diff --git a/src/renderer/src/lib/diff-comment-compat.ts b/src/renderer/src/lib/diff-comment-compat.ts index ed88baf0dd0..2f1ab95ed2a 100644 --- a/src/renderer/src/lib/diff-comment-compat.ts +++ b/src/renderer/src/lib/diff-comment-compat.ts @@ -1,4 +1,4 @@ -import type { DiffComment, DiffCommentSource } from '../../../shared/types' +import type { DiffComment, DiffCommentSource } from '../../../shared/diff-comment-types' export function getDiffCommentSource(comment: Pick): DiffCommentSource { return comment.source === 'markdown' ? 'markdown' : 'diff' diff --git a/src/renderer/src/lib/diff-comments-format.test.ts b/src/renderer/src/lib/diff-comments-format.test.ts index cc3e0256c6b..eaf840f755f 100644 --- a/src/renderer/src/lib/diff-comments-format.test.ts +++ b/src/renderer/src/lib/diff-comments-format.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest' -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { formatDiffComment, formatDiffComments } from './diff-comments-format' function makeComment(overrides: Partial = {}): DiffComment { diff --git a/src/renderer/src/lib/direct-ssh-target-scope-types.ts b/src/renderer/src/lib/direct-ssh-target-scope-types.ts index 1c12e0a25c5..068e723bb9d 100644 --- a/src/renderer/src/lib/direct-ssh-target-scope-types.ts +++ b/src/renderer/src/lib/direct-ssh-target-scope-types.ts @@ -1,10 +1,7 @@ -import type { - FolderWorkspace, - ProjectGroup, - Repo, - WorkspaceKey, - Worktree -} from '../../../shared/types' +import type { FolderWorkspace, WorkspaceKey } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' export type DirectSshGitRepoRef = { repoId: string diff --git a/src/renderer/src/lib/document-theme.ts b/src/renderer/src/lib/document-theme.ts index 1880a6e0af0..dc0cbc4eb87 100644 --- a/src/renderer/src/lib/document-theme.ts +++ b/src/renderer/src/lib/document-theme.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' export type DocumentThemePreference = GlobalSettings['theme'] diff --git a/src/renderer/src/lib/duplicate-browser-tab-options.ts b/src/renderer/src/lib/duplicate-browser-tab-options.ts index e2a41c80df8..6b24b2b0417 100644 --- a/src/renderer/src/lib/duplicate-browser-tab-options.ts +++ b/src/renderer/src/lib/duplicate-browser-tab-options.ts @@ -1,4 +1,4 @@ -import type { BrowserTab } from '../../../shared/types' +import type { BrowserTab } from '../../../shared/browser-workspace-types' export function buildDuplicatedBrowserTabOptions( source: Pick diff --git a/src/renderer/src/lib/emulator-right-split-target.ts b/src/renderer/src/lib/emulator-right-split-target.ts index 5d19b0d4e9a..f173a2e155f 100644 --- a/src/renderer/src/lib/emulator-right-split-target.ts +++ b/src/renderer/src/lib/emulator-right-split-target.ts @@ -1,4 +1,4 @@ -import type { TabGroupLayoutNode } from '../../../shared/types' +import type { TabGroupLayoutNode } from '../../../shared/tab-types' type SearchResult = { containsSource: boolean diff --git a/src/renderer/src/lib/ensure-hooks-confirmed.test.ts b/src/renderer/src/lib/ensure-hooks-confirmed.test.ts index bbfbe637cb7..b21f0f39c4c 100644 --- a/src/renderer/src/lib/ensure-hooks-confirmed.test.ts +++ b/src/renderer/src/lib/ensure-hooks-confirmed.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { AppState } from '@/store/types' -import type { PersistedTrustedOrcaHooks } from '../../../shared/types' +import type { PersistedTrustedOrcaHooks } from '../../../shared/orca-yaml-hook-types' import { __resetTrustPromptChainForTests, ensureHooksConfirmed, diff --git a/src/renderer/src/lib/ensure-hooks-confirmed.ts b/src/renderer/src/lib/ensure-hooks-confirmed.ts index c98638deddf..8128e9ae8a0 100644 --- a/src/renderer/src/lib/ensure-hooks-confirmed.ts +++ b/src/renderer/src/lib/ensure-hooks-confirmed.ts @@ -1,5 +1,5 @@ import type { AppState } from '@/store/types' -import type { OrcaHooks } from '../../../shared/types' +import type { OrcaHooks } from '../../../shared/orca-yaml-hook-types' import { resolveHookCommandSourcePolicy } from '../../../shared/hook-command-source-policy' import { hashOrcaHookScript, type OrcaHookScriptKind } from './orca-hook-trust' import { diff --git a/src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts b/src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts index 2a3ab2fefb8..da25a8669eb 100644 --- a/src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts +++ b/src/renderer/src/lib/ephemeral-vm-workspace-target.test.ts @@ -3,7 +3,7 @@ import { prepareEphemeralVmWorkspaceTarget, type PrepareEphemeralVmWorkspaceTargetArgs } from './ephemeral-vm-workspace-target' -import type { ProjectHostSetupResult } from '../../../shared/types' +import type { ProjectHostSetupResult } from '../../../shared/project-types' vi.mock('@/runtime/runtime-rpc-client', () => ({ assertRuntimeEnvironmentCapability: vi.fn() diff --git a/src/renderer/src/lib/ephemeral-vm-workspace-target.ts b/src/renderer/src/lib/ephemeral-vm-workspace-target.ts index fc588d667be..eab9af1ccf4 100644 --- a/src/renderer/src/lib/ephemeral-vm-workspace-target.ts +++ b/src/renderer/src/lib/ephemeral-vm-workspace-target.ts @@ -2,7 +2,7 @@ import { toRuntimeExecutionHostId, toSshExecutionHostId } from '../../../shared/ import type { ProjectHostSetupExistingFolderArgs, ProjectHostSetupResult -} from '../../../shared/types' +} from '../../../shared/project-types' import { getEphemeralVmRecipeResultCheckoutMode, getEphemeralVmRecipeResultProjectRoot diff --git a/src/renderer/src/lib/ephemeral-vm-worktree-creation.ts b/src/renderer/src/lib/ephemeral-vm-worktree-creation.ts index b8f0bd9ba96..8c32bb275bd 100644 --- a/src/renderer/src/lib/ephemeral-vm-worktree-creation.ts +++ b/src/renderer/src/lib/ephemeral-vm-worktree-creation.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import { prepareEphemeralVmWorkspaceTarget } from '@/lib/ephemeral-vm-workspace-target' import type { WorktreeCreationRequest } from '@/lib/pending-worktree-creation' import { getProjectIdentityKey } from '../../../shared/project-host-setup-projection' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { translate } from '@/i18n/i18n' import { cleanupFailedEphemeralVmWorkspace } from '@/lib/ephemeral-vm-failed-create-cleanup' diff --git a/src/renderer/src/lib/external-editor-open-capability.ts b/src/renderer/src/lib/external-editor-open-capability.ts index bab7547b9b8..459c8c0061b 100644 --- a/src/renderer/src/lib/external-editor-open-capability.ts +++ b/src/renderer/src/lib/external-editor-open-capability.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { isVsCodeRemoteSshCommand } from '../../../shared/vscode-remote-ssh-launcher' export type ExternalEditorOpenCapability = diff --git a/src/renderer/src/lib/file-search-result-owner.ts b/src/renderer/src/lib/file-search-result-owner.ts index b2c719f245a..d352ad34246 100644 --- a/src/renderer/src/lib/file-search-result-owner.ts +++ b/src/renderer/src/lib/file-search-result-owner.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' export type FileSearchResultOwner = { worktreeId: string diff --git a/src/renderer/src/lib/fix-checks-agent-launch.ts b/src/renderer/src/lib/fix-checks-agent-launch.ts index 49ad2ccb856..5c6cd7ffca1 100644 --- a/src/renderer/src/lib/fix-checks-agent-launch.ts +++ b/src/renderer/src/lib/fix-checks-agent-launch.ts @@ -20,11 +20,9 @@ import { renderSourceControlActionCommandTemplate } from '../../../shared/source-control-ai-actions' import { isTuiAgentEnabled } from '../../../shared/tui-agent-selection' -import type { - GitHubWorkItem, - TuiAgent, - WorkspaceCreateTelemetrySource -} from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../shared/workspace-source' import type { LaunchSource } from '../../../shared/telemetry-events' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/lib/floating-workspace-tab-creation.ts b/src/renderer/src/lib/floating-workspace-tab-creation.ts index 58a22ad9320..a443c572106 100644 --- a/src/renderer/src/lib/floating-workspace-tab-creation.ts +++ b/src/renderer/src/lib/floating-workspace-tab-creation.ts @@ -1,5 +1,6 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { BrowserTab, TerminalTab } from '../../../shared/types' +import type { BrowserTab } from '../../../shared/browser-workspace-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { createUntitledMarkdownFileWithTemplateSelection } from './create-untitled-markdown' import { getConnectionId } from './connection-context' import { detectLanguage } from './language-detect' diff --git a/src/renderer/src/lib/floating-workspace-terminal-actions.test.ts b/src/renderer/src/lib/floating-workspace-terminal-actions.test.ts index 2c556a4c32e..7f2a79ed9a7 100644 --- a/src/renderer/src/lib/floating-workspace-terminal-actions.test.ts +++ b/src/renderer/src/lib/floating-workspace-terminal-actions.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { Tab, TerminalTab } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { createFloatingWorkspaceBrowserTab, createFloatingWorkspaceMarkdownTab, diff --git a/src/renderer/src/lib/floating-workspace-terminal-actions.ts b/src/renderer/src/lib/floating-workspace-terminal-actions.ts index d1133e7fcfa..484143160d9 100644 --- a/src/renderer/src/lib/floating-workspace-terminal-actions.ts +++ b/src/renderer/src/lib/floating-workspace-terminal-actions.ts @@ -1,5 +1,6 @@ import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { BrowserTab, TabGroup } from '../../../shared/types' +import type { BrowserTab } from '../../../shared/browser-workspace-types' +import type { TabGroup } from '../../../shared/tab-types' import { getGroupVisibleTabOrder } from '@/components/tab-bar/group-tab-order' import { getNextTabAcrossAllTypes, diff --git a/src/renderer/src/lib/folder-workspace-connection.ts b/src/renderer/src/lib/folder-workspace-connection.ts index 2c9376fc284..7edfbeedf32 100644 --- a/src/renderer/src/lib/folder-workspace-connection.ts +++ b/src/renderer/src/lib/folder-workspace-connection.ts @@ -1,4 +1,6 @@ -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' import { isPathInsideOrEqual } from '../../../shared/cross-platform-path' import { getProjectGroupSubtreeIds } from '../../../shared/project-groups' import { parseExecutionHostId } from '../../../shared/execution-host' diff --git a/src/renderer/src/lib/folder-workspace-runtime-owner.ts b/src/renderer/src/lib/folder-workspace-runtime-owner.ts index fce08c49302..b9b0266ff07 100644 --- a/src/renderer/src/lib/folder-workspace-runtime-owner.ts +++ b/src/renderer/src/lib/folder-workspace-runtime-owner.ts @@ -1,6 +1,7 @@ import { parseExecutionHostId, toSshExecutionHostId } from '../../../shared/execution-host' import type { ExecutionHostId, ParsedExecutionHost } from '../../../shared/execution-host' -import type { FolderWorkspace, ProjectGroup } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { findIndexedFolderWorkspaceOwner, diff --git a/src/renderer/src/lib/github-pr-start-point.ts b/src/renderer/src/lib/github-pr-start-point.ts index a0ded7900b8..3984bf32cf3 100644 --- a/src/renderer/src/lib/github-pr-start-point.ts +++ b/src/renderer/src/lib/github-pr-start-point.ts @@ -1,5 +1,6 @@ import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' -import type { GitHubPrStartPoint, GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { GitHubPrStartPoint } from '../../../shared/worktree/types' type PrStartPointSettings = Pick | null | undefined diff --git a/src/renderer/src/lib/github-source-runtime-context.ts b/src/renderer/src/lib/github-source-runtime-context.ts index c36598e3420..0267497f0b7 100644 --- a/src/renderer/src/lib/github-source-runtime-context.ts +++ b/src/renderer/src/lib/github-source-runtime-context.ts @@ -2,7 +2,7 @@ import type { ParsedExecutionHost } from '../../../shared/execution-host' import { parseExecutionHostId } from '../../../shared/execution-host' import type { TaskSourceContext } from '../../../shared/task-source-context' import { getTaskSourceRuntimeSettings } from '../../../shared/task-source-context' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RuntimeClientTarget } from '@/runtime/runtime-rpc-client' import { getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import { diff --git a/src/renderer/src/lib/github-work-item-source-lookup.ts b/src/renderer/src/lib/github-work-item-source-lookup.ts index 046c4af0790..5a49e15ba83 100644 --- a/src/renderer/src/lib/github-work-item-source-lookup.ts +++ b/src/renderer/src/lib/github-work-item-source-lookup.ts @@ -1,4 +1,4 @@ -import type { GitHubWorkItem, GitHubWorkItemDetails } from '../../../shared/types' +import type { GitHubWorkItem, GitHubWorkItemDetails } from '../../../shared/github/work-item-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { callRuntimeRpc } from '@/runtime/runtime-rpc-client' import { diff --git a/src/renderer/src/lib/github-work-item-workspace-attachment.test.ts b/src/renderer/src/lib/github-work-item-workspace-attachment.test.ts index f0cae1ba204..f52808dc8e0 100644 --- a/src/renderer/src/lib/github-work-item-workspace-attachment.test.ts +++ b/src/renderer/src/lib/github-work-item-workspace-attachment.test.ts @@ -7,7 +7,7 @@ import { getGithubWorkItemWorkspaceAttachmentLabel, getGithubPrWorkspaceAttachmentLabel } from './github-work-item-workspace-attachment' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' function worktree(overrides: Partial = {}): Worktree { return { diff --git a/src/renderer/src/lib/github-work-item-workspace-attachment.ts b/src/renderer/src/lib/github-work-item-workspace-attachment.ts index 7a31c32a743..283260913d8 100644 --- a/src/renderer/src/lib/github-work-item-workspace-attachment.ts +++ b/src/renderer/src/lib/github-work-item-workspace-attachment.ts @@ -1,4 +1,5 @@ -import type { GitHubWorkItem, Worktree } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { Worktree } from '../../../shared/worktree/types' import { getWorktreeAttachmentLabel } from './worktree-attachment-label' type GitHubWorkItemType = GitHubWorkItem['type'] diff --git a/src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts b/src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts index 82d9b82628f..88c37cf128c 100644 --- a/src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts +++ b/src/renderer/src/lib/gitlab-work-item-source-lookup.test.ts @@ -5,7 +5,7 @@ import { listGitLabMRsForSource, lookupGitLabWorkItemByPathForSource } from './gitlab-work-item-source-lookup' -import type { GitLabWorkItem, ListMergeRequestsResult } from '../../../shared/types' +import type { GitLabWorkItem, ListMergeRequestsResult } from '../../../shared/gitlab-types' import type { TaskSourceContext } from '../../../shared/task-source-context' vi.mock('@/runtime/runtime-rpc-client', async () => { diff --git a/src/renderer/src/lib/gitlab-work-item-source-lookup.ts b/src/renderer/src/lib/gitlab-work-item-source-lookup.ts index 911997a82f9..c848a84b771 100644 --- a/src/renderer/src/lib/gitlab-work-item-source-lookup.ts +++ b/src/renderer/src/lib/gitlab-work-item-source-lookup.ts @@ -1,4 +1,4 @@ -import type { GitLabWorkItem, ListMergeRequestsResult } from '../../../shared/types' +import type { GitLabWorkItem, ListMergeRequestsResult } from '../../../shared/gitlab-types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { getTaskSourceRuntimeSettings } from '../../../shared/task-source-context' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' diff --git a/src/renderer/src/lib/http-link-routing.ts b/src/renderer/src/lib/http-link-routing.ts index 3295183d504..0699a7f6300 100644 --- a/src/renderer/src/lib/http-link-routing.ts +++ b/src/renderer/src/lib/http-link-routing.ts @@ -4,7 +4,7 @@ import { parseLoopbackUrlWithPort, type LocalhostWorktreeLabelRoute } from '../../../shared/localhost-worktree-labels' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { WorkspacePort, WorkspacePortScanResult } from '../../../shared/workspace-ports' import { toast } from 'sonner' diff --git a/src/renderer/src/lib/launch-agent-in-new-tab.ts b/src/renderer/src/lib/launch-agent-in-new-tab.ts index 58e36fd4a33..d46cb530bd6 100644 --- a/src/renderer/src/lib/launch-agent-in-new-tab.ts +++ b/src/renderer/src/lib/launch-agent-in-new-tab.ts @@ -24,7 +24,7 @@ import { resolveLocalWindowsAgentStartupShell } from '../../../shared/windows-te import { TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' import { repoIsRemote } from '../../../shared/agent-launch-remote' import { seedCommandCodeSubmittedPromptStatus } from '@/lib/command-code-prompt-status-seed' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { LaunchSource } from '../../../shared/telemetry-events' import { getConnectionIdFromState } from '@/lib/connection-context' import { resolveInitialNativeChatSessionOptions } from '@/components/native-chat/native-chat-launch-session-options' diff --git a/src/renderer/src/lib/launch-agent-paste-timeout-notice.ts b/src/renderer/src/lib/launch-agent-paste-timeout-notice.ts index a99371f9647..f72f5b8b3b7 100644 --- a/src/renderer/src/lib/launch-agent-paste-timeout-notice.ts +++ b/src/renderer/src/lib/launch-agent-paste-timeout-notice.ts @@ -2,7 +2,7 @@ import { toast } from 'sonner' import { useAppStore } from '@/store' import { track, tuiAgentToAgentKind } from '@/lib/telemetry' import { translate } from '@/i18n/i18n' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' /** * Notice for a post-launch paste that never landed — a stalled readiness wait diff --git a/src/renderer/src/lib/launch-agent-session-continuation.ts b/src/renderer/src/lib/launch-agent-session-continuation.ts index 9b73a3852ee..a1eb70dc0d5 100644 --- a/src/renderer/src/lib/launch-agent-session-continuation.ts +++ b/src/renderer/src/lib/launch-agent-session-continuation.ts @@ -7,7 +7,7 @@ import { useAppStore } from '@/store' import { isTuiAgentEnabled } from '../../../shared/tui-agent-selection' import { TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' import type { LaunchSource } from '../../../shared/telemetry-events' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { translate } from '@/i18n/i18n' type LaunchAgentSessionContinuationArgs = { diff --git a/src/renderer/src/lib/launch-agent-web-host-tab.ts b/src/renderer/src/lib/launch-agent-web-host-tab.ts index eb5421bdb86..528798d424d 100644 --- a/src/renderer/src/lib/launch-agent-web-host-tab.ts +++ b/src/renderer/src/lib/launch-agent-web-host-tab.ts @@ -7,7 +7,8 @@ import { isWebTerminalSurfaceTabId } from '@/runtime/web-runtime-session' import type { AgentStartupPlan } from '@/lib/tui-agent-startup' -import type { Tab, TuiAgent } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { AgentPromptDelivery } from '../../../shared/agent-session-host-authority' import { translate } from '@/i18n/i18n' import { toAgentLaunchPreferences } from '@/runtime/agent-session-create-operation' diff --git a/src/renderer/src/lib/launch-work-item-direct-agent.ts b/src/renderer/src/lib/launch-work-item-direct-agent.ts index 467ef5065b6..6073ef5e180 100644 --- a/src/renderer/src/lib/launch-work-item-direct-agent.ts +++ b/src/renderer/src/lib/launch-work-item-direct-agent.ts @@ -10,7 +10,7 @@ import type { AgentStartedTelemetry } from '@/lib/worktree-activation' import type { SleepingAgentLaunchConfig } from '../../../shared/agent-session-resume' import type { LaunchSource } from '../../../shared/telemetry-events' import type { StartupCommandDelivery } from '../../../shared/codex-startup-delivery' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveTuiAgentLaunchArgs, resolveTuiAgentLaunchEnv diff --git a/src/renderer/src/lib/launch-work-item-direct-preflight.ts b/src/renderer/src/lib/launch-work-item-direct-preflight.ts index 3a09dfc67c1..84cc3033f09 100644 --- a/src/renderer/src/lib/launch-work-item-direct-preflight.ts +++ b/src/renderer/src/lib/launch-work-item-direct-preflight.ts @@ -1,13 +1,10 @@ import { getSetupConfig } from '@/lib/new-workspace' import { checkRuntimeHooks } from '@/runtime/runtime-hooks-client' import { resolveGitHubPrStartPointForRepo } from '@/lib/github-pr-start-point' -import type { - GitHubPrStartPoint, - GlobalSettings, - OrcaHooks, - RepoHookSettings, - SetupDecision -} from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { OrcaHooks, RepoHookSettings } from '../../../shared/orca-yaml-hook-types' +import type { SetupDecision } from '../../../shared/worktree/create-types' +import type { GitHubPrStartPoint } from '../../../shared/worktree/types' // Why: preflight routes by the repo's owner host, which `getSettingsForRepoRuntimeOwner` // hands back as a narrow runtime-scope pick rather than the full GlobalSettings. diff --git a/src/renderer/src/lib/launch-work-item-direct-types.ts b/src/renderer/src/lib/launch-work-item-direct-types.ts index e94b543d687..4d68b4d36c3 100644 --- a/src/renderer/src/lib/launch-work-item-direct-types.ts +++ b/src/renderer/src/lib/launch-work-item-direct-types.ts @@ -1,5 +1,7 @@ import type { LinkedWorkItemContext } from '@/lib/linked-work-item-context' -import type { TaskProvider, TuiAgent, WorkspaceCreateTelemetrySource } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../shared/workspace-source' import type { LaunchSource } from '../../../shared/telemetry-events' export type LaunchableWorkItem = { diff --git a/src/renderer/src/lib/launch-work-item-direct.ts b/src/renderer/src/lib/launch-work-item-direct.ts index 6a0fa63a214..d27220bf089 100644 --- a/src/renderer/src/lib/launch-work-item-direct.ts +++ b/src/renderer/src/lib/launch-work-item-direct.ts @@ -16,7 +16,9 @@ import { ensureHooksConfirmed } from '@/lib/ensure-hooks-confirmed' import { seedNativeChatLaunchDraftForAgentTab } from '@/lib/agent-launch-prompt-delivery' import { getConnectionId } from '@/lib/connection-context' import { isNativeChatTranscriptLocalReadable } from '@/lib/native-chat-transcript-readability' -import type { GitPushTarget, SetupDecision, TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' +import type { SetupDecision } from '../../../shared/worktree/create-types' +import type { GitPushTarget } from '../../../shared/worktree/types' import { getLinearIssueWorkspaceName } from '../../../shared/workspace-name' import { resolveGitHubWorkItemIdentity } from '@/lib/github-work-item-identity' import { diff --git a/src/renderer/src/lib/launch-worktree-background-terminals.ts b/src/renderer/src/lib/launch-worktree-background-terminals.ts index 5725ce397a8..049176c1e81 100644 --- a/src/renderer/src/lib/launch-worktree-background-terminals.ts +++ b/src/renderer/src/lib/launch-worktree-background-terminals.ts @@ -14,12 +14,12 @@ import { buildSetupRunnerCommand, getSetupRunnerCommandPlatformForPath } from '../../../shared/setup-runner-command' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' import type { - TerminalLayoutSnapshot, - Worktree, WorktreeDefaultTabsLaunch, WorktreeSetupLaunch -} from '../../../shared/types' +} from '../../../shared/worktree/launch-types' +import type { Worktree } from '../../../shared/worktree/types' type BackgroundPane = { leafId: string diff --git a/src/renderer/src/lib/left-sidebar-appearance.ts b/src/renderer/src/lib/left-sidebar-appearance.ts index 9966818c36a..4760aac8565 100644 --- a/src/renderer/src/lib/left-sidebar-appearance.ts +++ b/src/renderer/src/lib/left-sidebar-appearance.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { HEX_COLOR_RE } from '../../../shared/color-validation' import { normalizeLeftSidebarTintColor, diff --git a/src/renderer/src/lib/linear-issue-context-snapshot.test.ts b/src/renderer/src/lib/linear-issue-context-snapshot.test.ts index 5ad8ca68e9b..d8206a7aa9f 100644 --- a/src/renderer/src/lib/linear-issue-context-snapshot.test.ts +++ b/src/renderer/src/lib/linear-issue-context-snapshot.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { LinearComment, LinearIssue } from '../../../shared/types' +import type { LinearComment, LinearIssue } from '../../../shared/linear/issue-types' import { buildLinearIssueContextSnapshot, LINEAR_ISSUE_CONTEXT_CAPS diff --git a/src/renderer/src/lib/linear-issue-context-snapshot.ts b/src/renderer/src/lib/linear-issue-context-snapshot.ts index 0cdec67ec1c..37e77c56b60 100644 --- a/src/renderer/src/lib/linear-issue-context-snapshot.ts +++ b/src/renderer/src/lib/linear-issue-context-snapshot.ts @@ -1,4 +1,4 @@ -import type { LinearComment, LinearIssue } from '../../../shared/types' +import type { LinearComment, LinearIssue } from '../../../shared/linear/issue-types' export const LINEAR_ISSUE_CONTEXT_CAPS = { descriptionChars: 3000, diff --git a/src/renderer/src/lib/linear-issue-url-lookup.test.ts b/src/renderer/src/lib/linear-issue-url-lookup.test.ts index 28bc918caed..5cae0b9ae6b 100644 --- a/src/renderer/src/lib/linear-issue-url-lookup.test.ts +++ b/src/renderer/src/lib/linear-issue-url-lookup.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it, vi } from 'vitest' -import type { LinearConnectionStatus, LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { LinearConnectionStatus } from '../../../shared/linear/workspace-types' import { lookupLinearIssueUrl } from './linear-issue-url-lookup' const intent = { identifier: 'STA-4084', organizationUrlKey: 'stably' } diff --git a/src/renderer/src/lib/linear-issue-url-lookup.ts b/src/renderer/src/lib/linear-issue-url-lookup.ts index 55493d628f7..e2ea3ed9aef 100644 --- a/src/renderer/src/lib/linear-issue-url-lookup.ts +++ b/src/renderer/src/lib/linear-issue-url-lookup.ts @@ -4,7 +4,8 @@ import { isLinearIssueUrlResolutionMatch, type LinearIssueUrlIntent } from '../../../shared/linear/links' -import type { LinearConnectionStatus, LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { LinearConnectionStatus } from '../../../shared/linear/workspace-types' import type { TaskSourceContext } from '../../../shared/task-source-context' type FetchLinearIssue = ( diff --git a/src/renderer/src/lib/linear-issue-workspace-attachment.test.ts b/src/renderer/src/lib/linear-issue-workspace-attachment.test.ts index 94455731201..9e44943421d 100644 --- a/src/renderer/src/lib/linear-issue-workspace-attachment.test.ts +++ b/src/renderer/src/lib/linear-issue-workspace-attachment.test.ts @@ -6,7 +6,7 @@ import { findLinearIssueWorkspaceAttachmentInIndex, getLinearIssueWorkspaceAttachmentLabel } from './linear-issue-workspace-attachment' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' function worktree(overrides: Partial = {}): Worktree { return { diff --git a/src/renderer/src/lib/linear-issue-workspace-attachment.ts b/src/renderer/src/lib/linear-issue-workspace-attachment.ts index e1904dd02d4..e931b619aab 100644 --- a/src/renderer/src/lib/linear-issue-workspace-attachment.ts +++ b/src/renderer/src/lib/linear-issue-workspace-attachment.ts @@ -1,4 +1,5 @@ -import type { LinearIssue, Worktree } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' +import type { Worktree } from '../../../shared/worktree/types' import { getLinearOrganizationUrlKeyFromIssueUrl, parseLinearIssueInput diff --git a/src/renderer/src/lib/linear-issue-workspace-open.test.ts b/src/renderer/src/lib/linear-issue-workspace-open.test.ts index 0d6dd0211bc..86a72ab4df9 100644 --- a/src/renderer/src/lib/linear-issue-workspace-open.test.ts +++ b/src/renderer/src/lib/linear-issue-workspace-open.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, Worktree } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' const mocks = vi.hoisted(() => ({ activateAndRevealFolderWorkspace: vi.fn(), diff --git a/src/renderer/src/lib/linear-linked-work-item.test.ts b/src/renderer/src/lib/linear-linked-work-item.test.ts index 10c11a9dde1..b8aa6f8fd0a 100644 --- a/src/renderer/src/lib/linear-linked-work-item.test.ts +++ b/src/renderer/src/lib/linear-linked-work-item.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import { buildLinearIssueLinkedWorkItem, getLinearLinkedWorkItemBranchName, diff --git a/src/renderer/src/lib/linear-linked-work-item.ts b/src/renderer/src/lib/linear-linked-work-item.ts index d1219bad8dc..098fed173f4 100644 --- a/src/renderer/src/lib/linear-linked-work-item.ts +++ b/src/renderer/src/lib/linear-linked-work-item.ts @@ -1,4 +1,4 @@ -import type { LinearIssue } from '../../../shared/types' +import type { LinearIssue } from '../../../shared/linear/issue-types' import type { LinkedWorkItemSummary } from '@/lib/new-workspace' import { buildLinearWorkspaceSource, diff --git a/src/renderer/src/lib/linked-work-item-context.ts b/src/renderer/src/lib/linked-work-item-context.ts index bd39e87c453..214b892b35b 100644 --- a/src/renderer/src/lib/linked-work-item-context.ts +++ b/src/renderer/src/lib/linked-work-item-context.ts @@ -1,4 +1,4 @@ -import type { TaskProvider } from '../../../shared/types' +import type { TaskProvider } from '../../../shared/task-providers' export type LinkedWorkItemContext = { provider: TaskProvider diff --git a/src/renderer/src/lib/local-path-open-guard.ts b/src/renderer/src/lib/local-path-open-guard.ts index 7fed28d8e10..21d92a48e5e 100644 --- a/src/renderer/src/lib/local-path-open-guard.ts +++ b/src/renderer/src/lib/local-path-open-guard.ts @@ -1,5 +1,5 @@ import { toast } from 'sonner' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { translate } from '@/i18n/i18n' export function isLocalPathOpenBlocked( diff --git a/src/renderer/src/lib/local-preflight-context.test.ts b/src/renderer/src/lib/local-preflight-context.test.ts index 69d38f9ced6..3bce56d5340 100644 --- a/src/renderer/src/lib/local-preflight-context.test.ts +++ b/src/renderer/src/lib/local-preflight-context.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import type { AppState } from '@/store/types' import { getLocalAgentPreflightContext, diff --git a/src/renderer/src/lib/local-preflight-context.ts b/src/renderer/src/lib/local-preflight-context.ts index 28da8a3d5bd..98ac6c1059e 100644 --- a/src/renderer/src/lib/local-preflight-context.ts +++ b/src/renderer/src/lib/local-preflight-context.ts @@ -7,7 +7,8 @@ import { type ProjectExecutionRuntimeResolution } from '../../../shared/project-execution-runtime' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID } from '../../../shared/execution-host' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { getProviderRuntimeContextKey } from './provider-runtime-context' import { getRendererAppPlatform } from './renderer-app-platform' import { diff --git a/src/renderer/src/lib/markdown-comment-blocks.test.ts b/src/renderer/src/lib/markdown-comment-blocks.test.ts index f3b0443d6ea..74eb3190b74 100644 --- a/src/renderer/src/lib/markdown-comment-blocks.test.ts +++ b/src/renderer/src/lib/markdown-comment-blocks.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { mapMarkdownCommentsToBlocks, type MarkdownCommentBlock } from './markdown-comment-blocks' function makeComment(overrides: Partial = {}): DiffComment { diff --git a/src/renderer/src/lib/markdown-comment-blocks.ts b/src/renderer/src/lib/markdown-comment-blocks.ts index 59d11ed4402..6d12ac6d2c2 100644 --- a/src/renderer/src/lib/markdown-comment-blocks.ts +++ b/src/renderer/src/lib/markdown-comment-blocks.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' export type MarkdownCommentBlock = { key: string diff --git a/src/renderer/src/lib/markdown-document-templates.test.ts b/src/renderer/src/lib/markdown-document-templates.test.ts index e787805dfb6..ab17687fcc2 100644 --- a/src/renderer/src/lib/markdown-document-templates.test.ts +++ b/src/renderer/src/lib/markdown-document-templates.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { DirEntry } from '../../../shared/types' +import type { DirEntry } from '../../../shared/filesystem-entry-types' import { applyMarkdownTemplatePlaceholders, getMarkdownTemplateTitleForFileName, diff --git a/src/renderer/src/lib/markdown-document-templates.ts b/src/renderer/src/lib/markdown-document-templates.ts index 60414d481f0..b4149389c02 100644 --- a/src/renderer/src/lib/markdown-document-templates.ts +++ b/src/renderer/src/lib/markdown-document-templates.ts @@ -1,4 +1,5 @@ -import type { DirEntry, GlobalSettings } from '../../../shared/types' +import type { DirEntry } from '../../../shared/filesystem-entry-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RuntimeFileOperationArgs } from '@/runtime/runtime-file-client' import { readRuntimeDirectory, diff --git a/src/renderer/src/lib/markdown-review-note-copy.test.ts b/src/renderer/src/lib/markdown-review-note-copy.test.ts index bfac91ff209..ae00b96fe25 100644 --- a/src/renderer/src/lib/markdown-review-note-copy.test.ts +++ b/src/renderer/src/lib/markdown-review-note-copy.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { copyMarkdownReviewNotesForAgent, type MarkdownReviewNoteClipboardWriter diff --git a/src/renderer/src/lib/markdown-review-notes.test.ts b/src/renderer/src/lib/markdown-review-notes.test.ts index 9d583df9fdc..80c40089e1f 100644 --- a/src/renderer/src/lib/markdown-review-notes.test.ts +++ b/src/renderer/src/lib/markdown-review-notes.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { formatMarkdownReviewCardQuote, formatMarkdownReviewNotes, diff --git a/src/renderer/src/lib/markdown-review-notes.ts b/src/renderer/src/lib/markdown-review-notes.ts index 93feeb6099f..c0831ef8edd 100644 --- a/src/renderer/src/lib/markdown-review-notes.ts +++ b/src/renderer/src/lib/markdown-review-notes.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import { getDiffCommentLineLabel } from './diff-comment-compat' const MAX_EXCERPT_LINES = 8 diff --git a/src/renderer/src/lib/native-chat-initial-view-mode.test.ts b/src/renderer/src/lib/native-chat-initial-view-mode.test.ts index 4ef61a5cb78..e3a7a5b7aad 100644 --- a/src/renderer/src/lib/native-chat-initial-view-mode.test.ts +++ b/src/renderer/src/lib/native-chat-initial-view-mode.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest' -import type { Tab } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' import { decideInitialAgentTabViewMode, initialAgentTabViewModeProps diff --git a/src/renderer/src/lib/native-chat-initial-view-mode.ts b/src/renderer/src/lib/native-chat-initial-view-mode.ts index 9b06a0a0d38..258fd8f190f 100644 --- a/src/renderer/src/lib/native-chat-initial-view-mode.ts +++ b/src/renderer/src/lib/native-chat-initial-view-mode.ts @@ -1,4 +1,6 @@ -import type { GlobalSettings, Tab, TuiAgent } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Tab } from '../../../shared/tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { canMirrorLaunchDraftToNativeChat } from '@/lib/native-chat-launch-draft-mirrorability' import { isNativeChatSupportedAgent, diff --git a/src/renderer/src/lib/native-chat-launch-prompt.ts b/src/renderer/src/lib/native-chat-launch-prompt.ts index b279730c812..289bc78d6e5 100644 --- a/src/renderer/src/lib/native-chat-launch-prompt.ts +++ b/src/renderer/src/lib/native-chat-launch-prompt.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' export type NativeChatLaunchPrompt = { tabId: string diff --git a/src/renderer/src/lib/native-chat-telemetry.ts b/src/renderer/src/lib/native-chat-telemetry.ts index 1299204b6db..ba3f7e5d9cc 100644 --- a/src/renderer/src/lib/native-chat-telemetry.ts +++ b/src/renderer/src/lib/native-chat-telemetry.ts @@ -9,7 +9,7 @@ import { track, tuiAgentToAgentKind } from './telemetry' import type { NativeChatRuntime } from '../../../shared/telemetry-events' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' /** Loose agent type accepted by these emitters: the strict launch `TuiAgent`, or * the broader `AgentType` string carried by the chat view. Narrowing to the diff --git a/src/renderer/src/lib/nested-repo-selected-paths.ts b/src/renderer/src/lib/nested-repo-selected-paths.ts index 450544bbcd0..1faf58ca430 100644 --- a/src/renderer/src/lib/nested-repo-selected-paths.ts +++ b/src/renderer/src/lib/nested-repo-selected-paths.ts @@ -1,4 +1,4 @@ -import type { NestedRepoScanResult } from '../../../shared/types' +import type { NestedRepoScanResult } from '../../../shared/project-group-types' export function getSelectedNestedRepoPathsInScanOrder( scan: Pick, diff --git a/src/renderer/src/lib/new-workspace-composer-repo.test.ts b/src/renderer/src/lib/new-workspace-composer-repo.test.ts index 575725630dc..3b73d209b15 100644 --- a/src/renderer/src/lib/new-workspace-composer-repo.test.ts +++ b/src/renderer/src/lib/new-workspace-composer-repo.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { getComposerEligibleRepos, resolveComposerActiveRepoId, diff --git a/src/renderer/src/lib/new-workspace-composer-repo.ts b/src/renderer/src/lib/new-workspace-composer-repo.ts index 1cce749e03b..8e32e1e4bca 100644 --- a/src/renderer/src/lib/new-workspace-composer-repo.ts +++ b/src/renderer/src/lib/new-workspace-composer-repo.ts @@ -5,7 +5,7 @@ import { resolveNewWorkspaceDialogRepoId } from '../../../shared/new-workspace-dialog-repo' import { getProjectIdentityKey } from '../../../shared/project-host-setup-projection' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' export function getComposerEligibleRepos(repos: readonly Repo[]): Repo[] { return getNewWorkspaceDialogEligibleRepos(repos) diff --git a/src/renderer/src/lib/new-workspace-project-options.test.ts b/src/renderer/src/lib/new-workspace-project-options.test.ts index f6130d8f861..b249570fb3d 100644 --- a/src/renderer/src/lib/new-workspace-project-options.test.ts +++ b/src/renderer/src/lib/new-workspace-project-options.test.ts @@ -9,7 +9,9 @@ import { searchNewWorkspaceProjectOptions, type NewWorkspaceProjectOption } from './new-workspace-project-options' -import type { Project, ProjectGroup, ProjectHostSetup, Repo } from '../../../shared/types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' function repo(id: string, overrides: Partial = {}): Repo { return { diff --git a/src/renderer/src/lib/new-workspace-project-options.ts b/src/renderer/src/lib/new-workspace-project-options.ts index 58cab355340..be8261126b8 100644 --- a/src/renderer/src/lib/new-workspace-project-options.ts +++ b/src/renderer/src/lib/new-workspace-project-options.ts @@ -1,5 +1,7 @@ import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' -import type { Project, ProjectGroup, ProjectHostSetup, Repo } from '../../../shared/types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' import type { ExecutionHostRegistryEntry } from '../../../shared/execution-host-registry' import { diff --git a/src/renderer/src/lib/new-workspace.ts b/src/renderer/src/lib/new-workspace.ts index d9b133b5263..d19da5e5de4 100644 --- a/src/renderer/src/lib/new-workspace.ts +++ b/src/renderer/src/lib/new-workspace.ts @@ -13,7 +13,8 @@ import { queuePendingAgentStartupDelivery, resolveAgentStartupTabId } from '@/lib/agent-startup-delayed-delivery' -import type { FolderWorkspaceLinkedTask, OrcaHooks } from '../../../shared/types' +import type { FolderWorkspaceLinkedTask } from '../../../shared/folder-workspace-types' +import type { OrcaHooks } from '../../../shared/orca-yaml-hook-types' import { resolveHookCommandSourcePolicy } from '../../../shared/hook-command-source-policy' import { slugifyForWorkspaceName } from '../../../shared/workspace-name' import { createBrowserUuid } from '@/lib/browser-uuid' diff --git a/src/renderer/src/lib/notes-send-agent-targets.test.ts b/src/renderer/src/lib/notes-send-agent-targets.test.ts index 0b24234c3bf..6dba34d51ce 100644 --- a/src/renderer/src/lib/notes-send-agent-targets.test.ts +++ b/src/renderer/src/lib/notes-send-agent-targets.test.ts @@ -4,7 +4,7 @@ import { type AgentStatusEntry, type AgentStatusState } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { makePaneKey } from '../../../shared/stable-pane-id' import { deriveNotesSendAgentTargets, diff --git a/src/renderer/src/lib/notes-send-agent-targets.ts b/src/renderer/src/lib/notes-send-agent-targets.ts index 3c2f6d412c4..ce4e00ae1ed 100644 --- a/src/renderer/src/lib/notes-send-agent-targets.ts +++ b/src/renderer/src/lib/notes-send-agent-targets.ts @@ -2,7 +2,7 @@ import type { AgentType } from '../../../shared/agent-status-types' import type { AppState } from '@/store/types' import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' import { resolveTerminalTitleAgentType } from '../../../shared/terminal-title-agent-type' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { detectAgentSendTitleStatus } from './agent-send-title-status' import { resolveRuntimePaneTitleLeafResolution, diff --git a/src/renderer/src/lib/onboarding-folder-agent-startup.ts b/src/renderer/src/lib/onboarding-folder-agent-startup.ts index 55668937430..adb1a8bfbbf 100644 --- a/src/renderer/src/lib/onboarding-folder-agent-startup.ts +++ b/src/renderer/src/lib/onboarding-folder-agent-startup.ts @@ -8,7 +8,9 @@ import { import type { AgentStartedTelemetry } from '@/lib/worktree-activation' import type { StartupCommandDelivery } from '../../../shared/codex-startup-delivery' import type { SleepingAgentLaunchConfig } from '../../../shared/agent-session-resume' -import type { GlobalSettings, OnboardingState, TuiAgent } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { OnboardingState } from '../../../shared/onboarding-state-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveInitialNativeChatSessionOptions } from '@/components/native-chat/native-chat-launch-session-options' import type { SessionOptionValue } from '../../../shared/native-chat-session-options' diff --git a/src/renderer/src/lib/onboarding-project-checklist.ts b/src/renderer/src/lib/onboarding-project-checklist.ts index a39e8d093a2..742cd164776 100644 --- a/src/renderer/src/lib/onboarding-project-checklist.ts +++ b/src/renderer/src/lib/onboarding-project-checklist.ts @@ -1,5 +1,5 @@ import { track } from '@/lib/telemetry' -import type { OnboardingState } from '../../../shared/types' +import type { OnboardingState } from '../../../shared/onboarding-state-types' export type OnboardingProjectChecklistItem = 'addedRepo' | 'addedFolder' diff --git a/src/renderer/src/lib/open-in-app-catalog.tsx b/src/renderer/src/lib/open-in-app-catalog.tsx index ea54d1d2491..a2ed0526354 100644 --- a/src/renderer/src/lib/open-in-app-catalog.tsx +++ b/src/renderer/src/lib/open-in-app-catalog.tsx @@ -1,6 +1,6 @@ import type React from 'react' import { AppWindow } from 'lucide-react' -import type { OpenInApplication } from '../../../shared/types' +import type { OpenInApplication } from '../../../shared/ui-chrome-types' import { cn } from './utils' import { translate } from '@/i18n/i18n' import { createLocalizedCatalog } from '@/i18n/localized-catalog' diff --git a/src/renderer/src/lib/open-in-application-selection.ts b/src/renderer/src/lib/open-in-application-selection.ts index 09ccaca9bb9..a4c1f53e609 100644 --- a/src/renderer/src/lib/open-in-application-selection.ts +++ b/src/renderer/src/lib/open-in-application-selection.ts @@ -1,3 +1,3 @@ -import type { OpenInApplication } from '../../../shared/types' +import type { OpenInApplication } from '../../../shared/ui-chrome-types' export const NO_OPEN_IN_APPLICATIONS: readonly OpenInApplication[] = [] diff --git a/src/renderer/src/lib/orchestration-skill-coverage.test.ts b/src/renderer/src/lib/orchestration-skill-coverage.test.ts index d7001e7ebd8..d0128396e4e 100644 --- a/src/renderer/src/lib/orchestration-skill-coverage.test.ts +++ b/src/renderer/src/lib/orchestration-skill-coverage.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { DiscoveredSkill, SkillDiscoverySource } from '../../../shared/skills' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { agentHasOrchestrationSkill, getOrchestrationSkillAgentStatuses diff --git a/src/renderer/src/lib/orchestration-skill-coverage.ts b/src/renderer/src/lib/orchestration-skill-coverage.ts index 4b4e58144c2..4196a50dd18 100644 --- a/src/renderer/src/lib/orchestration-skill-coverage.ts +++ b/src/renderer/src/lib/orchestration-skill-coverage.ts @@ -1,6 +1,6 @@ import type { AgentType } from '../../../shared/agent-status-types' import type { DiscoveredSkill, SkillDiscoverySource } from '../../../shared/skills' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { ORCHESTRATION_SKILL_NAME } from '@/lib/agent-feature-install-commands' import { getAgentLabel } from '@/lib/agent-catalog' import { TUI_AGENT_AUTO_PICK_ORDER } from '../../../shared/tui-agent-selection' diff --git a/src/renderer/src/lib/order-empty-query-worktrees.test.ts b/src/renderer/src/lib/order-empty-query-worktrees.test.ts index 967863f5d0f..f60ddb04a89 100644 --- a/src/renderer/src/lib/order-empty-query-worktrees.test.ts +++ b/src/renderer/src/lib/order-empty-query-worktrees.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { orderEmptyQueryWorktrees } from './order-empty-query-worktrees' function wt(overrides: Partial & { id: string; displayName: string }): Worktree { diff --git a/src/renderer/src/lib/order-empty-query-worktrees.ts b/src/renderer/src/lib/order-empty-query-worktrees.ts index aa165b8c6a4..8362bc03527 100644 --- a/src/renderer/src/lib/order-empty-query-worktrees.ts +++ b/src/renderer/src/lib/order-empty-query-worktrees.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { compareWorktreeDisplayName } from './worktree-display-name-order' export type OrderEmptyQueryInputs = { diff --git a/src/renderer/src/lib/pane-agent-evidence.ts b/src/renderer/src/lib/pane-agent-evidence.ts index 4c9c49ad9bb..8230bb51522 100644 --- a/src/renderer/src/lib/pane-agent-evidence.ts +++ b/src/renderer/src/lib/pane-agent-evidence.ts @@ -1,7 +1,7 @@ import type { AgentStatus } from '../../../shared/agent-detection' import { detectAgentStatusFromTitle, getAgentLabel } from '../../../shared/agent-detection' import { resolveExplicitTerminalTitleAgentType } from '../../../shared/terminal-title-agent-type' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { AGENT_STATUS_STALE_AFTER_MS, type AgentStatusEntry, diff --git a/src/renderer/src/lib/pane-manager/pane-manager-types.ts b/src/renderer/src/lib/pane-manager/pane-manager-types.ts index 34b42c4b591..62c69836841 100644 --- a/src/renderer/src/lib/pane-manager/pane-manager-types.ts +++ b/src/renderer/src/lib/pane-manager/pane-manager-types.ts @@ -6,7 +6,7 @@ import type { Unicode11Addon } from '@xterm/addon-unicode11' import type { WebLinksAddon } from '@xterm/addon-web-links' import type { WebglAddon } from '@xterm/addon-webgl' import type { SerializeAddon } from '@xterm/addon-serialize' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { TerminalLeafId } from '../../../../shared/stable-pane-id' import type { TerminalWebglAutoDecision } from './terminal-webgl-auto-policy' diff --git a/src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.ts b/src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.ts index 8c804236f9b..66c85d56581 100644 --- a/src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.ts +++ b/src/renderer/src/lib/pane-manager/terminal-keyboard-protocol.ts @@ -1,6 +1,6 @@ import type { ITerminalOptions } from '@xterm/xterm' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { isLocalNativeWindowsConpty, type WindowsPtyCompatibilityContext diff --git a/src/renderer/src/lib/pending-worktree-creation.ts b/src/renderer/src/lib/pending-worktree-creation.ts index ccad925910a..f0b543817a9 100644 --- a/src/renderer/src/lib/pending-worktree-creation.ts +++ b/src/renderer/src/lib/pending-worktree-creation.ts @@ -1,13 +1,15 @@ +import type { TuiAgent } from '../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../shared/workspace-source' import type { CreateSparseCheckoutRequest, + SetupDecision +} from '../../../shared/worktree/create-types' +import type { WorktreeStartupLaunch } from '../../../shared/worktree/launch-types' +import type { GitPushTarget, - SetupDecision, - TuiAgent, - WorkspaceCreateTelemetrySource, - WorkspaceStatus, WorkspaceLinkedItem, - WorktreeStartupLaunch -} from '../../../shared/types' + WorkspaceStatus +} from '../../../shared/worktree/types' import type { AgentStartupPlan } from '@/lib/tui-agent-startup' import type { AgentStartedTelemetry } from '@/lib/worktree-activation' import type { TaskSourceContext, WorkspaceRunContext } from '../../../shared/task-source-context' diff --git a/src/renderer/src/lib/pi-session-resume-wake.test.ts b/src/renderer/src/lib/pi-session-resume-wake.test.ts index a0f69f68c2a..984a4fd9639 100644 --- a/src/renderer/src/lib/pi-session-resume-wake.test.ts +++ b/src/renderer/src/lib/pi-session-resume-wake.test.ts @@ -2,7 +2,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { useAppStore } from '@/store' import { resumeSleepingAgentSessionsForWorktree } from './resume-sleeping-agent-session' diff --git a/src/renderer/src/lib/pr-comment-action-state.test.ts b/src/renderer/src/lib/pr-comment-action-state.test.ts index b3038076b87..62f7e3979d1 100644 --- a/src/renderer/src/lib/pr-comment-action-state.test.ts +++ b/src/renderer/src/lib/pr-comment-action-state.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' import { groupPRComments, type PRCommentGroup } from '../../../shared/pr-comment-groups' import { getPRCommentGroupActionState, diff --git a/src/renderer/src/lib/pr-comment-action-state.ts b/src/renderer/src/lib/pr-comment-action-state.ts index 2207141bd06..12f9ef87287 100644 --- a/src/renderer/src/lib/pr-comment-action-state.ts +++ b/src/renderer/src/lib/pr-comment-action-state.ts @@ -1,5 +1,5 @@ import { getPRCommentGroupRoot, type PRCommentGroup } from '../../../shared/pr-comment-groups' -import type { PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' /** How a comment group should read in the PR sidebar triage UI. */ export type PRCommentGroupActionState = 'open' | 'conversation' | 'resolved' diff --git a/src/renderer/src/lib/pr-comment-reactions.test.ts b/src/renderer/src/lib/pr-comment-reactions.test.ts index d742fde85d8..01dcb7e5523 100644 --- a/src/renderer/src/lib/pr-comment-reactions.test.ts +++ b/src/renderer/src/lib/pr-comment-reactions.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from '../../../shared/types' +import type { PRComment } from '../../../shared/github/comment-types' import { restoreCommentReaction, setCommentReaction, diff --git a/src/renderer/src/lib/pr-comment-reactions.ts b/src/renderer/src/lib/pr-comment-reactions.ts index f124f082d17..417b8a9e4bb 100644 --- a/src/renderer/src/lib/pr-comment-reactions.ts +++ b/src/renderer/src/lib/pr-comment-reactions.ts @@ -1,4 +1,8 @@ -import type { GitHubReaction, GitHubReactionContent, PRComment } from '../../../shared/types' +import type { + GitHubReaction, + GitHubReactionContent, + PRComment +} from '../../../shared/github/comment-types' export const GITHUB_REACTION_ORDER: readonly GitHubReactionContent[] = [ '+1', diff --git a/src/renderer/src/lib/project-host-clone-url.test.ts b/src/renderer/src/lib/project-host-clone-url.test.ts index 4850e41a308..f383945ce93 100644 --- a/src/renderer/src/lib/project-host-clone-url.test.ts +++ b/src/renderer/src/lib/project-host-clone-url.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Project } from '../../../shared/types' +import type { Project } from '../../../shared/project-types' import { getProjectHostCloneUrl } from './project-host-clone-url' function createProject(overrides: Partial = {}): Project { diff --git a/src/renderer/src/lib/project-host-clone-url.ts b/src/renderer/src/lib/project-host-clone-url.ts index e32e9a699d1..b7ff42ffbf4 100644 --- a/src/renderer/src/lib/project-host-clone-url.ts +++ b/src/renderer/src/lib/project-host-clone-url.ts @@ -1,4 +1,4 @@ -import type { Project } from '../../../shared/types' +import type { Project } from '../../../shared/project-types' export function getProjectHostCloneUrl(project: Project | null | undefined): string | null { const identity = project?.providerIdentity diff --git a/src/renderer/src/lib/project-host-setup-options.test.ts b/src/renderer/src/lib/project-host-setup-options.test.ts index a5e5e2056d4..9eee19f9725 100644 --- a/src/renderer/src/lib/project-host-setup-options.test.ts +++ b/src/renderer/src/lib/project-host-setup-options.test.ts @@ -8,7 +8,8 @@ import { PROJECT_HOST_SETUP_RUNTIME_CAPABILITY, WORKSPACE_RUN_CONTEXT_RUNTIME_CAPABILITY } from '../../../shared/protocol-version' -import type { ProjectHostSetup, Repo } from '../../../shared/types' +import type { ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import { buildProjectHostSetupOptions } from './project-host-setup-options' const FULL_HOST_MODEL_RUNTIME_CAPABILITIES = [ diff --git a/src/renderer/src/lib/project-host-setup-options.ts b/src/renderer/src/lib/project-host-setup-options.ts index 9a8039cf19f..eca4dc397c6 100644 --- a/src/renderer/src/lib/project-host-setup-options.ts +++ b/src/renderer/src/lib/project-host-setup-options.ts @@ -11,7 +11,8 @@ import { PROJECT_HOST_SETUP_RUNTIME_CAPABILITY, WORKSPACE_RUN_CONTEXT_RUNTIME_CAPABILITY } from '../../../shared/protocol-version' -import type { ProjectHostSetup, Repo } from '../../../shared/types' +import type { ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' export type ProjectHostSetupOption = | { diff --git a/src/renderer/src/lib/project-host-workspace-target.test.ts b/src/renderer/src/lib/project-host-workspace-target.test.ts index 08484c99b5e..d49cb568763 100644 --- a/src/renderer/src/lib/project-host-workspace-target.test.ts +++ b/src/renderer/src/lib/project-host-workspace-target.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { Project, ProjectHostSetup, Repo } from '../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import { resolveWorkspaceCreationRepoId, resolveWorkspaceCreationTarget diff --git a/src/renderer/src/lib/project-host-workspace-target.ts b/src/renderer/src/lib/project-host-workspace-target.ts index 09a63309138..a7b08dc6617 100644 --- a/src/renderer/src/lib/project-host-workspace-target.ts +++ b/src/renderer/src/lib/project-host-workspace-target.ts @@ -5,7 +5,8 @@ import { type ExecutionHostScope } from '../../../shared/execution-host' import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' -import type { Project, ProjectHostSetup, Repo } from '../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import { resolveComposerRepoId } from './new-workspace-composer-repo' export type WorkspaceCreationTarget = { diff --git a/src/renderer/src/lib/project-skill-runtime.ts b/src/renderer/src/lib/project-skill-runtime.ts index 4366d6a9f58..1f10495a4aa 100644 --- a/src/renderer/src/lib/project-skill-runtime.ts +++ b/src/renderer/src/lib/project-skill-runtime.ts @@ -1,6 +1,6 @@ import type { ProjectExecutionRuntimeResolution } from '../../../shared/project-execution-runtime' import type { SkillDiscoveryTarget } from '../../../shared/skills' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { resolveWindowsShellStartupFamily } from '../../../shared/windows-terminal-shell' import { translate } from '@/i18n/i18n' diff --git a/src/renderer/src/lib/provider-runtime-context.ts b/src/renderer/src/lib/provider-runtime-context.ts index 7b949e587ac..772ca7ffb42 100644 --- a/src/renderer/src/lib/provider-runtime-context.ts +++ b/src/renderer/src/lib/provider-runtime-context.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' export function getProviderRuntimeContextKey( settings: Pick | null | undefined diff --git a/src/renderer/src/lib/quick-workspace-agent-selection.ts b/src/renderer/src/lib/quick-workspace-agent-selection.ts index 51fe886e7eb..09801125d0d 100644 --- a/src/renderer/src/lib/quick-workspace-agent-selection.ts +++ b/src/renderer/src/lib/quick-workspace-agent-selection.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { isTuiAgentEnabled, pickTuiAgent, diff --git a/src/renderer/src/lib/recent-workspace-tab-rows.test.ts b/src/renderer/src/lib/recent-workspace-tab-rows.test.ts index 1e71bb74f63..c36a48dc615 100644 --- a/src/renderer/src/lib/recent-workspace-tab-rows.test.ts +++ b/src/renderer/src/lib/recent-workspace-tab-rows.test.ts @@ -7,7 +7,7 @@ import { } from './recent-workspace-tab-rows' import type { TabPaneInputSources } from '@/components/sidebar/smart-attention' import type { AgentStatusEntry, AgentStatusState } from '../../../shared/agent-status-types' -import type { TabGroup } from '../../../shared/types' +import type { TabGroup } from '../../../shared/tab-types' const NOW = 1_700_000_000_000 const LEAF_ID = '11111111-2222-4333-8444-555555555555' diff --git a/src/renderer/src/lib/recent-workspace-tab-rows.ts b/src/renderer/src/lib/recent-workspace-tab-rows.ts index b990ef1bdd2..5005030b81a 100644 --- a/src/renderer/src/lib/recent-workspace-tab-rows.ts +++ b/src/renderer/src/lib/recent-workspace-tab-rows.ts @@ -8,7 +8,8 @@ import { } from '@/components/sidebar/smart-attention' import { tabHasLivePty } from './tab-has-live-pty' import type { WorktreeStatus } from './worktree-status' -import type { TabGroup, TerminalTab } from '../../../shared/types' +import type { TabGroup } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' /** * Row model for Cmd+J's empty-query "Recent chats & terminals" section. diff --git a/src/renderer/src/lib/repo-runtime-owner.test.ts b/src/renderer/src/lib/repo-runtime-owner.test.ts index c34dda10e0f..b341dbdbd6a 100644 --- a/src/renderer/src/lib/repo-runtime-owner.test.ts +++ b/src/renderer/src/lib/repo-runtime-owner.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RepoRuntimeOwnerState } from './repo-runtime-owner' import { getExplicitRuntimeOwnerEnvironmentId, diff --git a/src/renderer/src/lib/repo-runtime-owner.ts b/src/renderer/src/lib/repo-runtime-owner.ts index 8cd59142816..81930d72a33 100644 --- a/src/renderer/src/lib/repo-runtime-owner.ts +++ b/src/renderer/src/lib/repo-runtime-owner.ts @@ -3,7 +3,8 @@ import { getSettingsFocusedExecutionHostId, parseExecutionHostId } from '../../../shared/execution-host' -import type { GlobalSettings, Repo } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Repo } from '../../../shared/repo-types' export type RepoRuntimeOwnerState = { repos?: readonly Pick[] diff --git a/src/renderer/src/lib/repo-search.test.ts b/src/renderer/src/lib/repo-search.test.ts index 884093ac25f..c355807896c 100644 --- a/src/renderer/src/lib/repo-search.test.ts +++ b/src/renderer/src/lib/repo-search.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { REPO_SEARCH_QUERY_MAX_BYTES, isRepoSearchQueryTooLarge, searchRepos } from './repo-search' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' function makeRepo(overrides: Partial = {}): Repo { return { diff --git a/src/renderer/src/lib/repo-search.ts b/src/renderer/src/lib/repo-search.ts index 5a223af6392..c36458e808f 100644 --- a/src/renderer/src/lib/repo-search.ts +++ b/src/renderer/src/lib/repo-search.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' // Display-name matches must always outrank path-only matches. This offset is diff --git a/src/renderer/src/lib/repo-slug-cache.test.ts b/src/renderer/src/lib/repo-slug-cache.test.ts index 491afbc22b9..6f01ba8d46e 100644 --- a/src/renderer/src/lib/repo-slug-cache.test.ts +++ b/src/renderer/src/lib/repo-slug-cache.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { githubRepoIdentityKey } from '../../../shared/github/repository-identity-key' import { REPO_SLUG_FAILURE_TTL_MS, diff --git a/src/renderer/src/lib/repo-slug-cache.ts b/src/renderer/src/lib/repo-slug-cache.ts index 9c2a455f574..7c73372d5ee 100644 --- a/src/renderer/src/lib/repo-slug-cache.ts +++ b/src/renderer/src/lib/repo-slug-cache.ts @@ -1,7 +1,8 @@ // Why: the slug → Repo cache and its synchronous lookup live here (separate from // repo-slug-index.ts) so store slices can import the sync lookup without pulling // in repo-slug-index's `@/store` dependency, which would form an import cycle. -import type { GlobalSettings, Repo } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Repo } from '../../../shared/repo-types' import { getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import { getSettingsForRepoRuntimeOwner } from './repo-runtime-owner' import { diff --git a/src/renderer/src/lib/repo-slug-index.test.ts b/src/renderer/src/lib/repo-slug-index.test.ts index 0b710cf5438..d09d515d627 100644 --- a/src/renderer/src/lib/repo-slug-index.test.ts +++ b/src/renderer/src/lib/repo-slug-index.test.ts @@ -2,7 +2,7 @@ import { act, cleanup, renderHook, waitFor } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { useAppStore } from '@/store' import { useRepoSlugIndex } from './repo-slug-index' import { REPO_SLUG_FAILURE_TTL_MS, clearRepoSlugCacheValues } from './repo-slug-cache' diff --git a/src/renderer/src/lib/repo-slug-index.ts b/src/renderer/src/lib/repo-slug-index.ts index 07d6896cb08..51460ceb551 100644 --- a/src/renderer/src/lib/repo-slug-index.ts +++ b/src/renderer/src/lib/repo-slug-index.ts @@ -15,7 +15,8 @@ // process (`repoSlug` reads `.git/config`). import { useEffect, useMemo, useRef, useState } from 'react' import { useAppStore } from '@/store' -import type { Repo, GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Repo } from '../../../shared/repo-types' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import { deleteRepoSlugCacheKey, diff --git a/src/renderer/src/lib/run-quick-command-in-new-tab.ts b/src/renderer/src/lib/run-quick-command-in-new-tab.ts index 526d35e5b9c..1d822ad8fc2 100644 --- a/src/renderer/src/lib/run-quick-command-in-new-tab.ts +++ b/src/renderer/src/lib/run-quick-command-in-new-tab.ts @@ -6,7 +6,7 @@ import { isTerminalAgentQuickCommand, supportsTerminalAgentQuickCommand } from '../../../shared/terminal-quick-commands' -import type { TerminalQuickCommand } from '../../../shared/types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' export type RunQuickCommandInNewTabArgs = { command: TerminalQuickCommand diff --git a/src/renderer/src/lib/running-agent-targets.test.ts b/src/renderer/src/lib/running-agent-targets.test.ts index addf1741fa8..81126bdbda0 100644 --- a/src/renderer/src/lib/running-agent-targets.test.ts +++ b/src/renderer/src/lib/running-agent-targets.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest' import type { AppState } from '@/store/types' import type { AgentStatusEntry, AgentStatusState } from '../../../shared/agent-status-types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { makePaneKey } from '../../../shared/stable-pane-id' import { deriveRunningAgentSendTargets, diff --git a/src/renderer/src/lib/running-agent-targets.ts b/src/renderer/src/lib/running-agent-targets.ts index e483b04b4a9..1eb3f0a227d 100644 --- a/src/renderer/src/lib/running-agent-targets.ts +++ b/src/renderer/src/lib/running-agent-targets.ts @@ -1,6 +1,6 @@ import type { AppState } from '@/store/types' import type { AgentStatusEntry } from '../../../shared/agent-status-types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { parsePaneKey } from '../../../shared/stable-pane-id' import { resolvePaneAgentActivity } from '@/lib/pane-agent-evidence' import { detectAgentSendTitleStatus } from './agent-send-title-status' diff --git a/src/renderer/src/lib/runtime-agent-background-create.ts b/src/renderer/src/lib/runtime-agent-background-create.ts index 70915ae63d4..71362fa4dd3 100644 --- a/src/renderer/src/lib/runtime-agent-background-create.ts +++ b/src/renderer/src/lib/runtime-agent-background-create.ts @@ -2,7 +2,7 @@ import type { SleepingAgentLaunchConfig } from '../../../shared/agent-session-re import type { StartupCommandDelivery } from '../../../shared/codex-startup-delivery' import type { SessionOptionValue } from '../../../shared/native-chat-session-options' import type { RuntimeTerminalCreate } from '../../../shared/runtime-types' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { createAgentSessionCreateOperation, toAgentLaunchPreferences, diff --git a/src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts b/src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts index be00d6b7098..b81d8994eae 100644 --- a/src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts +++ b/src/renderer/src/lib/runtime-pane-title-leaf-id.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' import { resolveRuntimePaneTitleForLeaf, resolveRuntimePaneTitleLeafResolution diff --git a/src/renderer/src/lib/runtime-pane-title-leaf-id.ts b/src/renderer/src/lib/runtime-pane-title-leaf-id.ts index c18e752e883..78c669cef66 100644 --- a/src/renderer/src/lib/runtime-pane-title-leaf-id.ts +++ b/src/renderer/src/lib/runtime-pane-title-leaf-id.ts @@ -1,6 +1,9 @@ import { FIRST_PANE_ID } from '../../../shared/pane-key' import { isTerminalLeafId } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../shared/terminal-tab-types' export type RuntimePaneTitleLeafResolution = { title: string | null diff --git a/src/renderer/src/lib/session-write-subscriber.ts b/src/renderer/src/lib/session-write-subscriber.ts index ba1e2c7cdd0..05e49127e81 100644 --- a/src/renderer/src/lib/session-write-subscriber.ts +++ b/src/renderer/src/lib/session-write-subscriber.ts @@ -1,6 +1,6 @@ import type { AppState } from '../store' import { isDecorativeAgentTitleFrameChange } from '../../../shared/agent-decorative-title-signature' -import type { WorkspaceSessionPatch } from '../../../shared/types' +import type { WorkspaceSessionPatch } from '../../../shared/workspace-session-state-types' import { SESSION_RELEVANT_FIELDS, shouldPersistWorkspaceSession } from './workspace-session' import { buildWorkspaceSessionPatch } from './workspace-session-patch' diff --git a/src/renderer/src/lib/setup-script-prompt.test.ts b/src/renderer/src/lib/setup-script-prompt.test.ts index 3ce55848f1c..b85c0baa66f 100644 --- a/src/renderer/src/lib/setup-script-prompt.test.ts +++ b/src/renderer/src/lib/setup-script-prompt.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import type { SetupScriptImportCandidate } from '../../../shared/setup-script-imports' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { getRepoHostIdentityForParts } from '@/store/slices/repo-host-identity' import { buildImportedHookSettings, diff --git a/src/renderer/src/lib/setup-script-prompt.ts b/src/renderer/src/lib/setup-script-prompt.ts index 6adbc04b092..a1315b1c73f 100644 --- a/src/renderer/src/lib/setup-script-prompt.ts +++ b/src/renderer/src/lib/setup-script-prompt.ts @@ -1,7 +1,8 @@ import { getDefaultRepoHookSettings } from '../../../shared/constants' import { resolveHookCommandSourcePolicy } from '../../../shared/hook-command-source-policy' import type { SetupScriptImportCandidate } from '../../../shared/setup-script-imports' -import type { Repo, RepoHookSettings } from '../../../shared/types' +import type { RepoHookSettings } from '../../../shared/orca-yaml-hook-types' +import type { Repo } from '../../../shared/repo-types' import type { HookCheckResult } from '@/runtime/runtime-hooks-client' import { isRuntimeScopeForbiddenError } from '@/runtime/runtime-rpc-client' import { hasEffectiveSetupCommand } from './setup-script-status' diff --git a/src/renderer/src/lib/setup-script-status.ts b/src/renderer/src/lib/setup-script-status.ts index a23d0d1a06f..33afbfbcc4a 100644 --- a/src/renderer/src/lib/setup-script-status.ts +++ b/src/renderer/src/lib/setup-script-status.ts @@ -1,5 +1,5 @@ import { resolveHookCommandSourcePolicy } from '../../../shared/hook-command-source-policy' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import type { HookCheckResult } from '@/runtime/runtime-hooks-client' export function hasEffectiveSetupCommand(repo: Repo, hooksResult: HookCheckResult): boolean { diff --git a/src/renderer/src/lib/simulator-palette-search.test.ts b/src/renderer/src/lib/simulator-palette-search.test.ts index 989f70554f6..4a0b33fcec5 100644 --- a/src/renderer/src/lib/simulator-palette-search.test.ts +++ b/src/renderer/src/lib/simulator-palette-search.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Tab, TabGroup, Worktree } from '../../../shared/types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { SIMULATOR_PALETTE_QUERY_MAX_BYTES, buildSearchableSimulatorTabs, diff --git a/src/renderer/src/lib/simulator-palette-search.ts b/src/renderer/src/lib/simulator-palette-search.ts index 148d723f8f2..5919fed1aed 100644 --- a/src/renderer/src/lib/simulator-palette-search.ts +++ b/src/renderer/src/lib/simulator-palette-search.ts @@ -1,5 +1,6 @@ import type { ExecutionHostId } from '../../../shared/execution-host' -import type { Tab, TabGroup, Worktree } from '../../../shared/types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' import { selectPaletteTypeAliasMatch } from './palette-type-alias-match' import { compareBaseSensitivityLocaleText } from './locale-text-collators' diff --git a/src/renderer/src/lib/simulator-tab-palette-activation.test.ts b/src/renderer/src/lib/simulator-tab-palette-activation.test.ts index 07c1090f622..745ed5a33e6 100644 --- a/src/renderer/src/lib/simulator-tab-palette-activation.test.ts +++ b/src/renderer/src/lib/simulator-tab-palette-activation.test.ts @@ -1,7 +1,8 @@ // @vitest-environment happy-dom import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Tab, TabGroup, Worktree } from '../../../shared/types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { useAppStore } from '@/store' import type { AppState } from '@/store/types' diff --git a/src/renderer/src/lib/sleeping-agent-pane-ownership.ts b/src/renderer/src/lib/sleeping-agent-pane-ownership.ts index 29cc0a0e6d9..4ebed782f56 100644 --- a/src/renderer/src/lib/sleeping-agent-pane-ownership.ts +++ b/src/renderer/src/lib/sleeping-agent-pane-ownership.ts @@ -4,7 +4,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/types' +} from '../../../shared/terminal-tab-types' import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../shared/stable-pane-id' import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' diff --git a/src/renderer/src/lib/smart-github-submit.ts b/src/renderer/src/lib/smart-github-submit.ts index 9d500d98eb9..fee799ce224 100644 --- a/src/renderer/src/lib/smart-github-submit.ts +++ b/src/renderer/src/lib/smart-github-submit.ts @@ -1,4 +1,5 @@ -import type { GitHubWorkItem, GitPushTarget } from '../../../shared/types' +import type { GitHubWorkItem } from '../../../shared/github/work-item-types' +import type { GitPushTarget } from '../../../shared/worktree/types' import type { TaskSourceContext } from '../../../shared/task-source-context' import { getTaskSourceCacheScope } from '../../../shared/task-source-context' import { getLinkedWorkItemWorkspaceName } from '../../../shared/workspace-name' diff --git a/src/renderer/src/lib/source-control-agent-action-plan.ts b/src/renderer/src/lib/source-control-agent-action-plan.ts index 05bc1de3c28..5e6681975e6 100644 --- a/src/renderer/src/lib/source-control-agent-action-plan.ts +++ b/src/renderer/src/lib/source-control-agent-action-plan.ts @@ -7,7 +7,7 @@ import { import { CLIENT_PLATFORM } from '@/lib/new-workspace' import { TUI_AGENT_CONFIG } from '../../../shared/tui-agent-config' import { isTuiAgentEnabled } from '../../../shared/tui-agent-selection' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { translate } from '@/i18n/i18n' import { resolveLocalWindowsAgentStartupShell } from '../../../shared/windows-terminal-shell' import type { SessionOptionValue } from '../../../shared/native-chat-session-options' diff --git a/src/renderer/src/lib/source-control-launch-agent-selection.test.ts b/src/renderer/src/lib/source-control-launch-agent-selection.test.ts index 63a053f0186..3ef15b580d9 100644 --- a/src/renderer/src/lib/source-control-launch-agent-selection.test.ts +++ b/src/renderer/src/lib/source-control-launch-agent-selection.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultSettings } from '../../../shared/constants' -import type { GlobalSettings, Repo, TuiAgent } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Repo } from '../../../shared/repo-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveSourceControlLaunchAgentScope, summarizeReposOverridingActionRecipe diff --git a/src/renderer/src/lib/source-control-launch-agent-selection.ts b/src/renderer/src/lib/source-control-launch-agent-selection.ts index c72098c9481..379f5640544 100644 --- a/src/renderer/src/lib/source-control-launch-agent-selection.ts +++ b/src/renderer/src/lib/source-control-launch-agent-selection.ts @@ -9,7 +9,9 @@ import type { SourceControlActionRecipe } from '../../../shared/source-control-ai-actions' import { filterEnabledTuiAgents } from '../../../shared/tui-agent-selection' -import type { GlobalSettings, Repo, TuiAgent } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Repo } from '../../../shared/repo-types' +import type { TuiAgent } from '../../../shared/tui-agent' export function readSourceControlLaunchRecipeAgentId( recipe: Pick | null | undefined diff --git a/src/renderer/src/lib/startup-ui-hydration.test.ts b/src/renderer/src/lib/startup-ui-hydration.test.ts index 13e954ca260..748c2619c9a 100644 --- a/src/renderer/src/lib/startup-ui-hydration.test.ts +++ b/src/renderer/src/lib/startup-ui-hydration.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultUIState } from '../../../shared/constants' -import type { PersistedUIState } from '../../../shared/types' +import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' import { getStartupErrorFallbackUI, hydratePersistedUIAfterStartupRead diff --git a/src/renderer/src/lib/startup-ui-hydration.ts b/src/renderer/src/lib/startup-ui-hydration.ts index aeb14f9c73e..fe53e945d0f 100644 --- a/src/renderer/src/lib/startup-ui-hydration.ts +++ b/src/renderer/src/lib/startup-ui-hydration.ts @@ -4,7 +4,7 @@ import { DEFAULT_STATUS_BAR_ITEMS, DEFAULT_WORKTREE_CARD_PROPERTIES } from '../../../shared/constants' -import type { PersistedUIState } from '../../../shared/types' +import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' export function hydratePersistedUIAfterStartupRead({ persistedUI, diff --git a/src/renderer/src/lib/tab-agent-status-index.test.ts b/src/renderer/src/lib/tab-agent-status-index.test.ts index 77ca75e4d2d..2f9f2793d16 100644 --- a/src/renderer/src/lib/tab-agent-status-index.test.ts +++ b/src/renderer/src/lib/tab-agent-status-index.test.ts @@ -14,7 +14,8 @@ import type { AgentStatusState, AgentType } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { RetainedAgentEntry } from '@/store/slices/agent-status' // ─── Oracle: the pre-index full-map scans, kept here (not in src) so the diff --git a/src/renderer/src/lib/tab-agent-status-index.ts b/src/renderer/src/lib/tab-agent-status-index.ts index daa1b4fb273..30dff454624 100644 --- a/src/renderer/src/lib/tab-agent-status-index.ts +++ b/src/renderer/src/lib/tab-agent-status-index.ts @@ -1,5 +1,5 @@ import type { AgentStatusEntry } from '../../../shared/agent-status-types' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' import { parsePaneKey } from '../../../shared/stable-pane-id' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import { agentTypeToIconAgent } from './agent-status' diff --git a/src/renderer/src/lib/tab-agent.test.ts b/src/renderer/src/lib/tab-agent.test.ts index 4d1f48837f1..3f564adbfb7 100644 --- a/src/renderer/src/lib/tab-agent.test.ts +++ b/src/renderer/src/lib/tab-agent.test.ts @@ -8,7 +8,8 @@ import { resolveSiblingTabAgent } from './tab-agent' import type { AgentStatusEntry, AgentType } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { RetainedAgentEntry } from '@/store/slices/agent-status' // Composed exactly the way useTabAgent layers the resolvers: focused pane diff --git a/src/renderer/src/lib/tab-agent.ts b/src/renderer/src/lib/tab-agent.ts index 5512ce5e8a5..a6b99b4164e 100644 --- a/src/renderer/src/lib/tab-agent.ts +++ b/src/renderer/src/lib/tab-agent.ts @@ -1,5 +1,6 @@ import type { AgentStatusEntry } from '../../../shared/agent-status-types' -import type { TerminalLayoutSnapshot, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { isTerminalLeafId, makePaneKey } from '../../../shared/stable-pane-id' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import { agentTypeToIconAgent } from './agent-status' diff --git a/src/renderer/src/lib/tab-number-shortcuts.test.ts b/src/renderer/src/lib/tab-number-shortcuts.test.ts index 4840e6aafd0..defee201fca 100644 --- a/src/renderer/src/lib/tab-number-shortcuts.test.ts +++ b/src/renderer/src/lib/tab-number-shortcuts.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Tab, TabGroup } from '../../../shared/types' +import type { Tab, TabGroup } from '../../../shared/tab-types' import type { AppState } from '@/store/types' import { resolveTabNumberShortcutTarget } from './tab-number-shortcuts' diff --git a/src/renderer/src/lib/tab-number-shortcuts.ts b/src/renderer/src/lib/tab-number-shortcuts.ts index 27a65675ce8..56968ad4eda 100644 --- a/src/renderer/src/lib/tab-number-shortcuts.ts +++ b/src/renderer/src/lib/tab-number-shortcuts.ts @@ -3,7 +3,7 @@ import { useAppStore } from '@/store' import type { AppState } from '@/store/types' import { getRuntimeEnvironmentIdForWorktree } from '@/lib/worktree-runtime-owner' import { dedupeTabOrder } from '@/store/slices/tab-group-state' -import type { Tab } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' import { activateWebRuntimeSessionTab, isWebRuntimeSessionActive diff --git a/src/renderer/src/lib/terminal-layout-equality.ts b/src/renderer/src/lib/terminal-layout-equality.ts index 716482764e8..fd023897cab 100644 --- a/src/renderer/src/lib/terminal-layout-equality.ts +++ b/src/renderer/src/lib/terminal-layout-equality.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../shared/terminal-tab-types' function sameStringRecord( a: Readonly> | undefined, diff --git a/src/renderer/src/lib/terminal-pane-title-sanitization.test.ts b/src/renderer/src/lib/terminal-pane-title-sanitization.test.ts index d7195203c2d..f65d463941b 100644 --- a/src/renderer/src/lib/terminal-pane-title-sanitization.test.ts +++ b/src/renderer/src/lib/terminal-pane-title-sanitization.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { sanitizeTerminalLayoutPaneTitles } from './terminal-pane-title-sanitization' const TAB: TerminalTab = { diff --git a/src/renderer/src/lib/terminal-pane-title-sanitization.ts b/src/renderer/src/lib/terminal-pane-title-sanitization.ts index 542562ceca9..14f94c9d166 100644 --- a/src/renderer/src/lib/terminal-pane-title-sanitization.ts +++ b/src/renderer/src/lib/terminal-pane-title-sanitization.ts @@ -2,7 +2,7 @@ import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/types' +} from '../../../shared/terminal-tab-types' function collectLeafIds(node: TerminalPaneLayoutNode | null): string[] { if (!node) { diff --git a/src/renderer/src/lib/terminal-quick-command-project-scope.test.ts b/src/renderer/src/lib/terminal-quick-command-project-scope.test.ts index bfde748ee85..4b428bafe50 100644 --- a/src/renderer/src/lib/terminal-quick-command-project-scope.test.ts +++ b/src/renderer/src/lib/terminal-quick-command-project-scope.test.ts @@ -1,7 +1,9 @@ import { describe, expect, it } from 'vitest' import type { ExecutionHostId } from '../../../shared/execution-host' import { projectHostSetupProjectionFromRepos } from '../../../shared/project-host-setup-projection' -import type { ProjectHostSetup, Repo, TerminalQuickCommand } from '../../../shared/types' +import type { ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' import { terminalQuickCommandMatchesWorkspaceProject } from './terminal-quick-command-project-scope' type ScopeSetup = Pick diff --git a/src/renderer/src/lib/terminal-quick-command-project-scope.ts b/src/renderer/src/lib/terminal-quick-command-project-scope.ts index 7b48a7b3ada..c7422c0228e 100644 --- a/src/renderer/src/lib/terminal-quick-command-project-scope.ts +++ b/src/renderer/src/lib/terminal-quick-command-project-scope.ts @@ -1,6 +1,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import { getTerminalQuickCommandScope } from '../../../shared/terminal-quick-commands' -import type { ProjectHostSetup, TerminalQuickCommand } from '../../../shared/types' +import type { ProjectHostSetup } from '../../../shared/project-types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' type TerminalQuickCommandProjectContext = { commandHostId: ExecutionHostId diff --git a/src/renderer/src/lib/terminal-quick-command-search.test.ts b/src/renderer/src/lib/terminal-quick-command-search.test.ts index 4d295e3c73d..6aab45e4ed2 100644 --- a/src/renderer/src/lib/terminal-quick-command-search.test.ts +++ b/src/renderer/src/lib/terminal-quick-command-search.test.ts @@ -5,7 +5,7 @@ import { TERMINAL_QUICK_COMMAND_SEARCH_QUERY_MAX_BYTES, searchTerminalQuickCommands } from './terminal-quick-command-search' -import type { TerminalQuickCommand } from '../../../shared/types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' const commands: TerminalQuickCommand[] = [ { diff --git a/src/renderer/src/lib/terminal-quick-command-search.ts b/src/renderer/src/lib/terminal-quick-command-search.ts index 8530e915d07..4c780dc3808 100644 --- a/src/renderer/src/lib/terminal-quick-command-search.ts +++ b/src/renderer/src/lib/terminal-quick-command-search.ts @@ -3,7 +3,7 @@ import { isTerminalAgentQuickCommand } from '../../../shared/terminal-quick-commands' import { isClipboardTextByteLengthOverLimit } from '../../../shared/clipboard-text' -import type { TerminalQuickCommand } from '../../../shared/types' +import type { TerminalQuickCommand } from '../../../shared/terminal-quick-command-types' type RankedCommand = { command: TerminalQuickCommand diff --git a/src/renderer/src/lib/terminal-theme.ts b/src/renderer/src/lib/terminal-theme.ts index e6db774a54c..365cb63f7b9 100644 --- a/src/renderer/src/lib/terminal-theme.ts +++ b/src/renderer/src/lib/terminal-theme.ts @@ -1,6 +1,6 @@ import type { ITheme } from '@xterm/xterm' import { getTheme, getThemeNames } from './terminal-themes-data' -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { makeCustomTerminalThemeSelection, normalizeTerminalCustomThemes, diff --git a/src/renderer/src/lib/unread-badge-count.test.ts b/src/renderer/src/lib/unread-badge-count.test.ts index fdf20dfab30..8d031579522 100644 --- a/src/renderer/src/lib/unread-badge-count.test.ts +++ b/src/renderer/src/lib/unread-badge-count.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab, Worktree } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { getUnreadBadgeCount } from './unread-badge-count' function worktree(id: string, isUnread: boolean): Worktree { diff --git a/src/renderer/src/lib/unread-badge-count.ts b/src/renderer/src/lib/unread-badge-count.ts index 79cd2ffa36b..8ffd7e02e2e 100644 --- a/src/renderer/src/lib/unread-badge-count.ts +++ b/src/renderer/src/lib/unread-badge-count.ts @@ -1,4 +1,5 @@ -import type { TerminalTab, Worktree } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' export function getUnreadBadgeCount({ worktreesByRepo, diff --git a/src/renderer/src/lib/update-check-click-options.ts b/src/renderer/src/lib/update-check-click-options.ts index 1734c4f1968..ffb7fa99900 100644 --- a/src/renderer/src/lib/update-check-click-options.ts +++ b/src/renderer/src/lib/update-check-click-options.ts @@ -1,4 +1,4 @@ -import type { UpdateCheckOptions } from '../../../shared/types' +import type { UpdateCheckOptions } from '../../../shared/update-status-types' import { getShortcutPlatform } from './shortcut-platform' type UpdateCheckClickEvent = Pick diff --git a/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts b/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts index abf724a67c1..a527a47758f 100644 --- a/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts +++ b/src/renderer/src/lib/use-tab-agent-opencode-native-title.test.ts @@ -6,7 +6,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume' import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { parseWorkspaceSession } from '../../../shared/workspace-session-schema' import { resolveTabAgentFromSignals, useTabAgent } from './use-tab-agent' diff --git a/src/renderer/src/lib/use-tab-agent-process-signals.test.ts b/src/renderer/src/lib/use-tab-agent-process-signals.test.ts index e69b27a814b..380d5ba1d91 100644 --- a/src/renderer/src/lib/use-tab-agent-process-signals.test.ts +++ b/src/renderer/src/lib/use-tab-agent-process-signals.test.ts @@ -6,7 +6,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import { makePaneKey } from '../../../shared/stable-pane-id' import type { PaneForegroundAgentEntry } from '@/store/slices/pane-foreground-agent' -import type { TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveLaunchedAgentExitEvidence, resolveTabAgentFromSignals, diff --git a/src/renderer/src/lib/use-tab-agent-retained-identity.test.ts b/src/renderer/src/lib/use-tab-agent-retained-identity.test.ts index cccc3e662fe..ddb579a6b72 100644 --- a/src/renderer/src/lib/use-tab-agent-retained-identity.test.ts +++ b/src/renderer/src/lib/use-tab-agent-retained-identity.test.ts @@ -7,7 +7,8 @@ import { useAppStore } from '@/store' import type { RetainedAgentEntry } from '@/store/slices/agent-status' import type { AgentStatusEntry, AgentType } from '../../../shared/agent-status-types' import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { useTabAgent } from './use-tab-agent' const initialAppState = useAppStore.getInitialState() diff --git a/src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts b/src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts index 3963dd881b9..37c7345771e 100644 --- a/src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts +++ b/src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts @@ -9,7 +9,8 @@ import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume' import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveTabAgentFromSignals, useTabAgent } from './use-tab-agent' const initialAppState = useAppStore.getInitialState() diff --git a/src/renderer/src/lib/use-tab-agent.test.ts b/src/renderer/src/lib/use-tab-agent.test.ts index a0bcbea57b1..26dbaf201e9 100644 --- a/src/renderer/src/lib/use-tab-agent.test.ts +++ b/src/renderer/src/lib/use-tab-agent.test.ts @@ -6,7 +6,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useAppStore } from '@/store' import type { AgentStatusEntry } from '../../../shared/agent-status-types' import { makePaneKey } from '../../../shared/stable-pane-id' -import type { TerminalLayoutSnapshot, TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { resolveTabAgentFromSignals, useTabAgent } from './use-tab-agent' const initialAppState = useAppStore.getInitialState() diff --git a/src/renderer/src/lib/use-tab-agent.ts b/src/renderer/src/lib/use-tab-agent.ts index 017126a860a..09afd63c43d 100644 --- a/src/renderer/src/lib/use-tab-agent.ts +++ b/src/renderer/src/lib/use-tab-agent.ts @@ -19,7 +19,8 @@ import { import { resolveCompatibleAgentTypeForOwner } from '../../../shared/agent-title-owner' import { isOpenCodeNativeTitle } from '../../../shared/opencode-terminal-title' import { resolvePaneAgentOwner } from '../../../shared/pane-agent-owner' -import type { TerminalTab, TuiAgent } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' // A shell name or the tab's neutral default title (where inferred-interrupt reset parks it); blank titles are no evidence. function titleShowsNoAgent(title: string, defaultTitle?: string): boolean { diff --git a/src/renderer/src/lib/workspace-activation-path-gate.test.ts b/src/renderer/src/lib/workspace-activation-path-gate.test.ts index d8110a747fb..8cec38ffa26 100644 --- a/src/renderer/src/lib/workspace-activation-path-gate.test.ts +++ b/src/renderer/src/lib/workspace-activation-path-gate.test.ts @@ -1,6 +1,7 @@ import { readFile } from 'node:fs/promises' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' import type { FolderWorkspacePathStatusReason } from '../../../shared/folder-workspace-path-status' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { resolveWindowShortcutAction } from '../../../shared/window-shortcut-policy' diff --git a/src/renderer/src/lib/workspace-port-localhost-label-selector.ts b/src/renderer/src/lib/workspace-port-localhost-label-selector.ts index 8e996cf6690..c5ac96299b5 100644 --- a/src/renderer/src/lib/workspace-port-localhost-label-selector.ts +++ b/src/renderer/src/lib/workspace-port-localhost-label-selector.ts @@ -1,5 +1,7 @@ import type { LocalhostWorktreeLabelRoute } from '../../../shared/localhost-worktree-labels' -import type { GlobalSettings, Project, Repo } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Project } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import type { WorkspacePort } from '../../../shared/workspace-ports' import { useAppStore } from '@/store' import { localhostWorktreeLabelRouteForPort } from './workspace-port-localhost-label' diff --git a/src/renderer/src/lib/workspace-port-localhost-label.ts b/src/renderer/src/lib/workspace-port-localhost-label.ts index 896af05dde0..c060d8ab374 100644 --- a/src/renderer/src/lib/workspace-port-localhost-label.ts +++ b/src/renderer/src/lib/workspace-port-localhost-label.ts @@ -1,5 +1,7 @@ import type { LocalhostWorktreeLabelRoute } from '../../../shared/localhost-worktree-labels' -import type { GlobalSettings, Project, Repo } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Project } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import type { WorkspacePort } from '../../../shared/workspace-ports' import { browserUrlForPort } from './workspace-port-urls' diff --git a/src/renderer/src/lib/workspace-runtime-host-ownership.ts b/src/renderer/src/lib/workspace-runtime-host-ownership.ts index 1b629a2fdc4..330ea86ad16 100644 --- a/src/renderer/src/lib/workspace-runtime-host-ownership.ts +++ b/src/renderer/src/lib/workspace-runtime-host-ownership.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { parseExecutionHostId, toRuntimeExecutionHostId, diff --git a/src/renderer/src/lib/workspace-session-browser-history.test.ts b/src/renderer/src/lib/workspace-session-browser-history.test.ts index 505110ac427..0ae2df2c872 100644 --- a/src/renderer/src/lib/workspace-session-browser-history.test.ts +++ b/src/renderer/src/lib/workspace-session-browser-history.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { BrowserHistoryEntry } from '../../../shared/types' +import type { BrowserHistoryEntry } from '../../../shared/browser-workspace-types' import { MAX_BROWSER_HISTORY_ENTRIES } from '../../../shared/workspace-session-browser-history' import { buildWorkspaceSessionPayload, type WorkspaceSessionSnapshot } from './workspace-session' diff --git a/src/renderer/src/lib/workspace-session-focus-recency.ts b/src/renderer/src/lib/workspace-session-focus-recency.ts index 2db18208975..bc1ed783e46 100644 --- a/src/renderer/src/lib/workspace-session-focus-recency.ts +++ b/src/renderer/src/lib/workspace-session-focus-recency.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' export function buildLastVisitedAtByWorktreeId(snapshot: { lastVisitedAtByWorktreeId: WorkspaceSessionState['lastVisitedAtByWorktreeId'] diff --git a/src/renderer/src/lib/workspace-session-host-field-ownership.ts b/src/renderer/src/lib/workspace-session-host-field-ownership.ts index db1ffe835bd..1b154a00a1d 100644 --- a/src/renderer/src/lib/workspace-session-host-field-ownership.ts +++ b/src/renderer/src/lib/workspace-session-host-field-ownership.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' export type WorkspaceSessionFieldOwnership = | 'global' diff --git a/src/renderer/src/lib/workspace-session-host-persistence.test.ts b/src/renderer/src/lib/workspace-session-host-persistence.test.ts index d86fc3ba927..29d166d0816 100644 --- a/src/renderer/src/lib/workspace-session-host-persistence.test.ts +++ b/src/renderer/src/lib/workspace-session-host-persistence.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../shared/workspace-scope' import { buildHostIdByWorktreeId, diff --git a/src/renderer/src/lib/workspace-session-host-persistence.ts b/src/renderer/src/lib/workspace-session-host-persistence.ts index 47a93b4d577..b84b50909f7 100644 --- a/src/renderer/src/lib/workspace-session-host-persistence.ts +++ b/src/renderer/src/lib/workspace-session-host-persistence.ts @@ -1,4 +1,8 @@ -import type { Repo, WorkspaceSessionPatch, WorkspaceSessionState } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { + WorkspaceSessionPatch, + WorkspaceSessionState +} from '../../../shared/workspace-session-state-types' import { getRepoExecutionHostId, LOCAL_EXECUTION_HOST_ID, diff --git a/src/renderer/src/lib/workspace-session-host-records.ts b/src/renderer/src/lib/workspace-session-host-records.ts index bb34dcde12a..766880817b1 100644 --- a/src/renderer/src/lib/workspace-session-host-records.ts +++ b/src/renderer/src/lib/workspace-session-host-records.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' export type WorkspaceSessionRecord = Record diff --git a/src/renderer/src/lib/workspace-session-host-split.test.ts b/src/renderer/src/lib/workspace-session-host-split.test.ts index 6e1448c076f..a3aff69a888 100644 --- a/src/renderer/src/lib/workspace-session-host-split.test.ts +++ b/src/renderer/src/lib/workspace-session-host-split.test.ts @@ -6,13 +6,10 @@ import { } from './workspace-session-host-split' import { getDefaultWorkspaceSession } from '../../../shared/constants' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' -import type { - BrowserPage, - Tab, - TerminalLayoutSnapshot, - TerminalTab, - WorkspaceSessionState -} from '../../../shared/types' +import type { BrowserPage } from '../../../shared/browser-workspace-types' +import type { Tab } from '../../../shared/tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' const RUNTIME_A: ExecutionHostId = 'runtime:env-a' const RUNTIME_B: ExecutionHostId = 'runtime:env-b' diff --git a/src/renderer/src/lib/workspace-session-host-split.ts b/src/renderer/src/lib/workspace-session-host-split.ts index 43343249589..103a1abcf63 100644 --- a/src/renderer/src/lib/workspace-session-host-split.ts +++ b/src/renderer/src/lib/workspace-session-host-split.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { LOCAL_EXECUTION_HOST_ID, type ExecutionHostId } from '../../../shared/execution-host' import { GLOBAL_WORKSPACE_SESSION_FIELDS, diff --git a/src/renderer/src/lib/workspace-session-hydration-keys.test.ts b/src/renderer/src/lib/workspace-session-hydration-keys.test.ts index 62f97f7b4c2..54248e45a38 100644 --- a/src/renderer/src/lib/workspace-session-hydration-keys.test.ts +++ b/src/renderer/src/lib/workspace-session-hydration-keys.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { collectFolderWorkspaceKeysFromSession, collectWorktreeHydrationRepoIdsFromSession diff --git a/src/renderer/src/lib/workspace-session-hydration-keys.ts b/src/renderer/src/lib/workspace-session-hydration-keys.ts index d4339e30cb6..bcfce2c9eae 100644 --- a/src/renderer/src/lib/workspace-session-hydration-keys.ts +++ b/src/renderer/src/lib/workspace-session-hydration-keys.ts @@ -1,6 +1,7 @@ import type { ExecutionHostId } from '../../../shared/execution-host' import { parseExecutionHostId } from '../../../shared/execution-host' -import type { WorkspaceKey, WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceKey } from '../../../shared/folder-workspace-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../../shared/worktree/id' diff --git a/src/renderer/src/lib/workspace-session-patch.test.ts b/src/renderer/src/lib/workspace-session-patch.test.ts index da578c1ff42..efe16ca0c5b 100644 --- a/src/renderer/src/lib/workspace-session-patch.test.ts +++ b/src/renderer/src/lib/workspace-session-patch.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import type { WorkspaceSessionSnapshot } from './workspace-session' import { buildWorkspaceSessionPatch } from './workspace-session-patch' diff --git a/src/renderer/src/lib/workspace-session-patch.ts b/src/renderer/src/lib/workspace-session-patch.ts index e88f476a8f6..a5ef39c29db 100644 --- a/src/renderer/src/lib/workspace-session-patch.ts +++ b/src/renderer/src/lib/workspace-session-patch.ts @@ -1,4 +1,7 @@ -import type { WorkspaceSessionPatch, WorkspaceSessionState } from '../../../shared/types' +import type { + WorkspaceSessionPatch, + WorkspaceSessionState +} from '../../../shared/workspace-session-state-types' import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session-browser-history' import { diff --git a/src/renderer/src/lib/workspace-session-reconnect-targets.ts b/src/renderer/src/lib/workspace-session-reconnect-targets.ts index 713e4388e53..1dc2ae717e1 100644 --- a/src/renderer/src/lib/workspace-session-reconnect-targets.ts +++ b/src/renderer/src/lib/workspace-session-reconnect-targets.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { parseAppSshPtyId } from '../../../shared/ssh-pty-id' import { isRuntimeOwnedSshTargetId } from '../../../shared/execution-host' import type { WorkspaceSessionSnapshot } from './workspace-session' diff --git a/src/renderer/src/lib/workspace-session-sleeping-agents.ts b/src/renderer/src/lib/workspace-session-sleeping-agents.ts index fc54bc1c524..29ee3d0fe6a 100644 --- a/src/renderer/src/lib/workspace-session-sleeping-agents.ts +++ b/src/renderer/src/lib/workspace-session-sleeping-agents.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' export function buildSleepingAgentSessionData(snapshot: { sleepingAgentSessionsByPaneKey?: WorkspaceSessionState['sleepingAgentSessionsByPaneKey'] diff --git a/src/renderer/src/lib/workspace-session-unified-tabs.ts b/src/renderer/src/lib/workspace-session-unified-tabs.ts index 359bdd8b2a8..38660c2ea3a 100644 --- a/src/renderer/src/lib/workspace-session-unified-tabs.ts +++ b/src/renderer/src/lib/workspace-session-unified-tabs.ts @@ -1,9 +1,5 @@ -import type { - Tab, - TabGroup, - TabGroupLayoutNode, - WorkspaceSessionState -} from '../../../shared/types' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import type { WorkspaceSessionSnapshot } from './workspace-session' type PersistedUnifiedTabSessionData = Pick< diff --git a/src/renderer/src/lib/workspace-session.ts b/src/renderer/src/lib/workspace-session.ts index cfe1bbf3034..aae9ce46eeb 100644 --- a/src/renderer/src/lib/workspace-session.ts +++ b/src/renderer/src/lib/workspace-session.ts @@ -1,10 +1,9 @@ +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { WorkspaceVisibleTabType } from '../../../shared/tab-types' import type { - BrowserPage, - BrowserWorkspace, PersistedOpenFile, - WorkspaceSessionState, - WorkspaceVisibleTabType -} from '../../../shared/types' + WorkspaceSessionState +} from '../../../shared/workspace-session-state-types' import { pruneLocalTerminalScrollbackBuffers } from '../../../shared/workspace-session-terminal-buffers' import { normalizeBrowserHistoryEntries } from '../../../shared/workspace-session-browser-history' import type { AppState } from '../store' diff --git a/src/renderer/src/lib/workspace-tab-palette-search.test.ts b/src/renderer/src/lib/workspace-tab-palette-search.test.ts index a2a7e147bc3..875e5f4573b 100644 --- a/src/renderer/src/lib/workspace-tab-palette-search.test.ts +++ b/src/renderer/src/lib/workspace-tab-palette-search.test.ts @@ -4,7 +4,9 @@ import type { RetainedAgentEntry } from '@/store/slices/agent-status' import type { OpenFile } from '@/store/slices/editor' import type { AgentStatusEntry } from '../../../shared/agent-status-types' import type { SleepingAgentSessionRecord } from '../../../shared/agent-session-resume' -import type { Tab, TabGroup, TerminalTab, Worktree } from '../../../shared/types' +import type { Tab, TabGroup } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { buildSearchableWorkspaceTabs, searchWorkspaceTabs } from './workspace-tab-palette-search' const WT_ROOT = path.join('tmp', 'wt-1') diff --git a/src/renderer/src/lib/workspace-tab-palette-search.ts b/src/renderer/src/lib/workspace-tab-palette-search.ts index 458a9b76240..dd33344cf13 100644 --- a/src/renderer/src/lib/workspace-tab-palette-search.ts +++ b/src/renderer/src/lib/workspace-tab-palette-search.ts @@ -4,7 +4,9 @@ import { resolveTerminalTabTitle, resolveUnifiedTabLabel } from '../../../shared/tab-title-resolution' -import type { Tab, TabContentType, TabGroup, TerminalTab, Worktree } from '../../../shared/types' +import type { Tab, TabContentType, TabGroup } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { buildAgentMetadataTabIndex, collectAgentMetadataFromIndex, diff --git a/src/renderer/src/lib/worktree-activation-automation-filter.test.ts b/src/renderer/src/lib/worktree-activation-automation-filter.test.ts index a6968e414e2..9e07ee425aa 100644 --- a/src/renderer/src/lib/worktree-activation-automation-filter.test.ts +++ b/src/renderer/src/lib/worktree-activation-automation-filter.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { useAppStore } from '@/store' import { activateAndRevealWorktree } from './worktree-activation' diff --git a/src/renderer/src/lib/worktree-activation-created-agent-test-state.ts b/src/renderer/src/lib/worktree-activation-created-agent-test-state.ts index 5cd35181547..6c0a50906c9 100644 --- a/src/renderer/src/lib/worktree-activation-created-agent-test-state.ts +++ b/src/renderer/src/lib/worktree-activation-created-agent-test-state.ts @@ -1,6 +1,6 @@ import path from 'node:path' import { vi } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { useAppStore } from '@/store' export function makeCreatedAgentWorktree(): Worktree { diff --git a/src/renderer/src/lib/worktree-activation-empty-remote.test.ts b/src/renderer/src/lib/worktree-activation-empty-remote.test.ts index 49f38e7aa7c..ffa5369a845 100644 --- a/src/renderer/src/lib/worktree-activation-empty-remote.test.ts +++ b/src/renderer/src/lib/worktree-activation-empty-remote.test.ts @@ -1,7 +1,7 @@ import path from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultSettings } from '../../../shared/constants' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { resetWebRuntimeWakeTerminalRespawnForTests } from '@/runtime/web-runtime-wake-terminal-respawn' import { resetWebSessionTabsSnapshotFreshnessForTests } from '@/runtime/web-session-tabs-sync' import { useAppStore } from '@/store' diff --git a/src/renderer/src/lib/worktree-activation.test.ts b/src/renderer/src/lib/worktree-activation.test.ts index 923cecd5aed..6223026f301 100644 --- a/src/renderer/src/lib/worktree-activation.test.ts +++ b/src/renderer/src/lib/worktree-activation.test.ts @@ -1,6 +1,6 @@ /* eslint-disable max-lines -- Why: these activation cases share one mock store and assert ordering across startup, setup, issue commands, and default tabs. */ import { afterEach, describe, expect, it, vi } from 'vitest' -import type { SetupScriptLaunchMode } from '../../../shared/types' +import type { SetupScriptLaunchMode } from '../../../shared/worktree/launch-types' import { SETUP_AGENT_SEQUENCE_STARTUP_SCRIPT_ENV } from '../../../shared/setup-agent-sequencing' import { activateAndRevealWorktree, ensureWorktreeHasInitialTerminal } from './worktree-activation' import { resetHookCommandDelayedDeliveryForTests } from './hook-command-delayed-delivery' diff --git a/src/renderer/src/lib/worktree-activation.ts b/src/renderer/src/lib/worktree-activation.ts index d27a18565ef..cd2f1bd1c5a 100644 --- a/src/renderer/src/lib/worktree-activation.ts +++ b/src/renderer/src/lib/worktree-activation.ts @@ -1,13 +1,13 @@ /* eslint-disable max-lines -- Why: worktree activation is a single ordered flow spanning startup, setup, issue commands, and default tabs; splitting it would obscure sequencing guarantees. */ +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Tab } from '../../../shared/tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { - FolderWorkspace, - GlobalSettings, SetupSplitDirection, - Tab, - TuiAgent, WorktreeDefaultTabsLaunch, WorktreeSetupLaunch -} from '../../../shared/types' +} from '../../../shared/worktree/launch-types' import type { EventProps } from '../../../shared/telemetry-events' import type { StartupCommandDelivery } from '../../../shared/codex-startup-delivery' import type { diff --git a/src/renderer/src/lib/worktree-activity-state.test.ts b/src/renderer/src/lib/worktree-activity-state.test.ts index 2aec8c2c648..c0e5855a598 100644 --- a/src/renderer/src/lib/worktree-activity-state.test.ts +++ b/src/renderer/src/lib/worktree-activity-state.test.ts @@ -5,7 +5,7 @@ import { hasActiveWorkspaceActivity, isInactiveWorkspace } from './worktree-activity-state' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import type { AgentStatusEntry } from '../../../shared/agent-status-types' const NOW = 10_000_000 diff --git a/src/renderer/src/lib/worktree-activity-state.ts b/src/renderer/src/lib/worktree-activity-state.ts index 827e6c91ceb..2f6e804dcc7 100644 --- a/src/renderer/src/lib/worktree-activity-state.ts +++ b/src/renderer/src/lib/worktree-activity-state.ts @@ -1,5 +1,5 @@ import { tabHasLivePty } from '@/lib/tab-has-live-pty' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import { isFreshNonDoneAgentStatus, type AgentStatusEntry diff --git a/src/renderer/src/lib/worktree-attachment-label.ts b/src/renderer/src/lib/worktree-attachment-label.ts index e79a83521f1..ac9998e16f0 100644 --- a/src/renderer/src/lib/worktree-attachment-label.ts +++ b/src/renderer/src/lib/worktree-attachment-label.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { basename } from './path' /** Shared by every "workspace attached to this work item" surface so GitHub, GitLab, diff --git a/src/renderer/src/lib/worktree-creation-agent-seeds.ts b/src/renderer/src/lib/worktree-creation-agent-seeds.ts index 295b5e5c06c..6abf478bd28 100644 --- a/src/renderer/src/lib/worktree-creation-agent-seeds.ts +++ b/src/renderer/src/lib/worktree-creation-agent-seeds.ts @@ -9,7 +9,7 @@ import { nativeChatRequiresLocalTranscript } from '@/lib/native-chat-supported-a import { getRuntimeEnvironmentIdForWorktree } from '@/lib/worktree-runtime-owner' import { toWebTerminalSurfaceTabId } from '@/runtime/web-terminal-surface-id' import type { WorktreeCreationRequest } from '@/lib/pending-worktree-creation' -import type { TuiAgent } from '../../../shared/types' +import type { TuiAgent } from '../../../shared/tui-agent' type AppStoreSnapshot = ReturnType diff --git a/src/renderer/src/lib/worktree-creation-flow.ts b/src/renderer/src/lib/worktree-creation-flow.ts index 7b9e1c6893a..93cd5cee2e4 100644 --- a/src/renderer/src/lib/worktree-creation-flow.ts +++ b/src/renderer/src/lib/worktree-creation-flow.ts @@ -18,7 +18,7 @@ import { formatWorkspaceCreateError, getWorkspaceCreateErrorToastMessage } from '@/lib/workspace-create-error-format' -import type { CreateWorktreeResult } from '../../../shared/types' +import type { CreateWorktreeResult } from '../../../shared/worktree/create-types' import { findPendingLinkedWorkItemCreationId, type WorktreeCreationPhase, diff --git a/src/renderer/src/lib/worktree-default-display-name.ts b/src/renderer/src/lib/worktree-default-display-name.ts index 765b6d084a1..1214036ce30 100644 --- a/src/renderer/src/lib/worktree-default-display-name.ts +++ b/src/renderer/src/lib/worktree-default-display-name.ts @@ -1,6 +1,6 @@ import { branchName } from '@/lib/git-utils' import { basename } from '@/lib/path' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' type WorktreeDisplayNameSource = Pick diff --git a/src/renderer/src/lib/worktree-display-name-order.test.ts b/src/renderer/src/lib/worktree-display-name-order.test.ts index 9c5875ba821..70477ca8454 100644 --- a/src/renderer/src/lib/worktree-display-name-order.test.ts +++ b/src/renderer/src/lib/worktree-display-name-order.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { compareWorktreeDisplayName } from './worktree-display-name-order' // displayName is typed `string`, but crash 99657ab1 proved it arrives undefined diff --git a/src/renderer/src/lib/worktree-display-name-order.ts b/src/renderer/src/lib/worktree-display-name-order.ts index 1b5bab8f4db..738db84d123 100644 --- a/src/renderer/src/lib/worktree-display-name-order.ts +++ b/src/renderer/src/lib/worktree-display-name-order.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' // Why: displayName is typed non-optional but arrives undefined at runtime for // persisted/discovered worktrees (crash 99657ab1); coalesce so it can't throw. diff --git a/src/renderer/src/lib/worktree-operation-route.test.ts b/src/renderer/src/lib/worktree-operation-route.test.ts index 8f2ef74d3b5..98878845e22 100644 --- a/src/renderer/src/lib/worktree-operation-route.test.ts +++ b/src/renderer/src/lib/worktree-operation-route.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { resolveWorktreeOperationRouteResult } from './worktree-operation-route' const WORKTREE_ID = 'repo-1::/srv/worktree' diff --git a/src/renderer/src/lib/worktree-palette-gitlab-url-match.ts b/src/renderer/src/lib/worktree-palette-gitlab-url-match.ts index a40c330208f..6fd291a7576 100644 --- a/src/renderer/src/lib/worktree-palette-gitlab-url-match.ts +++ b/src/renderer/src/lib/worktree-palette-gitlab-url-match.ts @@ -9,7 +9,8 @@ import { parseGitLabIssueOrMRLink, type ProjectSlug } from '../../../shared/new-workspace/gitlab-links' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' export type GitLabIssueOrMRLink = NonNullable> diff --git a/src/renderer/src/lib/worktree-palette-review-match.test.ts b/src/renderer/src/lib/worktree-palette-review-match.test.ts index c72710d2931..7c702522ed1 100644 --- a/src/renderer/src/lib/worktree-palette-review-match.test.ts +++ b/src/renderer/src/lib/worktree-palette-review-match.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it } from 'vitest' import { matchWorktreePaletteReview } from './worktree-palette-review-match' import { searchWorktrees } from './worktree-palette-search' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../shared/hosted-review' // Regression tests for the production crash (report c5d87873, macOS, Orca 1.4.147): diff --git a/src/renderer/src/lib/worktree-palette-search.test.ts b/src/renderer/src/lib/worktree-palette-search.test.ts index 6e0fa1848f9..2484600d666 100644 --- a/src/renderer/src/lib/worktree-palette-search.test.ts +++ b/src/renderer/src/lib/worktree-palette-search.test.ts @@ -4,7 +4,8 @@ import { WORKTREE_PALETTE_QUERY_MAX_BYTES, isWorktreePaletteQueryTooLarge } from './worktree-palette-query-bounds' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../shared/hosted-review' function makeWorktree(overrides: Partial = {}): Worktree { diff --git a/src/renderer/src/lib/worktree-palette-search.ts b/src/renderer/src/lib/worktree-palette-search.ts index a2fa082456f..7a90aced676 100644 --- a/src/renderer/src/lib/worktree-palette-search.ts +++ b/src/renderer/src/lib/worktree-palette-search.ts @@ -4,7 +4,8 @@ import { resolveWorktreeDisplayName } from './worktree-default-display-name' import type { HostedReviewInfo } from '../../../shared/hosted-review' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { extractWorktreePaletteCommentSnippet } from './worktree-palette-comment-snippet' import { isWorktreePaletteQueryTooLarge } from './worktree-palette-query-bounds' import { matchWorktreePaletteReview } from './worktree-palette-review-match' diff --git a/src/renderer/src/lib/worktree-palette-task-url-match.test.ts b/src/renderer/src/lib/worktree-palette-task-url-match.test.ts index 88691ac8bb6..0ccdf75d931 100644 --- a/src/renderer/src/lib/worktree-palette-task-url-match.test.ts +++ b/src/renderer/src/lib/worktree-palette-task-url-match.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { getCmdJTaskUrlCreatePreview, matchWorktreePaletteTaskUrl, diff --git a/src/renderer/src/lib/worktree-palette-task-url-match.ts b/src/renderer/src/lib/worktree-palette-task-url-match.ts index d16d135dcb1..854ba244c71 100644 --- a/src/renderer/src/lib/worktree-palette-task-url-match.ts +++ b/src/renderer/src/lib/worktree-palette-task-url-match.ts @@ -14,7 +14,8 @@ import { githubRepoIdentityKey } from '../../../shared/github/repository-identit import { parseGitLabIssueOrMRLink } from '../../../shared/new-workspace/gitlab-links' import { parseJiraIssueUrl, type ParsedJiraIssueUrl } from '../../../shared/jira-issue-url' import { parseLinearIssueUrlIntent, type LinearIssueUrlIntent } from '../../../shared/linear/links' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { normalizeLinearIdentifier } from './linear-issue-workspace-attachment' import { worktreeMatchesGitLabUrl, diff --git a/src/renderer/src/lib/worktree-runtime-owner-index.ts b/src/renderer/src/lib/worktree-runtime-owner-index.ts index 6a66d7e33f4..047976b4587 100644 --- a/src/renderer/src/lib/worktree-runtime-owner-index.ts +++ b/src/renderer/src/lib/worktree-runtime-owner-index.ts @@ -1,4 +1,7 @@ -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { getRepoExecutionHostId, parseExecutionHostId, diff --git a/src/renderer/src/lib/worktree-runtime-owner-state.ts b/src/renderer/src/lib/worktree-runtime-owner-state.ts index 6e65f7a1bcf..ee4da2d1569 100644 --- a/src/renderer/src/lib/worktree-runtime-owner-state.ts +++ b/src/renderer/src/lib/worktree-runtime-owner-state.ts @@ -1,11 +1,9 @@ import type { ExecutionHostId } from '../../../shared/execution-host' -import type { - FolderWorkspace, - GlobalSettings, - ProjectGroup, - Repo, - Worktree -} from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' export type WorktreeRuntimeOwnerState = { repos?: readonly Pick[] diff --git a/src/renderer/src/lib/worktree-runtime-owner.ts b/src/renderer/src/lib/worktree-runtime-owner.ts index 999ba347c6d..473b306eeaf 100644 --- a/src/renderer/src/lib/worktree-runtime-owner.ts +++ b/src/renderer/src/lib/worktree-runtime-owner.ts @@ -1,6 +1,7 @@ import { getRepoExecutionHostId, parseExecutionHostId } from '../../../shared/execution-host' import type { ExecutionHostId } from '../../../shared/execution-host' -import type { GlobalSettings, Worktree } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { Worktree } from '../../../shared/worktree/types' import { parseWorkspaceKey } from '../../../shared/workspace-scope' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { getRepoIdFromWorktreeId } from '@/store/slices/worktree-helpers' diff --git a/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts b/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts index 34bc7916164..78b71ef25da 100644 --- a/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts +++ b/src/renderer/src/lib/worktree-status-spinner-launch-agent.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { buildTitleDerivedAgentRows } from '@/components/sidebar/worktree-title-derived-agent-rows' -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import { getWorktreeStatus } from './worktree-status' const LEAF_ID = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts b/src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts index 906a44675cb..f66ecfea04d 100644 --- a/src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts +++ b/src/renderer/src/lib/worktree-status-terminal-layout-roots.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' import { resolveWorktreeStatus } from './worktree-status' const LEAF_ID_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/lib/worktree-status.test.ts b/src/renderer/src/lib/worktree-status.test.ts index be406bace19..bdea2105785 100644 --- a/src/renderer/src/lib/worktree-status.test.ts +++ b/src/renderer/src/lib/worktree-status.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../shared/terminal-tab-types' import { getWorktreeStatus, getWorktreeStatusLabel, resolveWorktreeStatus } from './worktree-status' const LEAF_ID_1 = '11111111-1111-4111-8111-111111111111' diff --git a/src/renderer/src/lib/worktree-status.ts b/src/renderer/src/lib/worktree-status.ts index 6f39d8c1e0b..91470f75409 100644 --- a/src/renderer/src/lib/worktree-status.ts +++ b/src/renderer/src/lib/worktree-status.ts @@ -6,9 +6,9 @@ import { containsAgentSpinnerGlyph } from '../../../shared/agent-title-core' import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode, - TerminalTab, - TuiAgent -} from '../../../shared/types' + TerminalTab +} from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import type { LiveAgentWorktreeStatus } from './worktree-activity-state' export type WorktreeStatus = 'active' | 'working' | 'permission' | 'done' | 'inactive' diff --git a/src/renderer/src/popout.tsx b/src/renderer/src/popout.tsx index 15f1be88fb6..c9b8e762d6b 100644 --- a/src/renderer/src/popout.tsx +++ b/src/renderer/src/popout.tsx @@ -13,7 +13,7 @@ import { buildAppFontFamily } from './lib/app-font-family' import { I18nProvider } from './i18n/I18nProvider' import { translate } from './i18n/i18n' import { useAppStore } from './store' -import type { GlobalSettings } from '../../shared/types' +import type { GlobalSettings } from '../../shared/global-settings-types' import { getOrCreateRendererRoot } from './lib/react-renderer-root' // Why: the pop-out window is a separate BrowserWindow with its own React root, diff --git a/src/renderer/src/runtime/close-mirrored-editor-tab.ts b/src/renderer/src/runtime/close-mirrored-editor-tab.ts index 749f7b8a642..3897d9ce2b6 100644 --- a/src/renderer/src/runtime/close-mirrored-editor-tab.ts +++ b/src/renderer/src/runtime/close-mirrored-editor-tab.ts @@ -5,7 +5,7 @@ import { import { recordWebSessionCloseIntent } from './web-session-close-intent' import { toHostSessionTabId } from '../../../shared/terminal-surface-id' import type { OpenFile } from '@/store/slices/editor' -import type { Tab } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' export type MirroredEditorCloseState = WorktreeRuntimeOwnerState & { openFiles: readonly OpenFile[] diff --git a/src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts b/src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts index 20a325a5d7d..320b736ac4e 100644 --- a/src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts +++ b/src/renderer/src/runtime/file-explorer-delete-owner-provenance.test.ts @@ -2,7 +2,10 @@ import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo, Worktree } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { useAppStore } from '@/store' import { useFileDeletion } from '@/components/right-sidebar/useFileDeletion' diff --git a/src/renderer/src/runtime/gitlab-job-trace-client.test.ts b/src/renderer/src/runtime/gitlab-job-trace-client.test.ts index 10ecd88884c..37bba45f66c 100644 --- a/src/renderer/src/runtime/gitlab-job-trace-client.test.ts +++ b/src/renderer/src/runtime/gitlab-job-trace-client.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { PRCheckDetail } from '../../../shared/types' +import type { PRCheckDetail } from '../../../shared/github/check-types' import { loadGitLabJobLogDetails } from './gitlab-job-trace-client' const callRuntimeRpc = vi.hoisted(() => vi.fn()) diff --git a/src/renderer/src/runtime/gitlab-job-trace-client.ts b/src/renderer/src/runtime/gitlab-job-trace-client.ts index 929c8581c1f..597b476dc05 100644 --- a/src/renderer/src/runtime/gitlab-job-trace-client.ts +++ b/src/renderer/src/runtime/gitlab-job-trace-client.ts @@ -4,7 +4,7 @@ import { gitLabJobTraceToCheckRunDetails } from '../../../shared/gitlab-job-trace-check-details' import type { GitLabJobTraceResult, GitLabProjectRef } from '../../../shared/gitlab-types' -import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/types' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../shared/github/check-types' import { getActiveRuntimeTarget } from './runtime-client-target' import { callRuntimeRpc } from './runtime-rpc-client' diff --git a/src/renderer/src/runtime/local-jira-search-cancellation.ts b/src/renderer/src/runtime/local-jira-search-cancellation.ts index c17d0199b63..37524987790 100644 --- a/src/renderer/src/runtime/local-jira-search-cancellation.ts +++ b/src/renderer/src/runtime/local-jira-search-cancellation.ts @@ -1,4 +1,4 @@ -import type { JiraIssue, JiraSiteSelection } from '../../../shared/types' +import type { JiraIssue, JiraSiteSelection } from '../../../shared/jira-types' import { createBrowserUuid } from '@/lib/browser-uuid' type LocalJiraSearchArgs = { jql: string; limit?: number; siteId?: JiraSiteSelection } diff --git a/src/renderer/src/runtime/remote-host-file-delete-repro.test.ts b/src/renderer/src/runtime/remote-host-file-delete-repro.test.ts index a9c144499c9..b91f61b48cd 100644 --- a/src/renderer/src/runtime/remote-host-file-delete-repro.test.ts +++ b/src/renderer/src/runtime/remote-host-file-delete-repro.test.ts @@ -2,7 +2,9 @@ import { act, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../shared/types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' import { useAppStore } from '@/store' import { folderWorkspaceKey } from '../../../shared/workspace-scope' import { useFileDeletion } from '@/components/right-sidebar/useFileDeletion' diff --git a/src/renderer/src/runtime/remote-host-file-open-repro.test.ts b/src/renderer/src/runtime/remote-host-file-open-repro.test.ts index 8359a602921..1c35465d5e4 100644 --- a/src/renderer/src/runtime/remote-host-file-open-repro.test.ts +++ b/src/renderer/src/runtime/remote-host-file-open-repro.test.ts @@ -21,7 +21,7 @@ * latches permanently even after the SSH repo finishes hydrating. */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' import { useAppStore } from '@/store' import { getConnectionIdForFile, isWorktreeConnectionResolved } from '@/lib/connection-context' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' diff --git a/src/renderer/src/runtime/remote-server-parity.test.ts b/src/renderer/src/runtime/remote-server-parity.test.ts index 41318a7248e..3c8b2fb62bb 100644 --- a/src/renderer/src/runtime/remote-server-parity.test.ts +++ b/src/renderer/src/runtime/remote-server-parity.test.ts @@ -15,7 +15,7 @@ import { beforeEach, describe, expect, it } from 'vitest' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' -import type { Tab } from '../../../shared/types' +import type { Tab } from '../../../shared/tab-types' import { applyFreshWebSessionTabsSnapshot, applyWebSessionTabsSnapshot, diff --git a/src/renderer/src/runtime/remote-server-update-coordinator.ts b/src/renderer/src/runtime/remote-server-update-coordinator.ts index 196699b6eed..2e8d729bd79 100644 --- a/src/renderer/src/runtime/remote-server-update-coordinator.ts +++ b/src/renderer/src/runtime/remote-server-update-coordinator.ts @@ -13,7 +13,7 @@ import type { } from '../../../shared/remote-server-update' import type { PublicKnownRuntimeEnvironment } from '../../../shared/runtime-environments' import type { RuntimeStatus } from '../../../shared/runtime-types' -import type { UpdateCheckOptions } from '../../../shared/types' +import type { UpdateCheckOptions } from '../../../shared/update-status-types' import { waitForReplacementRuntime } from './remote-server-restart-wait' import { remoteServerUpdateErrorMessage } from './remote-server-update-errors' import { pollRemoteServerUpdater } from './remote-server-updater-polling' diff --git a/src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts b/src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts index ce2510771c7..a47d09350ad 100644 --- a/src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts +++ b/src/renderer/src/runtime/remote-terminal-layout-resolution.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { TerminalPaneLayoutNode } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' import { layoutCoversLeaves, resolveTerminalLayoutRoot } from './remote-terminal-layout-resolution' const verticalSplit: TerminalPaneLayoutNode = { diff --git a/src/renderer/src/runtime/remote-terminal-layout-resolution.ts b/src/renderer/src/runtime/remote-terminal-layout-resolution.ts index 7070f55b57c..1691132227b 100644 --- a/src/renderer/src/runtime/remote-terminal-layout-resolution.ts +++ b/src/renderer/src/runtime/remote-terminal-layout-resolution.ts @@ -1,4 +1,4 @@ -import type { TerminalPaneLayoutNode } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' /** * Single source of truth for turning a set of terminal leaves into a layout diff --git a/src/renderer/src/runtime/runtime-client-target.ts b/src/renderer/src/runtime/runtime-client-target.ts index 6e553445401..1a0b8e4b8a4 100644 --- a/src/renderer/src/runtime/runtime-client-target.ts +++ b/src/renderer/src/runtime/runtime-client-target.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' export type RuntimeClientTarget = { kind: 'local' } | { kind: 'environment'; environmentId: string } diff --git a/src/renderer/src/runtime/runtime-file-client.ts b/src/renderer/src/runtime/runtime-file-client.ts index 788c1751359..e6df50d1f5b 100644 --- a/src/renderer/src/runtime/runtime-file-client.ts +++ b/src/renderer/src/runtime/runtime-file-client.ts @@ -1,14 +1,13 @@ /* eslint-disable max-lines -- Why: this client intentionally centralizes the file preload API plus remote runtime fallbacks so call sites cannot drift on local-vs-environment routing rules. */ +import type { SearchOptions, SearchResult } from '../../../shared/code-search-types' import type { DirEntry, FsChangedPayload, - GlobalSettings, - MarkdownDocument, - SearchOptions, - SearchResult -} from '../../../shared/types' + MarkdownDocument +} from '../../../shared/filesystem-entry-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RuntimeFilePreviewResult, RuntimeFileReadChunkResult, diff --git a/src/renderer/src/runtime/runtime-file-search-bounds.ts b/src/renderer/src/runtime/runtime-file-search-bounds.ts index b7823f783fd..6dd99e3c97c 100644 --- a/src/renderer/src/runtime/runtime-file-search-bounds.ts +++ b/src/renderer/src/runtime/runtime-file-search-bounds.ts @@ -1,4 +1,4 @@ -import type { SearchOptions, SearchResult } from '../../../shared/types' +import type { SearchOptions, SearchResult } from '../../../shared/code-search-types' import { isUtf8ByteLengthWithinLimit } from '../../../shared/utf8-byte-limits' export const RUNTIME_FILE_SEARCH_TEXT_MAX_BYTES = 8 * 1024 diff --git a/src/renderer/src/runtime/runtime-git-client.ts b/src/renderer/src/runtime/runtime-git-client.ts index ae5d2d2156d..eeb31ab3124 100644 --- a/src/renderer/src/runtime/runtime-git-client.ts +++ b/src/renderer/src/runtime/runtime-git-client.ts @@ -4,16 +4,17 @@ of reimplementing local-vs-environment branching per operation. */ import type { GitBranchCompareResult, GitCommitCompareResult, + GitDiffResult +} from '../../../shared/git-diff-compare-types' +import type { GitForkSyncExpectedUpstream, GitForkSyncResult } from '../../../shared/git-fork-sync' +import type { GitConflictOperation, - GitDiffResult, - GitForkSyncExpectedUpstream, - GitForkSyncResult, - GitPushTarget, GitStagingArea, GitStatusResult, - GitUpstreamStatus, - GlobalSettings -} from '../../../shared/types' + GitUpstreamStatus +} from '../../../shared/git-status-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { GitPushTarget } from '../../../shared/worktree/types' import type { CommitMessageAgentCapability, CommitMessageModelCapability diff --git a/src/renderer/src/runtime/runtime-hooks-client.ts b/src/renderer/src/runtime/runtime-hooks-client.ts index 61f67a6b8a0..ee70da86b3c 100644 --- a/src/renderer/src/runtime/runtime-hooks-client.ts +++ b/src/renderer/src/runtime/runtime-hooks-client.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, OrcaHooks } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { OrcaHooks } from '../../../shared/orca-yaml-hook-types' import { parseExecutionHostId, type ExecutionHostId } from '../../../shared/execution-host' import type { SetupScriptImportCandidate } from '../../../shared/setup-script-imports' import { callRuntimeRpc, getActiveRuntimeTarget } from './runtime-rpc-client' diff --git a/src/renderer/src/runtime/runtime-jira-client.ts b/src/renderer/src/runtime/runtime-jira-client.ts index 708addc5fcf..157b7b33e75 100644 --- a/src/renderer/src/runtime/runtime-jira-client.ts +++ b/src/renderer/src/runtime/runtime-jira-client.ts @@ -17,7 +17,7 @@ import type { JiraTransition, JiraUser, JiraViewer -} from '../../../shared/types' +} from '../../../shared/jira-types' import { searchLocalJiraIssues } from './local-jira-search-cancellation' import { callRuntimeRpc, RuntimeRpcCallError } from './runtime-rpc-client' import { isRuntimeProviderSearchQueryWithinLimit } from './runtime-provider-search-bounds' diff --git a/src/renderer/src/runtime/runtime-jira-summary-client.ts b/src/renderer/src/runtime/runtime-jira-summary-client.ts index 48f8ffbf46d..3276a5765dc 100644 --- a/src/renderer/src/runtime/runtime-jira-summary-client.ts +++ b/src/renderer/src/runtime/runtime-jira-summary-client.ts @@ -1,4 +1,4 @@ -import type { JiraConnectionStatus, JiraIssue } from '../../../shared/types' +import type { JiraConnectionStatus, JiraIssue } from '../../../shared/jira-types' import { createBrowserUuid } from '@/lib/browser-uuid' import { callRuntimeRpc } from './runtime-rpc-client' import { getJiraRuntimeTarget, type RuntimeJiraSettings } from './runtime-jira-target' diff --git a/src/renderer/src/runtime/runtime-jira-target.ts b/src/renderer/src/runtime/runtime-jira-target.ts index b00a37d27ef..610ac82c0b1 100644 --- a/src/renderer/src/runtime/runtime-jira-target.ts +++ b/src/renderer/src/runtime/runtime-jira-target.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { getTaskSourceRuntimeSettings, type TaskSourceContext diff --git a/src/renderer/src/runtime/runtime-linear-client.ts b/src/renderer/src/runtime/runtime-linear-client.ts index 94d6be6197c..d960923075e 100644 --- a/src/renderer/src/runtime/runtime-linear-client.ts +++ b/src/renderer/src/runtime/runtime-linear-client.ts @@ -1,24 +1,25 @@ /* eslint-disable max-lines -- Why: the renderer Linear client mirrors the preload/RPC Linear namespace so local and remote runtime routing stays in one auditable boundary. */ +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { LinearIssueUpdate } from '../../../shared/issue-mutation-types' +import type { LinearComment, LinearIssue } from '../../../shared/linear/issue-types' import type { - GlobalSettings, - LinearComment, - LinearCollectionResult, - LinearConnectionStatus, LinearCustomViewModel, LinearCustomViewSummary, - LinearIssue, - LinearIssueUpdate, + LinearProjectDetail, + LinearProjectSummary +} from '../../../shared/linear/project-types' +import type { + LinearCollectionResult, + LinearConnectionStatus, LinearLabel, LinearMember, - LinearProjectDetail, - LinearProjectSummary, LinearTeam, LinearViewer, - LinearWorkspaceSelection, - LinearWorkflowState -} from '../../../shared/types' + LinearWorkflowState, + LinearWorkspaceSelection +} from '../../../shared/linear/workspace-types' import { callRuntimeRpc, getActiveRuntimeTarget, diff --git a/src/renderer/src/runtime/runtime-provider-accounts-client.test.ts b/src/renderer/src/runtime/runtime-provider-accounts-client.test.ts index 2bd3f65e8d9..decdaf86e8a 100644 --- a/src/renderer/src/runtime/runtime-provider-accounts-client.test.ts +++ b/src/renderer/src/runtime/runtime-provider-accounts-client.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { ClaudeRateLimitAccountsState, CodexRateLimitAccountsState -} from '../../../shared/types' +} from '../../../shared/managed-account-types' import { fetchProviderAccountsSnapshot, removeClaudeProviderAccount, diff --git a/src/renderer/src/runtime/runtime-provider-accounts-client.ts b/src/renderer/src/runtime/runtime-provider-accounts-client.ts index 6a43ddf8a6e..2620a55cf2f 100644 --- a/src/renderer/src/runtime/runtime-provider-accounts-client.ts +++ b/src/renderer/src/runtime/runtime-provider-accounts-client.ts @@ -1,8 +1,8 @@ +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { ClaudeRateLimitAccountsState, - CodexRateLimitAccountsState, - GlobalSettings -} from '../../../shared/types' + CodexRateLimitAccountsState +} from '../../../shared/managed-account-types' import type { RateLimitState } from '../../../shared/rate-limit-types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import { callRuntimeRpc, getActiveRuntimeTarget, RuntimeRpcCallError } from './runtime-rpc-client' diff --git a/src/renderer/src/runtime/runtime-repo-client.ts b/src/renderer/src/runtime/runtime-repo-client.ts index 6a916d1c67c..67f9a24d0cc 100644 --- a/src/renderer/src/runtime/runtime-repo-client.ts +++ b/src/renderer/src/runtime/runtime-repo-client.ts @@ -1,4 +1,5 @@ -import type { BaseRefSearchResult, GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { BaseRefSearchResult } from '../../../shared/repo-types' import { legacyBaseRefSearchResult } from '../../../shared/base-ref-search-result' import { callRuntimeRpc, getActiveRuntimeTarget } from './runtime-rpc-client' import { isRuntimeRepoRefSearchQueryWithinLimit } from './runtime-repo-search-bounds' diff --git a/src/renderer/src/runtime/runtime-server-directory-browser.ts b/src/renderer/src/runtime/runtime-server-directory-browser.ts index b28e7755f16..b420bd70312 100644 --- a/src/renderer/src/runtime/runtime-server-directory-browser.ts +++ b/src/renderer/src/runtime/runtime-server-directory-browser.ts @@ -1,4 +1,4 @@ -import type { DirEntry, FilesystemPathFlavor } from '../../../shared/types' +import type { DirEntry, FilesystemPathFlavor } from '../../../shared/filesystem-entry-types' import { sortDirEntries } from '../../../shared/file-name-sort' import { callRuntimeRpc } from './runtime-rpc-client' diff --git a/src/renderer/src/runtime/runtime-terminal-inspection.ts b/src/renderer/src/runtime/runtime-terminal-inspection.ts index 741d381e11f..29be1aed435 100644 --- a/src/renderer/src/runtime/runtime-terminal-inspection.ts +++ b/src/renderer/src/runtime/runtime-terminal-inspection.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import type { RuntimeTerminalSend } from '../../../shared/runtime-types' import { makePaneKey } from '../../../shared/stable-pane-id' import { isTerminalInputTooLargeWithDeferredMeasurement } from '../../../shared/terminal-input' diff --git a/src/renderer/src/runtime/runtime-terminal-stream.ts b/src/renderer/src/runtime/runtime-terminal-stream.ts index af5ffdd6f97..327e8d3e904 100644 --- a/src/renderer/src/runtime/runtime-terminal-stream.ts +++ b/src/renderer/src/runtime/runtime-terminal-stream.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../shared/types' +import type { GlobalSettings } from '../../../shared/global-settings-types' import { RuntimeRpcCallError, getActiveRuntimeTarget } from './runtime-rpc-client' import { getRemoteRuntimeTerminalMultiplexer } from './remote-runtime-terminal-multiplexer' diff --git a/src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts b/src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts index 1d01c5689d6..eb5767ba854 100644 --- a/src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts +++ b/src/renderer/src/runtime/sync-runtime-graph-automation-leaf.test.ts @@ -1,7 +1,7 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { RuntimeSyncWindowGraph } from '../../../shared/runtime-types' import type { AppState } from '../store/types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' // Why: Part B publishes never-mounted background automation tabs into the // runtime graph, gated on a live eager buffer. Stub the eager-buffer lookup so diff --git a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts index f23a0f04a4a..fc000ae31b8 100644 --- a/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts +++ b/src/renderer/src/runtime/sync-runtime-graph-scheduling.test.ts @@ -9,7 +9,7 @@ import { setRuntimeGraphSyncEnabled } from './sync-runtime-graph' import type { AppState } from '../store/types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' function makeState(overrides: Partial = {}): AppState { return { diff --git a/src/renderer/src/runtime/sync-runtime-graph.ts b/src/renderer/src/runtime/sync-runtime-graph.ts index 52872628116..2422a31b3c7 100644 --- a/src/renderer/src/runtime/sync-runtime-graph.ts +++ b/src/renderer/src/runtime/sync-runtime-graph.ts @@ -26,14 +26,12 @@ import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/sta import { isWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' import { isClaudeManagementTitle } from '../../../shared/agent-detection' import { parseWorkspaceKey } from '../../../shared/workspace-scope' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' import type { - Tab, - TabGroup, - TabGroupLayoutNode, TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/types' +} from '../../../shared/terminal-tab-types' import { resolveTerminalTabTitle } from '../../../shared/tab-title-resolution' import { isNativeChatTabWideFallbackSafe, diff --git a/src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts b/src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts index fc28095e136..be02031255c 100644 --- a/src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts +++ b/src/renderer/src/runtime/use-runtime-session-mirror-environment-key.test.ts @@ -4,7 +4,8 @@ import { act, cleanup, renderHook } from '@testing-library/react' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { shallow } from 'zustand/shallow' import { getDefaultSettings } from '../../../shared/constants' -import type { ProjectGroup, Repo } from '../../../shared/types' +import type { ProjectGroup } from '../../../shared/project-group-types' +import type { Repo } from '../../../shared/repo-types' import type * as RuntimeSessionMirrorTargetsModule from '@/lib/runtime-session-mirror-targets' import { makeWorktree } from '@/store/slices/store-test-helpers' diff --git a/src/renderer/src/runtime/web-runtime-session.test.ts b/src/renderer/src/runtime/web-runtime-session.test.ts index ba309a39f91..115edd0ce99 100644 --- a/src/renderer/src/runtime/web-runtime-session.test.ts +++ b/src/renderer/src/runtime/web-runtime-session.test.ts @@ -638,6 +638,110 @@ describe('createWebRuntimeSessionBrowserTab', () => { expect(mocks.createBrowserTab).not.toHaveBeenCalled() }) + it('cleans up a known page identity when the create acknowledgement is lost', async () => { + mocks.getState.mockReturnValue({ + ...mocks.getState(), + runtimeStatusByEnvironmentId: new Map([ + [ + ENVIRONMENT_ID, + { + status: { + capabilities: ['browser.screencast.v1', 'browser.tab-create-known-id.v1'] + }, + checkedAt: 1 + } + ] + ]) + }) + const runtimeCall = vi + .fn() + .mockResolvedValueOnce({ + id: 'create-lost', + ok: false, + error: { code: 'runtime_timeout', message: 'response lost' } + }) + .mockResolvedValueOnce({ + id: 'close-missing', + ok: false, + error: { code: 'browser_tab_not_found', message: 'page was not created' } + }) + vi.stubGlobal('window', { api: { runtimeEnvironments: { call: runtimeCall } } }) + + await expect( + createWebRuntimeSessionBrowserTab({ + worktreeId: WORKTREE_ID, + url: 'https://example.com/', + waitForRegistration: true + }) + ).resolves.toBe(false) + + const createPage = runtimeCall.mock.calls[0]?.[0].params.page + expect(createPage).toMatch(/^[0-9a-f-]{36}$/) + expect(runtimeCall).toHaveBeenNthCalledWith(2, { + selector: ENVIRONMENT_ID, + method: 'browser.tabClose', + params: { worktree: `id:${WORKTREE_ID}`, page: createPage }, + timeoutMs: 15_000 + }) + }) + + it('materializes an owner-pinned tab without waiting for its navigation', async () => { + mocks.getState.mockReturnValue({ + ...mocks.getState(), + runtimeStatusByEnvironmentId: new Map([ + [ + ENVIRONMENT_ID, + { + status: { + capabilities: ['browser.screencast.v1', 'browser.tab-create-known-id.v1'] + }, + checkedAt: 1 + } + ] + ]) + }) + let resolveNavigation!: (value: unknown) => void + const navigation = new Promise((resolve) => { + resolveNavigation = resolve + }) + const runtimeCall = vi.fn((request: { method: string; params: { page?: string } }) => { + if (request.method === 'browser.tabCreate') { + return Promise.resolve({ + id: 'create', + ok: true, + result: { browserPageId: request.params.page } + }) + } + if (request.method === 'browser.goto') { + return navigation + } + return Promise.resolve({ id: 'list', ok: true, result: makeSnapshot() }) + }) + vi.stubGlobal('window', { api: { runtimeEnvironments: { call: runtimeCall } } }) + + const created = createWebRuntimeSessionBrowserTab({ + worktreeId: WORKTREE_ID, + url: 'https://example.com/slow', + waitForRegistration: true + }) + + await expect(created).resolves.toBe(true) + expect(runtimeCall.mock.calls.map(([request]) => request.method)).toEqual([ + 'browser.tabCreate', + 'browser.goto', + 'session.tabs.list' + ]) + expect(runtimeCall.mock.calls[0]?.[0].params).toMatchObject({ + url: undefined, + waitForRegistration: true + }) + expect(runtimeCall.mock.calls[1]?.[0].params).toMatchObject({ + page: runtimeCall.mock.calls[0]?.[0].params.page, + url: 'https://example.com/slow' + }) + resolveNavigation({ id: 'goto', ok: true, result: { url: 'https://example.com/slow' } }) + }) + it.each(['browser_error', 'invalid_argument', 'method_not_found'])( 'reports a definitive browser-create %s as a soft failure', async (code) => { diff --git a/src/renderer/src/runtime/web-runtime-session.ts b/src/renderer/src/runtime/web-runtime-session.ts index 164edbed4b7..0f4bae03f6a 100644 --- a/src/renderer/src/runtime/web-runtime-session.ts +++ b/src/renderer/src/runtime/web-runtime-session.ts @@ -19,14 +19,18 @@ import type { SleepingAgentLaunchConfig, AgentProviderSessionMetadata } from '../../../shared/agent-session-resume' -import { AGENT_SESSION_OMP_RESUME_PATH_RUNTIME_CAPABILITY } from '../../../shared/protocol-version' +import { + AGENT_SESSION_OMP_RESUME_PATH_RUNTIME_CAPABILITY, + BROWSER_TAB_CREATE_KNOWN_ID_RUNTIME_CAPABILITY +} from '../../../shared/protocol-version' import type { AgentLaunchPreferences, AgentPromptDelivery, RuntimeCreateAgentSessionResult, RuntimeEnsureAgentSessionResult } from '../../../shared/agent-session-host-authority' -import type { TerminalPaneLayoutNode, TuiAgent } from '../../../shared/types' +import type { TerminalPaneLayoutNode } from '../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../shared/tui-agent' import { createBrowserUuid } from '../lib/browser-uuid' import { getRuntimeEnvironmentIdForWorktree } from '../lib/worktree-runtime-owner' import { useAppStore } from '../store' @@ -482,6 +486,10 @@ export async function createWebRuntimeSessionBrowserTab(args: { const shouldFocusOnCreate = args.focusOnCreate !== false const shouldSelectWorktree = args.selectWorktree !== false const provisionalPageId = createBrowserUuid() + const hostSupportsKnownPageId = useAppStore + .getState() + .runtimeStatusByEnvironmentId?.get(environmentId) + ?.status?.capabilities?.includes(BROWSER_TAB_CREATE_KNOWN_ID_RUNTIME_CAPABILITY) let unsubscribeFocusGuard = (): void => {} let guardedPageId = provisionalPageId let createdPageId: string | null = null @@ -540,12 +548,15 @@ export async function createWebRuntimeSessionBrowserTab(args: { }) } createAttempted = true + const navigateAfterCreate = + args.waitForRegistration === true && args.url && args.url !== 'about:blank' const created = unwrapRuntimeRpcResult( (await callEnvironment({ method: 'browser.tabCreate', params: { worktree: toRuntimeWorktreeSelector(args.worktreeId), - url: args.url, + url: navigateAfterCreate ? undefined : args.url, + ...(hostSupportsKnownPageId ? { page: provisionalPageId } : {}), profileId: args.profileId ?? undefined, activate: shouldFocusOnCreate, // Why: place the new browser in the clicked split group so the host snapshot is authoritative for it (no left-snap). @@ -557,6 +568,24 @@ export async function createWebRuntimeSessionBrowserTab(args: { })) as RuntimeRpcResponse ) createdPageId = created.browserPageId + if (navigateAfterCreate) { + void callEnvironment({ + method: 'browser.goto', + params: { + worktree: toRuntimeWorktreeSelector(args.worktreeId), + page: created.browserPageId, + url: args.url + }, + timeoutMs: 15_000 + }) + .then((response) => unwrapRuntimeRpcResult(response)) + .catch((error) => { + console.warn( + '[web-runtime-session] created browser tab navigation failed:', + error instanceof Error ? error.message : String(error) + ) + }) + } await pauseAfterE2eWebRuntimeBrowserCreate(created.browserPageId) if (created.browserPageId !== provisionalPageId) { moveWebSessionBrowserPlacement({ @@ -635,7 +664,11 @@ export async function createWebRuntimeSessionBrowserTab(args: { } catch (error) { unsubscribeFocusGuard() let recoveryError: unknown = null - const createOutcomeUnknown = !createdPageId && !isDefinitiveBrowserCreateFailure(error) + const createFailureDefinitive = isDefinitiveBrowserCreateFailure(error) + const cleanupPageId = + createdPageId ?? + (!createFailureDefinitive && hostSupportsKnownPageId ? provisionalPageId : null) + const createOutcomeUnknown = !cleanupPageId && !createFailureDefinitive const ownsClientGroupCleanup = args.clientTargetGroupId ? releaseWebSessionBrowserPlacementGroup({ environmentId, @@ -652,14 +685,14 @@ export async function createWebRuntimeSessionBrowserTab(args: { remotePageId: guardedPageId }) } - if (createdPageId) { + if (cleanupPageId) { try { const closeResult = unwrapRuntimeRpcResult( (await callEnvironment({ method: 'browser.tabClose', params: { worktree: toRuntimeWorktreeSelector(args.worktreeId), - page: createdPageId + page: cleanupPageId }, timeoutMs: 15_000 })) as RuntimeRpcResponse<{ closed: boolean }> @@ -677,17 +710,25 @@ export async function createWebRuntimeSessionBrowserTab(args: { useAppStore.getState(), environmentId, args.worktreeId, - createdPageId + cleanupPageId ) ) { throw new Error('The closed browser tab remained materialized in the client.') } } catch (cleanupError) { - recoveryError = cleanupError - console.warn( - '[web-runtime-session] failed to clean up unreconciled browser tab:', - cleanupError instanceof Error ? cleanupError.message : String(cleanupError) - ) + if ( + !createdPageId && + hostSupportsKnownPageId && + hasRuntimeRpcErrorCode(cleanupError, 'browser_tab_not_found') + ) { + recoveryError = null + } else { + recoveryError = cleanupError + console.warn( + '[web-runtime-session] failed to clean up unreconciled browser tab:', + cleanupError instanceof Error ? cleanupError.message : String(cleanupError) + ) + } } } if (shouldFocusOnCreate) { diff --git a/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts b/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts index 317065d7c81..c58c6471a16 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync-mirror-identity.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it } from 'vitest' import { createStore } from 'zustand/vanilla' import type { RuntimeMobileSessionTabsResult } from '../../../shared/runtime-types' import { toWebTerminalSurfaceTabId } from '../../../shared/terminal-surface-id' -import type { BrowserCertificateFailure } from '../../../shared/types' +import type { BrowserCertificateFailure } from '../../../shared/browser-workspace-types' import { applyWebSessionTabsSnapshot, applyWebSessionTabsSnapshots, diff --git a/src/renderer/src/runtime/web-session-tabs-sync.test.ts b/src/renderer/src/runtime/web-session-tabs-sync.test.ts index e830e027208..07e95685c23 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync.test.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync.test.ts @@ -20,13 +20,9 @@ import { recordWebSessionReorderIntent, resetWebSessionReorderIntentForTests } from './web-session-reorder-intent' -import type { - BrowserPage, - BrowserWorkspace, - Tab, - TabGroupLayoutNode, - TerminalTab -} from '../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../shared/browser-workspace-types' +import type { Tab, TabGroupLayoutNode } from '../../../shared/tab-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import type { OpenFile } from '../store/slices/editor' import { confirmWebAgentSessionHandoffAfterCreate, diff --git a/src/renderer/src/runtime/web-session-tabs-sync.ts b/src/renderer/src/runtime/web-session-tabs-sync.ts index 8de495919d7..9ee15c8421f 100644 --- a/src/renderer/src/runtime/web-session-tabs-sync.ts +++ b/src/renderer/src/runtime/web-session-tabs-sync.ts @@ -22,13 +22,10 @@ import type { import type { BrowserCertificateFailure, BrowserPage, - BrowserWorkspace, - Tab, - TabGroup, - TabGroupLayoutNode, - TerminalLayoutSnapshot, - TerminalTab -} from '../../../shared/types' + BrowserWorkspace +} from '../../../shared/browser-workspace-types' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../shared/terminal-tab-types' import type { OpenFile } from '../store/slices/editor' import { isTerminalLeafId, makePaneKey, parsePaneKey } from '../../../shared/stable-pane-id' import { getRemoteRuntimePtyEnvironmentId, toRemoteRuntimePtyId } from './runtime-terminal-stream' diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts index 5e56142bcf8..ee57dd610e2 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-recovery.ts @@ -3,7 +3,7 @@ import type { RuntimeTerminalListResult, RuntimeTerminalOrphanAdoptionResult } from '../../../shared/runtime-types' -import type { TerminalTab } from '../../../shared/types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import { parseRemoteRuntimePtyId } from './runtime-terminal-stream' import { toRuntimeWorktreeSelector } from './runtime-worktree-selector' diff --git a/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts b/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts index 5d7e0a9db8f..1d1dd242129 100644 --- a/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts +++ b/src/renderer/src/runtime/web-session-terminal-orphan-topology.ts @@ -1,11 +1,10 @@ import type { RuntimeTerminalOrphanTopology } from '../../../shared/runtime-types' +import type { TabGroup, TabGroupLayoutNode } from '../../../shared/tab-types' import type { - TabGroup, - TabGroupLayoutNode, TerminalLayoutSnapshot, TerminalPaneLayoutNode, TerminalTab -} from '../../../shared/types' +} from '../../../shared/terminal-tab-types' import { toHostSessionTabId } from './web-terminal-surface-id' export type WebTerminalOrphanTopologyState = { diff --git a/src/renderer/src/store/project-host-setup-selector-normalization.ts b/src/renderer/src/store/project-host-setup-selector-normalization.ts index acc7e6f4edf..154ee4e5ea0 100644 --- a/src/renderer/src/store/project-host-setup-selector-normalization.ts +++ b/src/renderer/src/store/project-host-setup-selector-normalization.ts @@ -1,4 +1,5 @@ -import type { Project, ProjectHostSetup, Repo } from '../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' +import type { Repo } from '../../../shared/repo-types' import { getProjectIdentityKey, type ProjectHostSetupProjection diff --git a/src/renderer/src/store/project-host-setup-selector.ts b/src/renderer/src/store/project-host-setup-selector.ts index c3e1f9269dc..55ba345f5ba 100644 --- a/src/renderer/src/store/project-host-setup-selector.ts +++ b/src/renderer/src/store/project-host-setup-selector.ts @@ -1,4 +1,4 @@ -import type { Project, ProjectHostSetup } from '../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../shared/project-types' import { projectHostSetupProjectionFromRepos, type ProjectHostSetupProjection diff --git a/src/renderer/src/store/right-sidebar-route.ts b/src/renderer/src/store/right-sidebar-route.ts index 38bddf68e1a..e0b2bc0fa1b 100644 --- a/src/renderer/src/store/right-sidebar-route.ts +++ b/src/renderer/src/store/right-sidebar-route.ts @@ -1,4 +1,7 @@ -import type { ActiveRightSidebarTab, RightSidebarExplorerView } from '../../../shared/types' +import type { + ActiveRightSidebarTab, + RightSidebarExplorerView +} from '../../../shared/ui-chrome-types' import { isPluginPanelTabKey } from '../../../shared/plugins/plugin-manifest' export type RightSidebarRoute = { diff --git a/src/renderer/src/store/selectors.test.ts b/src/renderer/src/store/selectors.test.ts index 345a25c0eec..f6b8555925a 100644 --- a/src/renderer/src/store/selectors.test.ts +++ b/src/renderer/src/store/selectors.test.ts @@ -1,5 +1,7 @@ import { beforeEach, describe, expect, it } from 'vitest' -import type { Repo, TerminalTab, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { toRuntimeExecutionHostId, toSshExecutionHostId } from '../../../shared/execution-host' import { isGitRepoKind } from '../../../shared/repo-kind' diff --git a/src/renderer/src/store/selectors.ts b/src/renderer/src/store/selectors.ts index b955666760f..7b16f29bf4f 100644 --- a/src/renderer/src/store/selectors.ts +++ b/src/renderer/src/store/selectors.ts @@ -1,6 +1,8 @@ import { useAppStore } from './index' import { useShallow } from 'zustand/react/shallow' -import type { Repo, Worktree, TerminalTab } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { TerminalTab } from '../../../shared/terminal-tab-types' +import type { Worktree } from '../../../shared/worktree/types' import type { AppState } from './types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../shared/constants' import { diff --git a/src/renderer/src/store/slices/active-tab-owner-worktree.test.ts b/src/renderer/src/store/slices/active-tab-owner-worktree.test.ts index 7e8c092a6c7..c0537bf698d 100644 --- a/src/renderer/src/store/slices/active-tab-owner-worktree.test.ts +++ b/src/renderer/src/store/slices/active-tab-owner-worktree.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' const recordRendererCrashBreadcrumb = vi.fn() vi.mock('../../lib/crash-breadcrumb-recorder', () => ({ diff --git a/src/renderer/src/store/slices/active-tab-owner-worktree.ts b/src/renderer/src/store/slices/active-tab-owner-worktree.ts index 270c5d44f1c..e8f4bbaed03 100644 --- a/src/renderer/src/store/slices/active-tab-owner-worktree.ts +++ b/src/renderer/src/store/slices/active-tab-owner-worktree.ts @@ -1,4 +1,4 @@ -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { recordRendererCrashBreadcrumb } from '../../lib/crash-breadcrumb-recorder' const reportedDuplicateTabVerdicts = new Set() diff --git a/src/renderer/src/store/slices/agent-status-drop-ipc.test.ts b/src/renderer/src/store/slices/agent-status-drop-ipc.test.ts index 06e8e900a2d..53a0a4e131e 100644 --- a/src/renderer/src/store/slices/agent-status-drop-ipc.test.ts +++ b/src/renderer/src/store/slices/agent-status-drop-ipc.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { RetainedAgentEntry } from './agent-status' import { RECENTLY_CLOSED_AGENT_STATUS_TAB_IDS_MAX } from './agent-status' import { createTestStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/agent-status-drop.test.ts b/src/renderer/src/store/slices/agent-status-drop.test.ts index 5a4b86838c2..c13a93cd413 100644 --- a/src/renderer/src/store/slices/agent-status-drop.test.ts +++ b/src/renderer/src/store/slices/agent-status-drop.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { RetainedAgentEntry } from './agent-status' import { createTestStore, makeTab } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/agent-status-retained-leak.test.ts b/src/renderer/src/store/slices/agent-status-retained-leak.test.ts index 2259af3cf5c..fd275d4e43d 100644 --- a/src/renderer/src/store/slices/agent-status-retained-leak.test.ts +++ b/src/renderer/src/store/slices/agent-status-retained-leak.test.ts @@ -23,7 +23,7 @@ */ import { afterEach, describe, expect, it, vi } from 'vitest' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { RetainedAgentEntry } from './agent-status' import { createTestStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/agent-status.ts b/src/renderer/src/store/slices/agent-status.ts index 0f1ebf66e08..013b98f01a5 100644 --- a/src/renderer/src/store/slices/agent-status.ts +++ b/src/renderer/src/store/slices/agent-status.ts @@ -27,7 +27,7 @@ import { } from '../../../../shared/agent-status-identity' import { isCommandCodeNewTurnWhileWorking } from '../../../../shared/command-code-turn-boundary' import { agentEntryCompletionAt } from '../../../../shared/agent-completion-time' -import type { TerminalPaneLayoutNode, TerminalTab } from '../../../../shared/types' +import type { TerminalPaneLayoutNode, TerminalTab } from '../../../../shared/terminal-tab-types' import { getRepoExecutionHostId, getWorktreeExecutionHostId diff --git a/src/renderer/src/store/slices/browser-webview-cleanup.test.ts b/src/renderer/src/store/slices/browser-webview-cleanup.test.ts index 060fd5d1247..3f7c69a4d29 100644 --- a/src/renderer/src/store/slices/browser-webview-cleanup.test.ts +++ b/src/renderer/src/store/slices/browser-webview-cleanup.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { BrowserPage, BrowserWorkspace } from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' vi.mock('../../components/browser-pane/webview-registry', () => ({ destroyPersistentWebview: vi.fn() diff --git a/src/renderer/src/store/slices/browser-webview-cleanup.ts b/src/renderer/src/store/slices/browser-webview-cleanup.ts index 234199560ed..7b835841c3a 100644 --- a/src/renderer/src/store/slices/browser-webview-cleanup.ts +++ b/src/renderer/src/store/slices/browser-webview-cleanup.ts @@ -1,4 +1,4 @@ -import type { BrowserPage, BrowserWorkspace } from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' import { destroyPersistentWebview, moveFocusToRendererBeforeFocusedWebviewHidden diff --git a/src/renderer/src/store/slices/browser.test.ts b/src/renderer/src/store/slices/browser.test.ts index 5239a5537ab..abccad13dc4 100644 --- a/src/renderer/src/store/slices/browser.test.ts +++ b/src/renderer/src/store/slices/browser.test.ts @@ -164,6 +164,22 @@ function makeAnnotation(pageId: string, id = 'annotation-1'): BrowserPageAnnotat } describe('createBrowserSlice annotations', () => { + it('keeps a requested canonical page identity distinct from its workspace', () => { + const store = createTestStore() + const tab = store.getState().createBrowserTab('wt-1', 'about:blank', { + browserPageId: 'page-canonical' + }) + + expect(tab.id).not.toBe('page-canonical') + expect(tab.activePageId).toBe('page-canonical') + expect(store.getState().browserPagesByWorkspace[tab.id]?.[0]?.id).toBe('page-canonical') + expect(() => + store.getState().createBrowserTab('wt-1', 'about:blank', { + browserPageId: 'page-canonical' + }) + ).toThrow('Browser page page-canonical already exists') + }) + it('records browser-tab-created only for the explicit new-tab action', async () => { const store = createTestStore() diff --git a/src/renderer/src/store/slices/browser.ts b/src/renderer/src/store/slices/browser.ts index 6f3c739308a..fe7c3a694a2 100644 --- a/src/renderer/src/store/slices/browser.ts +++ b/src/renderer/src/store/slices/browser.ts @@ -2,18 +2,18 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' import type { + BrowserCertificateFailure, BrowserCookieImportResult, BrowserCookieImportSummary, - BrowserCertificateFailure, BrowserHistoryEntry, BrowserLoadError, BrowserPage, BrowserSessionProfile, BrowserSessionProfileCreateOptions, BrowserViewportPresetId, - BrowserWorkspace, - WorkspaceSessionState -} from '../../../../shared/types' + BrowserWorkspace +} from '../../../../shared/browser-workspace-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { GRAB_BUDGET, type BrowserPageAnnotation } from '../../../../shared/browser-grab-types' import { FLOATING_TERMINAL_WORKTREE_ID, ORCA_BROWSER_BLANK_URL } from '../../../../shared/constants' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' @@ -68,6 +68,7 @@ import { type CreateBrowserTabOptions = { activate?: boolean + browserPageId?: string title?: string sessionProfileId?: string | null sessionPartition?: string | null @@ -390,11 +391,12 @@ function buildBrowserPage( worktreeId: string, url: string, title?: string, - browserRuntimeEnvironmentId?: string | null + browserRuntimeEnvironmentId?: string | null, + browserPageId?: string ): BrowserPage { const normalizedUrl = normalizeUrl(url) return { - id: createBrowserUuid(), + id: browserPageId ?? createBrowserUuid(), workspaceId, worktreeId, url: normalizedUrl, @@ -599,12 +601,21 @@ export const createBrowserSlice: StateCreator = createBrowserTab: (worktreeId, url, options) => { assertManagedBrowserMaterializationAllowed(get(), options?.browserRuntimeEnvironmentId) const workspaceId = createBrowserUuid() + const browserPageId = options?.browserPageId + if ( + browserPageId && + (findWorkspace(get().browserTabsByWorktree, browserPageId) || + findPage(get().browserPagesByWorkspace, browserPageId)) + ) { + throw new Error(`Browser page ${browserPageId} already exists`) + } const page = buildBrowserPage( workspaceId, worktreeId, url, options?.title, - options?.browserRuntimeEnvironmentId + options?.browserRuntimeEnvironmentId, + browserPageId ) // Why: with no explicit profile, inherit the user's default so a Settings preference applies to new tabs. const sessionProfileId = diff --git a/src/renderer/src/store/slices/commit-message-generation.ts b/src/renderer/src/store/slices/commit-message-generation.ts index 77f271781cf..e361958932c 100644 --- a/src/renderer/src/store/slices/commit-message-generation.ts +++ b/src/renderer/src/store/slices/commit-message-generation.ts @@ -1,5 +1,5 @@ import type { StateCreator } from 'zustand' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { AppState } from '../types' export type CommitMessageGenerationRuntimeTargetSettings = Pick< diff --git a/src/renderer/src/store/slices/degraded-repo-hydration.test.ts b/src/renderer/src/store/slices/degraded-repo-hydration.test.ts index 48690c43f51..b8063a48408 100644 --- a/src/renderer/src/store/slices/degraded-repo-hydration.test.ts +++ b/src/renderer/src/store/slices/degraded-repo-hydration.test.ts @@ -1,6 +1,7 @@ import { expect, it, vi } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { BrowserTab, WorkspaceSessionState } from '../../../../shared/types' +import type { BrowserTab } from '../../../../shared/browser-workspace-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn() } })) diff --git a/src/renderer/src/store/slices/degraded-repo-worktree-validity.ts b/src/renderer/src/store/slices/degraded-repo-worktree-validity.ts index 139312608b2..16b97061df1 100644 --- a/src/renderer/src/store/slices/degraded-repo-worktree-validity.ts +++ b/src/renderer/src/store/slices/degraded-repo-worktree-validity.ts @@ -1,9 +1,6 @@ -import type { - DetectedWorktreeListResult, - Repo, - WorkspaceSessionState, - Worktree -} from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { parseWorkspaceKey } from '../../../../shared/workspace-scope' import { getRepoIdFromWorktreeId } from '../../../../shared/worktree/id' diff --git a/src/renderer/src/store/slices/detected-agents.test.ts b/src/renderer/src/store/slices/detected-agents.test.ts index f85b5977960..a343fe2c59c 100644 --- a/src/renderer/src/store/slices/detected-agents.test.ts +++ b/src/renderer/src/store/slices/detected-agents.test.ts @@ -1,7 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { _getRemoteDetectPromiseCountForTest, createDetectedAgentsSlice } from './detected-agents' import { _getRuntimeDetectPromiseCountForTest, diff --git a/src/renderer/src/store/slices/detected-agents.ts b/src/renderer/src/store/slices/detected-agents.ts index 87e34b712ff..1ab5daebcdc 100644 --- a/src/renderer/src/store/slices/detected-agents.ts +++ b/src/renderer/src/store/slices/detected-agents.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { createLocalDetectedAgentState } from './local-detected-agent-state' import type { LocalDetectedAgentState } from './local-detected-agent-store-state' diff --git a/src/renderer/src/store/slices/diffComments.test.ts b/src/renderer/src/store/slices/diffComments.test.ts index 6f230b8665c..ecfa3a1408e 100644 --- a/src/renderer/src/store/slices/diffComments.test.ts +++ b/src/renderer/src/store/slices/diffComments.test.ts @@ -1,7 +1,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { DiffComment, Worktree } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { Worktree } from '../../../../shared/worktree/types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/diffComments.ts b/src/renderer/src/store/slices/diffComments.ts index 2bf3b18ceec..fb4a1cb2e9e 100644 --- a/src/renderer/src/store/slices/diffComments.ts +++ b/src/renderer/src/store/slices/diffComments.ts @@ -1,7 +1,9 @@ /* eslint-disable max-lines -- Why: keeps note mutation, rollback, persistence ordering, and sent-state transitions under shared queue/rollback invariants. */ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { DiffComment, FolderWorkspace, Worktree } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { Worktree } from '../../../../shared/worktree/types' import { findWorktreeById, getRepoIdFromWorktreeId } from './worktree-helpers' import { callRuntimeRpc, getActiveRuntimeTarget } from '../../runtime/runtime-rpc-client' import { toRuntimeWorktreeSelector } from '../../runtime/runtime-worktree-selector' diff --git a/src/renderer/src/store/slices/direct-ssh-pane-retry-ledger.ts b/src/renderer/src/store/slices/direct-ssh-pane-retry-ledger.ts index 51730cf70a8..b9b9e3400cc 100644 --- a/src/renderer/src/store/slices/direct-ssh-pane-retry-ledger.ts +++ b/src/renderer/src/store/slices/direct-ssh-pane-retry-ledger.ts @@ -1,5 +1,5 @@ import type { DirectSshAuthority } from '../../../../shared/ssh-types' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { shouldRetryPaneSpawnOnSshReconnect } from '../../hooks/ssh-reconnect-pane-retry' import { directSshAuthoritiesEqual, diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-authority-ledger.ts b/src/renderer/src/store/slices/direct-ssh-terminal-authority-ledger.ts index b0e5d5731c1..ac938ce67be 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-authority-ledger.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-authority-ledger.ts @@ -1,6 +1,6 @@ import type { DirectSshAuthority } from '../../../../shared/ssh-types' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { DirectSshLivePtyBinding, DirectSshPaneRetryResult, diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-recovery-types.ts b/src/renderer/src/store/slices/direct-ssh-terminal-recovery-types.ts index 2784559f201..f59015b6ee7 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-recovery-types.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-recovery-types.ts @@ -1,5 +1,5 @@ import type { DirectSshAuthority } from '../../../../shared/ssh-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { CodexRestartNotice } from './terminals' export type DirectSshPaneRetryAttemptId = string & { diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts b/src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts index acc1db0ec72..232c2d1bd79 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-recovery.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { clearDirectSshTerminalBindings, type DirectSshTerminalBindingState diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-recovery.ts b/src/renderer/src/store/slices/direct-ssh-terminal-recovery.ts index 8cc2978379b..4bc678a0437 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-recovery.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-recovery.ts @@ -1,5 +1,5 @@ import type { DirectSshAuthority } from '../../../../shared/ssh-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { CodexRestartNotice } from './terminals' import { directSshAuthoritiesEqual, diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts b/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts index 063a773e1fa..5f9974966be 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { resolveDirectSshTerminalWorkspaceKeys } from './direct-ssh-terminal-workspace-scope' function tab(worktreeId: string, ptyId: string): TerminalTab { diff --git a/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.ts b/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.ts index e24ca1cdcd1..428069a60ea 100644 --- a/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.ts +++ b/src/renderer/src/store/slices/direct-ssh-terminal-workspace-scope.ts @@ -6,7 +6,7 @@ import { import { isPathInsideOrEqual } from '../../../../shared/cross-platform-path' import { getProjectGroupSubtreeIds } from '../../../../shared/project-groups' import { parseAppSshPtyId } from '../../../../shared/ssh-pty-id' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { folderWorkspaceKey, worktreeWorkspaceKey } from '../../../../shared/workspace-scope' import { resolveDirectSshTargetScope, diff --git a/src/renderer/src/store/slices/editor-branch-line-total.test.ts b/src/renderer/src/store/slices/editor-branch-line-total.test.ts index 2b7132085da..e28f7f3c2bb 100644 --- a/src/renderer/src/store/slices/editor-branch-line-total.test.ts +++ b/src/renderer/src/store/slices/editor-branch-line-total.test.ts @@ -2,7 +2,7 @@ import { createStore, type StoreApi } from 'zustand/vanilla' import { describe, expect, it, vi } from 'vitest' import { createEditorSlice } from './editor' import type { AppState } from '../types' -import type { GitStatusResult } from '../../../../shared/types' +import type { GitStatusResult } from '../../../../shared/git-status-types' const MERGE_BASE = '1f3c0d9a5b6e7f8091a2b3c4d5e6f708192a3b4c' diff --git a/src/renderer/src/store/slices/editor-rekey-open-files.test.ts b/src/renderer/src/store/slices/editor-rekey-open-files.test.ts index e7ea518092e..2099c826e9b 100644 --- a/src/renderer/src/store/slices/editor-rekey-open-files.test.ts +++ b/src/renderer/src/store/slices/editor-rekey-open-files.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it } from 'vitest' import { useAppStore } from '@/store' import type { OpenFilePathRekey } from './editor' -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' // Stage-1 foundation: rekeyOpenFilesForPathChange atomically retargets an open // edit session across an Orca-owned move (no close/reopen), preserving all diff --git a/src/renderer/src/store/slices/editor.test.ts b/src/renderer/src/store/slices/editor.test.ts index 50530c90382..13b49c94991 100644 --- a/src/renderer/src/store/slices/editor.test.ts +++ b/src/renderer/src/store/slices/editor.test.ts @@ -13,10 +13,10 @@ import { clearRuntimeCompatibilityCacheForTests } from '../../runtime/runtime-rp import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import type { GitBranchChangeEntry, - GitBranchCompareSummary, - GitStatusEntry, - Tab -} from '../../../../shared/types' + GitBranchCompareSummary +} from '../../../../shared/git-diff-compare-types' +import type { GitStatusEntry } from '../../../../shared/git-status-types' +import type { Tab } from '../../../../shared/tab-types' import { isSyncPushStageError } from '@/lib/source-control-remote-error' const { toastErrorMock } = vi.hoisted(() => ({ diff --git a/src/renderer/src/store/slices/editor.ts b/src/renderer/src/store/slices/editor.ts index 4b2efe9516a..35fcc7d4633 100644 --- a/src/renderer/src/store/slices/editor.ts +++ b/src/renderer/src/store/slices/editor.ts @@ -28,29 +28,33 @@ import { openHttpLink, type HttpLinkSourceOwner } from '@/lib/http-link-routing' import { getConnectionIdForFileFromState } from '@/lib/connection-owner-resolution' import { isLocalPathOpenBlocked, showLocalPathOpenBlockedToast } from '@/lib/local-path-open-guard' import { detectLanguage } from '@/lib/language-detect' +import type { SearchResult } from '../../../../shared/code-search-types' import type { GitBranchChangeEntry, GitBranchCompareSummary, - GitCommitCompareSummary, + GitCommitCompareSummary +} from '../../../../shared/git-diff-compare-types' +import type { + GitBranchLineTotal, GitConflictKind, GitConflictOperation, GitConflictResolutionStatus, GitConflictStatusSource, - GlobalSettings, - GitPushTarget, GitStatusEntry, GitStatusResult, - PersistedOpenFile, - Tab, - TabGroup, - GitUpstreamStatus, + GitUpstreamStatus +} from '../../../../shared/git-status-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Tab, TabGroup, WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { ActiveRightSidebarTab, - RightSidebarExplorerView, - SearchResult, - WorkspaceSessionState, - WorkspaceVisibleTabType -} from '../../../../shared/types' -import type { GitBranchLineTotal } from '../../../../shared/git-status-types' + RightSidebarExplorerView +} from '../../../../shared/ui-chrome-types' +import type { + PersistedOpenFile, + WorkspaceSessionState +} from '../../../../shared/workspace-session-state-types' +import type { GitPushTarget } from '../../../../shared/worktree/types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { clampMarkdownTocPanelWidth } from '../../../../shared/markdown-toc-panel-width' import { @@ -116,7 +120,7 @@ export type { ActiveRightSidebarTab, RightSidebarExplorerView, RightSidebarTab -} from '../../../../shared/types' +} from '../../../../shared/ui-chrome-types' const DEFAULT_FILE_SEARCH_STATE = { query: '', diff --git a/src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts b/src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts index aa4efc3754f..35e9397c1a5 100644 --- a/src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts +++ b/src/renderer/src/store/slices/folder-workspace-activation-and-activity.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { AppState } from '../types' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { createCompatibleRuntimeStatusResponseIfNeeded, diff --git a/src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts b/src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts index b03015ec98d..c11ed39868a 100644 --- a/src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts +++ b/src/renderer/src/store/slices/folder-workspace-diff-comments.test.ts @@ -1,7 +1,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { DiffComment, FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { DiffComment } from '../../../../shared/diff-comment-types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { createCompatibleRuntimeStatusResponseIfNeeded, diff --git a/src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts b/src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts index 83ea704c690..4100588a88c 100644 --- a/src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts +++ b/src/renderer/src/store/slices/folder-workspace-owner-routed-mutations.test.ts @@ -1,5 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/github-cache-key.ts b/src/renderer/src/store/slices/github-cache-key.ts index e9117f1f69f..1f5a22908c5 100644 --- a/src/renderer/src/store/slices/github-cache-key.ts +++ b/src/renderer/src/store/slices/github-cache-key.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { LOCAL_EXECUTION_HOST_ID, normalizeExecutionHostId, diff --git a/src/renderer/src/store/slices/github-checks-cache.test.ts b/src/renderer/src/store/slices/github-checks-cache.test.ts index 2474ac521e3..0808acba490 100644 --- a/src/renderer/src/store/slices/github-checks-cache.test.ts +++ b/src/renderer/src/store/slices/github-checks-cache.test.ts @@ -5,7 +5,8 @@ import { createGitHubSlice, prChecksCacheSuffix } from './github' import { createHostedReviewSlice } from './hosted-review' import { getHostedReviewCacheKey } from './hosted-review-cache-identity' import type { AppState } from '../types' -import type { PRCheckDetail, PRInfo } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' const mockApi = { gh: { diff --git a/src/renderer/src/store/slices/github-checks.test.ts b/src/renderer/src/store/slices/github-checks.test.ts index b5c46ce6882..ce41e0f40af 100644 --- a/src/renderer/src/store/slices/github-checks.test.ts +++ b/src/renderer/src/store/slices/github-checks.test.ts @@ -5,7 +5,7 @@ import { normalizeBranchName } from './github-checks' import type { AppState } from '../types' -import type { PRCheckDetail } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' describe('deriveCheckStatusFromChecks', () => { it('treats an action_required check as failure so it is not a silent pass', () => { diff --git a/src/renderer/src/store/slices/github-checks.ts b/src/renderer/src/store/slices/github-checks.ts index da36a378ddf..900c482ac7d 100644 --- a/src/renderer/src/store/slices/github-checks.ts +++ b/src/renderer/src/store/slices/github-checks.ts @@ -1,5 +1,6 @@ import type { AppState } from '../types' -import type { PRCheckDetail, GitHubOwnerRepo } from '../../../../shared/types' +import type { PRCheckDetail } from '../../../../shared/github/check-types' +import type { GitHubOwnerRepo } from '../../../../shared/github/pull-request-types' import { getGitHubPRCacheKey } from './github-cache-key' import { githubRepoIdentityKey } from '../../../../shared/github/repository-identity-key' import { derivePRCheckStatus } from '../../../../shared/pr-check-status' diff --git a/src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts b/src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts index f7e49e211d1..f78393f62c7 100644 --- a/src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts +++ b/src/renderer/src/store/slices/github-pr-refresh-owner-routing.test.ts @@ -3,7 +3,9 @@ import { create } from 'zustand' import { createGitHubSlice } from './github' import { createHostedReviewSlice } from './hosted-review' import type { AppState } from '../types' -import type { PRInfo, Repo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts b/src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts index 74096867101..9ed10018a69 100644 --- a/src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts +++ b/src/renderer/src/store/slices/github-pr-refresh-states-leak.test.ts @@ -18,7 +18,10 @@ import { create } from 'zustand' import { createGitHubSlice } from './github' import { createHostedReviewSlice } from './hosted-review' import type { AppState } from '../types' -import type { GitHubPRRefreshEvent, GitHubPRRefreshReason } from '../../../../shared/types' +import type { + GitHubPRRefreshEvent, + GitHubPRRefreshReason +} from '../../../../shared/github/pull-request-refresh-types' // MAX_PR_REFRESH_STATE_ENTRIES is module-private; mirror its value here. const MAX_ENTRIES = 2000 diff --git a/src/renderer/src/store/slices/github-project-row-owner.test.ts b/src/renderer/src/store/slices/github-project-row-owner.test.ts index dccaec073e3..89b10e295b6 100644 --- a/src/renderer/src/store/slices/github-project-row-owner.test.ts +++ b/src/renderer/src/store/slices/github-project-row-owner.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { settingsForProjectRowOwner } from './github-project-row-owner' import { lookupReposBySlugFromCache } from '@/lib/repo-slug-cache' diff --git a/src/renderer/src/store/slices/github-project-row-owner.ts b/src/renderer/src/store/slices/github-project-row-owner.ts index db3a4b3333e..9af67dc4d50 100644 --- a/src/renderer/src/store/slices/github-project-row-owner.ts +++ b/src/renderer/src/store/slices/github-project-row-owner.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { getSettingsForRepoRuntimeOwner } from '@/lib/repo-runtime-owner' import { lookupReposBySlugFromCache } from '@/lib/repo-slug-cache' diff --git a/src/renderer/src/store/slices/github-repo-lookup-index.test.ts b/src/renderer/src/store/slices/github-repo-lookup-index.test.ts index 41918b28c07..d964fe18826 100644 --- a/src/renderer/src/store/slices/github-repo-lookup-index.test.ts +++ b/src/renderer/src/store/slices/github-repo-lookup-index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getGitHubRepoLookupIndex } from './github-repo-lookup-index' function makeRepo(id: string, path: string): Repo { diff --git a/src/renderer/src/store/slices/github-repo-lookup-index.ts b/src/renderer/src/store/slices/github-repo-lookup-index.ts index 0c21a2fbd50..62d60e44b3a 100644 --- a/src/renderer/src/store/slices/github-repo-lookup-index.ts +++ b/src/renderer/src/store/slices/github-repo-lookup-index.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' type IndexedRepo = { index: number diff --git a/src/renderer/src/store/slices/github.test.ts b/src/renderer/src/store/slices/github.test.ts index dfcd76ec5d1..140840121f3 100644 --- a/src/renderer/src/store/slices/github.test.ts +++ b/src/renderer/src/store/slices/github.test.ts @@ -18,7 +18,9 @@ import { } from './github' import { createHostedReviewSlice } from './hosted-review' import type { AppState } from '../types' -import type { GitHubWorkItem, PRInfo, Worktree } from '../../../../shared/types' +import type { PRInfo } from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { HostedReviewInfo } from '../../../../shared/hosted-review' import { GITHUB_WORK_ITEMS_SSH_REMOTE_REQUIRED_MESSAGE } from '../../../../shared/work-items' import { diff --git a/src/renderer/src/store/slices/github.ts b/src/renderer/src/store/slices/github.ts index 71cf753e662..e74e7a35586 100644 --- a/src/renderer/src/store/slices/github.ts +++ b/src/renderer/src/store/slices/github.ts @@ -4,30 +4,31 @@ import { toast } from 'sonner' import type { AppState } from '../types' import { githubRepoIdentityKey } from '../../../../shared/github/repository-identity-key' import { githubProjectIdentityKey } from '../../../../shared/github/project-identity' +import type { ClassifiedError } from '../../../../shared/classified-error' +import type { PRCheckDetail, PRCheckRunDetails } from '../../../../shared/github/check-types' +import type { + GitHubCommentResult, + GitHubReactionContent, + PRComment +} from '../../../../shared/github/comment-types' import type { - ClassifiedError, - GitHubOwnerRepo, GitHubPRRefreshAlias, - IssueSourcePreference, - PRInfo, GitHubPRRefreshCandidate, GitHubPRRefreshEvent, GitHubPRRefreshReason, GitHubPRRefreshSkippedReason, PRRefreshErrorType, - PRRefreshOutcome, - GitHubCommentResult, - GitHubReactionContent, + PRRefreshOutcome +} from '../../../../shared/github/pull-request-refresh-types' +import type { + GitHubOwnerRepo, IssueInfo, - PRCheckDetail, - PRCheckRunDetails, - PRComment, - Repo, - Worktree, - GitHubWorkItem, - ListWorkItemsResult, - GlobalSettings -} from '../../../../shared/types' + PRInfo +} from '../../../../shared/github/pull-request-types' +import type { GitHubWorkItem, ListWorkItemsResult } from '../../../../shared/github/work-item-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { IssueSourcePreference, Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { GetProjectViewTableArgs, GetProjectViewTableResult, diff --git a/src/renderer/src/store/slices/hosted-review-cache-identity.ts b/src/renderer/src/store/slices/hosted-review-cache-identity.ts index f1b852ff752..c53f91a82f4 100644 --- a/src/renderer/src/store/slices/hosted-review-cache-identity.ts +++ b/src/renderer/src/store/slices/hosted-review-cache-identity.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { getSettingsFocusedExecutionHostId, normalizeExecutionHostId, diff --git a/src/renderer/src/store/slices/hosted-review.ts b/src/renderer/src/store/slices/hosted-review.ts index 4e64aa48e84..3c3940b6acc 100644 --- a/src/renderer/src/store/slices/hosted-review.ts +++ b/src/renderer/src/store/slices/hosted-review.ts @@ -10,7 +10,7 @@ import type { HostedReviewCreationEligibilityArgs, HostedReviewInfo } from '../../../../shared/hosted-review' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { callRuntimeRpc, getActiveRuntimeTarget } from '@/runtime/runtime-rpc-client' import type { AppState } from '../types' import { diff --git a/src/renderer/src/store/slices/jira.test.ts b/src/renderer/src/store/slices/jira.test.ts index a9925e17a61..964d36420a1 100644 --- a/src/renderer/src/store/slices/jira.test.ts +++ b/src/renderer/src/store/slices/jira.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { JiraConnectionStatus, JiraIssue, JiraViewer } from '../../../../shared/types' +import type { JiraConnectionStatus, JiraIssue, JiraViewer } from '../../../../shared/jira-types' import { getTaskSourceCacheScope, getTaskSourceRuntimeSettings, diff --git a/src/renderer/src/store/slices/jira.ts b/src/renderer/src/store/slices/jira.ts index bb0423a2e38..418e4a7ad25 100644 --- a/src/renderer/src/store/slices/jira.ts +++ b/src/renderer/src/store/slices/jira.ts @@ -10,7 +10,7 @@ import type { JiraIssueFilter, JiraSiteSelection, JiraViewer -} from '../../../../shared/types' +} from '../../../../shared/jira-types' import type { CacheEntry } from './github' import { isIntegrationCredentialDecryptionError } from '../../../../shared/integration-credential-errors' import { diff --git a/src/renderer/src/store/slices/linear-invalidation.test.ts b/src/renderer/src/store/slices/linear-invalidation.test.ts index 95c1d99ffaf..03c917187fa 100644 --- a/src/renderer/src/store/slices/linear-invalidation.test.ts +++ b/src/renderer/src/store/slices/linear-invalidation.test.ts @@ -1,7 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { LinearConnectionStatus, LinearIssue, LinearTeam } from '../../../../shared/types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { LinearConnectionStatus, LinearTeam } from '../../../../shared/linear/workspace-types' import { createLinearSlice } from './linear' const linearStatus = vi.fn() diff --git a/src/renderer/src/store/slices/linear.test.ts b/src/renderer/src/store/slices/linear.test.ts index f18f27a3261..8fbf089757c 100644 --- a/src/renderer/src/store/slices/linear.test.ts +++ b/src/renderer/src/store/slices/linear.test.ts @@ -3,15 +3,17 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' import type { - LinearConnectionStatus, - LinearCollectionResult, - LinearIssue, LinearProjectDetail, - LinearProjectSummary, + LinearProjectSummary +} from '../../../../shared/linear/project-types' +import type { + LinearCollectionResult, + LinearConnectionStatus, LinearTeam, LinearViewer -} from '../../../../shared/types' +} from '../../../../shared/linear/workspace-types' import { getTaskSourceCacheScope, type TaskSourceContext diff --git a/src/renderer/src/store/slices/linear.ts b/src/renderer/src/store/slices/linear.ts index 614020debd5..eddbbcf3086 100644 --- a/src/renderer/src/store/slices/linear.ts +++ b/src/renderer/src/store/slices/linear.ts @@ -3,20 +3,22 @@ boundary so cache invalidation stays coherent. */ import type { StateCreator } from 'zustand' import type { AppState } from '../types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' import type { - LinearViewer, - LinearConnectionStatus, - LinearCollectionResult, LinearCustomViewModel, LinearCustomViewSummary, - LinearIssue, LinearProjectDetail, - LinearProjectSummary, + LinearProjectSummary +} from '../../../../shared/linear/project-types' +import type { + LinearCollectionResult, + LinearConnectionStatus, LinearTeam, + LinearViewer, LinearWorkspace, LinearWorkspaceError, LinearWorkspaceSelection -} from '../../../../shared/types' +} from '../../../../shared/linear/workspace-types' import type { CacheEntry } from './github' import { clampLinearIssueListLimit } from '../../../../shared/linear/issue-read-limits' import { isIntegrationCredentialDecryptionError } from '../../../../shared/integration-credential-errors' diff --git a/src/renderer/src/store/slices/local-detected-agent-state.test.ts b/src/renderer/src/store/slices/local-detected-agent-state.test.ts index 77303b8bc89..dd4636a24a6 100644 --- a/src/renderer/src/store/slices/local-detected-agent-state.test.ts +++ b/src/renderer/src/store/slices/local-detected-agent-state.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { createDetectedAgentsSlice } from './detected-agents' diff --git a/src/renderer/src/store/slices/local-detected-agent-state.ts b/src/renderer/src/store/slices/local-detected-agent-state.ts index 43b39ff5980..62760a0851b 100644 --- a/src/renderer/src/store/slices/local-detected-agent-state.ts +++ b/src/renderer/src/store/slices/local-detected-agent-state.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { getLocalAgentPreflightContext, diff --git a/src/renderer/src/store/slices/local-detected-agent-store-state.ts b/src/renderer/src/store/slices/local-detected-agent-store-state.ts index c961bb5114f..2bd45db165c 100644 --- a/src/renderer/src/store/slices/local-detected-agent-store-state.ts +++ b/src/renderer/src/store/slices/local-detected-agent-store-state.ts @@ -1,5 +1,9 @@ import type { AppState } from '../types' -import type { PathSource, ShellHydrationFailureReason, TuiAgent } from '../../../../shared/types' +import type { + PathSource, + ShellHydrationFailureReason +} from '../../../../shared/shell-path-hydration-types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type LocalDetectedAgentState = { detectedAgentIds: TuiAgent[] | null diff --git a/src/renderer/src/store/slices/memory.test.ts b/src/renderer/src/store/slices/memory.test.ts index a63b5d92288..cdcb7e454c5 100644 --- a/src/renderer/src/store/slices/memory.test.ts +++ b/src/renderer/src/store/slices/memory.test.ts @@ -2,7 +2,7 @@ import { create } from 'zustand' import { afterEach, describe, expect, it, vi } from 'vitest' import { createMemorySlice } from './memory' import type { AppState } from '../types' -import type { MemorySnapshot } from '../../../../shared/types' +import type { MemorySnapshot } from '../../../../shared/process-stats-types' function makeMemorySnapshot(overrides: Partial = {}): MemorySnapshot { return { diff --git a/src/renderer/src/store/slices/memory.ts b/src/renderer/src/store/slices/memory.ts index bc6b26f5066..3fdc80f4d51 100644 --- a/src/renderer/src/store/slices/memory.ts +++ b/src/renderer/src/store/slices/memory.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { MemorySnapshot } from '../../../../shared/types' +import type { MemorySnapshot } from '../../../../shared/process-stats-types' export type MemorySlice = { memorySnapshot: MemorySnapshot | null diff --git a/src/renderer/src/store/slices/new-issue-draft.test.ts b/src/renderer/src/store/slices/new-issue-draft.test.ts index 459cb1eb1f0..c6809c48560 100644 --- a/src/renderer/src/store/slices/new-issue-draft.test.ts +++ b/src/renderer/src/store/slices/new-issue-draft.test.ts @@ -2,7 +2,7 @@ import { create } from 'zustand' import { describe, expect, it } from 'vitest' import { createNewIssueDraftSlice } from './new-issue-draft' import type { AppState } from '../types' -import type { GitHubAssignableUser } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' function makeStore() { return create>()( diff --git a/src/renderer/src/store/slices/new-issue-draft.ts b/src/renderer/src/store/slices/new-issue-draft.ts index 6ef7bb31b28..1bd9f3a98f8 100644 --- a/src/renderer/src/store/slices/new-issue-draft.ts +++ b/src/renderer/src/store/slices/new-issue-draft.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { GitHubAssignableUser } from '../../../../shared/types' +import type { GitHubAssignableUser } from '../../../../shared/github/pull-request-types' /** In-progress "New GitHub issue" composer draft. Session-only (never * `persist`-wrapped, no disk surface): it exists so an accidental dismissal diff --git a/src/renderer/src/store/slices/new-markdown.test.ts b/src/renderer/src/store/slices/new-markdown.test.ts index b0f1ebb9997..fe592dd7bf9 100644 --- a/src/renderer/src/store/slices/new-markdown.test.ts +++ b/src/renderer/src/store/slices/new-markdown.test.ts @@ -2,7 +2,8 @@ import { createStore, type StoreApi } from 'zustand/vanilla' import { describe, expect, it } from 'vitest' import { createEditorSlice } from './editor' import type { AppState } from '../types' -import type { BrowserTab, Tab, TabContentType, TabGroup } from '../../../../shared/types' +import type { BrowserTab } from '../../../../shared/browser-workspace-types' +import type { Tab, TabContentType, TabGroup } from '../../../../shared/tab-types' function createEditorStore(overrides?: Partial): StoreApi { // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts b/src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts index f5c4d68b309..e8e98738241 100644 --- a/src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts +++ b/src/renderer/src/store/slices/pane-column-split-drop-no-op.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroupLayoutNode } from '../../../../shared/tab-types' import { findLayoutSiblingOnSplitSide, isPaneColumnSplitDropNoOp diff --git a/src/renderer/src/store/slices/pane-column-split-drop-no-op.ts b/src/renderer/src/store/slices/pane-column-split-drop-no-op.ts index 9f87e4a20a5..d149d477d5a 100644 --- a/src/renderer/src/store/slices/pane-column-split-drop-no-op.ts +++ b/src/renderer/src/store/slices/pane-column-split-drop-no-op.ts @@ -1,4 +1,4 @@ -import type { TabGroupLayoutNode } from '../../../../shared/types' +import type { TabGroupLayoutNode } from '../../../../shared/tab-types' import type { TabSplitDirection } from './tabs' function getDirectLayoutSiblingOnSplitSide( diff --git a/src/renderer/src/store/slices/pane-foreground-agent.test.ts b/src/renderer/src/store/slices/pane-foreground-agent.test.ts index 62363eee82c..a56158a99db 100644 --- a/src/renderer/src/store/slices/pane-foreground-agent.test.ts +++ b/src/renderer/src/store/slices/pane-foreground-agent.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' function terminalTab(id: string, worktreeId: string): TerminalTab { return { diff --git a/src/renderer/src/store/slices/pane-foreground-agent.ts b/src/renderer/src/store/slices/pane-foreground-agent.ts index 7adc8fea4ba..ebdd69e6865 100644 --- a/src/renderer/src/store/slices/pane-foreground-agent.ts +++ b/src/renderer/src/store/slices/pane-foreground-agent.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' export type PaneForegroundAgentEntry = { /** Recognized agent process in the pane's foreground; null when unknown. */ diff --git a/src/renderer/src/store/slices/preflight.test.ts b/src/renderer/src/store/slices/preflight.test.ts index 18ebaf839cd..386bdfdc59a 100644 --- a/src/renderer/src/store/slices/preflight.test.ts +++ b/src/renderer/src/store/slices/preflight.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { PreflightStatus } from '../../../../preload/api-types' -import type { Repo, Worktree } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AppState } from '../types' import { createPreflightSlice } from './preflight' import { createRuntimeStatusSlice } from './runtime-status' diff --git a/src/renderer/src/store/slices/project-group-removal-targets.test.ts b/src/renderer/src/store/slices/project-group-removal-targets.test.ts index 0cf5a53ace9..f193730fb5d 100644 --- a/src/renderer/src/store/slices/project-group-removal-targets.test.ts +++ b/src/renderer/src/store/slices/project-group-removal-targets.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ProjectGroup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { selectProjectGroupRemovalTargets } from './project-group-removal-targets' const rootGroup: ProjectGroup = { diff --git a/src/renderer/src/store/slices/project-group-removal-targets.ts b/src/renderer/src/store/slices/project-group-removal-targets.ts index 33bd8ba121a..ee0c11c3c4b 100644 --- a/src/renderer/src/store/slices/project-group-removal-targets.ts +++ b/src/renderer/src/store/slices/project-group-removal-targets.ts @@ -1,4 +1,5 @@ -import type { ProjectGroup, Repo } from '../../../../shared/types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { getProjectGroupSubtreeIds } from '../../../../shared/project-groups' export type ProjectGroupRemovalTargets = { diff --git a/src/renderer/src/store/slices/pull-request-generation.ts b/src/renderer/src/store/slices/pull-request-generation.ts index aa8dc76bd5f..cf306b316cf 100644 --- a/src/renderer/src/store/slices/pull-request-generation.ts +++ b/src/renderer/src/store/slices/pull-request-generation.ts @@ -1,5 +1,5 @@ import type { StateCreator } from 'zustand' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { AppState } from '../types' export type PullRequestFieldName = 'base' | 'title' | 'body' | 'draft' diff --git a/src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts b/src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts index 0d05535ed2d..36bf4aafc2d 100644 --- a/src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts +++ b/src/renderer/src/store/slices/purge-stale-runtime-host-state.test.ts @@ -10,7 +10,8 @@ import { describe, it, expect, vi } from 'vitest' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' import { worktreeWorkspaceKey } from '../../../../shared/workspace-scope' -import type { ProjectHostSetup, DetectedWorktreeListResult } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { DetectedWorktreeListResult } from '../../../../shared/worktree/types' vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn(), warning: vi.fn() } diff --git a/src/renderer/src/store/slices/remote-server-updates.ts b/src/renderer/src/store/slices/remote-server-updates.ts index 80b8a7370c1..07210ee7f97 100644 --- a/src/renderer/src/store/slices/remote-server-updates.ts +++ b/src/renderer/src/store/slices/remote-server-updates.ts @@ -4,7 +4,7 @@ import type { RemoteServerUpdaterSnapshot } from '../../../../shared/remote-serv import { isUserManagedRuntimeEnvironment } from '../../../../shared/runtime-environments' import type { RuntimeRpcResponse } from '../../../../shared/runtime-rpc-envelope' import type { RuntimeStatus } from '../../../../shared/runtime-types' -import type { UpdateCheckOptions } from '../../../../shared/types' +import type { UpdateCheckOptions } from '../../../../shared/update-status-types' import { unwrapRuntimeRpcResult } from '@/runtime/runtime-rpc-client' import { checkingRemoteServerUpdateEntry, diff --git a/src/renderer/src/store/slices/repo-host-identity.ts b/src/renderer/src/store/slices/repo-host-identity.ts index 772d5dc2925..a55198fd85c 100644 --- a/src/renderer/src/store/slices/repo-host-identity.ts +++ b/src/renderer/src/store/slices/repo-host-identity.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, getSettingsFocusedExecutionHostId, diff --git a/src/renderer/src/store/slices/repo-identity-reconcile.test.ts b/src/renderer/src/store/slices/repo-identity-reconcile.test.ts index ecc1fa7d59e..43afafe717f 100644 --- a/src/renderer/src/store/slices/repo-identity-reconcile.test.ts +++ b/src/renderer/src/store/slices/repo-identity-reconcile.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import fs from 'node:fs' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { reconcileFetchedRepos, reuseEqualRecordMap } from './repo-identity-reconcile' function makeRepo(id: string, overrides: Partial = {}): Repo { diff --git a/src/renderer/src/store/slices/repo-identity-reconcile.ts b/src/renderer/src/store/slices/repo-identity-reconcile.ts index ea118295754..0e2b4aa1147 100644 --- a/src/renderer/src/store/slices/repo-identity-reconcile.ts +++ b/src/renderer/src/store/slices/repo-identity-reconcile.ts @@ -1,4 +1,4 @@ -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { structuralValuesEqual } from '../../../../shared/structural-value-equality' import { getRepoHostIdentity } from './repo-host-identity' diff --git a/src/renderer/src/store/slices/repo-reorder-host-split.test.ts b/src/renderer/src/store/slices/repo-reorder-host-split.test.ts index fd4ace117f3..e3d4311e03f 100644 --- a/src/renderer/src/store/slices/repo-reorder-host-split.test.ts +++ b/src/renderer/src/store/slices/repo-reorder-host-split.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { splitRepoReorderByHost } from './repo-reorder-host-split' function repo(id: string, executionHostId: string | null): Repo { diff --git a/src/renderer/src/store/slices/repo-reorder-host-split.ts b/src/renderer/src/store/slices/repo-reorder-host-split.ts index 9924df17c7f..82ad29bd6dd 100644 --- a/src/renderer/src/store/slices/repo-reorder-host-split.ts +++ b/src/renderer/src/store/slices/repo-reorder-host-split.ts @@ -1,4 +1,5 @@ -import type { GlobalSettings, Repo } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, getSettingsFocusedExecutionHostId diff --git a/src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts b/src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts index bbbd90d6440..148ea2209dc 100644 --- a/src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts +++ b/src/renderer/src/store/slices/repos-all-hosts-folder-workspaces.test.ts @@ -1,6 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-all-hosts-generation.test.ts b/src/renderer/src/store/slices/repos-all-hosts-generation.test.ts index 1aa9ed76072..2d89d53ceac 100644 --- a/src/renderer/src/store/slices/repos-all-hosts-generation.test.ts +++ b/src/renderer/src/store/slices/repos-all-hosts-generation.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-all-hosts.test.ts b/src/renderer/src/store/slices/repos-all-hosts.test.ts index 9d38bc0bf8c..17c9227aa5e 100644 --- a/src/renderer/src/store/slices/repos-all-hosts.test.ts +++ b/src/renderer/src/store/slices/repos-all-hosts.test.ts @@ -1,12 +1,9 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { - FolderWorkspace, - Project, - ProjectHostSetup, - ProjectGroup, - Repo -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts b/src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts index 69f73e589b5..4cf74a63640 100644 --- a/src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts +++ b/src/renderer/src/store/slices/repos-catalog-merge-identity.test.ts @@ -1,5 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import type { FolderWorkspacePathStatusCacheEntry } from './repos' import { createTestStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts b/src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts index 5908c56118a..d3cac1929aa 100644 --- a/src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts +++ b/src/renderer/src/store/slices/repos-cross-host-project-collisions.test.ts @@ -10,7 +10,7 @@ */ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts b/src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts index 6218d251607..9169384b55e 100644 --- a/src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts +++ b/src/renderer/src/store/slices/repos-cross-host-refresh-identity.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-host-identity-routing.test.ts b/src/renderer/src/store/slices/repos-host-identity-routing.test.ts index 33ad35355fb..5eba51545d4 100644 --- a/src/renderer/src/store/slices/repos-host-identity-routing.test.ts +++ b/src/renderer/src/store/slices/repos-host-identity-routing.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore, makeWorktree } from './store-test-helpers' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-manual-order-hydration.test.ts b/src/renderer/src/store/slices/repos-manual-order-hydration.test.ts index 91374d47701..ce93d07e280 100644 --- a/src/renderer/src/store/slices/repos-manual-order-hydration.test.ts +++ b/src/renderer/src/store/slices/repos-manual-order-hydration.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createTestStore } from './store-test-helpers' import { createCompatibleRuntimeStatusResponseIfNeeded, diff --git a/src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts b/src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts index bcdc36afdaf..9ced00f07fc 100644 --- a/src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts +++ b/src/renderer/src/store/slices/repos-nested-ssh-projection.test.ts @@ -1,5 +1,5 @@ import { expect, it, vi } from 'vitest' -import type { Project, ProjectHostSetup } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' import { createTestStore } from './store-test-helpers' import { installReposRuntimeRoutingHarness, diff --git a/src/renderer/src/store/slices/repos-project-groups-delete.test.ts b/src/renderer/src/store/slices/repos-project-groups-delete.test.ts index b1692509c00..4f063f1eba3 100644 --- a/src/renderer/src/store/slices/repos-project-groups-delete.test.ts +++ b/src/renderer/src/store/slices/repos-project-groups-delete.test.ts @@ -1,6 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-project-groups.test.ts b/src/renderer/src/store/slices/repos-project-groups.test.ts index 9fbf455587b..281fbde53e8 100644 --- a/src/renderer/src/store/slices/repos-project-groups.test.ts +++ b/src/renderer/src/store/slices/repos-project-groups.test.ts @@ -1,11 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { - NestedRepoScanResult, - Repo, - ProjectGroup, - FolderWorkspace -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { NestedRepoScanResult, ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponse, createCompatibleRuntimeStatusResponseIfNeeded, diff --git a/src/renderer/src/store/slices/repos-project-host-capability.test.ts b/src/renderer/src/store/slices/repos-project-host-capability.test.ts index 862babeb51c..2bed7180315 100644 --- a/src/renderer/src/store/slices/repos-project-host-capability.test.ts +++ b/src/renderer/src/store/slices/repos-project-host-capability.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { PROJECT_HOST_SETUP_RUNTIME_CAPABILITY } from '../../../../shared/protocol-version' import { clearRuntimeCompatibilityCacheForTests } from '../../runtime/runtime-rpc-client' import type { RuntimeEnvironmentCallRequest } from '../../runtime/runtime-compatibility-test-fixture' diff --git a/src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts b/src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts index 55ea9c1caea..667c1d308bb 100644 --- a/src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts +++ b/src/renderer/src/store/slices/repos-project-host-lifecycle.test.ts @@ -1,5 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-project-runtime.test.ts b/src/renderer/src/store/slices/repos-project-runtime.test.ts index ba61fd6a552..6df79a4af58 100644 --- a/src/renderer/src/store/slices/repos-project-runtime.test.ts +++ b/src/renderer/src/store/slices/repos-project-runtime.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-refresh-identity.test.ts b/src/renderer/src/store/slices/repos-refresh-identity.test.ts index d0db07d32b0..78cc36eb0e7 100644 --- a/src/renderer/src/store/slices/repos-refresh-identity.test.ts +++ b/src/renderer/src/store/slices/repos-refresh-identity.test.ts @@ -1,5 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Project, Repo } from '../../../../shared/types' +import type { Project } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { getSetupScriptPromptDismissalKey } from '../../lib/setup-script-prompt' import { getRepoHostIdentityForParts } from './repo-host-identity' import { createTestStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts b/src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts index ef9c5bd7431..78e7896f7c5 100644 --- a/src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts +++ b/src/renderer/src/store/slices/repos-remove-missing-remote-project.test.ts @@ -9,7 +9,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { toast } from 'sonner' import { createTestStore } from './store-test-helpers' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts b/src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts index 69bebba9240..2c35bb35fb8 100644 --- a/src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts +++ b/src/renderer/src/store/slices/repos-remove-project-purge-leak.test.ts @@ -15,7 +15,7 @@ */ import { describe, it, expect, vi, beforeEach } from 'vitest' import { createTestStore, makeWorktree } from './store-test-helpers' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const repo1: Repo = { id: 'repo-1', path: '/r1', displayName: 'R1', badgeColor: '#000', addedAt: 1 } const repo2: Repo = { id: 'repo-2', path: '/r2', displayName: 'R2', badgeColor: '#111', addedAt: 2 } diff --git a/src/renderer/src/store/slices/repos-runtime-project-groups.test.ts b/src/renderer/src/store/slices/repos-runtime-project-groups.test.ts index bab610f598b..c01ccf818b7 100644 --- a/src/renderer/src/store/slices/repos-runtime-project-groups.test.ts +++ b/src/renderer/src/store/slices/repos-runtime-project-groups.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-runtime-routing-fixture.ts b/src/renderer/src/store/slices/repos-runtime-routing-fixture.ts index ef96a644e77..5df2606b057 100644 --- a/src/renderer/src/store/slices/repos-runtime-routing-fixture.ts +++ b/src/renderer/src/store/slices/repos-runtime-routing-fixture.ts @@ -1,6 +1,6 @@ import { beforeEach, vi, type Mock } from 'vitest' import { toast } from 'sonner' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-selected-owner-routing.test.ts b/src/renderer/src/store/slices/repos-selected-owner-routing.test.ts index 691a9fbdaaf..37922e968d8 100644 --- a/src/renderer/src/store/slices/repos-selected-owner-routing.test.ts +++ b/src/renderer/src/store/slices/repos-selected-owner-routing.test.ts @@ -1,5 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectGroup } from '../../../../shared/project-group-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts b/src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts index f805b66ac0c..6ddcdf99f9f 100644 --- a/src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts +++ b/src/renderer/src/store/slices/repos-setup-script-dismissals.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getSetupScriptPromptDismissalKey } from '../../lib/setup-script-prompt' import { createTestStore } from './store-test-helpers' import { getRepoHostIdentityForParts } from './repo-host-identity' diff --git a/src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts b/src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts index 77948ba5ed7..bc143733556 100644 --- a/src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts +++ b/src/renderer/src/store/slices/repos-shared-project-badge-color.test.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { createCompatibleRuntimeStatusResponseIfNeeded, type RuntimeEnvironmentCallRequest diff --git a/src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts b/src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts index e32f2da3699..58d694c84d0 100644 --- a/src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts +++ b/src/renderer/src/store/slices/repos-ssh-host-reconciliation.test.ts @@ -8,7 +8,9 @@ import type { SshConnectionState, SshProviderEpoch } from '../../../../shared/ssh-types' -import type { Project, ProjectHostSetup, Repo, Worktree } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Worktree } from '../../../../shared/worktree/types' import { createTestStore } from './store-test-helpers' const repoId = 're-adopted-repo' diff --git a/src/renderer/src/store/slices/repos-stale-fetch.test.ts b/src/renderer/src/store/slices/repos-stale-fetch.test.ts index c3c73d204ce..0c25f864cec 100644 --- a/src/renderer/src/store/slices/repos-stale-fetch.test.ts +++ b/src/renderer/src/store/slices/repos-stale-fetch.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' import { createTestStore, makeLayout, makeTab } from './store-test-helpers' -import type { Repo, WorkspaceSessionState } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { clearRuntimeCompatibilityCacheForTests } from '../../runtime/runtime-rpc-client' diff --git a/src/renderer/src/store/slices/repos-update-serialization.test.ts b/src/renderer/src/store/slices/repos-update-serialization.test.ts index 811d4c81f07..ebfc23161d5 100644 --- a/src/renderer/src/store/slices/repos-update-serialization.test.ts +++ b/src/renderer/src/store/slices/repos-update-serialization.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' const localRepo: Repo = { id: 'local-repo', diff --git a/src/renderer/src/store/slices/repos.runtime-fallback.test.ts b/src/renderer/src/store/slices/repos.runtime-fallback.test.ts index 9847481fd34..a5c38b8917b 100644 --- a/src/renderer/src/store/slices/repos.runtime-fallback.test.ts +++ b/src/renderer/src/store/slices/repos.runtime-fallback.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { FOLDER_WORKSPACE_PATH_STATUS_RUNTIME_CAPABILITY, RUNTIME_CAPABILITIES diff --git a/src/renderer/src/store/slices/repos.test.ts b/src/renderer/src/store/slices/repos.test.ts index efd5a998375..83a3564cf5b 100644 --- a/src/renderer/src/store/slices/repos.test.ts +++ b/src/renderer/src/store/slices/repos.test.ts @@ -1,7 +1,8 @@ import { describe, expect, it, vi } from 'vitest' import { createTestStore, makeWorktree } from './store-test-helpers' import { workItemsCacheKey } from './github' -import type { Project, ProjectHostSetup, Repo } from '../../../../shared/types' +import type { Project, ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { toast } from 'sonner' import { installReposRuntimeRoutingHarness, diff --git a/src/renderer/src/store/slices/repos.ts b/src/renderer/src/store/slices/repos.ts index 3cfa784209d..a619f5c0182 100644 --- a/src/renderer/src/store/slices/repos.ts +++ b/src/renderer/src/store/slices/repos.ts @@ -3,16 +3,16 @@ import type { StateCreator } from 'zustand' import { toast } from 'sonner' import type { AppState } from '../types' import type { SshRepoReadoption } from '../../../../shared/ssh-types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import type { - GlobalSettings, - Project, - ProjectUpdateArgs, - Repo, - ProjectGroup, - ProjectHostSetup, - FolderWorkspace, - ProjectGroupImportResult, NestedRepoScanResult, + ProjectGroup, + ProjectGroupImportResult +} from '../../../../shared/project-group-types' +import type { + Project, + ProjectHostSetup, ProjectHostSetupCloneArgs, ProjectHostSetupCreateArgs, ProjectHostSetupCreateResult, @@ -21,8 +21,10 @@ import type { ProjectHostSetupExistingFolderArgs, ProjectHostSetupResult, ProjectHostSetupUpdateArgs, - ProjectHostSetupUpdateResult -} from '../../../../shared/types' + ProjectHostSetupUpdateResult, + ProjectUpdateArgs +} from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' import { getProjectIdentityKey, mergeCatalogCreatedAt, diff --git a/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts b/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts index d3e8f37f15f..9e7cf558ba2 100644 --- a/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts +++ b/src/renderer/src/store/slices/restored-editor-owner-reparent.test.ts @@ -15,7 +15,7 @@ import { getEditorFileOperationContext } from '@/lib/editor-file-operation-owner' import type { AppState } from '@/store/types' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' const SOURCE = 'repo-a::/repo-a' const TARGET = 'repo-b::/repo-b' diff --git a/src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts b/src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts index 972a78b1ad2..76a28ae2634 100644 --- a/src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts +++ b/src/renderer/src/store/slices/runtime-catalog-merge-removed-env-guard.test.ts @@ -9,7 +9,7 @@ */ import { describe, it, expect, vi } from 'vitest' import type * as RuntimeRpcClientModule from '@/runtime/runtime-rpc-client' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import type { PublicKnownRuntimeEnvironment } from '../../../../shared/runtime-environments' vi.mock('sonner', () => ({ diff --git a/src/renderer/src/store/slices/runtime-detected-agents.ts b/src/renderer/src/store/slices/runtime-detected-agents.ts index 466c131f4e7..daac8ffada0 100644 --- a/src/renderer/src/store/slices/runtime-detected-agents.ts +++ b/src/renderer/src/store/slices/runtime-detected-agents.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { TuiAgent } from '../../../../shared/types' +import type { TuiAgent } from '../../../../shared/tui-agent' import { callRuntimeRpc, RuntimeRpcCallError } from '@/runtime/runtime-rpc-client' // Why: remote runtime hosts are not SSH connections, but their launch surfaces diff --git a/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts b/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts index da09283ffcb..4b3d95b384c 100644 --- a/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts +++ b/src/renderer/src/store/slices/runtime-host-purge-session-partition-split.test.ts @@ -7,7 +7,7 @@ */ import { describe, it, expect, vi } from 'vitest' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' -import type { WorkspaceSessionPatch } from '../../../../shared/types' +import type { WorkspaceSessionPatch } from '../../../../shared/workspace-session-state-types' import { buildHostIdByWorktreeId, patchWorkspaceSessionByHost, diff --git a/src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts b/src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts index a18fbfe23ce..fa07d59a718 100644 --- a/src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts +++ b/src/renderer/src/store/slices/selected-host-active-workspace-identity.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import type { ExecutionHostId } from '../../../../shared/execution-host' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { getExecutionHostIdForWorktree } from '@/lib/worktree-runtime-owner' import { useAppStore } from '@/store' diff --git a/src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts b/src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts index 80d4c24daad..41afe5a067f 100644 --- a/src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts +++ b/src/renderer/src/store/slices/set-runtime-environments-purge-wiring.test.ts @@ -6,7 +6,7 @@ */ import { describe, it, expect, vi } from 'vitest' import { toRuntimeExecutionHostId } from '../../../../shared/execution-host' -import type { ProjectHostSetup } from '../../../../shared/types' +import type { ProjectHostSetup } from '../../../../shared/project-types' import type { PublicKnownRuntimeEnvironment } from '../../../../shared/runtime-environments' vi.mock('sonner', () => ({ diff --git a/src/renderer/src/store/slices/settings.test.ts b/src/renderer/src/store/slices/settings.test.ts index 756e6d9baa8..3f55f065358 100644 --- a/src/renderer/src/store/slices/settings.test.ts +++ b/src/renderer/src/store/slices/settings.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' import { createTestStore, makeWorktree } from './store-test-helpers' import type { AppState } from '../types' -import type { WorktreeLineage } from '../../../../shared/types' +import type { WorktreeLineage } from '../../../../shared/worktree/lineage-types' import type { PublicKnownRuntimeEnvironment } from '../../../../shared/runtime-environments' import { toast } from 'sonner' import { diff --git a/src/renderer/src/store/slices/settings.ts b/src/renderer/src/store/slices/settings.ts index 593d1650e1e..22cf42b8cc6 100644 --- a/src/renderer/src/store/slices/settings.ts +++ b/src/renderer/src/store/slices/settings.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { GlobalSettings } from '../../../../shared/types' +import type { GlobalSettings } from '../../../../shared/global-settings-types' import { toast } from 'sonner' import { clearRuntimeCompatibilityCache, diff --git a/src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts b/src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts index d03b8418345..429e3e793d8 100644 --- a/src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts +++ b/src/renderer/src/store/slices/sparse-presets-repo-removal-purge-leak.test.ts @@ -9,7 +9,8 @@ */ import { describe, it, expect, vi, beforeEach } from 'vitest' import { createTestStore, makeWorktree } from './store-test-helpers' -import type { Repo, SparsePreset } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' const repo1: Repo = { id: 'repo-1', path: '/r1', displayName: 'R1', badgeColor: '#000', addedAt: 1 } const repo2: Repo = { id: 'repo-2', path: '/r2', displayName: 'R2', badgeColor: '#111', addedAt: 2 } diff --git a/src/renderer/src/store/slices/sparse-presets.test.ts b/src/renderer/src/store/slices/sparse-presets.test.ts index 5b41551ab21..c8192983c1d 100644 --- a/src/renderer/src/store/slices/sparse-presets.test.ts +++ b/src/renderer/src/store/slices/sparse-presets.test.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import type { AppState } from '../types' import { createSparsePresetsSlice } from './sparse-presets' diff --git a/src/renderer/src/store/slices/sparse-presets.ts b/src/renderer/src/store/slices/sparse-presets.ts index af118c7703b..b9e763bf72e 100644 --- a/src/renderer/src/store/slices/sparse-presets.ts +++ b/src/renderer/src/store/slices/sparse-presets.ts @@ -1,7 +1,7 @@ import type { StateCreator } from 'zustand' import { toast } from 'sonner' import type { AppState } from '../types' -import type { SparsePreset } from '../../../../shared/types' +import type { SparsePreset } from '../../../../shared/worktree/create-types' import { translate } from '@/i18n/i18n' const ERROR_TOAST_DURATION = 60_000 diff --git a/src/renderer/src/store/slices/stats.ts b/src/renderer/src/store/slices/stats.ts index 290ee9f44c0..19e87066be3 100644 --- a/src/renderer/src/store/slices/stats.ts +++ b/src/renderer/src/store/slices/stats.ts @@ -1,6 +1,6 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { StatsSummary } from '../../../../shared/types' +import type { StatsSummary } from '../../../../shared/process-stats-types' export type StatsSlice = { statsSummary: StatsSummary | null diff --git a/src/renderer/src/store/slices/store-session-cascades.test.ts b/src/renderer/src/store/slices/store-session-cascades.test.ts index 65474236f67..3ce0ac52a74 100644 --- a/src/renderer/src/store/slices/store-session-cascades.test.ts +++ b/src/renderer/src/store/slices/store-session-cascades.test.ts @@ -1,12 +1,8 @@ /* eslint-disable max-lines */ import { describe, it, expect, vi, beforeEach } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { - BrowserPage, - BrowserTab, - DetectedWorktreeListResult, - Worktree -} from '../../../../shared/types' +import type { BrowserPage, BrowserTab } from '../../../../shared/browser-workspace-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { isTerminalLeafId } from '../../../../shared/stable-pane-id' import { FLOATING_TERMINAL_WORKTREE_ID, diff --git a/src/renderer/src/store/slices/store-test-helpers.ts b/src/renderer/src/store/slices/store-test-helpers.ts index a4117e25260..1878bb3e7ce 100644 --- a/src/renderer/src/store/slices/store-test-helpers.ts +++ b/src/renderer/src/store/slices/store-test-helpers.ts @@ -1,12 +1,8 @@ import { create } from 'zustand' import type { AppState } from '../types' -import type { - Worktree, - TerminalTab, - TerminalLayoutSnapshot, - Tab, - TabGroup -} from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { OpenFile } from './editor' import { createRepoSlice } from './repos' import { createSparsePresetsSlice } from './sparse-presets' diff --git a/src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts b/src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts index 7b50312d7a5..42f89222f35 100644 --- a/src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts +++ b/src/renderer/src/store/slices/superseded-ssh-repo-rows.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { mergeSshRepoReadoptions, reconcileReadoptedSshRepoRows } from './superseded-ssh-repo-rows' function repo(overrides: Partial): Repo { diff --git a/src/renderer/src/store/slices/superseded-ssh-repo-rows.ts b/src/renderer/src/store/slices/superseded-ssh-repo-rows.ts index a9880577f60..4dc3d9399df 100644 --- a/src/renderer/src/store/slices/superseded-ssh-repo-rows.ts +++ b/src/renderer/src/store/slices/superseded-ssh-repo-rows.ts @@ -1,5 +1,5 @@ import type { SshRepoReadoption } from '../../../../shared/ssh-types' -import type { Repo } from '../../../../shared/types' +import type { Repo } from '../../../../shared/repo-types' import { getRepoExecutionHostId, toSshExecutionHostId } from '../../../../shared/execution-host' import { getRepoHostIdentityForParts } from '../../../../shared/repo-host-identity' diff --git a/src/renderer/src/store/slices/tab-group-reference-repair.ts b/src/renderer/src/store/slices/tab-group-reference-repair.ts index 42a742cc724..e992139cf28 100644 --- a/src/renderer/src/store/slices/tab-group-reference-repair.ts +++ b/src/renderer/src/store/slices/tab-group-reference-repair.ts @@ -1,4 +1,4 @@ -import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/types' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' import { createBrowserUuid } from '@/lib/browser-uuid' function collectLayoutGroupIds(node: TabGroupLayoutNode, groupIds: Set): void { diff --git a/src/renderer/src/store/slices/tab-group-state.test.ts b/src/renderer/src/store/slices/tab-group-state.test.ts index 22529cdea8e..9ec2d00b7ea 100644 --- a/src/renderer/src/store/slices/tab-group-state.test.ts +++ b/src/renderer/src/store/slices/tab-group-state.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest' -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import { findTabAndWorktree, findGroupForTab, diff --git a/src/renderer/src/store/slices/tab-group-state.ts b/src/renderer/src/store/slices/tab-group-state.ts index 6563829f89d..838433651c7 100644 --- a/src/renderer/src/store/slices/tab-group-state.ts +++ b/src/renderer/src/store/slices/tab-group-state.ts @@ -1,4 +1,5 @@ -import type { Tab, TabContentType, TabGroup, WorkspaceSessionState } from '../../../../shared/types' +import type { Tab, TabContentType, TabGroup } from '../../../../shared/tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { createBrowserUuid } from '@/lib/browser-uuid' export function findTabAndWorktree( diff --git a/src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts b/src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts index 1f0b2501174..dc8d7836a2a 100644 --- a/src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration-generated-title.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' function makeBaseSession(): WorkspaceSessionState { diff --git a/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts b/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts index dca253f4733..70d81deb851 100644 --- a/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration-group-validation.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' function makeBaseSession(): WorkspaceSessionState { diff --git a/src/renderer/src/store/slices/tabs-hydration.test.ts b/src/renderer/src/store/slices/tabs-hydration.test.ts index afd5a05eced..bab64605273 100644 --- a/src/renderer/src/store/slices/tabs-hydration.test.ts +++ b/src/renderer/src/store/slices/tabs-hydration.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' vi.stubGlobal('crypto', { randomUUID: () => `uuid-${Math.random().toString(36).slice(2, 8)}` }) diff --git a/src/renderer/src/store/slices/tabs-hydration.ts b/src/renderer/src/store/slices/tabs-hydration.ts index 2fb85ab3808..d3a8dd97c01 100644 --- a/src/renderer/src/store/slices/tabs-hydration.ts +++ b/src/renderer/src/store/slices/tabs-hydration.ts @@ -1,9 +1,5 @@ -import type { - Tab, - TabGroup, - TabGroupLayoutNode, - WorkspaceSessionState -} from '../../../../shared/types' +import type { Tab, TabGroup, TabGroupLayoutNode } from '../../../../shared/tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' import { createBrowserUuid } from '@/lib/browser-uuid' import { adoptGrouplessTabs, layoutSpanningGroups } from './tab-group-reference-repair' diff --git a/src/renderer/src/store/slices/tabs.test.ts b/src/renderer/src/store/slices/tabs.test.ts index c7bab81ff81..1599c2b8db1 100644 --- a/src/renderer/src/store/slices/tabs.test.ts +++ b/src/renderer/src/store/slices/tabs.test.ts @@ -1,6 +1,6 @@ /* eslint-disable max-lines */ import { describe, it, expect, vi, beforeEach } from 'vitest' -import type { Tab, TabGroup } from '../../../../shared/types' +import type { Tab, TabGroup } from '../../../../shared/tab-types' import type * as AgentStatusModule from '@/lib/agent-status' import { FLOATING_TERMINAL_WORKTREE_ID, getDefaultUIState } from '../../../../shared/constants' import { buildMobileSessionTabSnapshots } from '../../runtime/sync-runtime-graph' diff --git a/src/renderer/src/store/slices/tabs.ts b/src/renderer/src/store/slices/tabs.ts index 10b3ddbda0f..1c318830e0f 100644 --- a/src/renderer/src/store/slices/tabs.ts +++ b/src/renderer/src/store/slices/tabs.ts @@ -6,11 +6,11 @@ import type { TabContentType, TabGroup, TabGroupLayoutNode, - TerminalTab, - TuiAgent, - WorkspaceSessionState, WorkspaceVisibleTabType -} from '../../../../shared/types' +} from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { emitNativeChatToggled } from '@/lib/native-chat-telemetry' import { dedupeTabOrder, diff --git a/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts b/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts index 203736af29d..500b2f4cf35 100644 --- a/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts +++ b/src/renderer/src/store/slices/terminal-activation-spawn-suppression.ts @@ -1,4 +1,7 @@ -import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from '../../../../shared/types' +import type { + TerminalLayoutSnapshot, + TerminalPaneLayoutNode +} from '../../../../shared/terminal-tab-types' function countTerminalLayoutLeaves(node: TerminalPaneLayoutNode | null | undefined): number { if (!node) { diff --git a/src/renderer/src/store/slices/terminal-helpers.test.ts b/src/renderer/src/store/slices/terminal-helpers.test.ts index 93c6f395d3a..ee84ad2faf7 100644 --- a/src/renderer/src/store/slices/terminal-helpers.test.ts +++ b/src/renderer/src/store/slices/terminal-helpers.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { emptyLayoutSnapshot, clearTransientTerminalState } from './terminal-helpers' function makeTab(overrides: Partial = {}): TerminalTab { diff --git a/src/renderer/src/store/slices/terminal-helpers.ts b/src/renderer/src/store/slices/terminal-helpers.ts index 7f42c049ab6..3815849ea14 100644 --- a/src/renderer/src/store/slices/terminal-helpers.ts +++ b/src/renderer/src/store/slices/terminal-helpers.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' import { classifyTitleActivity } from '@/lib/pane-agent-evidence' export function emptyLayoutSnapshot(): TerminalLayoutSnapshot { diff --git a/src/renderer/src/store/slices/terminal-orphan-helpers.test.ts b/src/renderer/src/store/slices/terminal-orphan-helpers.test.ts index 0058213701d..00472302e2a 100644 --- a/src/renderer/src/store/slices/terminal-orphan-helpers.test.ts +++ b/src/renderer/src/store/slices/terminal-orphan-helpers.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { getOrphanTerminalIds } from './terminal-orphan-helpers' import { buildTerminalTabRetirementPlan } from './terminal-tab-retirement' diff --git a/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts b/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts index 257753fa58d..5545b3678f6 100644 --- a/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts +++ b/src/renderer/src/store/slices/terminal-pane-detach-agent-retention.test.ts @@ -7,7 +7,7 @@ import { } from './agent-pane-authority' import { createTestStore, makeTab, makeWorktree, seedStore } from './store-test-helpers' import type { AgentStatusEntry } from '../../../../shared/agent-status-types' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { DashboardAgentRow } from '@/components/dashboard/useDashboardData' const WORKTREE_ID = 'repo::/repo/worktree' diff --git a/src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts b/src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts index 43c8ab5dd74..435f560cfd2 100644 --- a/src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts +++ b/src/renderer/src/store/slices/terminal-quick-command-hosts.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { createTestStore } from './store-test-helpers' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { getDefaultSettings } from '../../../../shared/constants' import { MIN_COMPATIBLE_RUNTIME_CLIENT_VERSION, diff --git a/src/renderer/src/store/slices/terminal-quick-command-hosts.ts b/src/renderer/src/store/slices/terminal-quick-command-hosts.ts index df951c77324..7fd3b299eae 100644 --- a/src/renderer/src/store/slices/terminal-quick-command-hosts.ts +++ b/src/renderer/src/store/slices/terminal-quick-command-hosts.ts @@ -1,7 +1,7 @@ import type { StateCreator } from 'zustand' import { toast } from 'sonner' import type { AppState } from '../types' -import type { TerminalQuickCommand } from '../../../../shared/types' +import type { TerminalQuickCommand } from '../../../../shared/terminal-quick-command-types' import { applyTerminalQuickCommandMutation, parseNormalizedTerminalQuickCommands, diff --git a/src/renderer/src/store/slices/terminal-session-row-hydration.ts b/src/renderer/src/store/slices/terminal-session-row-hydration.ts index bb728f76483..eda4f369725 100644 --- a/src/renderer/src/store/slices/terminal-session-row-hydration.ts +++ b/src/renderer/src/store/slices/terminal-session-row-hydration.ts @@ -1,8 +1,5 @@ -import type { - TerminalLayoutSnapshot, - TerminalTab, - WorkspaceSessionState -} from '../../../../shared/types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import type { AiVaultSessionTitle } from '../../../../shared/ai-vault-session-title' import { isValidTerminalTabId } from '../../../../shared/terminal-tab-id' import { collectLeafIdsInOrder } from '@/components/terminal-pane/terminal-layout-leaf-ids' diff --git a/src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts b/src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts index cb5e7080ced..7745102c79a 100644 --- a/src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts +++ b/src/renderer/src/store/slices/terminal-tab-id-hydration.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { buildHydratedTabState } from './tabs-hydration' vi.mock('sonner', () => ({ toast: { info: vi.fn(), success: vi.fn(), error: vi.fn() } })) diff --git a/src/renderer/src/store/slices/terminal-tab-retirement.test.ts b/src/renderer/src/store/slices/terminal-tab-retirement.test.ts index c18b07e27d5..7365707be97 100644 --- a/src/renderer/src/store/slices/terminal-tab-retirement.test.ts +++ b/src/renderer/src/store/slices/terminal-tab-retirement.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session-resume' -import type { TerminalTab } from '../../../../shared/types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import { FLOATING_TERMINAL_WORKTREE_ID } from '../../../../shared/constants' import { brandEphemeralSetupTerminalWorktreeId } from '../../../../shared/ephemeral-setup-terminal-worktree-id' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' diff --git a/src/renderer/src/store/slices/terminal-tab-title-batch.ts b/src/renderer/src/store/slices/terminal-tab-title-batch.ts index 21701f3bd9d..20c51f59967 100644 --- a/src/renderer/src/store/slices/terminal-tab-title-batch.ts +++ b/src/renderer/src/store/slices/terminal-tab-title-batch.ts @@ -1,7 +1,8 @@ import { deriveGeneratedTabTitle } from '../../../../shared/agent-tab-title' import { isDecorativeAgentTitleFrameChange } from '../../../../shared/agent-decorative-title-signature' import { parseLegacyNumericPaneKey, parsePaneKey } from '../../../../shared/stable-pane-id' -import type { Tab, TerminalTab } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' import type { AppState } from '../types' export type TerminalTabTitleUpdate = { tabId: string; title: string } diff --git a/src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts b/src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts index bfd5ab13964..c68f58436c8 100644 --- a/src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts +++ b/src/renderer/src/store/slices/terminal-write-identity-bailouts.test.ts @@ -13,7 +13,7 @@ * 1_000 (one per call), the post-fix numbers are 0. */ import { describe, expect, it } from 'vitest' -import type { TerminalLayoutSnapshot } from '../../../../shared/types' +import type { TerminalLayoutSnapshot } from '../../../../shared/terminal-tab-types' import { createTestStore } from './store-test-helpers' const REPEATS = 1_000 diff --git a/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts b/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts index ddea9b058ab..170b1ceac81 100644 --- a/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration-canonical-pty-overlap.test.ts @@ -5,7 +5,9 @@ import { describe, expect, it } from 'vitest' import { hydrateWorkspaceTerminalRows } from './terminal-session-row-hydration' import { getOrphanTerminalIds } from './terminal-orphan-helpers' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session-resume' -import type { Tab, TerminalTab, WorkspaceSessionState } from '../../../../shared/types' +import type { Tab } from '../../../../shared/tab-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { createTestStore, makeLayout, makeTab, makeWorktree, seedStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts b/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts index 6a559c9e114..464159fa219 100644 --- a/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration-canonical-rows.test.ts @@ -1,7 +1,7 @@ import './terminal-hydration-store-test-bootstrap' import { describe, expect, it } from 'vitest' import type { SleepingAgentSessionRecord } from '../../../../shared/agent-session-resume' -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import { getDefaultWorkspaceSession } from '../../../../shared/constants' import { buildWorkspaceSessionPayload } from '@/lib/workspace-session' import { createTestStore, makeLayout, makeTab, makeWorktree, seedStore } from './store-test-helpers' diff --git a/src/renderer/src/store/slices/terminals-hydration.test.ts b/src/renderer/src/store/slices/terminals-hydration.test.ts index 837fde338fd..261acaa3211 100644 --- a/src/renderer/src/store/slices/terminals-hydration.test.ts +++ b/src/renderer/src/store/slices/terminals-hydration.test.ts @@ -91,7 +91,7 @@ const mockApi = { // @ts-expect-error -- mocked browser preload API globalThis.window = { api: mockApi } -import type { WorkspaceSessionState } from '../../../../shared/types' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' import type { SshProviderEpoch } from '../../../../shared/ssh-types' import type { DirectSshPaneRetryAttemptId } from './direct-ssh-terminal-recovery-types' import { diff --git a/src/renderer/src/store/slices/terminals.ts b/src/renderer/src/store/slices/terminals.ts index 9b65267f895..cb7537dfcfe 100644 --- a/src/renderer/src/store/slices/terminals.ts +++ b/src/renderer/src/store/slices/terminals.ts @@ -1,17 +1,14 @@ /* eslint-disable max-lines */ import type { StateCreator } from 'zustand' import type { AppState } from '../types' -import type { - Repo, - SetupSplitDirection, - Tab, - TerminalLayoutSnapshot, - TerminalTab, - TuiAgent, - Worktree, - WorkspaceKey, - WorkspaceSessionState -} from '../../../../shared/types' +import type { WorkspaceKey } from '../../../../shared/folder-workspace-types' +import type { Repo } from '../../../../shared/repo-types' +import type { Tab } from '../../../../shared/tab-types' +import type { TerminalLayoutSnapshot, TerminalTab } from '../../../../shared/terminal-tab-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { WorkspaceSessionState } from '../../../../shared/workspace-session-state-types' +import type { SetupSplitDirection } from '../../../../shared/worktree/launch-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { AgentProviderSessionMetadata, SleepingAgentLaunchConfig diff --git a/src/renderer/src/store/slices/ui.test.ts b/src/renderer/src/store/slices/ui.test.ts index 4cb747821a0..a4707693874 100644 --- a/src/renderer/src/store/slices/ui.test.ts +++ b/src/renderer/src/store/slices/ui.test.ts @@ -6,15 +6,13 @@ import { getDefaultUIState, getWorktreeCardModeProperties } from '../../../../shared/constants' -import type { - GitHubWorkItem, - JiraIssue, - LinearIssue, - PersistedUIState, - Repo, - TerminalTab, - Worktree -} from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { JiraIssue } from '../../../../shared/jira-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { PersistedUIState } from '../../../../shared/persisted-ui-state-types' +import type { Repo } from '../../../../shared/repo-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { GitLabWorkItem } from '../../../../shared/gitlab-types' import { createUISlice } from './ui' import { createWorktreeNavHistorySlice } from './worktree-nav-history' diff --git a/src/renderer/src/store/slices/ui.ts b/src/renderer/src/store/slices/ui.ts index 063e8157c02..f9ea3110cb6 100644 --- a/src/renderer/src/store/slices/ui.ts +++ b/src/renderer/src/store/slices/ui.ts @@ -6,31 +6,30 @@ import { findPrevLiveNonTaskStackHistoryIndex, findPrevLiveWorktreeHistoryIndex } from './worktree-nav-history' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { JiraIssue } from '../../../../shared/jira-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' +import type { PersistedTrustedOrcaHooks } from '../../../../shared/orca-yaml-hook-types' +import type { PersistedUIState } from '../../../../shared/persisted-ui-state-types' +import type { CustomPet } from '../../../../shared/pet-types' +import type { TaskProvider } from '../../../../shared/task-providers' +import type { TuiAgent } from '../../../../shared/tui-agent' import type { - ChangelogData, - CustomPet, - GitHubWorkItem, - JiraIssue, - LinearIssue, + AgentActivityDisplayMode, ManualRepoOrderEntry, - PersistedTrustedOrcaHooks, - PersistedUIState, + ProjectOrderBy, StatusBarItem, - TaskProvider, TaskResumeState, TaskViewPresetId, - TuiAgent, - UpdateStatus, - WorkspaceStatusDefinition, - AgentActivityDisplayMode, - ProjectOrderBy, - WorktreeCardProperty, - WorktreeCardMode, + TopLevelView, + VisibleWorkspaceHostIds, WorkspaceHostOrder, WorkspaceHostScope, - VisibleWorkspaceHostIds, - TopLevelView -} from '../../../../shared/types' + WorktreeCardMode, + WorktreeCardProperty +} from '../../../../shared/ui-chrome-types' +import type { ChangelogData, UpdateStatus } from '../../../../shared/update-status-types' +import type { WorkspaceStatusDefinition } from '../../../../shared/worktree/types' import { applyManualRepoOrder, normalizeManualRepoOrder @@ -50,7 +49,7 @@ import { import type { GitLabWorkItem } from '../../../../shared/gitlab-types' import type { LaunchSource } from '../../../../shared/telemetry-events' import type { TaskSourceContext } from '../../../../shared/task-source-context' -import { PET_SIZE_DEFAULT, PET_SIZE_MAX, PET_SIZE_MIN } from '../../../../shared/types' +import { PET_SIZE_DEFAULT, PET_SIZE_MAX, PET_SIZE_MIN } from '../../../../shared/pet-types' import { WORKSPACE_CLEANUP_CLASSIFIER_VERSION, type WorkspaceCleanupDismissal diff --git a/src/renderer/src/store/slices/worktree-by-id-index.test.ts b/src/renderer/src/store/slices/worktree-by-id-index.test.ts index 1c5d28e6295..70930836731 100644 --- a/src/renderer/src/store/slices/worktree-by-id-index.test.ts +++ b/src/renderer/src/store/slices/worktree-by-id-index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { buildByIdIndex, buildWorktreeByIdIndex } from './worktree-by-id-index' function worktree(id: string, repoId: string): Worktree { diff --git a/src/renderer/src/store/slices/worktree-by-id-index.ts b/src/renderer/src/store/slices/worktree-by-id-index.ts index a7eaf17239e..3607ce0f339 100644 --- a/src/renderer/src/store/slices/worktree-by-id-index.ts +++ b/src/renderer/src/store/slices/worktree-by-id-index.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' /** * Flattens worktreesByRepo into an id lookup. diff --git a/src/renderer/src/store/slices/worktree-helpers.test.ts b/src/renderer/src/store/slices/worktree-helpers.test.ts index 2750be4445b..d483c04aeaf 100644 --- a/src/renderer/src/store/slices/worktree-helpers.test.ts +++ b/src/renderer/src/store/slices/worktree-helpers.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { applyWorktreeUpdates } from './worktree-helpers' function makeWorktree(overrides: Partial & { id: string; repoId: string }): Worktree { diff --git a/src/renderer/src/store/slices/worktree-helpers.ts b/src/renderer/src/store/slices/worktree-helpers.ts index ee1fdb4e16a..11493b30f43 100644 --- a/src/renderer/src/store/slices/worktree-helpers.ts +++ b/src/renderer/src/store/slices/worktree-helpers.ts @@ -1,26 +1,29 @@ +import type { WorkspaceKey } from '../../../../shared/folder-workspace-types' +import type { TuiAgent } from '../../../../shared/tui-agent' +import type { WorkspaceSource as WorkspaceCreateTelemetrySource } from '../../../../shared/workspace-source' +import type { + WorktreeBaseStatusEvent, + WorktreeRemoteBranchConflictEvent +} from '../../../../shared/worktree/base-ref-drift-types' import type { - CreateWorktreeResult, - CreateWorktreeArgs, CreateSparseCheckoutRequest, + CreateWorktreeArgs, + CreateWorktreeResult, + ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult, + SetupDecision +} from '../../../../shared/worktree/create-types' +import type { WorktreeStartupLaunch } from '../../../../shared/worktree/launch-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' +import type { DetectedWorktree, DetectedWorktreeListResult, - ForceDeleteWorktreeBranchResult, GitPushTarget, - RemoveWorktreeResult, - SetupDecision, - TuiAgent, - WorkspaceCreateTelemetrySource, WorkspaceLinkedItem, WorkspaceStatus, - WorkspaceLineage, - WorktreeStartupLaunch, - Worktree, - WorktreeBaseStatusEvent, - WorktreeLineage, - WorktreeRemoteBranchConflictEvent, - WorktreeMeta, - WorkspaceKey -} from '../../../../shared/types' + Worktree +} from '../../../../shared/worktree/types' import type { TaskSourceContext } from '../../../../shared/task-source-context' import type { WorktreeForceDeleteReason } from '../../../../shared/worktree/removal' import type { TerminalGitHubPRLink } from '../../../../shared/terminal-github-pr-link-detector' diff --git a/src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts b/src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts index 0edf89bfb7b..281fa019e9e 100644 --- a/src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts +++ b/src/renderer/src/store/slices/worktree-listing-branch-switch.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' import { routeListingBranchSwitchesThroughGitIdentity } from './worktree-listing-branch-switch' function makeWorktree(overrides: Partial & { id: string }): Worktree { diff --git a/src/renderer/src/store/slices/worktree-listing-branch-switch.ts b/src/renderer/src/store/slices/worktree-listing-branch-switch.ts index 3782463668c..a72c50b7ce0 100644 --- a/src/renderer/src/store/slices/worktree-listing-branch-switch.ts +++ b/src/renderer/src/store/slices/worktree-listing-branch-switch.ts @@ -1,4 +1,4 @@ -import type { Worktree } from '../../../../shared/types' +import type { Worktree } from '../../../../shared/worktree/types' function indexUnambiguousWorktrees( worktrees: readonly Worktree[], diff --git a/src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts b/src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts index 70d4475ba3a..2c5f96fc97c 100644 --- a/src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts +++ b/src/renderer/src/store/slices/worktree-nav-history-view-entries.test.ts @@ -1,7 +1,9 @@ import { createStore, type StoreApi } from 'zustand/vanilla' import { afterEach, describe, expect, it } from 'vitest' import type { AppState } from '../types' -import type { GitHubWorkItem, JiraIssue, Worktree } from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { JiraIssue } from '../../../../shared/jira-types' +import type { Worktree } from '../../../../shared/worktree/types' import type { GitLabWorkItem } from '../../../../shared/gitlab-types' import type { TaskSourceContext } from '../../../../shared/task-source-context' import { diff --git a/src/renderer/src/store/slices/worktree-nav-history.test.ts b/src/renderer/src/store/slices/worktree-nav-history.test.ts index bb686e558fc..18863300026 100644 --- a/src/renderer/src/store/slices/worktree-nav-history.test.ts +++ b/src/renderer/src/store/slices/worktree-nav-history.test.ts @@ -1,7 +1,8 @@ import { createStore, type StoreApi } from 'zustand/vanilla' import { afterEach, describe, expect, it } from 'vitest' import type { AppState } from '../types' -import type { FolderWorkspace, Worktree } from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { Worktree } from '../../../../shared/worktree/types' import { folderWorkspaceKey } from '../../../../shared/workspace-scope' import { canGoBackWorktreeHistory, diff --git a/src/renderer/src/store/slices/worktree-nav-history.ts b/src/renderer/src/store/slices/worktree-nav-history.ts index 1582e649017..f59485d9801 100644 --- a/src/renderer/src/store/slices/worktree-nav-history.ts +++ b/src/renderer/src/store/slices/worktree-nav-history.ts @@ -1,7 +1,9 @@ import type { StateCreator } from 'zustand' import type { AppState } from '../types' import { findWorktreeById } from './worktree-helpers' -import type { GitHubWorkItem, JiraIssue, LinearIssue } from '../../../../shared/types' +import type { GitHubWorkItem } from '../../../../shared/github/work-item-types' +import type { JiraIssue } from '../../../../shared/jira-types' +import type { LinearIssue } from '../../../../shared/linear/issue-types' import type { GitLabWorkItem } from '../../../../shared/gitlab-types' import { getTaskSourceCacheScope, diff --git a/src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts b/src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts index d379a8ec895..98049554eb8 100644 --- a/src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts +++ b/src/renderer/src/store/slices/worktree-removal-maps-leak.test.ts @@ -21,7 +21,7 @@ */ import { describe, it, expect, vi, beforeEach } from 'vitest' import type * as AgentStatusModule from '@/lib/agent-status' -import type { BrowserPage, BrowserWorkspace } from '../../../../shared/types' +import type { BrowserPage, BrowserWorkspace } from '../../../../shared/browser-workspace-types' import { getAgentHibernationPaneOutputEpoch, recordAgentHibernationPaneOutput, diff --git a/src/renderer/src/store/slices/worktrees.test.ts b/src/renderer/src/store/slices/worktrees.test.ts index 6a18f3d6419..058c17eb64b 100644 --- a/src/renderer/src/store/slices/worktrees.test.ts +++ b/src/renderer/src/store/slices/worktrees.test.ts @@ -2,15 +2,11 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { create } from 'zustand' import type { AppState } from '../types' -import type { - DetectedWorktreeListResult, - FolderWorkspace, - LocalBaseRefRefreshResult, - TerminalTab, - Worktree, - WorktreeLineage, - WorkspaceLineage -} from '../../../../shared/types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { TerminalTab } from '../../../../shared/terminal-tab-types' +import type { LocalBaseRefRefreshResult } from '../../../../shared/worktree/base-ref-drift-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../../shared/worktree/types' import { toast } from 'sonner' import { createCompatibleRuntimeStatusResponse, diff --git a/src/renderer/src/store/slices/worktrees.ts b/src/renderer/src/store/slices/worktrees.ts index 5fcca972e6b..8569bce7e7e 100644 --- a/src/renderer/src/store/slices/worktrees.ts +++ b/src/renderer/src/store/slices/worktrees.ts @@ -1,22 +1,23 @@ /* eslint-disable max-lines */ import type { StateCreator, StoreApi } from 'zustand' import type { AppState } from '../types' +import type { FolderWorkspace } from '../../../../shared/folder-workspace-types' +import type { ProjectHostSetup } from '../../../../shared/project-types' +import type { Repo } from '../../../../shared/repo-types' +import type { WorkspaceVisibleTabType } from '../../../../shared/tab-types' +import type { LocalBaseRefRefreshResult } from '../../../../shared/worktree/base-ref-drift-types' +import type { + ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult +} from '../../../../shared/worktree/create-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../../shared/worktree/lineage-types' +import type { WorktreeMeta } from '../../../../shared/worktree/meta-types' import type { DetectedWorktreeListResult, - LocalBaseRefRefreshResult, - ForceDeleteWorktreeBranchResult, - FolderWorkspace, GitHubPrStartPoint, - Worktree, - WorkspaceVisibleTabType, GitPushTarget, - RemoveWorktreeResult, - WorktreeLineage, - WorkspaceLineage, - ProjectHostSetup, - Repo, - WorktreeMeta -} from '../../../../shared/types' + Worktree +} from '../../../../shared/worktree/types' import type { RuntimeWorktreeListResult } from '../../../../shared/runtime-types' import { findWorktreeById, diff --git a/src/renderer/src/store/worktree-diff-comments-selector.test.ts b/src/renderer/src/store/worktree-diff-comments-selector.test.ts index db45edec6b3..ce375285d48 100644 --- a/src/renderer/src/store/worktree-diff-comments-selector.test.ts +++ b/src/renderer/src/store/worktree-diff-comments-selector.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { DiffComment, FolderWorkspace, Worktree } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' +import type { FolderWorkspace } from '../../../shared/folder-workspace-types' +import type { Worktree } from '../../../shared/worktree/types' import type { AppState } from './types' import { selectWorktreeDiffComments, diff --git a/src/renderer/src/store/worktree-diff-comments-selector.ts b/src/renderer/src/store/worktree-diff-comments-selector.ts index 31e6edfa9ee..3fe9a37a84a 100644 --- a/src/renderer/src/store/worktree-diff-comments-selector.ts +++ b/src/renderer/src/store/worktree-diff-comments-selector.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from '../../../shared/types' +import type { DiffComment } from '../../../shared/diff-comment-types' import type { AppState } from './types' import { getIndexedWorktreeById } from './worktree-repo-index' import { findFolderWorkspaceOwner } from '@/lib/folder-workspace-runtime-owner' diff --git a/src/renderer/src/store/worktree-repo-index.ts b/src/renderer/src/store/worktree-repo-index.ts index 9c459f90f86..670e6b7ceec 100644 --- a/src/renderer/src/store/worktree-repo-index.ts +++ b/src/renderer/src/store/worktree-repo-index.ts @@ -1,4 +1,5 @@ -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import type { AppState } from './types' type WorktreeSnapshot = { diff --git a/src/renderer/src/web/web-file-mutation-methods.test.ts b/src/renderer/src/web/web-file-mutation-methods.test.ts index 7a996e24805..266beec9fb5 100644 --- a/src/renderer/src/web/web-file-mutation-methods.test.ts +++ b/src/renderer/src/web/web-file-mutation-methods.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { SshConnectionState } from '../../../shared/ssh-types' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { createWebFileMutationMethods } from './web-file-mutation-methods' function resolvedFile( diff --git a/src/renderer/src/web/web-file-mutation-methods.ts b/src/renderer/src/web/web-file-mutation-methods.ts index 5467f6a8ccf..262b7e30fc9 100644 --- a/src/renderer/src/web/web-file-mutation-methods.ts +++ b/src/renderer/src/web/web-file-mutation-methods.ts @@ -1,7 +1,7 @@ import type { PreloadApi } from '../../../preload/api-types' import { parseExecutionHostId } from '../../../shared/execution-host' import type { SshConnectionState, SshMutationExpectation } from '../../../shared/ssh-types' -import type { Worktree } from '../../../shared/types' +import type { Worktree } from '../../../shared/worktree/types' import { toRuntimeWorktreeSelector } from '../runtime/runtime-worktree-selector' const SSH_OWNER_CHANGED_MESSAGE = diff --git a/src/renderer/src/web/web-preload-api.ts b/src/renderer/src/web/web-preload-api.ts index 2b243aafac3..9b93472b082 100644 --- a/src/renderer/src/web/web-preload-api.ts +++ b/src/renderer/src/web/web-preload-api.ts @@ -24,24 +24,23 @@ import type { ComputerUsePermissionSetupResult, ComputerUsePermissionStatusResult } from '../../../shared/computer-use-permissions-types' +import type { SearchResult } from '../../../shared/code-search-types' +import type { DirEntry } from '../../../shared/filesystem-entry-types' +import type { GlobalSettings } from '../../../shared/global-settings-types' +import type { OnboardingState } from '../../../shared/onboarding-state-types' +import type { PersistedUIState } from '../../../shared/persisted-ui-state-types' +import type { MemorySnapshot, StatsSummary } from '../../../shared/process-stats-types' +import type { Repo } from '../../../shared/repo-types' import type { - DetectedWorktreeListResult, - DirEntry, - ForceDeleteWorktreeBranchResult, - GlobalSettings, - MemorySnapshot, - OnboardingState, - PersistedUIState, - Repo, - RemoveWorktreeResult, - SearchResult, - StatsSummary, - Worktree, - WorktreeLineage, - WorkspaceLineage, WorkspaceSessionPatch, WorkspaceSessionState -} from '../../../shared/types' +} from '../../../shared/workspace-session-state-types' +import type { + ForceDeleteWorktreeBranchResult, + RemoveWorktreeResult +} from '../../../shared/worktree/create-types' +import type { WorkspaceLineage, WorktreeLineage } from '../../../shared/worktree/lineage-types' +import type { DetectedWorktreeListResult, Worktree } from '../../../shared/worktree/types' import type { SkillDiscoveryResult } from '../../../shared/skills' import type { SkillFreshnessInventory } from '../../../shared/skill-freshness' import type { SshConnectionState, SshTarget } from '../../../shared/ssh-types' diff --git a/src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts b/src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts index 25c863c959d..b289c2a080b 100644 --- a/src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts +++ b/src/renderer/src/web/web-runtime-direct-proxy-live.integration.test.ts @@ -1,5 +1,6 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import type { Repo, Worktree } from '../../../shared/types' +import type { Repo } from '../../../shared/repo-types' +import type { Worktree } from '../../../shared/worktree/types' import type { RuntimeRpcResponse } from '../../../shared/runtime-rpc-envelope' import type { WorkspacePortScanResult } from '../../../shared/workspace-ports' import { parseWebPairingInput, type WebPairingOffer } from './web-pairing' diff --git a/src/renderer/src/web/web-workspace-session.test.ts b/src/renderer/src/web/web-workspace-session.test.ts index 95f1686cdbb..cfa19c076a7 100644 --- a/src/renderer/src/web/web-workspace-session.test.ts +++ b/src/renderer/src/web/web-workspace-session.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' import { sanitizeWebRuntimeWorkspaceSession } from './web-workspace-session' describe('sanitizeWebRuntimeWorkspaceSession', () => { diff --git a/src/renderer/src/web/web-workspace-session.ts b/src/renderer/src/web/web-workspace-session.ts index fbafdd277b6..30cea317a62 100644 --- a/src/renderer/src/web/web-workspace-session.ts +++ b/src/renderer/src/web/web-workspace-session.ts @@ -1,5 +1,5 @@ import { getDefaultWorkspaceSession } from '../../../shared/constants' -import type { WorkspaceSessionState } from '../../../shared/types' +import type { WorkspaceSessionState } from '../../../shared/workspace-session-state-types' export function sanitizeWebRuntimeWorkspaceSession( session: WorkspaceSessionState diff --git a/src/shared/agent-headless-command.ts b/src/shared/agent-headless-command.ts index 1ab62f2f5b5..9ff40e6af1d 100644 --- a/src/shared/agent-headless-command.ts +++ b/src/shared/agent-headless-command.ts @@ -1,7 +1,7 @@ import { isAnteHeadlessOneShotCommand } from './ante-headless-command' import { isPrimeAgentHeadlessOneShotCommand } from './prime-agent-headless-command' import { isPrintModeHeadlessOneShotCommand } from './print-mode-headless-command' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' // Why: a table (not an if-chain) so adding an agent is one entry; Claude and Trae share // the same `--print` one-shot contract, Ante's `--prompt` form and Prime Agent's diff --git a/src/shared/agent-kind.test.ts b/src/shared/agent-kind.test.ts index d479fd78e50..edea4d20fc4 100644 --- a/src/shared/agent-kind.test.ts +++ b/src/shared/agent-kind.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it } from 'vitest' import { agentKindToTuiAgent, tuiAgentToAgentKind } from './agent-kind' import { AGENT_KIND_VALUES, agentKindSchema } from './telemetry-events' import { TUI_AGENT_CONFIG } from './tui-agent-config' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' describe('tuiAgentToAgentKind', () => { it('maps every shipped TuiAgent to a concrete telemetry kind', () => { diff --git a/src/shared/agent-kind.ts b/src/shared/agent-kind.ts index bea996873ca..324a73f2cd8 100644 --- a/src/shared/agent-kind.ts +++ b/src/shared/agent-kind.ts @@ -9,7 +9,7 @@ // not a sweep across renderer + main. import type { AgentKind } from './telemetry-events' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' type ConcreteAgentKind = Exclude diff --git a/src/shared/agent-model-probe-spec.ts b/src/shared/agent-model-probe-spec.ts index e546f151b1f..d60dbda6f9f 100644 --- a/src/shared/agent-model-probe-spec.ts +++ b/src/shared/agent-model-probe-spec.ts @@ -1,6 +1,6 @@ import { getCommitMessageAgentSpec, type CommitMessageAgentSpec } from './commit-message-agent-spec' import { GROK_MODEL_LIST_ARGS, parseGrokModelList } from './grok-model-list-probe' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' /** Why: model discovery reads only these fields; excluding the prompt-delivery * half is what keeps a probe-only agent out of the commit-message registry. */ diff --git a/src/shared/agent-node-entrypoint-identities.ts b/src/shared/agent-node-entrypoint-identities.ts index 9c7f2a9f98c..e71118312d0 100644 --- a/src/shared/agent-node-entrypoint-identities.ts +++ b/src/shared/agent-node-entrypoint-identities.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' // Node CLIs whose shims launch a generic script (cli.js, versioned index.js), so // only the exact install path is an authoritative identity signal. diff --git a/src/shared/agent-process-recognition.ts b/src/shared/agent-process-recognition.ts index 957bfa5cb7b..e0fa3568c68 100644 --- a/src/shared/agent-process-recognition.ts +++ b/src/shared/agent-process-recognition.ts @@ -1,7 +1,7 @@ import { getTuiAgentDetectCommands, TUI_AGENT_CONFIG } from './tui-agent-config' import { EXACT_NODE_ENTRYPOINT_IDENTITIES } from './agent-node-entrypoint-identities' import type { AgentType } from './agent-status-types' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { filterHeadlessOneShotAgentCommand } from './agent-headless-command' import { getFirstCommandToken } from './command-token-scanner' diff --git a/src/shared/agent-row-conversation-name.ts b/src/shared/agent-row-conversation-name.ts index 95e5dfcfb28..02ea55b240b 100644 --- a/src/shared/agent-row-conversation-name.ts +++ b/src/shared/agent-row-conversation-name.ts @@ -11,7 +11,7 @@ import { stripLeadingAgentTitleDecorationOrEmpty } from './agent-title-decoratio import { formatAgentTypeLabel } from './agent-type-label' import { isMeaningfulOpenCodeTerminalTitle } from './opencode-terminal-title' import { SYNTHETIC_AGENT_TITLE_PROFILES } from './synthetic-agent-title' -import type { TerminalTab } from './types' +import type { TerminalTab } from './terminal-tab-types' export type ConversationNameTab = Pick< TerminalTab, diff --git a/src/shared/agent-session-host-authority.ts b/src/shared/agent-session-host-authority.ts index 96e079afb63..ec9f5776fc3 100644 --- a/src/shared/agent-session-host-authority.ts +++ b/src/shared/agent-session-host-authority.ts @@ -7,7 +7,7 @@ import { import type { RuntimeTerminalCreate, RuntimeTerminalPresentation } from './runtime-types' import { isTerminalLeafId } from './stable-pane-id' import { isValidTerminalTabId } from './terminal-tab-id' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export { AGENT_SESSION_HOST_AUTHORITY_RUNTIME_CAPABILITY as AGENT_SESSION_HOST_AUTHORITY_CAPABILITY } from './protocol-version' diff --git a/src/shared/agent-session-resume.ts b/src/shared/agent-session-resume.ts index b6e3ee9900d..66f7168e8ba 100644 --- a/src/shared/agent-session-resume.ts +++ b/src/shared/agent-session-resume.ts @@ -1,6 +1,6 @@ import type { AgentHookSource } from './agent-hook-relay' import type { AgentStatusState } from './agent-status-types' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export const RESUMABLE_TUI_AGENTS = [ 'claude', diff --git a/src/shared/ai-vault-types.ts b/src/shared/ai-vault-types.ts index 71387faf924..a6dff1b59a9 100644 --- a/src/shared/ai-vault-types.ts +++ b/src/shared/ai-vault-types.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import type { ExecutionHostId, ExecutionHostScope } from './execution-host' export const AI_VAULT_AGENTS = [ diff --git a/src/shared/artifact-sharing-gate.ts b/src/shared/artifact-sharing-gate.ts index a8d8c743a7e..0d10f7af3f0 100644 --- a/src/shared/artifact-sharing-gate.ts +++ b/src/shared/artifact-sharing-gate.ts @@ -1,6 +1,6 @@ // Why: publishing an artifact mints a URL anyone can open, so agents get the capability only // after the user grants it. The gate lives here so main, the CLI, and Settings share one contract. -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' export const ARTIFACT_SHARING_DISABLED_CODE = 'artifact_sharing_disabled' diff --git a/src/shared/auto-rename-branch-from-work-settings.ts b/src/shared/auto-rename-branch-from-work-settings.ts index ab2422d9e39..544e4c3833e 100644 --- a/src/shared/auto-rename-branch-from-work-settings.ts +++ b/src/shared/auto-rename-branch-from-work-settings.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' type AutoRenameBranchFromWorkSettings = Pick< GlobalSettings, diff --git a/src/shared/automation-workspace-provenance.ts b/src/shared/automation-workspace-provenance.ts index 7fd42119e22..6f1c0f9894e 100644 --- a/src/shared/automation-workspace-provenance.ts +++ b/src/shared/automation-workspace-provenance.ts @@ -1,6 +1,7 @@ import type { Automation, AutomationRun } from './automations-types' import { getRepoExecutionHostId } from './execution-host' -import type { AutomationWorkspaceProvenance, Repo } from './types' +import type { Repo } from './repo-types' +import type { AutomationWorkspaceProvenance } from './worktree/types' type AutomationProvenanceRun = Pick diff --git a/src/shared/automations-types.ts b/src/shared/automations-types.ts index d2572020ba8..82ebcb2dbae 100644 --- a/src/shared/automations-types.ts +++ b/src/shared/automations-types.ts @@ -1,4 +1,5 @@ -import type { SetupDecision, TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' +import type { SetupDecision } from './worktree/create-types' import type { TaskSourceContext, WorkspaceRunContext } from './task-source-context' export type AutomationWorkspaceMode = 'existing' | 'new_per_run' diff --git a/src/shared/base-ref-search-result.ts b/src/shared/base-ref-search-result.ts index 895ecf28f9a..469c358a05e 100644 --- a/src/shared/base-ref-search-result.ts +++ b/src/shared/base-ref-search-result.ts @@ -1,4 +1,4 @@ -import type { BaseRefSearchResult } from './types' +import type { BaseRefSearchResult } from './repo-types' const LEGACY_REMOTE_REF_PREFIXES = ['origin/', 'upstream/'] diff --git a/src/shared/branch-prefix.ts b/src/shared/branch-prefix.ts index 18a5fbe0ba7..1c2abf92276 100644 --- a/src/shared/branch-prefix.ts +++ b/src/shared/branch-prefix.ts @@ -1,4 +1,4 @@ -import type { BranchPrefixStrategy } from './types' +import type { BranchPrefixStrategy } from './ui-chrome-types' /** The branch-prefix settings slice the prefix helpers read. */ export type BranchPrefixSettings = { diff --git a/src/shared/browser-viewport-presets.ts b/src/shared/browser-viewport-presets.ts index 34cdebc5bb5..411a924213e 100644 --- a/src/shared/browser-viewport-presets.ts +++ b/src/shared/browser-viewport-presets.ts @@ -1,4 +1,4 @@ -import type { BrowserViewportOverride, BrowserViewportPresetId } from './types' +import type { BrowserViewportOverride, BrowserViewportPresetId } from './browser-workspace-types' export type BrowserViewportPreset = { id: BrowserViewportPresetId diff --git a/src/shared/cli-workspace-provenance.ts b/src/shared/cli-workspace-provenance.ts index 3334a7b6516..15de35c4172 100644 --- a/src/shared/cli-workspace-provenance.ts +++ b/src/shared/cli-workspace-provenance.ts @@ -1,4 +1,5 @@ -import type { CliWorkspaceProvenance, TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' +import type { CliWorkspaceProvenance } from './worktree/types' /** Client-supplied context for a `orca worktree create`. Descriptive only — * the host stamps `createdAt` so a skewed client clock can't affect sort order. */ diff --git a/src/shared/codex-pet-sprite-defaults.ts b/src/shared/codex-pet-sprite-defaults.ts index b33625d6202..ba5bd32786a 100644 --- a/src/shared/codex-pet-sprite-defaults.ts +++ b/src/shared/codex-pet-sprite-defaults.ts @@ -1,4 +1,4 @@ -import type { CustomPet, SpriteAnimation } from './types' +import type { CustomPet, SpriteAnimation } from './pet-types' /** Codex pet sprite layout and pacing, mirroring the tables in Codex CLI's * `tui/src/pets`. Shared because main bakes these into imported bundles and diff --git a/src/shared/codex-reset-credit-scope.test.ts b/src/shared/codex-reset-credit-scope.test.ts index 0852612a8c6..134d9c32dae 100644 --- a/src/shared/codex-reset-credit-scope.test.ts +++ b/src/shared/codex-reset-credit-scope.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { ProviderRateLimits } from './rate-limit-types' -import type { CodexManagedAccountSummary } from './types' +import type { CodexManagedAccountSummary } from './managed-account-types' import { buildCodexResetCreditExpectedScope } from './codex-reset-credit-scope' const account: CodexManagedAccountSummary = { diff --git a/src/shared/codex-reset-credit-scope.ts b/src/shared/codex-reset-credit-scope.ts index aec85c73117..390c40dc6cd 100644 --- a/src/shared/codex-reset-credit-scope.ts +++ b/src/shared/codex-reset-credit-scope.ts @@ -3,7 +3,7 @@ import type { RateLimitRuntimeTarget, RateLimitWindow } from './rate-limit-types' -import type { CodexManagedAccountSummary } from './types' +import type { CodexManagedAccountSummary } from './managed-account-types' export type CodexResetCreditExpectedScope = { target: RateLimitRuntimeTarget diff --git a/src/shared/commit-message-agent-spec.ts b/src/shared/commit-message-agent-spec.ts index 7c8b8bbfa9e..2281bd00a2b 100644 --- a/src/shared/commit-message-agent-spec.ts +++ b/src/shared/commit-message-agent-spec.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { isTuiAgentEnabled } from './tui-agent-selection' import { assertJsonTextStructureWithinLimits } from './json-text-structure-limit' import { diff --git a/src/shared/commit-message-generation.ts b/src/shared/commit-message-generation.ts index 3c5c92ad835..8cc6820e938 100644 --- a/src/shared/commit-message-generation.ts +++ b/src/shared/commit-message-generation.ts @@ -1,5 +1,5 @@ import { cleanGeneratedCommitMessage, truncateDiffForPrompt } from './commit-message-prompt' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export type CommitMessageDraftAgent = TuiAgent | 'custom' diff --git a/src/shared/commit-message-plan.ts b/src/shared/commit-message-plan.ts index 1141ecec0e7..dc77b1d4e17 100644 --- a/src/shared/commit-message-plan.ts +++ b/src/shared/commit-message-plan.ts @@ -4,7 +4,7 @@ import { isCustomAgentId } from './commit-message-agent-spec' import { planCustomCommand, tokenizeCustomCommandTemplate } from './commit-message-prompt' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' // Why: planning is a pure transformation from "user request + prompt text" // into "spawn-ready binary + argv". Keeping it in shared lets both the local diff --git a/src/shared/composer-branch-selection.ts b/src/shared/composer-branch-selection.ts index 9342f18bfd7..66ed39f6036 100644 --- a/src/shared/composer-branch-selection.ts +++ b/src/shared/composer-branch-selection.ts @@ -1,4 +1,4 @@ -import type { GitPushTarget } from './types' +import type { GitPushTarget } from './worktree/types' export type ComposerBranchSelection = { baseBranch: string diff --git a/src/shared/constants.ts b/src/shared/constants.ts index 10d77c5d741..2df10ca3e4a 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -1,15 +1,12 @@ /* eslint-disable max-lines -- Why: default persisted settings live in one schema-shaped object so migrations and tests compare against one source of truth. */ -import type { - GlobalSettings, - NotificationSettings, - OnboardingChecklistState, - OnboardingState, - PersistedState, - PersistedUIState, - RepoHookSettings, - WorkspaceSessionState, - AgentActivityDisplayMode -} from './types' +import type { GlobalSettings } from './global-settings-types' +import type { NotificationSettings } from './notification-settings-types' +import type { OnboardingChecklistState, OnboardingState } from './onboarding-state-types' +import type { RepoHookSettings } from './orca-yaml-hook-types' +import type { PersistedState } from './persisted-state-types' +import type { PersistedUIState } from './persisted-ui-state-types' +import type { AgentActivityDisplayMode } from './ui-chrome-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { EMPTY_CODEX_RESET_CREDIT_ATTEMPT_LEDGER } from './codex-reset-credit-attempt-ledger' import { DEFAULT_STATUS_BAR_ITEMS } from './status-bar-defaults' import { DEFAULT_TERMINAL_FONT_WEIGHT, DEFAULT_TERMINAL_FONT_WEIGHT_BOLD } from './terminal-fonts' diff --git a/src/shared/dashboard-snapshot.ts b/src/shared/dashboard-snapshot.ts index cd59983ae25..a3a888d820f 100644 --- a/src/shared/dashboard-snapshot.ts +++ b/src/shared/dashboard-snapshot.ts @@ -1,7 +1,7 @@ import type { AgentType } from './agent-status-types' import type { ExecutionHostId } from './execution-host' import type { RepoIcon } from './repo-icon' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' /** * Serializable contract for the pop-out agent dashboard. The main renderer owns diff --git a/src/shared/detected-worktree-provider-contract.ts b/src/shared/detected-worktree-provider-contract.ts index 662c2fed3c9..9f146e35778 100644 --- a/src/shared/detected-worktree-provider-contract.ts +++ b/src/shared/detected-worktree-provider-contract.ts @@ -1,6 +1,6 @@ import type { ExecutionHostId, LOCAL_EXECUTION_HOST_ID } from './execution-host' import type { DirectSshAuthority } from './ssh-types' -import type { DetectedWorktreeListResult } from './types' +import type { DetectedWorktreeListResult } from './worktree/types' export const PROVIDER_REQUEST_ID_MAX_UTF8_BYTES = 128 export type ProviderRequestId = string & { readonly __providerRequestId: unique symbol } diff --git a/src/shared/diff-comments-format.ts b/src/shared/diff-comments-format.ts index 4f35f818adc..a66b2a8ec99 100644 --- a/src/shared/diff-comments-format.ts +++ b/src/shared/diff-comments-format.ts @@ -1,4 +1,4 @@ -import type { DiffComment } from './types' +import type { DiffComment } from './diff-comment-types' function isMarkdownComment(comment: Pick): boolean { return comment.source === 'markdown' diff --git a/src/shared/ephemeral-vm-recipe-checkout-mode.test.ts b/src/shared/ephemeral-vm-recipe-checkout-mode.test.ts index ea77181ada0..d49d395afde 100644 --- a/src/shared/ephemeral-vm-recipe-checkout-mode.test.ts +++ b/src/shared/ephemeral-vm-recipe-checkout-mode.test.ts @@ -3,7 +3,7 @@ import { getEphemeralVmRecipeCheckoutModeError, getEphemeralVmRecipeResultSchemaVersion } from './ephemeral-vm-recipe-checkout-mode' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' const defaultRecipe: OrcaVmRecipe = { id: 'cloud-sandbox', diff --git a/src/shared/ephemeral-vm-recipe-checkout-mode.ts b/src/shared/ephemeral-vm-recipe-checkout-mode.ts index 1b50da88312..67e27f3e89e 100644 --- a/src/shared/ephemeral-vm-recipe-checkout-mode.ts +++ b/src/shared/ephemeral-vm-recipe-checkout-mode.ts @@ -1,6 +1,6 @@ import { getEphemeralVmRecipeResultCheckoutMode } from './ephemeral-vm-recipes' import type { EphemeralVmRecipeResult } from './ephemeral-vm-recipes' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' export function getEphemeralVmRecipeResultSchemaVersion(recipe: OrcaVmRecipe): 1 | 2 { return recipe.checkoutMode === 'provisioned-root' ? 2 : 1 diff --git a/src/shared/ephemeral-vm-recipe-doctor.test.ts b/src/shared/ephemeral-vm-recipe-doctor.test.ts index 2c6a22a41e8..2c738bd73f3 100644 --- a/src/shared/ephemeral-vm-recipe-doctor.test.ts +++ b/src/shared/ephemeral-vm-recipe-doctor.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' import { doctorEphemeralVmRecipe } from './ephemeral-vm-recipe-doctor' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' const roots: string[] = [] diff --git a/src/shared/ephemeral-vm-recipe-doctor.ts b/src/shared/ephemeral-vm-recipe-doctor.ts index 9f0ffc8a91b..35e279c1855 100644 --- a/src/shared/ephemeral-vm-recipe-doctor.ts +++ b/src/shared/ephemeral-vm-recipe-doctor.ts @@ -4,7 +4,7 @@ import type { EphemeralVmRecipeDoctorCheck, EphemeralVmRecipeDoctorResult } from './ephemeral-vm-recipes' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' export function doctorEphemeralVmRecipe(args: { repoPath: string diff --git a/src/shared/ephemeral-vm-recipe-lifecycle-payload.ts b/src/shared/ephemeral-vm-recipe-lifecycle-payload.ts index ab1a28904f1..4cee67602c2 100644 --- a/src/shared/ephemeral-vm-recipe-lifecycle-payload.ts +++ b/src/shared/ephemeral-vm-recipe-lifecycle-payload.ts @@ -1,7 +1,7 @@ import type { EphemeralVmRecipeResult } from './ephemeral-vm-recipes' import type { EphemeralVmRecipeContext } from './ephemeral-vm-recipe-runner' import { quoteShellToken } from './ephemeral-vm-recipe-process' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' export type EphemeralVmRecipeLifecycleMode = 'suspend' | 'resume' | 'destroy' diff --git a/src/shared/ephemeral-vm-recipe-repo-url.ts b/src/shared/ephemeral-vm-recipe-repo-url.ts index badd9fa3fbd..d4089591a4d 100644 --- a/src/shared/ephemeral-vm-recipe-repo-url.ts +++ b/src/shared/ephemeral-vm-recipe-repo-url.ts @@ -1,5 +1,5 @@ import { stripCredentialsFromMessage } from './git-remote-error' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' export function getProvisionedRootRecipeRepoUrl( checkoutMode: OrcaVmRecipe['checkoutMode'], diff --git a/src/shared/ephemeral-vm-recipe-runner.ts b/src/shared/ephemeral-vm-recipe-runner.ts index 496e9573fdb..60d6545abf7 100644 --- a/src/shared/ephemeral-vm-recipe-runner.ts +++ b/src/shared/ephemeral-vm-recipe-runner.ts @@ -1,7 +1,7 @@ import type { spawn } from 'node:child_process' import { randomUUID } from 'node:crypto' import { statSync } from 'node:fs' -import type { OrcaVmRecipe } from './types' +import type { OrcaVmRecipe } from './orca-yaml-hook-types' import { parseEphemeralVmRecipeResult, type EphemeralVmRecipeResult } from './ephemeral-vm-recipes' import { getEphemeralVmRecipeCheckoutModeError, diff --git a/src/shared/execution-host-registry.ts b/src/shared/execution-host-registry.ts index bceddd86a4b..890466ec703 100644 --- a/src/shared/execution-host-registry.ts +++ b/src/shared/execution-host-registry.ts @@ -14,7 +14,8 @@ import { MIN_COMPATIBLE_RUNTIME_SERVER_VERSION, RUNTIME_PROTOCOL_VERSION } from import type { RuntimeStatus } from './runtime-types' import type { SshConnectionState, SshConnectionStatus } from './ssh-types' import type { RuntimeEnvironmentSource } from './runtime-environments' -import type { GlobalSettings, Repo } from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' export type ExecutionHostHealth = | 'local' diff --git a/src/shared/execution-host.ts b/src/shared/execution-host.ts index 814182c2bae..18d584674bf 100644 --- a/src/shared/execution-host.ts +++ b/src/shared/execution-host.ts @@ -1,4 +1,6 @@ -import type { GlobalSettings, Repo, Worktree } from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' +import type { Worktree } from './worktree/types' export const LOCAL_EXECUTION_HOST_ID = 'local' export const ALL_EXECUTION_HOSTS_SCOPE = 'all' diff --git a/src/shared/external-worktree-inbox.test.ts b/src/shared/external-worktree-inbox.test.ts index 2c29fe4a117..251b07026a6 100644 --- a/src/shared/external-worktree-inbox.test.ts +++ b/src/shared/external-worktree-inbox.test.ts @@ -1,12 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { - DetectedWorktree, - DetectedWorktreeListResult, - GlobalSettings, - Repo, - Worktree -} from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' +import type { DetectedWorktree, DetectedWorktreeListResult, Worktree } from './worktree/types' import { getHiddenExternalWorktrees, getHiddenImportableExternalWorktrees, diff --git a/src/shared/external-worktree-inbox.ts b/src/shared/external-worktree-inbox.ts index c42a1249bd7..309da287892 100644 --- a/src/shared/external-worktree-inbox.ts +++ b/src/shared/external-worktree-inbox.ts @@ -1,5 +1,6 @@ import { normalizeRuntimePathForComparison } from './cross-platform-path' -import type { DetectedWorktree, DetectedWorktreeListResult, Repo } from './types' +import type { Repo } from './repo-types' +import type { DetectedWorktree, DetectedWorktreeListResult } from './worktree/types' import { effectiveExternalWorktreeVisibility, isLegacyRepoForExternalWorktreeVisibility diff --git a/src/shared/external-worktree-visibility.ts b/src/shared/external-worktree-visibility.ts index fc4af8c1681..999bfbcbeb4 100644 --- a/src/shared/external-worktree-visibility.ts +++ b/src/shared/external-worktree-visibility.ts @@ -1,5 +1,5 @@ import { normalizeRuntimePathSeparators } from './cross-platform-path' -import type { ExternalWorktreeVisibility, Repo } from './types' +import type { ExternalWorktreeVisibility, Repo } from './repo-types' export const EXTERNAL_WORKTREE_VISIBILITY_ROLLOUT_AT = Date.UTC(2026, 4, 23) export const UNKNOWN_EXTERNAL_WORKTREE_PARENT_PATH = 'Unknown location' diff --git a/src/shared/folder-workspace-worktree.test.ts b/src/shared/folder-workspace-worktree.test.ts index 270e62eb2ce..420da41488c 100644 --- a/src/shared/folder-workspace-worktree.test.ts +++ b/src/shared/folder-workspace-worktree.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { FolderWorkspace } from './types' +import type { FolderWorkspace } from './folder-workspace-types' import { folderWorkspaceToWorktree } from './folder-workspace-worktree' function makeFolderWorkspace(overrides: Partial = {}): FolderWorkspace { diff --git a/src/shared/folder-workspace-worktree.ts b/src/shared/folder-workspace-worktree.ts index 3bc62acb41f..c8715a12b3a 100644 --- a/src/shared/folder-workspace-worktree.ts +++ b/src/shared/folder-workspace-worktree.ts @@ -1,4 +1,5 @@ -import type { FolderWorkspace, Worktree } from './types' +import type { FolderWorkspace } from './folder-workspace-types' +import type { Worktree } from './worktree/types' import { folderWorkspaceKey } from './workspace-scope' import { parseExecutionHostId, toSshExecutionHostId } from './execution-host' import { normalizeWorkspaceCreatorProvenance } from './workspace-creator-provenance' diff --git a/src/shared/folder-workspaces.ts b/src/shared/folder-workspaces.ts index e5badf0d8d6..97409bd271d 100644 --- a/src/shared/folder-workspaces.ts +++ b/src/shared/folder-workspaces.ts @@ -1,4 +1,5 @@ -import type { FolderWorkspace, ProjectGroup } from './types' +import type { FolderWorkspace } from './folder-workspace-types' +import type { ProjectGroup } from './project-group-types' import { isTuiAgent } from './tui-agent-config' import { normalizeStoredTaskSourceContext } from './task-source-context' import { normalizeWorkspaceLinkedItem } from './workspace-linked-item' diff --git a/src/shared/git-effective-upstream.ts b/src/shared/git-effective-upstream.ts index 8292a9299c9..db364c53b20 100644 --- a/src/shared/git-effective-upstream.ts +++ b/src/shared/git-effective-upstream.ts @@ -1,5 +1,5 @@ import { isNoUpstreamError } from './git-remote-error' -import type { GitUpstreamStatus } from './types' +import type { GitUpstreamStatus } from './git-status-types' import { getConfiguredBranchRemoteUpstream, hasConfiguredBranchPushTarget diff --git a/src/shared/git-publish-target-status.ts b/src/shared/git-publish-target-status.ts index a391fb35c7f..392a7f13291 100644 --- a/src/shared/git-publish-target-status.ts +++ b/src/shared/git-publish-target-status.ts @@ -1,5 +1,5 @@ import type { GitUpstreamStatus } from './git-status-types' -import type { GitPushTarget } from './types' +import type { GitPushTarget } from './worktree/types' import { parseGitRevListAheadBehindCounts } from './git-rev-list-output' export type GitCommandRunner = (args: string[]) => Promise<{ stdout: string }> diff --git a/src/shared/git-push-target-validation.ts b/src/shared/git-push-target-validation.ts index e4de8736aad..208874bd10b 100644 --- a/src/shared/git-push-target-validation.ts +++ b/src/shared/git-push-target-validation.ts @@ -1,4 +1,4 @@ -import type { GitPushTarget } from './types' +import type { GitPushTarget } from './worktree/types' const SAFE_REMOTE_NAME_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/ const GITHUB_CLONE_URL = /^https:\/\/github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+\.git$/ diff --git a/src/shared/github/project-types.ts b/src/shared/github/project-types.ts index 6560e410474..dc1e20ea7ce 100644 --- a/src/shared/github/project-types.ts +++ b/src/shared/github/project-types.ts @@ -4,12 +4,10 @@ // import from here directly — do not re-export through `./types.ts` just to // match the existing import block; routing through the issue types module // would obscure ownership of the Project surface. -import type { - GitHubAssignableUser, - GitHubIssueUpdate, - GitHubWorkItemDetails, - PRComment -} from '../types' +import type { PRComment } from './comment-types' +import type { GitHubAssignableUser } from './pull-request-types' +import type { GitHubWorkItemDetails } from './work-item-types' +import type { GitHubIssueUpdate } from '../issue-mutation-types' export type GitHubProjectViewLayout = 'TABLE_LAYOUT' | 'BOARD_LAYOUT' | 'ROADMAP_LAYOUT' export type GitHubProjectOwnerType = 'organization' | 'user' diff --git a/src/shared/github/pull-request-auto-merge-availability.ts b/src/shared/github/pull-request-auto-merge-availability.ts index 90500d1618e..867224fc0ee 100644 --- a/src/shared/github/pull-request-auto-merge-availability.ts +++ b/src/shared/github/pull-request-auto-merge-availability.ts @@ -1,4 +1,4 @@ -import type { PRMergeableState, PRReviewDecision, PRState } from '../types' +import type { PRMergeableState, PRReviewDecision, PRState } from './pull-request-types' export type GitHubPRAutoMergeAvailabilityInput = { state: PRState | 'open' | 'closed' | 'merged' | 'draft' diff --git a/src/shared/github/pull-request-for-branch-outcome.test.ts b/src/shared/github/pull-request-for-branch-outcome.test.ts index 2eff1b7ae33..7ad79b1f61c 100644 --- a/src/shared/github/pull-request-for-branch-outcome.test.ts +++ b/src/shared/github/pull-request-for-branch-outcome.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { PRInfo, PRRefreshOutcome } from '../types' +import type { PRRefreshOutcome } from './pull-request-refresh-types' +import type { PRInfo } from './pull-request-types' import { normalizeGitHubPRForBranchOutcome } from './pull-request-for-branch-outcome' const PR = { diff --git a/src/shared/github/pull-request-for-branch-outcome.ts b/src/shared/github/pull-request-for-branch-outcome.ts index b6cdc180609..9e4a4574043 100644 --- a/src/shared/github/pull-request-for-branch-outcome.ts +++ b/src/shared/github/pull-request-for-branch-outcome.ts @@ -1,4 +1,5 @@ -import type { PRInfo, PRRefreshOutcome } from '../types' +import type { PRRefreshOutcome } from './pull-request-refresh-types' +import type { PRInfo } from './pull-request-types' export type GitHubPRForBranchResponse = PRRefreshOutcome | PRInfo | null diff --git a/src/shared/github/pull-request-merge-methods.ts b/src/shared/github/pull-request-merge-methods.ts index 2072706a41b..1cfb709635b 100644 --- a/src/shared/github/pull-request-merge-methods.ts +++ b/src/shared/github/pull-request-merge-methods.ts @@ -1,4 +1,4 @@ -import type { GitHubPRMergeMethod, GitHubPRMergeMethodSettings } from '../types' +import type { GitHubPRMergeMethod, GitHubPRMergeMethodSettings } from './pull-request-types' export const GITHUB_PR_MERGE_METHODS = ['squash', 'merge', 'rebase'] as const diff --git a/src/shared/gitlab-job-trace-check-details.test.ts b/src/shared/gitlab-job-trace-check-details.test.ts index 59cf24cbf79..9cc9240dd36 100644 --- a/src/shared/gitlab-job-trace-check-details.test.ts +++ b/src/shared/gitlab-job-trace-check-details.test.ts @@ -5,7 +5,7 @@ import { } from './gitlab-job-trace-check-details' import { gitLabPipelineJobsToPRChecks } from './gitlab-pipeline-checks' import type { GitLabPipelineJob } from './gitlab-types' -import type { PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' const STRINGS = { emptyTrace: 'No log is available for this GitLab job.' } diff --git a/src/shared/gitlab-job-trace-check-details.ts b/src/shared/gitlab-job-trace-check-details.ts index fd81789bc0a..4c0129ca6d4 100644 --- a/src/shared/gitlab-job-trace-check-details.ts +++ b/src/shared/gitlab-job-trace-check-details.ts @@ -1,5 +1,5 @@ import { gitLabJobTraceToLogExcerpt } from './gitlab-job-log-excerpt' -import type { PRCheckDetail, PRCheckRunDetails } from './types' +import type { PRCheckDetail, PRCheckRunDetails } from './github/check-types' export type GitLabJobTraceCheckDetailsStrings = { /** Shown for a job with no log: never ran, waiting on a human, or log erased/expired. */ diff --git a/src/shared/gitlab-pipeline-checks.test.ts b/src/shared/gitlab-pipeline-checks.test.ts index 71f2be73d8d..ee97352fcc0 100644 --- a/src/shared/gitlab-pipeline-checks.test.ts +++ b/src/shared/gitlab-pipeline-checks.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { gitLabPipelineJobsToPRChecks } from './gitlab-pipeline-checks' -import type { GitLabPipelineJob } from './types' +import type { GitLabPipelineJob } from './gitlab-types' describe('gitLabPipelineJobsToPRChecks', () => { it('maps GitLab pipeline jobs into right-panel check rows', () => { diff --git a/src/shared/gitlab-pipeline-checks.ts b/src/shared/gitlab-pipeline-checks.ts index 9cb9a2b1ebd..e9beb309853 100644 --- a/src/shared/gitlab-pipeline-checks.ts +++ b/src/shared/gitlab-pipeline-checks.ts @@ -1,5 +1,5 @@ import type { GitLabPipelineJob } from './gitlab-types' -import type { PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' export function mapGitLabPipelineJobStatusToCheckStatus(status: string): PRCheckDetail['status'] { const s = status.toLowerCase() diff --git a/src/shared/gitlab-projects.ts b/src/shared/gitlab-projects.ts index f09d6fa19f1..6f518febb4e 100644 --- a/src/shared/gitlab-projects.ts +++ b/src/shared/gitlab-projects.ts @@ -1,6 +1,6 @@ // Why: pure helpers for GitLabProjectSettings — kept out of the IPC // handler so the recents logic is testable without mocking the Store. -import type { GitLabProjectSettings } from './types' +import type { GitLabProjectSettings } from './gitlab-types' /** Default max recents kept before older entries fall off. */ export const GITLAB_RECENTS_MAX = 10 diff --git a/src/shared/gitlab-types.ts b/src/shared/gitlab-types.ts index c9f2a0fffba..56a506a0f5a 100644 --- a/src/shared/gitlab-types.ts +++ b/src/shared/gitlab-types.ts @@ -1,5 +1,10 @@ /* GitLab-specific shared types, split from `./types` to avoid merge conflicts on upstream syncs; re-exported from `./types` for import stability. */ -import type { CheckStatus, ClassifiedError, PRConflictSummary, ProviderCheckSummary } from './types' +import type { ClassifiedError } from './classified-error' +import type { + CheckStatus, + PRConflictSummary, + ProviderCheckSummary +} from './github/pull-request-types' import type { HostedReviewDecision } from './hosted-review' // Why: flat owner/repo is inadequate — projects nest (`group/subgroup/project`) and self-hosted hosts must travel with the path for URL/glab targeting. diff --git a/src/shared/hook-command-source-policy.ts b/src/shared/hook-command-source-policy.ts index 2a3b634bb53..32cd81af0e1 100644 --- a/src/shared/hook-command-source-policy.ts +++ b/src/shared/hook-command-source-policy.ts @@ -1,4 +1,4 @@ -import type { HookCommandSourcePolicy } from './types' +import type { HookCommandSourcePolicy } from './orca-yaml-hook-types' export function normalizeHookCommandSourcePolicy(policy: unknown): HookCommandSourcePolicy { if (policy === 'local-only' || policy === 'run-both' || policy === 'shared-only') { diff --git a/src/shared/host-lineage-contract.ts b/src/shared/host-lineage-contract.ts index 6541b84abac..7bb69f02bb9 100644 --- a/src/shared/host-lineage-contract.ts +++ b/src/shared/host-lineage-contract.ts @@ -1,7 +1,7 @@ import type { ExecutionHostId, LOCAL_EXECUTION_HOST_ID } from './execution-host' import type { SshExecutionHostId } from './detected-worktree-provider-contract' import type { DirectSshAuthority } from './ssh-types' -import type { WorktreeLineage, WorkspaceLineage } from './types' +import type { WorkspaceLineage, WorktreeLineage } from './worktree/lineage-types' export type ListDesktopLineageForHostArgs = | { executionHostId: typeof LOCAL_EXECUTION_HOST_ID } diff --git a/src/shared/host-repo-catalog-contract.ts b/src/shared/host-repo-catalog-contract.ts index 6a44bf8bd85..30f88d7f271 100644 --- a/src/shared/host-repo-catalog-contract.ts +++ b/src/shared/host-repo-catalog-contract.ts @@ -1,7 +1,7 @@ import type { ExecutionHostId, LOCAL_EXECUTION_HOST_ID } from './execution-host' import type { SshExecutionHostId } from './detected-worktree-provider-contract' import type { DirectSshAuthority } from './ssh-types' -import type { Repo } from './types' +import type { Repo } from './repo-types' export type ListReposForExecutionHostArgs = | { executionHostId: typeof LOCAL_EXECUTION_HOST_ID } diff --git a/src/shared/host-setting-overrides.test.ts b/src/shared/host-setting-overrides.test.ts index 58871e77892..e1fd5a390f8 100644 --- a/src/shared/host-setting-overrides.test.ts +++ b/src/shared/host-setting-overrides.test.ts @@ -6,7 +6,7 @@ import { getHostSettingOverride, setHostSettingOverride } from './host-setting-overrides' -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' function settingsWith( overrides: GlobalSettings['hostSettingOverrides'] diff --git a/src/shared/host-setting-overrides.ts b/src/shared/host-setting-overrides.ts index 5d7f0693d3a..840d64682a8 100644 --- a/src/shared/host-setting-overrides.ts +++ b/src/shared/host-setting-overrides.ts @@ -1,5 +1,5 @@ import type { ExecutionHostId } from './execution-host' -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' /** Per-host overrides for client preferences that genuinely vary by execution * host. NARROW by design: only settings whose value is meaningless to share diff --git a/src/shared/hosted-review-github.test.ts b/src/shared/hosted-review-github.test.ts index bbc17fa785b..1ad43f32b99 100644 --- a/src/shared/hosted-review-github.test.ts +++ b/src/shared/hosted-review-github.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { hostedReviewInfoFromGitHubPRInfo } from './hosted-review-github' -import type { PRInfo } from './types' +import type { PRInfo } from './github/pull-request-types' const pr: PRInfo = { number: 12, diff --git a/src/shared/hosted-review-github.ts b/src/shared/hosted-review-github.ts index 3cf76175bda..26d866d5c09 100644 --- a/src/shared/hosted-review-github.ts +++ b/src/shared/hosted-review-github.ts @@ -1,5 +1,5 @@ import type { HostedReviewInfo } from './hosted-review' -import type { PRInfo } from './types' +import type { PRInfo } from './github/pull-request-types' export function hostedReviewInfoFromGitHubPRInfo(pr: PRInfo): HostedReviewInfo { return { diff --git a/src/shared/hosted-review.ts b/src/shared/hosted-review.ts index c0763cb4184..2d0b218e9b1 100644 --- a/src/shared/hosted-review.ts +++ b/src/shared/hosted-review.ts @@ -4,7 +4,7 @@ import type { PRConflictSummary, PRMergeableState, PRReviewDecision -} from './types' +} from './github/pull-request-types' export type HostedReviewProvider = | 'github' diff --git a/src/shared/keybindings.ts b/src/shared/keybindings.ts index cbb448e030c..43c30d89d90 100644 --- a/src/shared/keybindings.ts +++ b/src/shared/keybindings.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines -- Why: keep the shortcut registry, parser, formatter, and conflict detector in one shared module so main/renderer/browser/Settings can't drift. */ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { ALL_TUI_AGENTS, TUI_AGENT_DISPLAY_NAMES } from './tui-agent-display-names' export type KeybindingScope = diff --git a/src/shared/linear/links.ts b/src/shared/linear/links.ts index ce457f0a419..c4b7f6b2c52 100644 --- a/src/shared/linear/links.ts +++ b/src/shared/linear/links.ts @@ -1,4 +1,5 @@ -import type { LinearConnectionStatus, LinearIssue, LinearWorkspace } from '../types' +import type { LinearIssue } from './issue-types' +import type { LinearConnectionStatus, LinearWorkspace } from './workspace-types' export function buildLinearTeamUrl(args: { organizationUrlKey?: string | null diff --git a/src/shared/local-account-runtime.ts b/src/shared/local-account-runtime.ts index 2e2b8b000da..b52234db538 100644 --- a/src/shared/local-account-runtime.ts +++ b/src/shared/local-account-runtime.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' import { normalizeGlobalWindowsRuntimeDefault } from './project-execution-runtime' export type LocalAccountRuntimeTarget = { diff --git a/src/shared/local-windows-terminal-runtime.ts b/src/shared/local-windows-terminal-runtime.ts index 0eb61d8bf08..ea225752a48 100644 --- a/src/shared/local-windows-terminal-runtime.ts +++ b/src/shared/local-windows-terminal-runtime.ts @@ -1,5 +1,5 @@ import type { ProjectExecutionRuntimeResolution } from './project-execution-runtime' -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' type LocalWindowsTerminalRuntimeSettings = | Partial> diff --git a/src/shared/managed-agent-hook-targets.ts b/src/shared/managed-agent-hook-targets.ts index a32dc63d411..fd339c52eaa 100644 --- a/src/shared/managed-agent-hook-targets.ts +++ b/src/shared/managed-agent-hook-targets.ts @@ -1,6 +1,6 @@ import { AGENT_HOOK_TARGETS, type AgentHookTarget } from './agent-hook-types' import { getTuiAgentDetectCommands, TUI_AGENT_CONFIG } from './tui-agent-config' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export type ManagedAgentHookTarget = { agent: AgentHookTarget diff --git a/src/shared/manual-repo-order.test.ts b/src/shared/manual-repo-order.test.ts index 3044a8d5399..616c6209bde 100644 --- a/src/shared/manual-repo-order.test.ts +++ b/src/shared/manual-repo-order.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest' -import type { ManualRepoOrderEntry, Repo } from './types' +import type { Repo } from './repo-types' +import type { ManualRepoOrderEntry } from './ui-chrome-types' import { applyManualRepoOrder, getManualRepoOrder, diff --git a/src/shared/manual-repo-order.ts b/src/shared/manual-repo-order.ts index 9813412c676..dce66fa2bee 100644 --- a/src/shared/manual-repo-order.ts +++ b/src/shared/manual-repo-order.ts @@ -1,6 +1,7 @@ import { getRepoExecutionHostId, normalizeExecutionHostId } from './execution-host' import { getRepoHostIdentityForParts } from './repo-host-identity' -import type { ManualRepoOrderEntry, Repo } from './types' +import type { Repo } from './repo-types' +import type { ManualRepoOrderEntry } from './ui-chrome-types' function getEntryKey(entry: ManualRepoOrderEntry): string { return getRepoHostIdentityForParts(entry.repoId, entry.hostId) diff --git a/src/shared/markdown-document-listing-limits.test.ts b/src/shared/markdown-document-listing-limits.test.ts index 574e146b4ee..54a3ee18500 100644 --- a/src/shared/markdown-document-listing-limits.test.ts +++ b/src/shared/markdown-document-listing-limits.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { MarkdownDocument } from './types' +import type { MarkdownDocument } from './filesystem-entry-types' import { assertMarkdownDocumentsWithinLimit, createMarkdownDocumentListingBudget, diff --git a/src/shared/markdown-document-listing-limits.ts b/src/shared/markdown-document-listing-limits.ts index 9c9b39c49b3..9b3676bb3d4 100644 --- a/src/shared/markdown-document-listing-limits.ts +++ b/src/shared/markdown-document-listing-limits.ts @@ -1,4 +1,4 @@ -import type { MarkdownDocument } from './types' +import type { MarkdownDocument } from './filesystem-entry-types' import { measureUtf8ByteLength } from './utf8-byte-limits' export const MARKDOWN_DOCUMENT_LISTING_MAX_DOCUMENTS = 20_000 diff --git a/src/shared/nested-repo-telemetry.test.ts b/src/shared/nested-repo-telemetry.test.ts index e2a1a7e579f..bce580bc0cb 100644 --- a/src/shared/nested-repo-telemetry.test.ts +++ b/src/shared/nested-repo-telemetry.test.ts @@ -9,7 +9,7 @@ import { createNestedRepoTelemetryAttemptId, shouldEmitNestedRepoImportSubmitTelemetry } from './nested-repo-telemetry' -import type { NestedRepoScanResult, ProjectGroupImportResult } from './types' +import type { NestedRepoScanResult, ProjectGroupImportResult } from './project-group-types' const scanResult: NestedRepoScanResult = { selectedPath: '/workspace/platform', diff --git a/src/shared/nested-repo-telemetry.ts b/src/shared/nested-repo-telemetry.ts index 44c536a7b3b..7aea296c57a 100644 --- a/src/shared/nested-repo-telemetry.ts +++ b/src/shared/nested-repo-telemetry.ts @@ -2,7 +2,7 @@ import type { NestedRepoScanResult, ProjectGroupImportMode, ProjectGroupImportResult -} from './types' +} from './project-group-types' export const NESTED_REPO_TELEMETRY_MAX_REPO_COUNT = 500 diff --git a/src/shared/new-workspace-dialog-repo.test.ts b/src/shared/new-workspace-dialog-repo.test.ts index cfc65ded826..e14116f915e 100644 --- a/src/shared/new-workspace-dialog-repo.test.ts +++ b/src/shared/new-workspace-dialog-repo.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { Repo } from './types' +import type { Repo } from './repo-types' import { getNewWorkspaceDialogEligibleRepos, resolveNewWorkspaceDialogGitRepoId, diff --git a/src/shared/new-workspace-dialog-repo.ts b/src/shared/new-workspace-dialog-repo.ts index 2e016853ce2..ae037513ca8 100644 --- a/src/shared/new-workspace-dialog-repo.ts +++ b/src/shared/new-workspace-dialog-repo.ts @@ -5,7 +5,7 @@ import { type ExecutionHostScope } from './execution-host' import { isGitRepoKind } from './repo-kind' -import type { Repo } from './types' +import type { Repo } from './repo-types' type NewWorkspaceDialogRepo = Pick< Repo, diff --git a/src/shared/new-workspace/fork-push-warning.ts b/src/shared/new-workspace/fork-push-warning.ts index 5c3a7c29e68..1cb634caf61 100644 --- a/src/shared/new-workspace/fork-push-warning.ts +++ b/src/shared/new-workspace/fork-push-warning.ts @@ -1,4 +1,4 @@ -import type { GitHubPrStartPoint } from '../types' +import type { GitHubPrStartPoint } from '../worktree/types' export const FORK_PUSH_NO_MAINTAINER_EDIT_WARNING = 'This PR has "Allow edits from maintainers" off; pushing to the fork may be rejected by GitHub.' diff --git a/src/shared/new-workspace/smart-workspace-linear-intent.ts b/src/shared/new-workspace/smart-workspace-linear-intent.ts index ec77fcb2fbd..1bca3ee822a 100644 --- a/src/shared/new-workspace/smart-workspace-linear-intent.ts +++ b/src/shared/new-workspace/smart-workspace-linear-intent.ts @@ -1,4 +1,4 @@ -import type { LinearIssue } from '../types' +import type { LinearIssue } from '../linear/issue-types' import { parseLinearIssueInput, parseLinearIssueUrlIntent, diff --git a/src/shared/new-workspace/smart-workspace-source-results.ts b/src/shared/new-workspace/smart-workspace-source-results.ts index e17a4029d8e..40de888f150 100644 --- a/src/shared/new-workspace/smart-workspace-source-results.ts +++ b/src/shared/new-workspace/smart-workspace-source-results.ts @@ -1,11 +1,9 @@ -import type { - BaseRefSearchResult, - GitHubWorkItem, - GitLabWorkItem, - JiraIssue, - LinearCollectionResult, - LinearIssue -} from '../types' +import type { GitHubWorkItem } from '../github/work-item-types' +import type { GitLabWorkItem } from '../gitlab-types' +import type { JiraIssue } from '../jira-types' +import type { LinearIssue } from '../linear/issue-types' +import type { LinearCollectionResult } from '../linear/workspace-types' +import type { BaseRefSearchResult } from '../repo-types' import { JIRA_ISSUE_KEY_PATTERN, parseJiraIssueUrl } from '../jira-issue-url' import { isSmartWorkspaceLinearIssueIntentMatch, diff --git a/src/shared/new-workspace/workspace-source.ts b/src/shared/new-workspace/workspace-source.ts index db15573d9ab..42af0804915 100644 --- a/src/shared/new-workspace/workspace-source.ts +++ b/src/shared/new-workspace/workspace-source.ts @@ -1,5 +1,7 @@ import { getLinearOrganizationUrlKeyFromIssueUrl } from '../linear/links' -import type { FolderWorkspaceLinkedTask, JiraIssue, LinearIssue } from '../types' +import type { FolderWorkspaceLinkedTask } from '../folder-workspace-types' +import type { JiraIssue } from '../jira-types' +import type { LinearIssue } from '../linear/issue-types' import { getLinkedWorkItemSuggestedName, getLinkedWorkItemWorkspaceName, diff --git a/src/shared/open-in-applications.ts b/src/shared/open-in-applications.ts index ace0f526bb8..5e48ec4c824 100644 --- a/src/shared/open-in-applications.ts +++ b/src/shared/open-in-applications.ts @@ -1,4 +1,4 @@ -import type { OpenInApplication } from './types' +import type { OpenInApplication } from './ui-chrome-types' export const OPEN_IN_APPLICATIONS_MAX = 8 export const DEFAULT_OPEN_IN_APPLICATIONS: OpenInApplication[] = [ diff --git a/src/shared/orca-yaml.ts b/src/shared/orca-yaml.ts index 35b49b20a7c..b2a84104df2 100644 --- a/src/shared/orca-yaml.ts +++ b/src/shared/orca-yaml.ts @@ -4,7 +4,7 @@ import type { OrcaHooks, OrcaVmRecipe, OrcaVmRecipeDiagnostic -} from './types' +} from './orca-yaml-hook-types' import { isOrcaYamlFieldWithinLimit, isOrcaYamlTextWithinLimit, diff --git a/src/shared/osc52-clipboard-settings.ts b/src/shared/osc52-clipboard-settings.ts index 2beb06dda16..2f1605bfc6d 100644 --- a/src/shared/osc52-clipboard-settings.ts +++ b/src/shared/osc52-clipboard-settings.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' type Osc52ClipboardSettings = Pick< GlobalSettings, diff --git a/src/shared/plugins/plugin-vm-recipe-artifact.ts b/src/shared/plugins/plugin-vm-recipe-artifact.ts index df99b40178c..fb39a7bccb6 100644 --- a/src/shared/plugins/plugin-vm-recipe-artifact.ts +++ b/src/shared/plugins/plugin-vm-recipe-artifact.ts @@ -1,6 +1,6 @@ import { z } from 'zod' import { ORCA_VM_RECIPE_ID_PATTERN, ORCA_VM_RECIPE_ID_RULE } from '../orca-yaml' -import type { OrcaVmRecipe } from '../types' +import type { OrcaVmRecipe } from '../orca-yaml-hook-types' const recipeCommandSchema = z .string() diff --git a/src/shared/pr-check-severity-order.test.ts b/src/shared/pr-check-severity-order.test.ts index 685886513aa..e2b6b39d285 100644 --- a/src/shared/pr-check-severity-order.test.ts +++ b/src/shared/pr-check-severity-order.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' import { getCheckSeverityRank, sortChecksBySeverity } from './pr-check-severity-order' import { mapGitLabPipelineJobStatusToConclusion } from './gitlab-pipeline-checks' diff --git a/src/shared/pr-check-severity-order.ts b/src/shared/pr-check-severity-order.ts index 0bf9effba63..db0230d37dd 100644 --- a/src/shared/pr-check-severity-order.ts +++ b/src/shared/pr-check-severity-order.ts @@ -1,4 +1,4 @@ -import type { PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' // Why: `neutral`/`skipped` carry no signal, so they sink below `success` — otherwise a // wall of skipped jobs buries the passing checks a reviewer actually reads. diff --git a/src/shared/pr-check-status.test.ts b/src/shared/pr-check-status.test.ts index b924b68bc19..50f5132b40e 100644 --- a/src/shared/pr-check-status.test.ts +++ b/src/shared/pr-check-status.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { derivePRCheckStatus, derivePRCheckStatusFromRollup } from './pr-check-status' -import type { PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' const check = ( status: PRCheckDetail['status'], diff --git a/src/shared/pr-check-status.ts b/src/shared/pr-check-status.ts index b2127671d1a..f67fd5cb66b 100644 --- a/src/shared/pr-check-status.ts +++ b/src/shared/pr-check-status.ts @@ -1,5 +1,6 @@ import { summarizeProviderChecks } from './provider-check-summary' -import type { CheckStatus, PRCheckDetail } from './types' +import type { PRCheckDetail } from './github/check-types' +import type { CheckStatus } from './github/pull-request-types' /** Derives the review status from the normalized check contract. */ export function derivePRCheckStatus(checks: readonly PRCheckDetail[]): CheckStatus { diff --git a/src/shared/pr-checks-fix-prompt.ts b/src/shared/pr-checks-fix-prompt.ts index ff50a410942..bf68218240d 100644 --- a/src/shared/pr-checks-fix-prompt.ts +++ b/src/shared/pr-checks-fix-prompt.ts @@ -1,4 +1,4 @@ -import type { PRCheckDetail, PRCheckRunDetails } from './types' +import type { PRCheckDetail, PRCheckRunDetails } from './github/check-types' export const PROMPT_LOG_TAIL_LINES = 150 export const PROMPT_LOG_TAIL_SCAN_CODE_UNITS = 256 * 1024 diff --git a/src/shared/pr-comment-audience.test.ts b/src/shared/pr-comment-audience.test.ts index 7499e791b90..76fb50fa888 100644 --- a/src/shared/pr-comment-audience.test.ts +++ b/src/shared/pr-comment-audience.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from './types' +import type { PRComment } from './github/comment-types' import { createBotAuthorOverrideSet } from './pr-bot-author-overrides' import { filterPRCommentsByAudience, diff --git a/src/shared/pr-comment-audience.ts b/src/shared/pr-comment-audience.ts index 280d0590a7a..4736ab5c372 100644 --- a/src/shared/pr-comment-audience.ts +++ b/src/shared/pr-comment-audience.ts @@ -1,4 +1,4 @@ -import type { PRComment } from './types' +import type { PRComment } from './github/comment-types' import { normalizePRCommentAuthorLogin } from './pr-bot-author-overrides' export type PRCommentAudienceFilter = 'all' | 'human' | 'bot' diff --git a/src/shared/pr-comment-groups.test.ts b/src/shared/pr-comment-groups.test.ts index b2f8de72980..06b801fbf66 100644 --- a/src/shared/pr-comment-groups.test.ts +++ b/src/shared/pr-comment-groups.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import type { PRComment } from './types' +import type { PRComment } from './github/comment-types' import { getPRCommentGroupCount, getPRCommentGroupId, diff --git a/src/shared/pr-comment-groups.ts b/src/shared/pr-comment-groups.ts index 8d43b9e2b77..119af69c72c 100644 --- a/src/shared/pr-comment-groups.ts +++ b/src/shared/pr-comment-groups.ts @@ -1,4 +1,4 @@ -import type { PRComment } from './types' +import type { PRComment } from './github/comment-types' export type PRCommentGroup = | { kind: 'standalone'; comment: PRComment } diff --git a/src/shared/project-groups.test.ts b/src/shared/project-groups.test.ts index 4c11e8d598b..6b228f698d9 100644 --- a/src/shared/project-groups.test.ts +++ b/src/shared/project-groups.test.ts @@ -8,7 +8,7 @@ import { normalizeProjectGroupName, normalizeProjectGroups } from './project-groups' -import type { Repo } from './types' +import type { Repo } from './repo-types' function repo(overrides: Partial): Repo { return { diff --git a/src/shared/project-groups.ts b/src/shared/project-groups.ts index 6d9b02d8354..67c2897ead6 100644 --- a/src/shared/project-groups.ts +++ b/src/shared/project-groups.ts @@ -1,5 +1,6 @@ import { normalizeExecutionHostId } from './execution-host' -import type { Repo, ProjectGroup, ProjectGroupCreatedFrom } from './types' +import type { ProjectGroup, ProjectGroupCreatedFrom } from './project-group-types' +import type { Repo } from './repo-types' export const UNGROUPED_PROJECT_GROUP_KEY = 'project-group:ungrouped' diff --git a/src/shared/project-host-setup-projection.test.ts b/src/shared/project-host-setup-projection.test.ts index d0456d392de..97ea8cc66b0 100644 --- a/src/shared/project-host-setup-projection.test.ts +++ b/src/shared/project-host-setup-projection.test.ts @@ -7,7 +7,7 @@ import { getProjectIdForProviderIdentity, isProjectRemoteIdentityPending } from './project-host-setup-projection' -import type { Repo } from './types' +import type { Repo } from './repo-types' function repo(overrides: Partial & Pick): Repo { return { diff --git a/src/shared/project-host-setup-projection.ts b/src/shared/project-host-setup-projection.ts index 1db66b2d2c9..537fa5af42b 100644 --- a/src/shared/project-host-setup-projection.ts +++ b/src/shared/project-host-setup-projection.ts @@ -1,13 +1,9 @@ import { getRepoExecutionHostId } from './execution-host' import { normalizeGitHubRemoteHost } from './git-remote-host-alias' import { githubRepoIdentityKey, isDefaultGitHubHost } from './github/repository-identity-key' -import type { - Project, - ProjectHostSetup, - ProjectProviderIdentity, - Repo, - WorktreeMeta -} from './types' +import type { Project, ProjectHostSetup, ProjectProviderIdentity } from './project-types' +import type { Repo } from './repo-types' +import type { WorktreeMeta } from './worktree/meta-types' type ProjectAccumulator = { project: Project diff --git a/src/shared/project-identity-succession.test.ts b/src/shared/project-identity-succession.test.ts index be9cda1c4ed..a5cad899035 100644 --- a/src/shared/project-identity-succession.test.ts +++ b/src/shared/project-identity-succession.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { carryProjectStateThroughIdentityChange } from './project-identity-succession' -import type { Project } from './types' +import type { Project } from './project-types' const makeProject = (overrides: Partial = {}): Project => ({ id: 'project-1', diff --git a/src/shared/project-identity-succession.ts b/src/shared/project-identity-succession.ts index 815d1b58f6d..8afc9aed99a 100644 --- a/src/shared/project-identity-succession.ts +++ b/src/shared/project-identity-succession.ts @@ -1,4 +1,4 @@ -import type { Project } from './types' +import type { Project } from './project-types' export type ProjectIdentitySuccession = { /** Projected projects with user-set state carried forward from their predecessor row. */ diff --git a/src/shared/protocol-version.ts b/src/shared/protocol-version.ts index eb61be79c97..a2b20a8b99e 100644 --- a/src/shared/protocol-version.ts +++ b/src/shared/protocol-version.ts @@ -56,6 +56,10 @@ export const AI_VAULT_SESSION_TITLES_RUNTIME_CAPABILITY = 'aiVault.session-title export const BROWSER_HEADLESS_RUNTIME_CAPABILITY = 'browser.headless.v1' as const export const BROWSER_SCREENCAST_RUNTIME_CAPABILITY = 'browser.screencast.v1' as const export const BROWSER_CERTIFICATE_TRUST_RUNTIME_CAPABILITY = 'browser.certificate-trust.v1' as const +// Why: older hosts discard browser.tabCreate's page field, so clients may only +// treat a preallocated page ID as canonical when this is advertised. +export const BROWSER_TAB_CREATE_KNOWN_ID_RUNTIME_CAPABILITY = + 'browser.tab-create-known-id.v1' as const // Why: hosts without this strip terminal.send's inputKind (zod object drops // unknown keys), so a mobile xterm query reply would land as ordinary // floor-taking input. Mobile must not forward replies unless advertised. @@ -99,6 +103,7 @@ export const RUNTIME_CAPABILITIES = [ ORCHESTRATION_WORKER_LAUNCH_PREFERENCES_RUNTIME_CAPABILITY, ORCHESTRATION_CONTRACT_RUNTIME_CAPABILITY, BROWSER_SCREENCAST_RUNTIME_CAPABILITY, + BROWSER_TAB_CREATE_KNOWN_ID_RUNTIME_CAPABILITY, 'terminal.binary-stream.v1', 'terminal.multiplex.v1', 'workspace-ports.v1', diff --git a/src/shared/provider-check-summary.ts b/src/shared/provider-check-summary.ts index a3fe8813458..d191aa5d123 100644 --- a/src/shared/provider-check-summary.ts +++ b/src/shared/provider-check-summary.ts @@ -1,4 +1,4 @@ -import type { ProviderCheckSummary } from './types' +import type { ProviderCheckSummary } from './github/pull-request-types' export type CheckOutcome = 'passed' | 'failed' | 'pending' | 'neutral' diff --git a/src/shared/remote-server-update.ts b/src/shared/remote-server-update.ts index 7817e8fd9f9..917056996af 100644 --- a/src/shared/remote-server-update.ts +++ b/src/shared/remote-server-update.ts @@ -1,4 +1,4 @@ -import type { UpdateStatus } from './types' +import type { UpdateStatus } from './update-status-types' export const REMOTE_SERVER_UPDATE_CAPABILITY = 'updater.remote-control.v1' as const diff --git a/src/shared/remote-workspace-session-projection.ts b/src/shared/remote-workspace-session-projection.ts index dc9a4019a8b..3b60d9044ff 100644 --- a/src/shared/remote-workspace-session-projection.ts +++ b/src/shared/remote-workspace-session-projection.ts @@ -1,6 +1,7 @@ import { getDefaultWorkspaceSession } from './constants' import type { RemoteWorkspaceSession, RemoteWorkspaceTerminalTab } from './remote-workspace-types' -import type { TerminalTab, WorkspaceSessionState } from './types' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { splitWorktreeId } from './worktree/id' type ExportOptions = { diff --git a/src/shared/remote-workspace-types.ts b/src/shared/remote-workspace-types.ts index 3c08f272864..509ab83b436 100644 --- a/src/shared/remote-workspace-types.ts +++ b/src/shared/remote-workspace-types.ts @@ -1,4 +1,4 @@ -import type { TerminalLayoutSnapshot, TerminalTab } from './types' +import type { TerminalLayoutSnapshot, TerminalTab } from './terminal-tab-types' export type RemoteWorkspaceTerminalTab = Omit & { worktreePath: string diff --git a/src/shared/renderer-restart-preparation.test.ts b/src/shared/renderer-restart-preparation.test.ts index b755496e0c2..ca690ab3cc6 100644 --- a/src/shared/renderer-restart-preparation.test.ts +++ b/src/shared/renderer-restart-preparation.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { UpdateStatus } from './types' +import type { UpdateStatus } from './update-status-types' import { ORCA_RENDERER_SHUTDOWN_CHECKPOINT_FAILED_EVENT } from './renderer-shutdown-events' import { createUpdaterQuitAbortRelay, diff --git a/src/shared/renderer-restart-preparation.ts b/src/shared/renderer-restart-preparation.ts index 20a5311cd6a..356008e0f62 100644 --- a/src/shared/renderer-restart-preparation.ts +++ b/src/shared/renderer-restart-preparation.ts @@ -3,7 +3,7 @@ import { type EditorPrepareHotExitDetail } from './editor-save-events' import { ORCA_RENDERER_SHUTDOWN_CHECKPOINT_FAILED_EVENT } from './renderer-shutdown-events' -import type { UpdateStatus } from './types' +import type { UpdateStatus } from './update-status-types' export type AppRestartPrepOptions = { startedEventName: string diff --git a/src/shared/repo-kind.ts b/src/shared/repo-kind.ts index b5c3946ce98..a9d03a78fad 100644 --- a/src/shared/repo-kind.ts +++ b/src/shared/repo-kind.ts @@ -1,4 +1,4 @@ -import type { Repo } from './types' +import type { Repo } from './repo-types' export function getRepoKind(repo: Pick): 'git' | 'folder' { return repo.kind === 'folder' ? 'folder' : 'git' diff --git a/src/shared/repro-7732-gitlab-job-id-dropped.test.ts b/src/shared/repro-7732-gitlab-job-id-dropped.test.ts index 4f1130f26f2..2f108571dcf 100644 --- a/src/shared/repro-7732-gitlab-job-id-dropped.test.ts +++ b/src/shared/repro-7732-gitlab-job-id-dropped.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { gitLabPipelineJobsToPRChecks } from './gitlab-pipeline-checks' -import type { GitLabPipelineJob } from './types' +import type { GitLabPipelineJob } from './gitlab-types' // Repro for #7732: the Checks side panel can only ask for a GitLab job trace if the mapped // check row still carries the numeric GitLab job id (gitlab:jobTrace takes { jobId }). diff --git a/src/shared/resolved-worktree-lineage.test.ts b/src/shared/resolved-worktree-lineage.test.ts index fc42c1ed608..1c8803d28dd 100644 --- a/src/shared/resolved-worktree-lineage.test.ts +++ b/src/shared/resolved-worktree-lineage.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { join } from 'node:path' -import type { Worktree, WorktreeLineage } from './types' +import type { WorktreeLineage } from './worktree/lineage-types' +import type { Worktree } from './worktree/types' import { projectResolvedWorktreeLineage } from './resolved-worktree-lineage' function worktree(id: string, instanceId: string, overrides: Partial = {}): Worktree { diff --git a/src/shared/resolved-worktree-lineage.ts b/src/shared/resolved-worktree-lineage.ts index 4967d8450b4..f0a50ae2266 100644 --- a/src/shared/resolved-worktree-lineage.ts +++ b/src/shared/resolved-worktree-lineage.ts @@ -1,4 +1,5 @@ -import type { Worktree, WorktreeLineage } from './types' +import type { WorktreeLineage } from './worktree/lineage-types' +import type { Worktree } from './worktree/types' export type WorktreeWithResolvedLineage = T & { parentWorktreeId: string | null diff --git a/src/shared/runtime-client-events.ts b/src/shared/runtime-client-events.ts index 242dd44af24..c849f2f6630 100644 --- a/src/shared/runtime-client-events.ts +++ b/src/shared/runtime-client-events.ts @@ -1,9 +1,9 @@ +import type { CreateWorktreeResult } from './worktree/create-types' import type { - CreateWorktreeResult, WorktreeDefaultTabsLaunch, WorktreeSetupLaunch, WorktreeStartupLaunch -} from './types' +} from './worktree/launch-types' import type { SshConnectionState } from './ssh-types' import type { TerminalSideEffectBatch } from './terminal-side-effect-facts' import type { RuntimeNativeChatLaunchDraftResolution } from './runtime-types' diff --git a/src/shared/runtime-types.ts b/src/shared/runtime-types.ts index 079a416749a..aa5ed57d939 100644 --- a/src/shared/runtime-types.ts +++ b/src/shared/runtime-types.ts @@ -6,26 +6,24 @@ import type { AgentType } from './agent-status-types' import type { - BaseRefSearchResult, - BrowserCookieImportResult, BrowserCertificateFailure, + BrowserCookieImportResult, BrowserLoadError, BrowserSessionProfile, - BrowserSessionProfileSource, - CreateWorktreeResult, - GitWorktreeInfo, - RemoveWorktreeResult, - Repo, - TabGroupLayoutNode, - TerminalColorOverrides, - TerminalLayoutSnapshot, - TuiAgent, - Worktree, - WorktreeLineage, + BrowserSessionProfileSource +} from './browser-workspace-types' +import type { BaseRefSearchResult, Repo } from './repo-types' +import type { TabGroupLayoutNode } from './tab-types' +import type { TerminalColorOverrides } from './terminal-color-overrides' +import type { TerminalLayoutSnapshot, TerminalPaneLayoutNode } from './terminal-tab-types' +import type { TuiAgent } from './tui-agent' +import type { CreateWorktreeResult, RemoveWorktreeResult } from './worktree/create-types' +import type { WorkspaceLineage, - WorktreeLineageWarning, - TerminalPaneLayoutNode -} from './types' + WorktreeLineage, + WorktreeLineageWarning +} from './worktree/lineage-types' +import type { GitWorktreeInfo, Worktree } from './worktree/types' import type { RuntimeMarkdownReadTabResult, RuntimeMarkdownSaveTabResult diff --git a/src/shared/search-match-count.test.ts b/src/shared/search-match-count.test.ts index 93f484c8558..bf86fe56527 100644 --- a/src/shared/search-match-count.test.ts +++ b/src/shared/search-match-count.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { normalizeSearchFileMatchCount, normalizeSearchResult } from './search-match-count' -import type { SearchFileResult } from './types' +import type { SearchFileResult } from './code-search-types' const match = { line: 1, column: 1, matchLength: 3, lineContent: 'foo' } diff --git a/src/shared/search-match-count.ts b/src/shared/search-match-count.ts index 6692eca1a1b..a5378f2b77b 100644 --- a/src/shared/search-match-count.ts +++ b/src/shared/search-match-count.ts @@ -1,4 +1,4 @@ -import type { SearchFileResult, SearchResult } from './types' +import type { SearchFileResult, SearchResult } from './code-search-types' function isValidMatchCount(value: unknown): value is number { return ( diff --git a/src/shared/setup-agent-startup-policy.ts b/src/shared/setup-agent-startup-policy.ts index 4c4fe2485e2..aa77da6eedc 100644 --- a/src/shared/setup-agent-startup-policy.ts +++ b/src/shared/setup-agent-startup-policy.ts @@ -1,4 +1,4 @@ -import type { SetupAgentStartupPolicy } from './types' +import type { SetupAgentStartupPolicy } from './orca-yaml-hook-types' // Why: existing repos should keep launching setup and agents side by side unless // the user explicitly opts into waiting for setup completion. diff --git a/src/shared/skills-cli-agent-keys.ts b/src/shared/skills-cli-agent-keys.ts index c74641f095d..3126c0a81e5 100644 --- a/src/shared/skills-cli-agent-keys.ts +++ b/src/shared/skills-cli-agent-keys.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' /** * The community `skills` CLI's own `--agent` key for each agent Orca detects. diff --git a/src/shared/source-control-ai-action-recipes.test.ts b/src/shared/source-control-ai-action-recipes.test.ts index 0df6fa064e5..aba81519d09 100644 --- a/src/shared/source-control-ai-action-recipes.test.ts +++ b/src/shared/source-control-ai-action-recipes.test.ts @@ -6,7 +6,7 @@ import { resolveSourceControlActionRecipe, resolveSourceControlAiForOperation } from './source-control-ai' -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' function settings(): GlobalSettings { const base = getDefaultSettings('/tmp') diff --git a/src/shared/source-control-ai-actions.ts b/src/shared/source-control-ai-actions.ts index 19dc70aa652..d857ad4b61b 100644 --- a/src/shared/source-control-ai-actions.ts +++ b/src/shared/source-control-ai-actions.ts @@ -1,6 +1,6 @@ import { isCustomAgentId, type CustomAgentId } from './commit-message-agent-spec' import { isTuiAgent } from './tui-agent-config' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' // Why: the variable registry lives in `./source-control-ai-action-variables` for max-lines // headroom. It is deliberately not re-exported here — one import path per symbol keeps a diff --git a/src/shared/source-control-ai-recipe-save.test.ts b/src/shared/source-control-ai-recipe-save.test.ts index 93d30b43881..b4aeaf355b6 100644 --- a/src/shared/source-control-ai-recipe-save.test.ts +++ b/src/shared/source-control-ai-recipe-save.test.ts @@ -5,7 +5,8 @@ import { saveSourceControlActionRecipe, toSourceControlAiRepoUpdate } from './source-control-ai-recipe-save' -import type { GlobalSettings, Repo } from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' function settings(): GlobalSettings { const base = getDefaultSettings('/tmp') diff --git a/src/shared/source-control-ai-recipe-save.ts b/src/shared/source-control-ai-recipe-save.ts index 013baee46bd..d000fc399f6 100644 --- a/src/shared/source-control-ai-recipe-save.ts +++ b/src/shared/source-control-ai-recipe-save.ts @@ -16,7 +16,8 @@ import type { SourceControlAiSettings, WritableRepoSourceControlAiOverrides } from './source-control-ai-types' -import type { GlobalSettings, Repo } from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' export type SourceControlAiWriteTarget = { type: 'repo'; repoId: string } | { type: 'global' } diff --git a/src/shared/source-control-ai-types.ts b/src/shared/source-control-ai-types.ts index 020ec4d16c5..888f80d38a0 100644 --- a/src/shared/source-control-ai-types.ts +++ b/src/shared/source-control-ai-types.ts @@ -1,4 +1,5 @@ -import type { CommitMessageAiModelCapability, TuiAgent } from './types' +import type { CommitMessageAiModelCapability } from './commit-message-ai-types' +import type { TuiAgent } from './tui-agent' import type { CustomAgentId } from './commit-message-agent-spec' import type { SourceControlAiActionDefaults, diff --git a/src/shared/source-control-ai.test.ts b/src/shared/source-control-ai.test.ts index 54a35115b87..d839a77c769 100644 --- a/src/shared/source-control-ai.test.ts +++ b/src/shared/source-control-ai.test.ts @@ -17,7 +17,7 @@ import type { RepoSourceControlAiOverrides, SourceControlAiOperation } from './source-control-ai-types' -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' function settings(): GlobalSettings { const base = getDefaultSettings('/tmp') diff --git a/src/shared/source-control-ai.ts b/src/shared/source-control-ai.ts index 7445ee5b874..72669000186 100644 --- a/src/shared/source-control-ai.ts +++ b/src/shared/source-control-ai.ts @@ -24,11 +24,11 @@ import { } from './source-control-ai-actions' import type { CommitMessageAiModelCapability, - CommitMessageAiSettings, - GlobalSettings, - Repo, - TuiAgent -} from './types' + CommitMessageAiSettings +} from './commit-message-ai-types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' +import type { TuiAgent } from './tui-agent' import type { RepoSourceControlAiOverrides, SourceControlAiModelChoice, diff --git a/src/shared/source-control-commit-failure.ts b/src/shared/source-control-commit-failure.ts index a2f9e0dfd44..29dbecd4dda 100644 --- a/src/shared/source-control-commit-failure.ts +++ b/src/shared/source-control-commit-failure.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from './types' +import type { GitStatusEntry } from './git-status-types' const FALLBACK_COMMIT_FAILURE_SUMMARY = 'Commit failed.' const LINT_COMMIT_FAILURE_SUMMARY = 'Lint failed during commit.' diff --git a/src/shared/source-control-conflict-prompts.ts b/src/shared/source-control-conflict-prompts.ts index a9c717eeaef..e67c3266ba5 100644 --- a/src/shared/source-control-conflict-prompts.ts +++ b/src/shared/source-control-conflict-prompts.ts @@ -1,4 +1,4 @@ -import type { GitConflictKind, GitConflictOperation, GitStatusEntry } from './types' +import type { GitConflictKind, GitConflictOperation, GitStatusEntry } from './git-status-types' export const CONFLICT_KIND_LABELS: Record = { both_modified: 'Both modified', diff --git a/src/shared/source-control-group-order.ts b/src/shared/source-control-group-order.ts index acfe5160ac7..f2856c42598 100644 --- a/src/shared/source-control-group-order.ts +++ b/src/shared/source-control-group-order.ts @@ -1,4 +1,4 @@ -import type { SourceControlGroupOrder } from './types' +import type { SourceControlGroupOrder } from './ui-chrome-types' export const DEFAULT_SOURCE_CONTROL_GROUP_ORDER: SourceControlGroupOrder = 'changes-first' diff --git a/src/shared/source-control-primary-action-decision-types.ts b/src/shared/source-control-primary-action-decision-types.ts index c1e2147b315..e9eec6e91ce 100644 --- a/src/shared/source-control-primary-action-decision-types.ts +++ b/src/shared/source-control-primary-action-decision-types.ts @@ -1,6 +1,6 @@ import type { HostedReviewCreationEligibility } from './hosted-review' import type { GitUpstreamStatus } from './git-status-types' -import type { PRState } from './types' +import type { PRState } from './github/pull-request-types' export type SourceControlPrimaryActionKind = | 'commit' diff --git a/src/shared/source-control-push-failure.ts b/src/shared/source-control-push-failure.ts index 3d26e3ad486..41c5549f9b9 100644 --- a/src/shared/source-control-push-failure.ts +++ b/src/shared/source-control-push-failure.ts @@ -1,4 +1,4 @@ -import type { GitStatusEntry } from './types' +import type { GitStatusEntry } from './git-status-types' const FALLBACK_PUSH_FAILURE_SUMMARY = 'Push failed.' const LINT_PUSH_FAILURE_SUMMARY = 'Lint failed during push.' diff --git a/src/shared/status-bar-defaults.ts b/src/shared/status-bar-defaults.ts index b1884262d7d..73d72a70ab2 100644 --- a/src/shared/status-bar-defaults.ts +++ b/src/shared/status-bar-defaults.ts @@ -1,4 +1,4 @@ -import type { StatusBarItem } from './types' +import type { StatusBarItem } from './ui-chrome-types' export const DEFAULT_STATUS_BAR_ITEMS: StatusBarItem[] = [ 'claude', diff --git a/src/shared/tab-title-resolution.ts b/src/shared/tab-title-resolution.ts index 9eea2b62371..ffcab13925d 100644 --- a/src/shared/tab-title-resolution.ts +++ b/src/shared/tab-title-resolution.ts @@ -1,4 +1,5 @@ -import type { Tab, TerminalTab } from './types' +import type { Tab } from './tab-types' +import type { TerminalTab } from './terminal-tab-types' import { isMeaningfulOpenCodeTerminalTitle } from './opencode-terminal-title' export function resolveTerminalTabTitle( diff --git a/src/shared/task-preset-query.ts b/src/shared/task-preset-query.ts index ba89a3b131f..66830c860f1 100644 --- a/src/shared/task-preset-query.ts +++ b/src/shared/task-preset-query.ts @@ -1,4 +1,4 @@ -import type { TaskViewPresetId } from './types' +import type { TaskViewPresetId } from './ui-chrome-types' /** * Why: TaskPage presets, blank-search fallbacks, and openTaskPage prefetch must diff --git a/src/shared/task-provider-identity.ts b/src/shared/task-provider-identity.ts index 5d9dbe8c390..46f81229aa2 100644 --- a/src/shared/task-provider-identity.ts +++ b/src/shared/task-provider-identity.ts @@ -1,6 +1,6 @@ import { githubRepoIdentityKey } from './github/repository-identity-key' import type { TaskProvider } from './task-providers' -import type { ProjectProviderIdentity } from './types' +import type { ProjectProviderIdentity } from './project-types' export type GitHubTaskProviderIdentity = ProjectProviderIdentity & { provider: 'github' diff --git a/src/shared/task-source-context.ts b/src/shared/task-source-context.ts index e1576e2de92..78f5ec9e8cf 100644 --- a/src/shared/task-source-context.ts +++ b/src/shared/task-source-context.ts @@ -14,7 +14,8 @@ import { type TaskProviderIdentity } from './task-provider-identity' import type { TaskProvider } from './task-providers' -import type { GlobalSettings, Repo } from './types' +import type { GlobalSettings } from './global-settings-types' +import type { Repo } from './repo-types' export type { GitHubTaskProviderIdentity, diff --git a/src/shared/telemetry-events.ts b/src/shared/telemetry-events.ts index bbffedaefe0..1d6905c1f8d 100644 --- a/src/shared/telemetry-events.ts +++ b/src/shared/telemetry-events.ts @@ -56,13 +56,9 @@ import { } from './nested-repo-telemetry' import { AGENT_HOOK_TARGETS } from './agent-hook-types' -import type { - DiscoveryStatusEmitted, - GlobalSettings, - OnboardingChecklistState, - PathSource, - ShellHydrationFailureReason -} from './types' +import type { GlobalSettings } from './global-settings-types' +import type { DiscoveryStatusEmitted, OnboardingChecklistState } from './onboarding-state-types' +import type { PathSource, ShellHydrationFailureReason } from './shell-path-hydration-types' // ── Shared property enums ─────────────────────────────────────────────── diff --git a/src/shared/terminal-color-scheme-protocol.ts b/src/shared/terminal-color-scheme-protocol.ts index 1b6d680c2a1..76ac88c62cc 100644 --- a/src/shared/terminal-color-scheme-protocol.ts +++ b/src/shared/terminal-color-scheme-protocol.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' export type TerminalColorSchemeMode = 'dark' | 'light' diff --git a/src/shared/terminal-cursor-style-settings.ts b/src/shared/terminal-cursor-style-settings.ts index ec271a7b972..3d8613b9b80 100644 --- a/src/shared/terminal-cursor-style-settings.ts +++ b/src/shared/terminal-cursor-style-settings.ts @@ -1,4 +1,4 @@ -import type { GlobalSettings } from './types' +import type { GlobalSettings } from './global-settings-types' type TerminalCursorStyleSettings = Pick< GlobalSettings, diff --git a/src/shared/terminal-custom-themes.ts b/src/shared/terminal-custom-themes.ts index f91b7d8e22e..c1c3fdcfc8f 100644 --- a/src/shared/terminal-custom-themes.ts +++ b/src/shared/terminal-custom-themes.ts @@ -1,4 +1,4 @@ -import type { TerminalColorOverrides } from './types' +import type { TerminalColorOverrides } from './terminal-color-overrides' import { HEX_COLOR_RE } from './color-validation' export type TerminalCustomThemeSource = 'warp' | 'ghostty' | 'manual' diff --git a/src/shared/terminal-quick-commands.ts b/src/shared/terminal-quick-commands.ts index cee9cdc9fa9..28d51bc0323 100644 --- a/src/shared/terminal-quick-commands.ts +++ b/src/shared/terminal-quick-commands.ts @@ -5,7 +5,7 @@ import type { TerminalQuickCommand, TerminalQuickCommandAction, TerminalQuickCommandScope -} from './types' +} from './terminal-quick-command-types' export const MAX_QUICK_COMMANDS = 40 export const MAX_QUICK_COMMAND_ID_LENGTH = 80 diff --git a/src/shared/terminal-title-agent-type.ts b/src/shared/terminal-title-agent-type.ts index 0952d96e63f..c679933c88e 100644 --- a/src/shared/terminal-title-agent-type.ts +++ b/src/shared/terminal-title-agent-type.ts @@ -12,7 +12,7 @@ import { getPiCompatibleSyntheticAgentLabel, isLegacyPiCompatibleTitle } from './pi-compatible-synthetic-title' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export const CLAUDE_IDLE = '\u2733' // ✳ (eight-spoked asterisk — Claude Code idle prefix) const CLAUDE_MANAGEMENT_TITLE_RE = diff --git a/src/shared/text-search.ts b/src/shared/text-search.ts index 780164372cb..7919e50cb47 100644 --- a/src/shared/text-search.ts +++ b/src/shared/text-search.ts @@ -14,7 +14,12 @@ import { posix, win32 } from 'node:path' import { assertJsonTextStructureWithinLimits } from './json-text-structure-limit' import { normalizeSearchResult } from './search-match-count' import { escapeRegex } from './string-utils' -import type { SearchFileResult, SearchMatch, SearchOptions, SearchResult } from './types' +import type { + SearchFileResult, + SearchMatch, + SearchOptions, + SearchResult +} from './code-search-types' export type SearchAccumulator = { fileMap: Map diff --git a/src/shared/top-level-view.ts b/src/shared/top-level-view.ts index 8f0e2ee99c1..479c161130d 100644 --- a/src/shared/top-level-view.ts +++ b/src/shared/top-level-view.ts @@ -1,4 +1,4 @@ -import type { TopLevelView } from './types' +import type { TopLevelView } from './ui-chrome-types' // Record keys are exhaustive so adding a top-level view also updates every // persistence boundary that validates values loaded from disk or IPC. diff --git a/src/shared/tui-agent-config.ts b/src/shared/tui-agent-config.ts index 3437e44e560..ea7cb092c68 100644 --- a/src/shared/tui-agent-config.ts +++ b/src/shared/tui-agent-config.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { getOrcaCliCommandNameForPlatform } from './orca-cli-command-name' export type AgentPromptInjectionMode = diff --git a/src/shared/tui-agent-detection-commands.ts b/src/shared/tui-agent-detection-commands.ts index b0ca1b443b8..81ee6589649 100644 --- a/src/shared/tui-agent-detection-commands.ts +++ b/src/shared/tui-agent-detection-commands.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { getTuiAgentDetectCommands, TUI_AGENT_CONFIG, diff --git a/src/shared/tui-agent-display-names.ts b/src/shared/tui-agent-display-names.ts index 618ef034a68..0b2078f0479 100644 --- a/src/shared/tui-agent-display-names.ts +++ b/src/shared/tui-agent-display-names.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' /** Why: plain-English agent names for non-localized surfaces (keybinding * titles in the shared registry, which main, renderer, and the keybindings diff --git a/src/shared/tui-agent-launch-command.ts b/src/shared/tui-agent-launch-command.ts index c45ac67bd19..140ef935626 100644 --- a/src/shared/tui-agent-launch-command.ts +++ b/src/shared/tui-agent-launch-command.ts @@ -10,7 +10,7 @@ import { tokenizeStartupCommand, type AgentStartupShell } from './tui-agent-startup-shell' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export type ResolvedAgentLaunchCommand = | { diff --git a/src/shared/tui-agent-launch-defaults.ts b/src/shared/tui-agent-launch-defaults.ts index f0f5d3e8bd1..6e0dc16f08d 100644 --- a/src/shared/tui-agent-launch-defaults.ts +++ b/src/shared/tui-agent-launch-defaults.ts @@ -1,6 +1,6 @@ import { isTuiAgent } from './tui-agent-config' import { YOLO_TUI_AGENT_ARGS, YOLO_TUI_AGENT_ENV } from './tui-agent-permissions' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' const UNSUPPORTED_TUI_AGENT_ARGS: Partial> = { opencode: ['--dangerously-skip-permissions'], diff --git a/src/shared/tui-agent-permissions.ts b/src/shared/tui-agent-permissions.ts index ae0c34391a2..596ef7a1a60 100644 --- a/src/shared/tui-agent-permissions.ts +++ b/src/shared/tui-agent-permissions.ts @@ -1,5 +1,5 @@ import { TUI_AGENT_CONFIG } from './tui-agent-config' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' export type AgentPermissionMode = 'yolo' | 'manual' | 'mixed' diff --git a/src/shared/tui-agent-selection.ts b/src/shared/tui-agent-selection.ts index e0c93daf47c..86216e589b8 100644 --- a/src/shared/tui-agent-selection.ts +++ b/src/shared/tui-agent-selection.ts @@ -1,4 +1,4 @@ -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import { isTuiAgent } from './tui-agent-config' // Keep this order in sync with the desktop agent catalog. It defines the diff --git a/src/shared/tui-agent-startup.ts b/src/shared/tui-agent-startup.ts index 4cef246ccdb..7b013c4ffd7 100644 --- a/src/shared/tui-agent-startup.ts +++ b/src/shared/tui-agent-startup.ts @@ -17,7 +17,7 @@ import type { StartupCommandDelivery } from './codex-startup-delivery' import { buildSleepingAgentLaunchConfig } from './sleeping-agent-launch-config' import { planHermesStartupQuery } from './hermes-startup-query' import { inlineAgentDraftFitsPlatform } from './agent-draft-platform-limit' -import type { TuiAgent } from './types' +import type { TuiAgent } from './tui-agent' import type { SessionOptionValue } from './native-chat-session-options' import { resolveAgentLaunchCommand } from './tui-agent-launch-command' import { buildAgentResumeLaunchCommand } from './agent-resume-launch-command' diff --git a/src/shared/types.ts b/src/shared/types.ts deleted file mode 100644 index b08e93a3be8..00000000000 --- a/src/shared/types.ts +++ /dev/null @@ -1,366 +0,0 @@ -/** - * Public barrel for Orca's shared domain types. Declarations live in the - * per-domain modules re-exported below; keep this file re-exports only. - */ - -// Repos, projects, and project groups - -export type { RepoKind, IssueSourcePreference, ExternalWorktreeVisibility } from './repo-types' -export type { BuiltInWorktreeVisibilitySourceId } from './repo-types' -export type { CustomWorktreeVisibilitySource } from './repo-types' -export type { WorktreeVisibilitySourcePreferences, Repo, BaseRefDefaultResult } from './repo-types' -export type { BaseRefSearchResult } from './repo-types' - -export type { ForkSyncMode, GitForkSyncExpectedUpstream, GitForkSyncResult } from './git-fork-sync' - -export type { ProjectProviderIdentity, Project, ProjectUpdateArgs } from './project-types' -export type { ProjectHostSetupState, ProjectHostSetupMethod } from './project-types' -export type { RepoProjectHostSetupMethod, ProjectHostSetup } from './project-types' -export type { ProjectHostSetupExistingFolderArgs } from './project-types' -export type { ProjectHostSetupCreateArgs, ProjectHostSetupCloneArgs } from './project-types' -export type { ProjectHostSetupUpdateArgs, ProjectHostSetupDeleteArgs } from './project-types' -export type { ProjectHostSetupResult, ProjectHostSetupCreateResult } from './project-types' -export type { ProjectHostSetupUpdateResult, ProjectHostSetupDeleteResult } from './project-types' - -export type { ProjectGroupCreatedFrom, ProjectGroup } from './project-group-types' -export type { NestedRepoScanOptions, NestedRepoCandidate } from './project-group-types' -export type { NestedRepoScanResult, ProjectGroupImportMode } from './project-group-types' -export type { ProjectGroupImportProjectResult } from './project-group-types' -export type { ProjectGroupImportResult } from './project-group-types' - -export type { WorkspaceScope, WorkspaceKey, FolderWorkspace } from './folder-workspace-types' -export type { FolderWorkspaceLinkedTask } from './folder-workspace-types' - -// Worktrees and workspace session state - -export type { GitWorktreeInfo, WorktreeHeadIdentity, WorkspaceStatus } from './worktree/types' -export type { WorkspaceStatusDefinition, Worktree, WorkspaceLinkedItem } from './worktree/types' -export type { CliWorkspaceProvenance, WorkspaceCreatorProvenance } from './worktree/types' -export type { AutomationWorkspaceProvenance } from './worktree/types' -export type { AutomationWorkspaceProvenanceRequest, GitPushTarget } from './worktree/types' -export type { GitHubPrStartPoint, WorktreeOwnership } from './worktree/types' -export type { DetectedWorktreeListSource, DetectedWorktree } from './worktree/types' -export type { DetectedWorktreeListResult } from './worktree/types' - -export type { WorktreeMeta } from './worktree/meta-types' - -export type { WorktreeLineageOrigin } from './worktree/lineage-types' -export type { WorktreeLineageCaptureConfidence } from './worktree/lineage-types' -export type { WorktreeLineageCaptureSource, WorktreeLineageCapture } from './worktree/lineage-types' -export type { WorktreeLineage, WorkspaceLineage } from './worktree/lineage-types' -export type { WorktreeLineageWarningCode, WorktreeLineageWarning } from './worktree/lineage-types' - -export type { WorktreeSetupLaunch, WorktreeStartupLaunch } from './worktree/launch-types' -export type { WorktreeDefaultTabsLaunch, SetupScriptLaunchMode } from './worktree/launch-types' -export type { SetupSplitDirection } from './worktree/launch-types' - -export type { SetupDecision, WorktreeCreateTimingPhase } from './worktree/create-types' -export type { WorktreeCreateTiming, CreateSparseCheckoutRequest } from './worktree/create-types' -export type { SparsePreset, CreateWorktreeArgs } from './worktree/create-types' -export type { AdoptProvisionedRootArgs, CreateWorktreeResult } from './worktree/create-types' -export type { WorktreeCreateBaseFallback, PreservedWorktreeBranch } from './worktree/create-types' -export type { RemoveWorktreeResult, ForceDeleteWorktreeBranchResult } from './worktree/create-types' - -export type { LocalBaseRefRefreshResult } from './worktree/base-ref-drift-types' -export type { LocalBaseRefUpdateSuggestion } from './worktree/base-ref-drift-types' -export type { WorktreeBaseStatusKind } from './worktree/base-ref-drift-types' -export type { WorktreeBaseStatusEvent } from './worktree/base-ref-drift-types' -export type { WorktreeRemoteBranchConflictEvent } from './worktree/base-ref-drift-types' - -export type { PersistedOpenFile, WorkspaceSessionState } from './workspace-session-state-types' -export type { WorkspaceSessionPatch } from './workspace-session-state-types' - -// Re-exported for backward compat with renderer call sites that import -// `WorkspaceCreateTelemetrySource` from '../../../shared/types'. -export type { WorkspaceSource as WorkspaceCreateTelemetrySource } from './workspace-source' - -// Tabs, terminals, and the embedded browser - -export type { TabGroupSplitDirection, TabGroupLayoutNode, TabContentType } from './tab-types' -export type { WorkspaceVisibleTabType, CtrlTabOrderMode, Tab, TabGroup } from './tab-types' - -export type { TerminalTab, TerminalPaneSplitDirection } from './terminal-tab-types' -export type { TerminalPaneLayoutNode, TerminalLayoutSnapshot } from './terminal-tab-types' - -export type { TerminalColorOverrides } from './terminal-color-overrides' - -export type { TerminalQuickCommandScope } from './terminal-quick-command-types' -export type { TerminalQuickCommandAction } from './terminal-quick-command-types' -export type { TerminalQuickCommandBase } from './terminal-quick-command-types' -export type { TerminalCommandQuickCommand } from './terminal-quick-command-types' -export type { TerminalAgentQuickCommand } from './terminal-quick-command-types' -export type { TerminalQuickCommand } from './terminal-quick-command-types' - -export type { BrowserHistoryEntry, BrowserLoadError } from './browser-workspace-types' -export type { BrowserCertificateFailure } from './browser-workspace-types' -export type { BrowserCertificateProceedFailureReason } from './browser-workspace-types' -export type { BrowserCertificateProceedResult } from './browser-workspace-types' -export type { BrowserViewportPresetId, BrowserViewportOverride } from './browser-workspace-types' -export type { BrowserPage, BrowserWorkspace, BrowserTab } from './browser-workspace-types' -export type { BrowserSessionProfileScope } from './browser-workspace-types' -export type { BrowserSessionUserAgentMode } from './browser-workspace-types' -export type { BrowserSessionProfileCreateOptions } from './browser-workspace-types' -export type { BrowserSessionProfileSource, BrowserSessionProfile } from './browser-workspace-types' -export type { BrowserCookieImportSummary } from './browser-workspace-types' -export type { BrowserCookieImportResult } from './browser-workspace-types' - -// Git status, diffs, and review comments - -export type { - GitBranchChangeStatus, - GitConflictKind, - GitConflictOperation, - GitConflictResolutionStatus, - GitConflictStatusSource, - GitFileStatus, - GitStagingArea, - GitStatusEntry, - GitStatusResult, - GitSubmoduleStatus, - GitUncommittedEntry, - GitUpstreamStatus -} from './git-status-types' - -export type { GitBranchChangeEntry, GitBranchCompareSummary } from './git-diff-compare-types' -export type { GitBranchCompareResult, GitCommitCompareSummary } from './git-diff-compare-types' -export type { GitCommitCompareResult, GitDiffTextResult } from './git-diff-compare-types' -export type { GitDiffBinaryResult, GitDiffResult } from './git-diff-compare-types' - -export type { DiffCommentSource, DiffReviewScope } from './diff-comment-types' -export type { MobileDiffReviewFileState, MobileDiffReviewState } from './diff-comment-types' -export type { DiffComment } from './diff-comment-types' - -// GitHub - -export type { - PRState, - IssueState, - CheckStatus, - PRMergeableState -} from './github/pull-request-types' -export type { PRReviewDecision, PRConflictSummary } from './github/pull-request-types' -export type { GitHubRepositoryIdentity, GitHubOwnerRepo } from './github/pull-request-types' -export type { GitHubPRMergeMethod, GitHubPRMergeMethodSettings } from './github/pull-request-types' -export type { - GitHubPRStackEntry, - GitHubPRStack, - PRInfo, - IssueInfo -} from './github/pull-request-types' -export type { - GitHubViewer, - GitHubAssignableUser, - ProviderCheckSummary -} from './github/pull-request-types' -export type { GitHubPRReviewSummary, GitHubPRFileViewedState } from './github/pull-request-types' -export type { GitHubPRFile, GitHubPRFileContents } from './github/pull-request-types' - -export type { - PRRefreshErrorType, - PRRefreshUpstreamErrorType -} from './github/pull-request-refresh-types' -export type { PRRefreshOutcome, GitHubPRRefreshReason } from './github/pull-request-refresh-types' -export type { - GitHubPRRefreshEnqueueResult, - GitHubPRRefreshAlias -} from './github/pull-request-refresh-types' -export type { GitHubPRRefreshCandidate } from './github/pull-request-refresh-types' -export type { - GitHubPRRefreshSkippedReason, - GitHubPRRefreshEvent -} from './github/pull-request-refresh-types' - -export type { PRCheckDetail, PRCheckAnnotation, PRCheckStep } from './github/check-types' -export type { PRCheckJob, PRCheckRunDetails, GitHubRerunPRChecksResult } from './github/check-types' - -export type { GitHubReactionContent, GitHubReaction, PRComment } from './github/comment-types' -export type { GitHubCommentResult, GitHubPRReviewCommentInput } from './github/comment-types' -export type { GitHubIssueTimelineTarget, GitHubIssueTimelineItem } from './github/comment-types' - -export type { GitHubWorkItem, GitHubWorkItemDetails } from './github/work-item-types' -export type { ListWorkItemsResult } from './github/work-item-types' - -export type { GitHubRateLimitBucket, GitHubRateLimitSnapshot } from './github/rate-limit-types' -export type { GetRateLimitResult } from './github/rate-limit-types' - -// GitLab - -export type { - GitLabAssignableUser, - GitLabAuthDiagnostic, - GitLabCommentResult, - GitLabDiscussionResolveResult, - GitLabIssueInfo, - GitLabIssueState, - GitLabIssueUpdate, - GitLabJobTraceResult, - GitLabRateLimitBucket, - GitLabRateLimitSnapshot, - GitLabMRApprovalRule, - GitLabMRApprovalState, - GitLabMRFile, - GitLabMRInlineCommentInput, - GitLabMRReviewersUpdateResult, - GitLabMRUpdate, - GitLabPagedResult, - GitLabPipelineJob, - GitLabProjectRef, - GitLabProjectSettings, - GitLabRetryJobResult, - GitLabReaction, - GitLabTodo, - GitLabTodoTargetType, - GitLabViewer, - GitLabWorkItem, - GitLabWorkItemDetails, - GetGitLabRateLimitResult, - ListMergeRequestsResult, - MRCheckDetail, - MRComment, - MRInfo, - MRListState, - MRMergeableState, - MRState -} from './gitlab-types' - -// Jira - -export type { - JiraAuthType, - JiraComment, - JiraConnectArgs, - JiraConnectionStatus, - JiraCreateField, - JiraCreateFieldAllowedValue, - JiraCreateIssueArgs, - JiraCreateIssueResult, - JiraIssue, - JiraIssueFilter, - JiraIssueType, - JiraIssueUpdate, - JiraMutationResult, - JiraPriority, - JiraProject, - JiraProjectStatusOrder, - JiraSite, - JiraSiteSelection, - JiraStatus, - JiraTransition, - JiraUser, - JiraViewer -} from './jira-types' - -// Linear - -export type { LinearViewer, LinearWorkspace } from './linear/workspace-types' -export type { LinearWorkspaceSelection, LinearWorkspaceSelector } from './linear/workspace-types' -export type { LinearConcreteWorkspaceId, LinearWorkspaceError } from './linear/workspace-types' -export type { LinearCollectionResult, LinearConnectionStatus } from './linear/workspace-types' -export type { LinearWorkflowState, LinearLabel, LinearMember } from './linear/workspace-types' -export type { LinearTeam } from './linear/workspace-types' - -export type { LinearIssue, LinearIssueChildSummary, LinearComment } from './linear/issue-types' - -export type { LinearProjectSummary, LinearProjectStatusSummary } from './linear/project-types' -export type { LinearProjectMemberSummary } from './linear/project-types' -export type { LinearProjectMilestoneSummary } from './linear/project-types' -export type { LinearProjectResourceSummary } from './linear/project-types' -export type { LinearProjectUpdateSummary, LinearProjectDetail } from './linear/project-types' -export type { LinearCustomViewModel, LinearCustomViewSummary } from './linear/project-types' - -// Cross-provider issue mutations and task sources - -export type { GitHubCreateIssueFields, GitHubCreateIssueResult } from './issue-mutation-types' -export type { GitHubIssueCloseReason, GitHubIssueUpdate } from './issue-mutation-types' -export type { GitHubPullRequestStateUpdate, LinearIssueUpdate } from './issue-mutation-types' - -export type { TaskProvider } from './task-providers' - -// orca.yaml hooks, setup policy, and VM recipes - -export type { OrcaHooks, OrcaWorktreeDefaults } from './orca-yaml-hook-types' -export type { OrcaDefaultTabTemplate, EphemeralVmCheckoutMode } from './orca-yaml-hook-types' -export type { OrcaVmRecipe, OrcaVmRecipeDiagnostic, RepoHookSettings } from './orca-yaml-hook-types' -export type { SetupRunPolicy, SetupAgentStartupPolicy } from './orca-yaml-hook-types' -export type { HookCommandSourcePolicy, PersistedTrustedOrcaHookEntry } from './orca-yaml-hook-types' -export type { PersistedTrustedOrcaHookRepo } from './orca-yaml-hook-types' -export type { PersistedTrustedOrcaHooks } from './orca-yaml-hook-types' - -// Settings, persisted UI state, and onboarding - -export type { TaskViewPresetId, OpenInApplication, SourceControlViewMode } from './ui-chrome-types' -export type { SourceControlGroupOrder, LeftSidebarAppearanceMode } from './ui-chrome-types' -export type { BranchPrefixStrategy, FloatingTerminalCwdRequest } from './ui-chrome-types' -export type { AgentDashboardMode, WorktreeCardProperty, WorktreeCardMode } from './ui-chrome-types' -export type { AgentActivityDisplayMode, StatusBarItem } from './ui-chrome-types' -export type { FloatingTerminalTriggerLocation, TaskResumeState } from './ui-chrome-types' -export type { RightSidebarTab, ActiveRightSidebarTab } from './ui-chrome-types' -export type { RightSidebarExplorerView, ProjectOrderBy } from './ui-chrome-types' -export type { WorkspaceHostScope, VisibleWorkspaceHostIds } from './ui-chrome-types' -export type { WorkspaceHostOrder, ManualRepoOrderEntry, TopLevelView } from './ui-chrome-types' - -export type { GlobalSettings, OrcaWorkspaceLayout } from './global-settings-types' -export type { GhosttyImportPreview } from './global-settings-types' - -export type { HostSettingOverrides } from './host-setting-overrides' - -export type { CommitMessageAiModelCapability } from './commit-message-ai-types' -export type { CommitMessageAiSettings } from './commit-message-ai-types' - -export type { NotificationSettings, NotificationEventSource } from './notification-settings-types' -export type { NotificationDispatchRequest } from './notification-settings-types' -export type { NotificationDispatchResult } from './notification-settings-types' -export type { NotificationDismissResult } from './notification-settings-types' -export type { NotificationSoundResult } from './notification-settings-types' -export type { NotificationSoundDataResult } from './notification-settings-types' -export type { NotificationSoundPathResult } from './notification-settings-types' -export type { NotificationPermissionStatusResult } from './notification-settings-types' -export type { NotificationDeliveryProbeResult } from './notification-settings-types' - -export type { DiscoveryStatusEmitted, OnboardingOutcome } from './onboarding-state-types' -export type { OnboardingChecklistState, OnboardingState } from './onboarding-state-types' - -export type { PersistedUIState } from './persisted-ui-state-types' - -export type { LegacyPaneKeyAliasEntry } from './persisted-state-types' -export type { PersistedMobileClientTabSelection } from './persisted-state-types' -export type { PersistedMobileClientTabSelections, PersistedState } from './persisted-state-types' - -export { PET_SIZE_MIN, PET_SIZE_MAX, PET_SIZE_DEFAULT } from './pet-types' -export type { CustomPet, SpriteAnimation } from './pet-types' - -// Agents, managed accounts, and updates - -export type { TuiAgent } from './tui-agent' - -export type { CodexManagedAccount, CodexManagedAccountSummary } from './managed-account-types' -export type { CodexSystemDefaultIdentity } from './managed-account-types' -export type { CodexRateLimitAccountsState } from './managed-account-types' -export type { CodexManagedAccountRuntimeSelection } from './managed-account-types' -export type { ClaudeManagedAccount, ClaudeManagedAccountSummary } from './managed-account-types' -export type { ClaudeRateLimitAccountsState } from './managed-account-types' -export type { ClaudeManagedAccountRuntimeSelection } from './managed-account-types' - -export type { ChangelogRelease, ChangelogData, UpdateCheckOptions } from './update-status-types' -export type { UpdateSource, LinuxRootPackageType } from './update-status-types' -export type { LinuxPackageInstallFailureReason } from './update-status-types' -export type { LinuxPackageInstallRecovery } from './update-status-types' -export type { LinuxPackageCommandUnavailableReason } from './update-status-types' -export type { LinuxPackageInstallInstructions, UpdateStatus } from './update-status-types' -export type { ReleaseBuildListResult } from './update-status-types' - -// Filesystem, search, process stats, and shared error shape - -export type { ShellHydrationFailureReason, PathSource } from './shell-path-hydration-types' - -export type { FilesystemPathFlavor, DirEntry, MarkdownDocument } from './filesystem-entry-types' -export type { FsChangeEvent, FsChangedPayload } from './filesystem-entry-types' - -export type { SearchMatch, SearchFileResult, SearchResult } from './code-search-types' -export type { SearchOptions } from './code-search-types' - -export type { StatsSummary, UsageValues, ProcessMemoryMetric } from './process-stats-types' -export type { HostAvailableMemorySource, AppMemory, SessionMemory } from './process-stats-types' -export type { WorktreeMemory, HostMemory, MemorySnapshot } from './process-stats-types' - -export type { ClassifiedError } from './classified-error' diff --git a/src/shared/workspace-creator-provenance.ts b/src/shared/workspace-creator-provenance.ts index 541cf3f2a5e..7fe2802f607 100644 --- a/src/shared/workspace-creator-provenance.ts +++ b/src/shared/workspace-creator-provenance.ts @@ -1,4 +1,4 @@ -import type { WorkspaceCreatorProvenance } from './types' +import type { WorkspaceCreatorProvenance } from './worktree/types' export function normalizeWorkspaceCreatorProvenance( value: unknown diff --git a/src/shared/workspace-linked-item-equality.test.ts b/src/shared/workspace-linked-item-equality.test.ts index 45ff9800093..dba84854e98 100644 --- a/src/shared/workspace-linked-item-equality.test.ts +++ b/src/shared/workspace-linked-item-equality.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { areWorkspaceLinkedItemsEqual } from './workspace-linked-item' -import type { WorkspaceLinkedItem } from './types' +import type { WorkspaceLinkedItem } from './worktree/types' const item: WorkspaceLinkedItem = { provider: 'jira', diff --git a/src/shared/workspace-linked-item-schema.ts b/src/shared/workspace-linked-item-schema.ts index 5e50cc3c40a..d1b648fa58b 100644 --- a/src/shared/workspace-linked-item-schema.ts +++ b/src/shared/workspace-linked-item-schema.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { WorkspaceLinkedItem } from './types' +import type { WorkspaceLinkedItem } from './worktree/types' import { normalizeWorkspaceLinkedItem } from './workspace-linked-item' export const WorkspaceLinkedItemSchema = z diff --git a/src/shared/workspace-linked-item-source-context.test.ts b/src/shared/workspace-linked-item-source-context.test.ts index 41288b956d1..aaff22d8155 100644 --- a/src/shared/workspace-linked-item-source-context.test.ts +++ b/src/shared/workspace-linked-item-source-context.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import type { TaskSourceContext } from './task-source-context' -import type { WorkspaceLinkedItem } from './types' +import type { WorkspaceLinkedItem } from './worktree/types' import { isWorkspaceLinkedItemSourceContextMatch } from './workspace-linked-item-source-context' const JIRA_ITEM: WorkspaceLinkedItem = { diff --git a/src/shared/workspace-linked-item-source-context.ts b/src/shared/workspace-linked-item-source-context.ts index 81d29c4be05..7b4ecd4b60d 100644 --- a/src/shared/workspace-linked-item-source-context.ts +++ b/src/shared/workspace-linked-item-source-context.ts @@ -1,7 +1,7 @@ import { parseJiraIssueUrl } from './jira-issue-url' import { getWorkspaceSourceProvider } from './new-workspace/workspace-source' import type { TaskSourceContext } from './task-source-context' -import type { WorkspaceLinkedItem } from './types' +import type { WorkspaceLinkedItem } from './worktree/types' function resolveLinkedItemProvider( item: Pick & Partial diff --git a/src/shared/workspace-linked-item.ts b/src/shared/workspace-linked-item.ts index bca3929d09b..11f60f1864f 100644 --- a/src/shared/workspace-linked-item.ts +++ b/src/shared/workspace-linked-item.ts @@ -1,4 +1,4 @@ -import type { WorkspaceLinkedItem } from './types' +import type { WorkspaceLinkedItem } from './worktree/types' export function areWorkspaceLinkedItemsEqual( a: WorkspaceLinkedItem | null | undefined, diff --git a/src/shared/workspace-scope.ts b/src/shared/workspace-scope.ts index 4993c0599d7..262f6a82afe 100644 --- a/src/shared/workspace-scope.ts +++ b/src/shared/workspace-scope.ts @@ -1,4 +1,4 @@ -import type { WorkspaceKey, WorkspaceScope } from './types' +import type { WorkspaceKey, WorkspaceScope } from './folder-workspace-types' export function worktreeWorkspaceKey(worktreeId: string): WorkspaceKey { return `worktree:${worktreeId}` diff --git a/src/shared/workspace-session-browser-history.ts b/src/shared/workspace-session-browser-history.ts index 666671a0d04..ad734c17471 100644 --- a/src/shared/workspace-session-browser-history.ts +++ b/src/shared/workspace-session-browser-history.ts @@ -1,4 +1,5 @@ -import type { BrowserHistoryEntry, WorkspaceSessionState } from './types' +import type { BrowserHistoryEntry } from './browser-workspace-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { redactKagiSessionToken } from './browser-url' export const MAX_BROWSER_HISTORY_ENTRIES = 200 diff --git a/src/shared/workspace-session-browser-schema.ts b/src/shared/workspace-session-browser-schema.ts index 19aaeb0ae82..0feb744faf4 100644 --- a/src/shared/workspace-session-browser-schema.ts +++ b/src/shared/workspace-session-browser-schema.ts @@ -3,7 +3,7 @@ * schemas themselves are unchanged apart from the per-entry tolerance the * session schema now declares everywhere. */ import { z } from 'zod' -import type { BrowserWorkspace } from './types' +import type { BrowserWorkspace } from './browser-workspace-types' import { normalizeBrowserHistoryEntries } from './workspace-session-browser-history' import { salvagingArray } from './zod-salvage' diff --git a/src/shared/workspace-session-salvage.ts b/src/shared/workspace-session-salvage.ts index 66b6a6374e9..4f3bdf88fa2 100644 --- a/src/shared/workspace-session-salvage.ts +++ b/src/shared/workspace-session-salvage.ts @@ -1,4 +1,4 @@ -import type { WorkspaceSessionState } from './types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { describeWorkspaceSessionError, safeParseWorkspaceSession, diff --git a/src/shared/workspace-session-schema.ts b/src/shared/workspace-session-schema.ts index 446e19270da..9f65e2a1034 100644 --- a/src/shared/workspace-session-schema.ts +++ b/src/shared/workspace-session-schema.ts @@ -12,13 +12,11 @@ * Only a payload that is not a session at all falls back to defaults. */ import { z } from 'zod' -import type { - TabGroupLayoutNode, - TerminalPaneLayoutNode, - TuiAgent, - WorkspaceKey, - WorkspaceSessionState -} from './types' +import type { WorkspaceKey } from './folder-workspace-types' +import type { TabGroupLayoutNode } from './tab-types' +import type { TerminalPaneLayoutNode } from './terminal-tab-types' +import type { TuiAgent } from './tui-agent' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { isValidTerminalTabId } from './terminal-tab-id' import { parseExecutionHostId, type ExecutionHostId } from './execution-host' import { isTuiAgent } from './tui-agent-config' diff --git a/src/shared/workspace-session-terminal-buffers.test.ts b/src/shared/workspace-session-terminal-buffers.test.ts index e5c868cd691..d1316659440 100644 --- a/src/shared/workspace-session-terminal-buffers.test.ts +++ b/src/shared/workspace-session-terminal-buffers.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest' import { FLOATING_TERMINAL_WORKTREE_ID } from './constants' -import type { WorkspaceSessionState } from './types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from './terminal-scrollback-limits' import { getUtf8ByteLength } from './utf8-byte-limits' import { diff --git a/src/shared/workspace-session-terminal-buffers.ts b/src/shared/workspace-session-terminal-buffers.ts index b2ec9df45dc..96bb76cafe2 100644 --- a/src/shared/workspace-session-terminal-buffers.ts +++ b/src/shared/workspace-session-terminal-buffers.ts @@ -1,4 +1,5 @@ -import type { Repo, WorkspaceSessionState } from './types' +import type { Repo } from './repo-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { FLOATING_TERMINAL_WORKTREE_ID } from './constants' import { getRepoIdFromWorktreeId } from './worktree/id' import { TERMINAL_SCROLLBACK_SESSION_BUFFER_BYTE_LIMIT } from './terminal-scrollback-limits' diff --git a/src/shared/workspace-session-terminal-tab-close.test.ts b/src/shared/workspace-session-terminal-tab-close.test.ts index 66bb3d5dd63..e8b50c3b71d 100644 --- a/src/shared/workspace-session-terminal-tab-close.test.ts +++ b/src/shared/workspace-session-terminal-tab-close.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' import { getDefaultWorkspaceSession } from './constants' -import type { Tab, TerminalTab, WorkspaceSessionState } from './types' +import type { Tab } from './tab-types' +import type { TerminalTab } from './terminal-tab-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' import { closeTerminalTabInWorkspaceSession } from './workspace-session-terminal-tab-close' const WORKTREE_ID = 'worktree-1' diff --git a/src/shared/workspace-session-terminal-tab-close.ts b/src/shared/workspace-session-terminal-tab-close.ts index e5f2d6cd28a..fd82abc1dc3 100644 --- a/src/shared/workspace-session-terminal-tab-close.ts +++ b/src/shared/workspace-session-terminal-tab-close.ts @@ -1,10 +1,5 @@ -import type { - Tab, - TabGroup, - TabGroupLayoutNode, - WorkspaceSessionState, - WorkspaceVisibleTabType -} from './types' +import type { Tab, TabGroup, TabGroupLayoutNode, WorkspaceVisibleTabType } from './tab-types' +import type { WorkspaceSessionState } from './workspace-session-state-types' export type WorkspaceSessionTerminalTabCloseResult = { session: WorkspaceSessionState diff --git a/src/shared/workspace-status-defaults.ts b/src/shared/workspace-status-defaults.ts index f0c4f10e426..47aedee7e95 100644 --- a/src/shared/workspace-status-defaults.ts +++ b/src/shared/workspace-status-defaults.ts @@ -1,4 +1,4 @@ -import type { WorkspaceStatusDefinition } from './types' +import type { WorkspaceStatusDefinition } from './worktree/types' export const DEFAULT_STATUS_VISUALS: Record = { todo: { color: 'neutral', icon: 'circle' }, diff --git a/src/shared/workspace-statuses.ts b/src/shared/workspace-statuses.ts index 430595733fc..4635824c809 100644 --- a/src/shared/workspace-statuses.ts +++ b/src/shared/workspace-statuses.ts @@ -1,4 +1,4 @@ -import type { Worktree, WorkspaceStatus, WorkspaceStatusDefinition } from './types' +import type { WorkspaceStatus, WorkspaceStatusDefinition, Worktree } from './worktree/types' import { DEFAULT_STATUS_VISUALS, DEFAULT_WORKSPACE_STATUSES } from './workspace-status-defaults' import { isKnownBadPRReorderedDefaultStatusPayload, diff --git a/src/shared/worktree/card-properties.ts b/src/shared/worktree/card-properties.ts index 240b3ba341e..d0b09a01344 100644 --- a/src/shared/worktree/card-properties.ts +++ b/src/shared/worktree/card-properties.ts @@ -1,9 +1,6 @@ -import type { - GlobalSettings, - PersistedUIState, - WorktreeCardMode, - WorktreeCardProperty -} from '../types' +import type { GlobalSettings } from '../global-settings-types' +import type { PersistedUIState } from '../persisted-ui-state-types' +import type { WorktreeCardMode, WorktreeCardProperty } from '../ui-chrome-types' const FIXED_WORKTREE_CARD_PROPERTIES: WorktreeCardProperty[] = ['status', 'unread'] diff --git a/src/shared/worktree/ownership-worktree-base-path.test.ts b/src/shared/worktree/ownership-worktree-base-path.test.ts index aff3c951285..549a3d46763 100644 --- a/src/shared/worktree/ownership-worktree-base-path.test.ts +++ b/src/shared/worktree/ownership-worktree-base-path.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest' -import type { GlobalSettings, Repo, Worktree } from '../types' +import type { GlobalSettings } from '../global-settings-types' +import type { Repo } from '../repo-types' +import type { Worktree } from './types' import { buildKnownOrcaWorkspaceLayouts, classifyWorktreeOwnership } from './ownership' function makeRepo(overrides: Partial = {}): Repo { diff --git a/src/shared/worktree/ownership.test.ts b/src/shared/worktree/ownership.test.ts index 8877a415b53..12e17145a32 100644 --- a/src/shared/worktree/ownership.test.ts +++ b/src/shared/worktree/ownership.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from 'vitest' -import type { GlobalSettings, Repo, Worktree, WorktreeMeta } from '../types' +import type { GlobalSettings } from '../global-settings-types' +import type { Repo } from '../repo-types' +import type { WorktreeMeta } from './meta-types' +import type { Worktree } from './types' import { createAgentScratchWorktreePathMatcher } from '../agent-scratch-worktrees' import { applyMetadataFallbackVisibility, diff --git a/src/shared/worktree/ownership.ts b/src/shared/worktree/ownership.ts index 7e224d0689f..a123e6c9c65 100644 --- a/src/shared/worktree/ownership.ts +++ b/src/shared/worktree/ownership.ts @@ -23,15 +23,10 @@ import { effectiveExternalWorktreeVisibility, isLegacyRepoForExternalWorktreeVisibility } from '../external-worktree-visibility' -import type { - DetectedWorktree, - GlobalSettings, - OrcaWorkspaceLayout, - Repo, - Worktree, - WorktreeMeta, - WorktreeOwnership -} from '../types' +import type { GlobalSettings, OrcaWorkspaceLayout } from '../global-settings-types' +import type { Repo } from '../repo-types' +import type { WorktreeMeta } from './meta-types' +import type { DetectedWorktree, Worktree, WorktreeOwnership } from './types' export { effectiveAgentWorktreeVisibility, diff --git a/src/shared/worktree/removal.ts b/src/shared/worktree/removal.ts index 68d1072b247..8788171ebe0 100644 --- a/src/shared/worktree/removal.ts +++ b/src/shared/worktree/removal.ts @@ -1,4 +1,4 @@ -import type { GitWorktreeInfo } from '../types' +import type { GitWorktreeInfo } from './types' export const LOCKED_WORKTREE_REMOVAL_PREFIX = 'Worktree is locked by Git.' diff --git a/src/shared/worktree/visibility-sources.test.ts b/src/shared/worktree/visibility-sources.test.ts index 280ac0f3082..c0fd4193206 100644 --- a/src/shared/worktree/visibility-sources.test.ts +++ b/src/shared/worktree/visibility-sources.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { Repo } from '../types' +import type { Repo } from '../repo-types' import { buildWorktreeSourcePreferenceUpdate, createWorktreeVisibilitySourceMatcher, diff --git a/src/shared/worktree/visibility-sources.ts b/src/shared/worktree/visibility-sources.ts index 0053bedf2de..9ba158b40d7 100644 --- a/src/shared/worktree/visibility-sources.ts +++ b/src/shared/worktree/visibility-sources.ts @@ -9,7 +9,7 @@ import type { ExternalWorktreeVisibility, Repo, WorktreeVisibilitySourcePreferences -} from '../types' +} from '../repo-types' export const MAX_CUSTOM_WORKTREE_VISIBILITY_SOURCES = 32 const MAX_SOURCE_ID_LENGTH = 128 diff --git a/tests/e2e/completed-worker-retirement-resume.unit.test.ts b/tests/e2e/completed-worker-retirement-resume.unit.test.ts index ac201ab9b32..a9c18acdd1a 100644 --- a/tests/e2e/completed-worker-retirement-resume.unit.test.ts +++ b/tests/e2e/completed-worker-retirement-resume.unit.test.ts @@ -4,7 +4,8 @@ import type { SleepingAgentSessionRecord } from '../../src/shared/agent-session- import { makePaneKey } from '../../src/shared/stable-pane-id' import { tokenizeStartupCommand } from '../../src/shared/tui-agent-startup-shell' import { parseWorkspaceSession } from '../../src/shared/workspace-session-schema' -import type { TerminalTab, Worktree } from '../../src/shared/types' +import type { TerminalTab } from '../../src/shared/terminal-tab-types' +import type { Worktree } from '../../src/shared/worktree/types' import { OrchestrationDb } from '../../src/main/runtime/orchestration/db' import { OrcaRuntimeService } from '../../src/main/runtime/orca-runtime' import type { RpcContext } from '../../src/main/runtime/rpc/core' diff --git a/tests/e2e/helpers/pr-comments-sidebar-fixture.ts b/tests/e2e/helpers/pr-comments-sidebar-fixture.ts index 3fc047ec1bf..f01661f2de8 100644 --- a/tests/e2e/helpers/pr-comments-sidebar-fixture.ts +++ b/tests/e2e/helpers/pr-comments-sidebar-fixture.ts @@ -1,5 +1,6 @@ import type { Page } from '@stablyai/playwright-test' -import type { PRComment, PRInfo } from '../../../src/shared/types' +import type { PRComment } from '../../../src/shared/github/comment-types' +import type { PRInfo } from '../../../src/shared/github/pull-request-types' export type PRCommentsSidebarSeed = { worktreeId: string diff --git a/tests/e2e/helpers/runtime-types.ts b/tests/e2e/helpers/runtime-types.ts index a376e2416da..de18b94a2d9 100644 --- a/tests/e2e/helpers/runtime-types.ts +++ b/tests/e2e/helpers/runtime-types.ts @@ -1,13 +1,11 @@ import type { AppState } from '../../../src/renderer/src/store/types' import type { OpenFile, RightSidebarTab } from '../../../src/renderer/src/store/slices/editor' import type { ManagedPane } from '../../../src/renderer/src/lib/pane-manager/pane-manager-types' -import type { - BrowserWorkspace, - Repo, - TerminalTab, - Worktree, - WorkspaceVisibleTabType -} from '../../../src/shared/types' +import type { BrowserWorkspace } from '../../../src/shared/browser-workspace-types' +import type { Repo } from '../../../src/shared/repo-types' +import type { WorkspaceVisibleTabType } from '../../../src/shared/tab-types' +import type { TerminalTab } from '../../../src/shared/terminal-tab-types' +import type { Worktree } from '../../../src/shared/worktree/types' export type AppStore = { getState(): AppState diff --git a/tests/e2e/helpers/worktree-registration.ts b/tests/e2e/helpers/worktree-registration.ts index 96a4bce5e2f..1fd6a7f9bb9 100644 --- a/tests/e2e/helpers/worktree-registration.ts +++ b/tests/e2e/helpers/worktree-registration.ts @@ -1,6 +1,6 @@ import type { Page } from '@stablyai/playwright-test' import { expect } from './orca-app' -import type { CommitMessageAiSettings } from '../../../src/shared/types' +import type { CommitMessageAiSettings } from '../../../src/shared/commit-message-ai-types' // Why: these specs create worktrees via raw `git worktree add`, which bypasses // Orca's own add/remove path — the one thing that invalidates the main-process diff --git a/tests/e2e/linear-url-workspace-entry.spec.ts b/tests/e2e/linear-url-workspace-entry.spec.ts index ccdf1d00c4a..7cd9ccf30ca 100644 --- a/tests/e2e/linear-url-workspace-entry.spec.ts +++ b/tests/e2e/linear-url-workspace-entry.spec.ts @@ -1,7 +1,7 @@ import type { ElectronApplication, Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { waitForActiveWorktree, waitForSessionReady } from './helpers/store' -import type { LinearIssue } from '../../src/shared/types' +import type { LinearIssue } from '../../src/shared/linear/issue-types' const LINEAR_URL = 'https://linear.app/stably/issue/STA-4084/restore-osc-133-shell-integration-when-an-exec-in-user-rc-files-strips' diff --git a/tests/e2e/native-chat-ask-user-question-card.spec.ts b/tests/e2e/native-chat-ask-user-question-card.spec.ts index a3788e5aa96..74620ed3104 100644 --- a/tests/e2e/native-chat-ask-user-question-card.spec.ts +++ b/tests/e2e/native-chat-ask-user-question-card.spec.ts @@ -6,7 +6,7 @@ import type { Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { waitForActivePaneHookDescriptor, waitForActiveTerminalManager } from './helpers/terminal' -import type { GlobalSettings } from '../../src/shared/types' +import type { GlobalSettings } from '../../src/shared/global-settings-types' const QUESTION = 'Tabs or spaces?' diff --git a/tests/e2e/native-chat-first-flush-race.spec.ts b/tests/e2e/native-chat-first-flush-race.spec.ts index 15ec43dc843..1362a882902 100644 --- a/tests/e2e/native-chat-first-flush-race.spec.ts +++ b/tests/e2e/native-chat-first-flush-race.spec.ts @@ -6,7 +6,7 @@ import type { Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { waitForActivePaneHookDescriptor, waitForActiveTerminalManager } from './helpers/terminal' -import type { GlobalSettings } from '../../src/shared/types' +import type { GlobalSettings } from '../../src/shared/global-settings-types' const LOADING_TITLE = 'Loading conversation…' const ERROR_TITLE = 'Could not load conversation' diff --git a/tests/e2e/notification-settings.spec.ts b/tests/e2e/notification-settings.spec.ts index ae33f26d7ae..2b4f78fbc57 100644 --- a/tests/e2e/notification-settings.spec.ts +++ b/tests/e2e/notification-settings.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from './helpers/orca-app' import { waitForSessionReady } from './helpers/store' -import type { GlobalSettings } from '../../src/shared/types' +import type { GlobalSettings } from '../../src/shared/global-settings-types' async function getSettings( page: Parameters[0] diff --git a/tests/e2e/onboarding.spec.ts b/tests/e2e/onboarding.spec.ts index 0fb5ad870c1..a4fcaa8dc1d 100644 --- a/tests/e2e/onboarding.spec.ts +++ b/tests/e2e/onboarding.spec.ts @@ -10,7 +10,8 @@ import { test, expect } from './helpers/orca-app' import { waitForSessionReady } from './helpers/store' import type { Page } from '@stablyai/playwright-test' -import type { GlobalSettings, TuiAgent } from '../../src/shared/types' +import type { GlobalSettings } from '../../src/shared/global-settings-types' +import type { TuiAgent } from '../../src/shared/tui-agent' import { ONBOARDING_FINAL_STEP } from '../../src/shared/constants' import { encodePairingOffer, PAIRING_OFFER_VERSION } from '../../src/shared/pairing' diff --git a/tests/e2e/paired-browser-create-navigation-deadline.spec.ts b/tests/e2e/paired-browser-create-navigation-deadline.spec.ts new file mode 100644 index 00000000000..c46cf94056e --- /dev/null +++ b/tests/e2e/paired-browser-create-navigation-deadline.spec.ts @@ -0,0 +1,383 @@ +import { createServer, type Server, type ServerResponse } from 'node:http' +import type { AddressInfo } from 'node:net' +import type { Page, TestInfo } from '@stablyai/playwright-test' +import { RuntimeClient } from '../../src/cli/runtime/client' +import type { RuntimeMobileSessionTabsResult } from '../../src/shared/runtime-types' +import { expect, test } from './helpers/orca-app' +import { + createRuntimeDesktopPairingOffer, + launchPairedElectronClient, + type PairedElectronClient +} from './helpers/paired-electron-client' +import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' + +const OPERATION_ID = 'sta-4231-owner-pinned-navigation-hold' + +type HeldNavigationServer = { + close: () => Promise + pendingCount: () => number + release: () => void + sourceUrl: string + url: string +} + +type CreateOutcome = { + error: string | null + ok: boolean + pageId: string | null +} + +async function startHeldNavigationServer(): Promise { + const pending = new Set() + const server: Server = createServer((request, response) => { + if (request.url?.startsWith('/source')) { + response.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }) + response.end( + `open held page` + ) + return + } + if (!request.url?.startsWith('/hold')) { + response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' }) + response.end('not found') + return + } + pending.add(response) + response.once('close', () => pending.delete(response)) + }) + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + const { port } = server.address() as AddressInfo + const release = (): void => { + for (const response of pending) { + if (!response.destroyed && !response.writableEnded) { + response.writeHead(200, { 'content-type': 'text/html; charset=utf-8' }) + response.end('released') + } + } + pending.clear() + } + return { + close: () => + new Promise((resolve, reject) => { + release() + server.closeAllConnections() + server.close((error) => (error ? reject(error) : resolve())) + }), + pendingCount: () => pending.size, + release, + sourceUrl: `http://127.0.0.1:${port}/source`, + url: `http://127.0.0.1:${port}/hold?operation=${OPERATION_ID}` + } +} + +async function readHostBrowserPageIds( + hostClient: RuntimeClient, + worktreeId: string +): Promise { + const response = await hostClient.call('session.tabs.list', { + worktree: `id:${worktreeId}` + }) + return response.result.tabs.flatMap((tab) => + tab.type === 'browser' && tab.browserPageId ? [tab.browserPageId] : [] + ) +} + +async function createOwnerPinnedBrowser( + page: Page, + environmentId: string, + worktreeId: string, + url: string +): Promise { + return page.evaluate( + async ({ environmentId, url, worktreeId }) => { + try { + const response = await window.api.runtimeEnvironments.call({ + selector: environmentId, + method: 'browser.tabCreate', + params: { + activate: true, + url, + waitForRegistration: true, + worktree: `id:${worktreeId}` + }, + timeoutMs: 15_000 + }) + if (!response.ok) { + return { + error: `${response.error.code}: ${response.error.message}`, + ok: false, + pageId: null + } + } + const result = response.result as { browserPageId: string } + return { error: null, ok: true, pageId: result.browserPageId } + } catch (error) { + return { + error: error instanceof Error ? error.message : String(error), + ok: false, + pageId: null + } + } + }, + { environmentId, url, worktreeId } + ) +} + +async function findPairedWorktreeId( + client: PairedElectronClient, + repoPath: string +): Promise { + const worktreeId = await expect + .poll( + () => + client.page.evaluate( + (path) => + window.__store + ?.getState() + .allWorktrees() + .find((worktree) => worktree.path === path)?.id ?? null, + repoPath + ), + { timeout: 60_000, message: 'paired client never received the host worktree' } + ) + .not.toBeNull() + .then(() => + client.page.evaluate( + (path) => + window.__store + ?.getState() + .allWorktrees() + .find((worktree) => worktree.path === path)?.id ?? null, + repoPath + ) + ) + if (!worktreeId) { + throw new Error('Paired worktree disappeared after discovery') + } + return worktreeId +} + +async function readClientBrowserPageIds(page: Page, worktreeId: string): Promise { + return page.evaluate((worktreeId) => { + const state = window.__store?.getState() + return (state?.browserTabsByWorktree[worktreeId] ?? []).flatMap((workspace) => + (state?.browserPagesByWorkspace[workspace.id] ?? []).map( + (browserPage) => + state?.remoteBrowserPageHandlesByPageId[browserPage.id]?.remotePageId ?? browserPage.id + ) + ) + }, worktreeId) +} + +async function findMirroredPageId( + page: Page, + worktreeId: string, + url: string +): Promise { + return page.evaluate( + ({ url, worktreeId }) => { + const state = window.__store?.getState() + for (const workspace of state?.browserTabsByWorktree[worktreeId] ?? []) { + const browserPage = (state?.browserPagesByWorkspace[workspace.id] ?? []).find((candidate) => + candidate.url.startsWith(url) + ) + if (browserPage) { + return browserPage.id + } + } + return null + }, + { url, worktreeId } + ) +} + +async function openLinkFromRemotePane(page: Page, testInfo: TestInfo): Promise { + const frame = page.locator('[data-testid="remote-browser-frame"]:visible').first() + await expect(frame).toBeVisible({ timeout: 60_000 }) + await frame.click({ button: 'right', position: { x: 60, y: 60 }, force: true }) + const open = page.getByRole('menuitem', { name: 'Open Link In Orca Browser' }) + await expect(open).toBeVisible({ timeout: 30_000 }) + await page.screenshot({ + path: testInfo.outputPath('sta-4231-owner-pinned-link-route.png'), + fullPage: true + }) + await open.click() +} + +test('returns a headed host page identity before owner-pinned navigation can time out @headful', async ({ + electronApp, + orcaPage, + testRepoPath +}, testInfo: TestInfo) => { + test.setTimeout(300_000) + const fixture = await startHeldNavigationServer() + let client: PairedElectronClient | null = null + try { + await waitForSessionReady(orcaPage) + await waitForActiveWorktree(orcaPage) + await ensureTerminalVisible(orcaPage) + const offer = await createRuntimeDesktopPairingOffer(orcaPage) + const userDataDir = await electronApp.evaluate(({ app }) => app.getPath('userData')) + const hostClient = new RuntimeClient(userDataDir, 5_000) + client = await launchPairedElectronClient(offer, testInfo, 'STA-4231 navigation deadline') + const cdp = await client.page.context().newCDPSession(client.page) + const visibility = await cdp.send('Runtime.evaluate', { + expression: 'document.visibilityState', + returnByValue: true + }) + expect(visibility.result.value).toBe('visible') + const worktreeId = await findPairedWorktreeId(client, testRepoPath) + const baselineHostPageIds = await readHostBrowserPageIds(hostClient, worktreeId) + await client.page.evaluate( + ({ environmentId, worktreeId }) => { + window.__store?.getState().setActiveWorktree(worktreeId, `runtime:${environmentId}`) + }, + { environmentId: client.environmentId, worktreeId } + ) + + const firstPromise = createOwnerPinnedBrowser( + client.page, + client.environmentId, + worktreeId, + fixture.url + ) + await expect.poll(fixture.pendingCount, { timeout: 30_000 }).toBe(1) + const firstHostPageId = await expect + .poll( + async () => { + const ids = await readHostBrowserPageIds(hostClient, worktreeId) + return ids.find((id) => !baselineHostPageIds.includes(id)) ?? null + }, + { timeout: 30_000, message: 'host never registered the owner-pinned page' } + ) + .not.toBeNull() + .then(async () => { + const ids = await readHostBrowserPageIds(hostClient, worktreeId) + return ids.find((id) => !baselineHostPageIds.includes(id)) ?? null + }) + const first = await firstPromise + + let retry: CreateOutcome | null = null + if (!first.ok) { + const retryPromise = createOwnerPinnedBrowser( + client.page, + client.environmentId, + worktreeId, + fixture.url + ) + await expect.poll(fixture.pendingCount, { timeout: 30_000 }).toBe(2) + retry = await retryPromise + } + const hostPageIds = (await readHostBrowserPageIds(hostClient, worktreeId)).filter( + (id) => !baselineHostPageIds.includes(id) + ) + await expect + .poll(() => readClientBrowserPageIds(client!.page, worktreeId), { + timeout: 30_000, + message: 'paired client did not materialize the canonical host page' + }) + .toContain(firstHostPageId) + await client.page.screenshot({ + path: testInfo.outputPath('sta-4231-headed-canonical-page.png'), + fullPage: true + }) + + expect({ first, firstHostPageId, hostPageIds, retry }).toEqual({ + first: { error: null, ok: true, pageId: firstHostPageId }, + firstHostPageId, + hostPageIds: [firstHostPageId], + retry: null + }) + } finally { + fixture.release() + await client?.dispose() + await fixture.close() + } +}) + +test('opens the held URL through the owner-pinned remote-pane link route @headful', async ({ + electronApp, + orcaPage, + testRepoPath +}, testInfo: TestInfo) => { + test.setTimeout(300_000) + const fixture = await startHeldNavigationServer() + let client: PairedElectronClient | null = null + try { + await waitForSessionReady(orcaPage) + await waitForActiveWorktree(orcaPage) + await ensureTerminalVisible(orcaPage) + const offer = await createRuntimeDesktopPairingOffer(orcaPage) + const userDataDir = await electronApp.evaluate(({ app }) => app.getPath('userData')) + const hostClient = new RuntimeClient(userDataDir, 5_000) + client = await launchPairedElectronClient(offer, testInfo, 'STA-4231 owner-pinned link route') + const worktreeId = await findPairedWorktreeId(client, testRepoPath) + await client.page.evaluate( + ({ environmentId, worktreeId }) => { + window.__store?.getState().setActiveWorktree(worktreeId, `runtime:${environmentId}`) + }, + { environmentId: client.environmentId, worktreeId } + ) + await hostClient.call('browser.tabCreate', { + activate: true, + url: fixture.sourceUrl, + worktree: `id:${worktreeId}` + }) + const sourcePageId = await expect + .poll(() => findMirroredPageId(client!.page, worktreeId, fixture.sourceUrl), { + timeout: 60_000, + message: 'paired client never mirrored the source browser pane' + }) + .not.toBeNull() + .then(() => findMirroredPageId(client!.page, worktreeId, fixture.sourceUrl)) + if (!sourcePageId) { + throw new Error('Source browser page disappeared') + } + await client.page.evaluate( + ({ pageId, worktreeId }) => + window.__store?.getState().focusBrowserTabInWorktree(worktreeId, pageId, { + surfacePane: true + }), + { pageId: sourcePageId, worktreeId } + ) + const baselineHostPageIds = await readHostBrowserPageIds(hostClient, worktreeId) + + await openLinkFromRemotePane(client.page, testInfo) + await expect.poll(fixture.pendingCount, { timeout: 30_000 }).toBe(1) + const createdPageId = await expect + .poll( + async () => { + const ids = await readHostBrowserPageIds(hostClient, worktreeId) + return ids.find((id) => !baselineHostPageIds.includes(id)) ?? null + }, + { timeout: 30_000, message: 'link route never registered a host page' } + ) + .not.toBeNull() + .then(async () => { + const ids = await readHostBrowserPageIds(hostClient, worktreeId) + return ids.find((id) => !baselineHostPageIds.includes(id)) ?? null + }) + expect(createdPageId).not.toBeNull() + await expect + .poll(() => readClientBrowserPageIds(client!.page, worktreeId), { + timeout: 30_000, + message: 'link route did not materialize the canonical host page' + }) + .toContain(createdPageId) + expect( + (await readHostBrowserPageIds(hostClient, worktreeId)).filter( + (id) => !baselineHostPageIds.includes(id) + ) + ).toEqual([createdPageId]) + } finally { + fixture.release() + await client?.dispose() + await fixture.close() + } +}) diff --git a/tests/e2e/paired-remote-pane-layout-retry.spec.ts b/tests/e2e/paired-remote-pane-layout-retry.spec.ts index 653cde88add..fd5f347bb69 100644 --- a/tests/e2e/paired-remote-pane-layout-retry.spec.ts +++ b/tests/e2e/paired-remote-pane-layout-retry.spec.ts @@ -1,7 +1,7 @@ import type { Page } from '@stablyai/playwright-test' import type { RuntimeMobileSessionTabsResult } from '../../src/shared/runtime-types' import { toWebTerminalSurfaceTabId } from '../../src/shared/terminal-surface-id' -import type { TerminalLayoutSnapshot } from '../../src/shared/types' +import type { TerminalLayoutSnapshot } from '../../src/shared/terminal-tab-types' import { launchHeadlessPairedRuntimeHost, type HeadlessPairedRuntimeHost diff --git a/tests/e2e/pr11346-selected-runtime-add.spec.ts b/tests/e2e/pr11346-selected-runtime-add.spec.ts index f4e86d8b0f5..20e34121f88 100644 --- a/tests/e2e/pr11346-selected-runtime-add.spec.ts +++ b/tests/e2e/pr11346-selected-runtime-add.spec.ts @@ -2,7 +2,9 @@ import { rmSync } from 'node:fs' import path from 'node:path' import type { ElectronApplication, Locator, Page, TestInfo } from '@stablyai/playwright-test' import { RuntimeClient } from '../../src/cli/runtime/client' -import type { FolderWorkspace, ProjectGroup, Repo } from '../../src/shared/types' +import type { FolderWorkspace } from '../../src/shared/folder-workspace-types' +import type { ProjectGroup } from '../../src/shared/project-group-types' +import type { Repo } from '../../src/shared/repo-types' import { expect, test } from './helpers/orca-app' import { createRuntimeDesktopPairingOffer, diff --git a/tests/e2e/remote-terminal-tab-retirement.unit.test.ts b/tests/e2e/remote-terminal-tab-retirement.unit.test.ts index 6696e2ca7f6..45ac2f8b0a0 100644 --- a/tests/e2e/remote-terminal-tab-retirement.unit.test.ts +++ b/tests/e2e/remote-terminal-tab-retirement.unit.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../../src/shared/constants' import type { RuntimeMobileSessionTabsSnapshot } from '../../src/shared/runtime-types' -import type { WorkspaceSessionState } from '../../src/shared/types' +import type { WorkspaceSessionState } from '../../src/shared/workspace-session-state-types' import { acceptReplayedWebSessionTabsSnapshot, applyWebSessionTabsSnapshot, diff --git a/tests/e2e/repo-icon-emoji-picker.spec.ts b/tests/e2e/repo-icon-emoji-picker.spec.ts index 2698615b881..1513365725c 100644 --- a/tests/e2e/repo-icon-emoji-picker.spec.ts +++ b/tests/e2e/repo-icon-emoji-picker.spec.ts @@ -7,7 +7,7 @@ import type { Page, TestInfo } from '@stablyai/playwright-test' import { expect, test } from './helpers/orca-app' import { getStoreState, waitForSessionReady } from './helpers/store' -import type { Repo } from '../../src/shared/types' +import type { Repo } from '../../src/shared/repo-types' /** Opens the repo settings panel and pins the UI language to English. */ async function openRepoSettings(page: Page, repoId: string): Promise { diff --git a/tests/e2e/settings-agent-awake.spec.ts b/tests/e2e/settings-agent-awake.spec.ts index 15c25e2fc4e..8a2ad840a14 100644 --- a/tests/e2e/settings-agent-awake.spec.ts +++ b/tests/e2e/settings-agent-awake.spec.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import type { ElectronApplication, Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { waitForSessionReady } from './helpers/store' -import type { GlobalSettings } from '../../src/shared/types' +import type { GlobalSettings } from '../../src/shared/global-settings-types' import { readHookEndpoint } from './helpers/agent-hook-endpoint' type AwakeProbeSnapshot = { diff --git a/tests/e2e/settings-display-name-ime.spec.ts b/tests/e2e/settings-display-name-ime.spec.ts index 8001c6d3338..e6da51bdb71 100644 --- a/tests/e2e/settings-display-name-ime.spec.ts +++ b/tests/e2e/settings-display-name-ime.spec.ts @@ -10,7 +10,7 @@ import type { CDPSession, Locator, Page } from '@stablyai/playwright-test' import { test, expect } from './helpers/orca-app' import { getStoreState, waitForSessionReady } from './helpers/store' -import type { Repo } from '../../src/shared/types' +import type { Repo } from '../../src/shared/repo-types' async function openRepoSettings(page: Page, repoId: string): Promise { await page.evaluate((repoId) => { diff --git a/tests/e2e/settings-search-responsiveness.spec.ts b/tests/e2e/settings-search-responsiveness.spec.ts index 05bbb29e284..b3ac59d3320 100644 --- a/tests/e2e/settings-search-responsiveness.spec.ts +++ b/tests/e2e/settings-search-responsiveness.spec.ts @@ -1,7 +1,7 @@ import path from 'node:path' import { test, expect } from './helpers/orca-app' import { waitForSessionReady } from './helpers/store' -import type { Repo } from '../../src/shared/types' +import type { Repo } from '../../src/shared/repo-types' const MATCHING_PROJECT_COUNT = 240 diff --git a/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts b/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts index b11c74c86be..8bc5db7be0b 100644 --- a/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts +++ b/tests/e2e/terminal-duplicate-pty-renderer-reveal.spec.ts @@ -2,7 +2,7 @@ import { randomUUID } from 'node:crypto' import { existsSync, readFileSync, writeFileSync } from 'node:fs' import path from 'node:path' import type { ElectronApplication, Page } from '@stablyai/playwright-test' -import type { TerminalLayoutSnapshot } from '../../src/shared/types' +import type { TerminalLayoutSnapshot } from '../../src/shared/terminal-tab-types' import { DEFAULT_LOCAL_ORCA_PROFILE_ID } from '../../src/shared/orca-profiles' import { test, expect } from './helpers/orca-app' import { attachRepoAndOpenTerminal, createRestartSession } from './helpers/orca-restart' diff --git a/tests/e2e/worktree-smart-sort.spec.ts b/tests/e2e/worktree-smart-sort.spec.ts index 0bcadf31623..2c193d3336b 100644 --- a/tests/e2e/worktree-smart-sort.spec.ts +++ b/tests/e2e/worktree-smart-sort.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from './helpers/orca-app' import type { Page } from '@stablyai/playwright-test' -import type { TerminalPaneLayoutNode } from '../../src/shared/types' +import type { TerminalPaneLayoutNode } from '../../src/shared/terminal-tab-types' import { ensureTerminalVisible, waitForActiveWorktree, waitForSessionReady } from './helpers/store' import { worktreeRow } from './worktree-row-locators'