diff --git a/config/build-plugins/plain-node-entry-guard.ts b/config/build-plugins/plain-node-entry-guard.ts index 39033e04f01..bca58bf3b6c 100644 --- a/config/build-plugins/plain-node-entry-guard.ts +++ b/config/build-plugins/plain-node-entry-guard.ts @@ -18,7 +18,7 @@ export const CLI_MAIN_ENTRY_NAMES = [ 'orca-profiles/profile-index-store', 'claude-accounts/keychain', 'skills/bundled-skill-install/cli-entry', - 'macos-tree-clone', + 'filesystem/macos-tree-clone', 'orcad/orcad-stale-lock-reclaim', 'plugins/plugin-authoring-checks', ...[ diff --git a/config/electron-builder.config.cjs b/config/electron-builder.config.cjs index 97631dcfc19..97b12132415 100644 --- a/config/electron-builder.config.cjs +++ b/config/electron-builder.config.cjs @@ -330,8 +330,8 @@ module.exports = { 'out/main/gitlab/project-ref-parser.js', 'out/main/grok/**', 'out/main/hermes/**', - 'out/main/asar-transparent-fs.js', - 'out/main/macos-tree-clone.js', + 'out/main/filesystem/asar-transparent-fs.js', + 'out/main/filesystem/macos-tree-clone.js', 'out/main/orca-profiles/profile-index-store.js', 'out/main/persistence/profile-state/**', 'out/main/plugins/plugin-authoring-checks.js', diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index 12d1578344c..6b8e46405c9 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -2478,14 +2478,14 @@ "src/main/daemon/terminal-view-attribute-responder.test.ts": 54, "src/main/daemon/windows-conpty-warmup.test.ts": 51, "src/main/daemon/wsl-cold-restore-cwd.test.ts": 50, - "src/main/destination-serialized-local-rename.test.ts": 1392, + "src/main/filesystem/destination-serialized-local-rename.test.ts": 1392, "src/main/devin/hook-config-json.test.ts": 78, "src/main/devin/hook-service.test.ts": 159, "src/main/diagnostics/event-loop-delay-probe.test.ts": 84, "src/main/dsh/dsh-home-patch.test.ts": 57, "src/main/dsh/hook-service.test.ts": 124, - "src/main/durable-file-write-syscall-proof.test.ts": 73, - "src/main/durable-file-write.test.ts": 176, + "src/main/filesystem/durable-file-write-syscall-proof.test.ts": 73, + "src/main/filesystem/durable-file-write.test.ts": 176, "src/main/electron-updater-mac-staging-contract.test.ts": 125, "src/main/emulator/android/adb-devices.test.ts": 46, "src/main/emulator/android/android-avd-boot-identity.test.ts": 88, @@ -2524,7 +2524,7 @@ "src/main/ephemeral-vm/recipe-runner.test.ts": 460, "src/main/ephemeral-vm/runtime-service.test.ts": 870, "src/main/ephemeral-vm/runtime-ssh-cleanup.test.ts": 188, - "src/main/event-listener-fanout.test.ts": 52, + "src/main/runtime/events/event-listener-fanout.test.ts": 52, "src/main/execution-host-workspace-trust.test.ts": 232, "src/main/external-conversations/external-conversation-cancel-liveness.test.ts": 1752, "src/main/external-conversations/external-conversation-cancel-settlement.test.ts": 1601, @@ -2536,7 +2536,7 @@ "src/main/external-conversations/external-conversations-install.test.ts": 1687, "src/main/external-editors/external-editor-launch-process-host.test.ts": 215, "src/main/external-editors/external-editor-launch.test.ts": 151, - "src/main/file-transaction-lock.test.ts": 1047, + "src/main/filesystem/file-transaction-lock.test.ts": 1047, "src/main/fish-history-session.test.ts": 82, "src/main/fish-xdg-data-dirs-handoff.test.ts": 76, "src/main/folder-upgrade-worktree-path.test.ts": 251, @@ -2923,8 +2923,8 @@ "src/main/hooks-runner.test.ts": 314, "src/main/hooks-setup-runner-script.test.ts": 336, "src/main/hooks.test.ts": 474, - "src/main/host-checkout-removal.test.ts": 52, - "src/main/host-tree-removal-asar.electron.test.ts": 308, + "src/main/filesystem/host-checkout-removal.test.ts": 52, + "src/main/filesystem/host-tree-removal-asar.electron.test.ts": 308, "src/main/host/deferred-secret-protection-report.test.ts": 81, "src/main/host/electron-http-client.test.ts": 496, "src/main/host/electron-manual-redirect-fetch.test.ts": 52, @@ -2936,8 +2936,8 @@ "src/main/i18n/main-i18n-pre-init.test.ts": 50, "src/main/i18n/system-language.test.ts": 358, "src/main/media/image-file-signature.test.ts": 47, - "src/main/integration-state-file-cache.test.ts": 47, - "src/main/integration-token-file-cache.test.ts": 152, + "src/main/credentials/integration-state-file-cache.test.ts": 47, + "src/main/credentials/integration-token-file-cache.test.ts": 152, "src/main/ipc/account-sign-in-link-opener.test.ts": 128, "src/main/ipc/agent-hooks.test.ts": 736, "src/main/ipc/agent-pane-authority-ownership.test.ts": 47, @@ -3584,7 +3584,7 @@ "src/main/macos-permissions/macos-tcc-log-stream-orphans.test.ts": 110, "src/main/macos-permissions/macos-tcc-prompt-notice.test.ts": 82, "src/main/macos-permissions/macos-tcc-prompt-watch.test.ts": 77, - "src/main/macos-tree-clone.test.ts": 84, + "src/main/filesystem/macos-tree-clone.test.ts": 84, "src/main/macos-update-running-instances.integration.test.ts": 59, "src/main/managed-data-accounts/original-environment.test.ts": 209, "src/main/managed-data-accounts/profile-removal-recovery.test.ts": 479, @@ -4860,8 +4860,8 @@ "src/main/project-runtime-git-router-store.test.ts": 1818, "src/main/project-runtime-git-router.test.ts": 192, "src/main/project-runtime-read-git-options-opt-in.test.ts": 137, - "src/main/protected-secret-persistence-concurrency.test.ts": 68, - "src/main/protected-secret-persistence.test.ts": 53, + "src/main/credentials/protected-secret-persistence-concurrency.test.ts": 68, + "src/main/credentials/protected-secret-persistence.test.ts": 53, "src/main/provider-process/managed-provider-process-fallback-tree.test.ts": 150, "src/main/provider-process/managed-provider-process-root-only.test.ts": 164, "src/main/provider-process/managed-provider-process.test.ts": 185, @@ -6479,7 +6479,7 @@ "src/main/shell-startup-identity-scanner.test.ts": 39, "src/main/shell-startup-output-scanner.test.ts": 58, "src/main/shell-wrapper-content-address.test.ts": 49, - "src/main/sidecar-snapshot-file.test.ts": 65, + "src/main/filesystem/sidecar-snapshot-file.test.ts": 65, "src/main/skills/agent-skill-selection.test.ts": 103, "src/main/skills/antigravity-skill-discovery.test.ts": 128, "src/main/skills/bundled-skill-install/auto-update-eligibility.test.ts": 400, @@ -7081,7 +7081,7 @@ "src/main/windows/windows-pty-job.win32.test.ts": 84, "src/main/worker-thread-child-process/worker-thread-child-output-flow.test.ts": 158, "src/main/worker-thread-child-process/worker-thread-child-process.test.ts": 602, - "src/main/worker-thread-request-queue.test.ts": 83, + "src/main/worker-threads/worker-thread-request-queue.test.ts": 83, "src/main/workspaces/cleanup/workspace-cleanup-removal-snapshot-prune.test.ts": 60, "src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.test.ts": 160, "src/main/workspace-create-event-fields.test.ts": 265, @@ -7231,7 +7231,7 @@ "src/main/zcode/zcode-plan-api-key-store.test.ts": 89, "src/main/zcode/zcode-v2-personal-overlay-raw-json.test.ts": 259, "src/main/zcode/zcode-v2-plan-credentials.test.ts": 934, - "src/main/zod-schema-compilation.test.ts": 87, + "src/main/schema-validation/zod-schema-compilation.test.ts": 87, "src/packages/process-host/src/bounded-output-sink.test.ts": 75, "src/packages/process-host/src/close-process-registry.test.ts": 39, "src/packages/process-host/src/growing-byte-buffer.test.ts": 102, diff --git a/config/scripts/orcad-terminal-smoke-change-scope.test.mjs b/config/scripts/orcad-terminal-smoke-change-scope.test.mjs index 9272ed88648..e4ccff97d17 100644 --- a/config/scripts/orcad-terminal-smoke-change-scope.test.mjs +++ b/config/scripts/orcad-terminal-smoke-change-scope.test.mjs @@ -48,7 +48,7 @@ describe('the actual terminal smoke dependency graph', () => { ...Object.values(ORCAD_CHILD_ENTRY_POINTS), 'src/main/runtime/orca-runtime.ts', 'src/main/windows/windows-process-table.ts', - 'src/main/worker-thread-entry-path.ts', + 'src/main/worker-threads/worker-thread-entry-path.ts', 'src/cli/index.ts', 'config/scripts/runtime-serve-terminal-smoke.mjs', 'config/scripts/build-orcad-node.mjs', diff --git a/config/tsconfig.tc.web.json b/config/tsconfig.tc.web.json index f6bfd010976..bc7273724b4 100644 --- a/config/tsconfig.tc.web.json +++ b/config/tsconfig.tc.web.json @@ -85,7 +85,7 @@ "../src/main/persistence/applying-settings/ui-state-update.ts", "../src/main/persistence/applying-settings/ui-selection-normalization.ts", "../src/main/persistence/applying-settings/ui-interaction-merge.ts", - "../src/main/protected-secret-persistence.ts", + "../src/main/credentials/protected-secret-persistence.ts", "../src/main/startup/serve-desktop-activation.ts", "../src/main/startup/serve-mode-argv.ts", "../src/main/startup/single-instance-lock.ts", diff --git a/src/cli/handlers/profile-state-recovery-admission.test.ts b/src/cli/handlers/profile-state-recovery-admission.test.ts index cd641e0c5a6..c77b256e736 100644 --- a/src/cli/handlers/profile-state-recovery-admission.test.ts +++ b/src/cli/handlers/profile-state-recovery-admission.test.ts @@ -10,7 +10,7 @@ import { import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import * as durableFileWrite from '../../main/durable-file-write' +import * as durableFileWrite from '../../main/filesystem/durable-file-write' import { acquireProfileStateMaintenance, acquireProfileStateRuntimeAdmission diff --git a/src/cli/handlers/profile-state.test.ts b/src/cli/handlers/profile-state.test.ts index 5121715a9ee..1ded91eaf79 100644 --- a/src/cli/handlers/profile-state.test.ts +++ b/src/cli/handlers/profile-state.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { basename, join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type * as ProcessHostModule from '@orca/process-host' -import * as durableFileWrite from '../../main/durable-file-write' +import * as durableFileWrite from '../../main/filesystem/durable-file-write' import * as http1Marker from '../../main/startup/http1-compatibility-marker' import { readPersistedHttp1CompatibilityMode } from '../../main/startup/http1-compatibility-profile-state' import { diff --git a/src/cli/runtime/serve-supervisor-relocation.ts b/src/cli/runtime/serve-supervisor-relocation.ts index 995171c06a8..47403a74f51 100644 --- a/src/cli/runtime/serve-supervisor-relocation.ts +++ b/src/cli/runtime/serve-supervisor-relocation.ts @@ -3,7 +3,7 @@ import { createHash } from 'node:crypto' import { constants, readFileSync, rmSync, statSync } from 'node:fs' import { cp, mkdir, readdir, rename, rm, stat, writeFile } from 'node:fs/promises' import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path' -import { cloneMacTree } from '../../main/macos-tree-clone' +import { cloneMacTree } from '../../main/filesystem/macos-tree-clone' import { isProcessAlive } from '../../shared/serve-bundle-coordination' /** Relocated supervisors can no longer derive the app root from __dirname. */ diff --git a/src/main/acp/acp-session-events.ts b/src/main/acp/acp-session-events.ts index 574cefb26eb..272b16545a5 100644 --- a/src/main/acp/acp-session-events.ts +++ b/src/main/acp/acp-session-events.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import { getCompiledSchema } from '../zod-schema-compilation' +import { getCompiledSchema } from '../schema-validation/zod-schema-compilation' import { SessionNotificationSchema, type SessionNotification diff --git a/src/main/agent-hooks/installer-utils.ts b/src/main/agent-hooks/installer-utils.ts index ae178a6eedf..e581d6a68d3 100644 --- a/src/main/agent-hooks/installer-utils.ts +++ b/src/main/agent-hooks/installer-utils.ts @@ -14,7 +14,7 @@ import { randomUUID } from 'node:crypto' import type { AgentHookSource } from '../../shared/agent-hook-relay' import { grantDirAcl, isPermissionError } from '../win32-utils' import { resolveHooksJsonWritePath } from './hook-config-write-path' -import { writeRollingFileBackup } from '../rolling-file-backup' +import { writeRollingFileBackup } from '../filesystem/rolling-file-backup' import { renameOverLockedTarget } from './locked-executable-rename' import { getWindowsNativeHookAgent, diff --git a/src/main/ai-vault/session-scanner-opencode-sqlite-process-client.ts b/src/main/ai-vault/session-scanner-opencode-sqlite-process-client.ts index 122411eb7c1..9cad97e03be 100644 --- a/src/main/ai-vault/session-scanner-opencode-sqlite-process-client.ts +++ b/src/main/ai-vault/session-scanner-opencode-sqlite-process-client.ts @@ -1,7 +1,7 @@ import { EventEmitter } from 'node:events' import { spawnProcess } from '@orca/process-host' import { waitForPromiseWithSignal } from '../../shared/abort-signal-reason' -import type { WorkerRequestTransport } from '../lazy-worker-thread-host' +import type { WorkerRequestTransport } from '../worker-threads/worker-thread-transport' import { OpenCodeSqliteWorkerClient } from './session-scanner-opencode-sqlite-worker-client' import { createOpenCodeSqliteLineDecoder, diff --git a/src/main/ai-vault/session-scanner-opencode-sqlite-scan-scope.ts b/src/main/ai-vault/session-scanner-opencode-sqlite-scan-scope.ts index e3a53a535b2..f123015f0b9 100644 --- a/src/main/ai-vault/session-scanner-opencode-sqlite-scan-scope.ts +++ b/src/main/ai-vault/session-scanner-opencode-sqlite-scan-scope.ts @@ -1,6 +1,6 @@ import { AsyncLocalStorage } from 'node:async_hooks' import { throwIfSignalAborted } from '../../shared/abort-signal-reason' -import type { WorkerThreadRequestOwner } from '../worker-thread-request-queue' +import type { WorkerThreadRequestOwner } from '../worker-threads/worker-thread-request-queue' export const OPENCODE_SQLITE_SCAN_BUDGET_MS = 45_000 diff --git a/src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.ts b/src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.ts index deb2b1eb3f1..b754f3ffa9e 100644 --- a/src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.ts +++ b/src/main/ai-vault/session-scanner-opencode-sqlite-worker-client.ts @@ -1,6 +1,6 @@ -import type { WorkerThreadFactory } from '../lazy-worker-thread-host' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' import { aiVaultScanIssueText } from '../../shared/ai-vault-scan-issue-copy' -import { WorkerThreadRequestQueue } from '../worker-thread-request-queue' +import { WorkerThreadRequestQueue } from '../worker-threads/worker-thread-request-queue' import type { AiVaultScanIssue, AiVaultSession } from '../../shared/ai-vault-types' import type { OpenCodeNativeChatReadRequest, diff --git a/src/main/ai-vault/session-scanner-service-entry-path.ts b/src/main/ai-vault/session-scanner-service-entry-path.ts index ca9d0098212..64909fd33c1 100644 --- a/src/main/ai-vault/session-scanner-service-entry-path.ts +++ b/src/main/ai-vault/session-scanner-service-entry-path.ts @@ -3,7 +3,7 @@ import { getForkedChildEntryPath, resolveForkedChildEntryPath, resolveForkedChildEntryPathWithoutApp -} from '../forked-child-entry-path' +} from '../worker-threads/forked-child-entry-path' // orcad resolves this literal beside orcad.js; build-orcad.mjs emits it from ORCAD_CHILD_ENTRY_POINTS. export const AI_VAULT_SERVICE_ENTRY_FILENAME = 'session-scanner-service-entry.js' diff --git a/src/main/antigravity/native-account-store.ts b/src/main/antigravity/native-account-store.ts index cf269a6b0f6..9ab1f03fc8c 100644 --- a/src/main/antigravity/native-account-store.ts +++ b/src/main/antigravity/native-account-store.ts @@ -1,7 +1,7 @@ import { existsSync, lstatSync, mkdirSync, readFileSync, statSync } from 'node:fs' import { dirname } from 'node:path' import { getSecretStore } from '../../shared/secret-store' -import { writeCredentialFileAtomic } from '../integration-credential-file' +import { writeCredentialFileAtomic } from '../credentials/integration-credential-file' import type { AntigravityAccountSummary } from '../../shared/antigravity-account-types' import { parseAntigravityNativeCredential } from './native-credential-codec' import { readPrivateWindowsFile } from '../../shared/secure-path-windows-acl' diff --git a/src/main/antigravity/native-file-credentials.ts b/src/main/antigravity/native-file-credentials.ts index 95abbdc9610..06b27323f3e 100644 --- a/src/main/antigravity/native-file-credentials.ts +++ b/src/main/antigravity/native-file-credentials.ts @@ -1,6 +1,6 @@ import { existsSync, lstatSync, mkdirSync, readFileSync } from 'node:fs' import { dirname } from 'node:path' -import { writeCredentialFileAtomic } from '../integration-credential-file' +import { writeCredentialFileAtomic } from '../credentials/integration-credential-file' import { readPrivateWindowsFile } from '../../shared/secure-path-windows-acl' import { parseAntigravityNativeCredential } from './native-credential-codec' import type { AntigravityCredentialBackend } from './native-account-service' diff --git a/src/main/ustar-entry-header.ts b/src/main/archive/ustar-entry-header.ts similarity index 100% rename from src/main/ustar-entry-header.ts rename to src/main/archive/ustar-entry-header.ts diff --git a/src/main/bitbucket/credential-store.ts b/src/main/bitbucket/credential-store.ts index 37a1b963dcd..db7da5e3154 100644 --- a/src/main/bitbucket/credential-store.ts +++ b/src/main/bitbucket/credential-store.ts @@ -7,9 +7,9 @@ import { readStoredCredentialToken, writeCredentialFileAtomic, writeEncryptedCredential -} from '../integration-credential-file' +} from '../credentials/integration-credential-file' import type { BitbucketAuthMode } from '../../shared/bitbucket-credentials' -import { readCredentialFileProtection } from '../credential-file-protection' +import { readCredentialFileProtection } from '../credentials/credential-file-protection' import type { SecretAtRestProtection } from '../../shared/secret-at-rest-protection' // Plaintext display metadata lets status reads avoid keychain prompts. diff --git a/src/main/browser/__mocks__/browser-session-registry-persistence-fixture.ts b/src/main/browser/__mocks__/browser-session-registry-persistence-fixture.ts index e44a339904c..555f0cb2624 100644 --- a/src/main/browser/__mocks__/browser-session-registry-persistence-fixture.ts +++ b/src/main/browser/__mocks__/browser-session-registry-persistence-fixture.ts @@ -164,21 +164,26 @@ export function installModuleMocks( isScopedStagedCookieImport: vi.fn(() => false), removeCookieImportScopeMarker: vi.fn() })) + const renameFileWithWindowsRetryMock = vi.fn((source: string, target: string) => { + const sourceKey = fsKey(source) + const targetKey = fsKey(target) + if (!fsState.present.has(sourceKey)) { + throw new Error('ENOENT') + } + const value = fsState.files.get(sourceKey) + fsState.present.delete(sourceKey) + fsState.files.delete(sourceKey) + fsState.present.add(targetKey) + if (value !== undefined) { + fsState.files.set(targetKey, value) + } + }) + vi.doMock('../../../shared/windows-retry-file-operations', async (importOriginal) => ({ + ...(await importOriginal>()), + renameFileWithWindowsRetry: renameFileWithWindowsRetryMock + })) vi.doMock('../../codex-accounts/fs-utils', () => ({ - renameFileWithWindowsRetry: vi.fn((source: string, target: string) => { - const sourceKey = fsKey(source) - const targetKey = fsKey(target) - if (!fsState.present.has(sourceKey)) { - throw new Error('ENOENT') - } - const value = fsState.files.get(sourceKey) - fsState.present.delete(sourceKey) - fsState.files.delete(sourceKey) - fsState.present.add(targetKey) - if (value !== undefined) { - fsState.files.set(targetKey, value) - } - }), + renameFileWithWindowsRetry: renameFileWithWindowsRetryMock, writeFileAtomically: vi.fn((pathValue: string, data: string) => { const key = fsKey(pathValue) fsState.files.set(key, data) diff --git a/src/main/browser/browser-host-client-identity.ts b/src/main/browser/browser-host-client-identity.ts index 6bf5f1c47a5..1c23f4a4768 100644 --- a/src/main/browser/browser-host-client-identity.ts +++ b/src/main/browser/browser-host-client-identity.ts @@ -1,7 +1,7 @@ import { mkdirSync, readFileSync } from 'node:fs' import { randomUUID } from 'node:crypto' import { dirname, join } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' export const BROWSER_HOST_CLIENT_IDENTITY_FILE_NAME = 'browser-host-client-identity.json' diff --git a/src/main/browser/browser-identity-mode-store.test.ts b/src/main/browser/browser-identity-mode-store.test.ts index 2869d0ed115..46624901530 100644 --- a/src/main/browser/browser-identity-mode-store.test.ts +++ b/src/main/browser/browser-identity-mode-store.test.ts @@ -2,11 +2,11 @@ import { mkdtempSync, readdirSync, readFileSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { beforeEach, describe, expect, it, vi } from 'vitest' -import type * as DurableFileWrite from '../durable-file-write' +import type * as DurableFileWrite from '../filesystem/durable-file-write' const mocks = vi.hoisted(() => ({ failWrite: false })) -vi.mock('../durable-file-write', async (importOriginal) => { +vi.mock('../filesystem/durable-file-write', async (importOriginal) => { const actual = await importOriginal() return { ...actual, diff --git a/src/main/browser/browser-identity-mode-store.ts b/src/main/browser/browser-identity-mode-store.ts index 6e2086b261b..f259e972a3b 100644 --- a/src/main/browser/browser-identity-mode-store.ts +++ b/src/main/browser/browser-identity-mode-store.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto' import { existsSync, readFileSync } from 'node:fs' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' import type { BrowserIdentityModeSetResult, BrowserIdentityModeSnapshot, diff --git a/src/main/browser/browser-profile-site-store.ts b/src/main/browser/browser-profile-site-store.ts index 04602158536..3c292a60d86 100644 --- a/src/main/browser/browser-profile-site-store.ts +++ b/src/main/browser/browser-profile-site-store.ts @@ -1,7 +1,7 @@ import { app } from 'electron' import { mkdirSync, readFileSync } from 'node:fs' import { dirname, join } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' export type BrowserProfileSiteStore = { configure: (profileDirectory: string) => void diff --git a/src/main/browser/browser-route-partition-binding-store.ts b/src/main/browser/browser-route-partition-binding-store.ts index 5106def89bb..fae30ffee9d 100644 --- a/src/main/browser/browser-route-partition-binding-store.ts +++ b/src/main/browser/browser-route-partition-binding-store.ts @@ -1,7 +1,7 @@ import { existsSync, mkdirSync, statSync } from 'node:fs' import { dirname, join } from 'node:path' import { grantDirAcl, isPermissionError } from '../win32-utils' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' import { assertBinding, assertStorageScope, diff --git a/src/main/browser/extensions/browser-extension-native-host-process.test.ts b/src/main/browser/extensions/browser-extension-native-host-process.test.ts index 5ecd4c37355..58a5f6bf09d 100644 --- a/src/main/browser/extensions/browser-extension-native-host-process.test.ts +++ b/src/main/browser/extensions/browser-extension-native-host-process.test.ts @@ -12,7 +12,7 @@ import { type NativeHostConnection } from './browser-extension-native-host-process' -vi.mock('../../forked-child-entry-path', () => ({ +vi.mock('../../worker-threads/forked-child-entry-path', () => ({ getForkedChildEntryPath: (fileName: string) => join(root, fileName) })) diff --git a/src/main/browser/extensions/browser-extension-native-host-process.ts b/src/main/browser/extensions/browser-extension-native-host-process.ts index 34fd4bb623e..1067979fea3 100644 --- a/src/main/browser/extensions/browser-extension-native-host-process.ts +++ b/src/main/browser/extensions/browser-extension-native-host-process.ts @@ -6,7 +6,7 @@ import { forceTerminateProcessTree, signalProcessTree } from '@orca/process-host/process-tree-termination' -import { getForkedChildEntryPath } from '../../forked-child-entry-path' +import { getForkedChildEntryPath } from '../../worker-threads/forked-child-entry-path' import { NATIVE_HOST_ERRORS } from './browser-extension-native-host-errors' import { createNativeHostMessageReader, diff --git a/src/main/browser/extensions/browser-extension-retired-profile-storage.ts b/src/main/browser/extensions/browser-extension-retired-profile-storage.ts index 869119bf064..ffe18667301 100644 --- a/src/main/browser/extensions/browser-extension-retired-profile-storage.ts +++ b/src/main/browser/extensions/browser-extension-retired-profile-storage.ts @@ -1,7 +1,7 @@ import { session } from 'electron' import { mkdirSync, readFileSync, rmSync } from 'node:fs' import { dirname, join } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' import { getBrowserExtensionInstallStore } from './browser-extension-install-store' import { clearBrowserExtensionProfileSessionData } from './browser-extension-data-removal' diff --git a/src/main/browser/extensions/browser-extension-sync-storage-store.ts b/src/main/browser/extensions/browser-extension-sync-storage-store.ts index 4401dc27bbe..37735085f48 100644 --- a/src/main/browser/extensions/browser-extension-sync-storage-store.ts +++ b/src/main/browser/extensions/browser-extension-sync-storage-store.ts @@ -2,7 +2,7 @@ import { app } from 'electron' import { mkdirSync, readFileSync, readdirSync, rmSync } from 'node:fs' import { join } from 'node:path' import { isChromeExtensionId } from '../../../shared/browser-extension-url' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' import { getBrowserExtensionProfileDataDirectory } from './browser-extension-profile-data-directory' const SYNC_STORAGE_DIRECTORY = 'sync-storage' diff --git a/src/main/claude-accounts/claude-profile-setup-worker.ts b/src/main/claude-accounts/claude-profile-setup-worker.ts index af6b6f2d71b..4e86b6deb21 100644 --- a/src/main/claude-accounts/claude-profile-setup-worker.ts +++ b/src/main/claude-accounts/claude-profile-setup-worker.ts @@ -1,7 +1,10 @@ import { existsSync } from 'node:fs' import { dirname, join } from 'node:path' import { Worker } from 'node:worker_threads' -import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath } from '../worker-thread-entry-path' +import { + currentWorkerEntryLayout, + resolveWorkerThreadEntryPath +} from '../worker-threads/worker-thread-entry-path' import type { ClaudeProfileDescriptor } from './claude-profile-paths' import type { ClaudeProfileSetupReport } from './claude-profile-setup' diff --git a/src/main/claude/claude-rewind-transcript.ts b/src/main/claude/claude-rewind-transcript.ts index dd2534c0f8a..96d86a589cd 100644 --- a/src/main/claude/claude-rewind-transcript.ts +++ b/src/main/claude/claude-rewind-transcript.ts @@ -3,7 +3,11 @@ import { createReadStream } from 'node:fs' import { rm } from 'node:fs/promises' import { dirname, join } from 'node:path' import type { AgentSessionRewindFork } from '../../shared/agent-session/lifecycle/agent-session-rewind' -import { durableWriteTempPath, renameDurable, writeTempFileDurable } from '../durable-file-write' +import { + durableWriteTempPath, + renameDurable, + writeTempFileDurable +} from '../filesystem/durable-file-write' import { splitTranscriptStreamLines } from '../native-chat/transcript-stream-lines' import { loadClaudeAgentSdk } from './claude-stream-json-connection' diff --git a/src/main/codex-accounts/async-file-rename.test.ts b/src/main/codex-accounts/async-file-rename.test.ts index a453378a78d..bd5da38b0e2 100644 --- a/src/main/codex-accounts/async-file-rename.test.ts +++ b/src/main/codex-accounts/async-file-rename.test.ts @@ -3,7 +3,7 @@ import type * as NodeFsPromises from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it, vi } from 'vitest' -import { writeFileDurable, writeFileDurableIfCurrent } from '../durable-file-write' +import { writeFileDurable, writeFileDurableIfCurrent } from '../filesystem/durable-file-write' const rename = vi.hoisted(() => vi.fn()) vi.mock('node:fs/promises', async (importOriginal) => { diff --git a/src/main/codex/codex-hook-hash-lookup.ts b/src/main/codex/codex-hook-hash-lookup.ts index e5b9e168966..5aed6c7f847 100644 --- a/src/main/codex/codex-hook-hash-lookup.ts +++ b/src/main/codex/codex-hook-hash-lookup.ts @@ -1,5 +1,5 @@ import { withTimeout } from '../../shared/promise-timeout-fallback' -import { dedupeInFlightRun } from '../in-flight-run-dedupe' +import { dedupeInFlightRun } from '../runtime/concurrency/in-flight-run-dedupe' import { resolveCodexCommand, resolveCodexCommandForSpawn } from '../codex-cli/command' import { getManagedCommand, getManagedScriptPath } from './codex-hook-definition' import { diff --git a/src/main/codex/codex-hook-service-implementation.ts b/src/main/codex/codex-hook-service-implementation.ts index 78d917b3bce..8cd63a54ccc 100644 --- a/src/main/codex/codex-hook-service-implementation.ts +++ b/src/main/codex/codex-hook-service-implementation.ts @@ -2,7 +2,7 @@ import { win32 as pathWin32 } from 'node:path' import type { SFTPWrapper } from 'ssh2' import type { AgentHookInstallStatus } from '../../shared/agent-hook-types' import { normalizeRuntimePathForComparison } from '../../shared/cross-platform-path' -import { dedupeInFlightRun } from '../in-flight-run-dedupe' +import { dedupeInFlightRun } from '../runtime/concurrency/in-flight-run-dedupe' import { refreshManagedScriptIfPresent } from '../agent-hooks/managed-hook-script-refresh' import { writeManagedScript } from '../agent-hooks/installer-utils' import { getOrcaManagedCodexHomePath } from './codex-home-paths' diff --git a/src/main/codex/config-toml-atomic-write.ts b/src/main/codex/config-toml-atomic-write.ts index 647f07b765f..47a538e9092 100644 --- a/src/main/codex/config-toml-atomic-write.ts +++ b/src/main/codex/config-toml-atomic-write.ts @@ -10,7 +10,7 @@ import { } from 'node:fs' import { dirname, join } from 'node:path' import { renameFileWithWindowsRetry } from '../codex-accounts/fs-utils' -import { writeRollingFileBackup } from '../rolling-file-backup' +import { writeRollingFileBackup } from '../filesystem/rolling-file-backup' export function writeTomlConfigAtomically(configPath: string, contents: string): void { const writePath = resolveTomlWritePath(configPath) diff --git a/src/main/computer/sidecar-client.ts b/src/main/computer/sidecar-client.ts index 7cadfcf5911..bfddc1766db 100644 --- a/src/main/computer/sidecar-client.ts +++ b/src/main/computer/sidecar-client.ts @@ -14,7 +14,7 @@ import { import { isComputerSidecarDiagnostic, logComputerDiagnostic } from './computer-sidecar-diagnostics' import { validateComputerSidecarPasteText } from './computer-sidecar-paste-validation' import { RuntimeClientError } from './runtime-client-error' -import { getForkedChildEntryPath } from '../forked-child-entry-path' +import { getForkedChildEntryPath } from '../worker-threads/forked-child-entry-path' // Bundled beside orcad.js on servers and under out/main on desktop. export const COMPUTER_SIDECAR_ENTRY_FILENAME = 'computer-sidecar.js' diff --git a/src/main/import-source-validation.ts b/src/main/configuration-import/import-source-validation.ts similarity index 100% rename from src/main/import-source-validation.ts rename to src/main/configuration-import/import-source-validation.ts diff --git a/src/main/credential-file-protection.ts b/src/main/credentials/credential-file-protection.ts similarity index 92% rename from src/main/credential-file-protection.ts rename to src/main/credentials/credential-file-protection.ts index d5799ce52fd..7b1cba9d7d4 100644 --- a/src/main/credential-file-protection.ts +++ b/src/main/credentials/credential-file-protection.ts @@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'node:fs' import { classifyUnenvelopedCredential, type SecretAtRestProtection -} from '../shared/secret-at-rest-protection' +} from '../../shared/secret-at-rest-protection' /** Classify unenveloped token/ciphertext bytes without decrypting or prompting for the keychain. */ export function readCredentialFileProtection(path: string): SecretAtRestProtection | null { diff --git a/src/main/integration-credential-file.ts b/src/main/credentials/integration-credential-file.ts similarity index 95% rename from src/main/integration-credential-file.ts rename to src/main/credentials/integration-credential-file.ts index 2d424cf7574..56c3755cc90 100644 --- a/src/main/integration-credential-file.ts +++ b/src/main/credentials/integration-credential-file.ts @@ -9,13 +9,13 @@ import { unlinkSync, writeSync } from 'node:fs' -import { getSecretStore } from '../shared/secret-store' -import { fsyncFileSync } from '../shared/secure-file' -import { writeRestrictedWindowsFile } from '../shared/secure-path-windows-acl' +import { getSecretStore } from '../../shared/secret-store' +import { fsyncFileSync } from '../../shared/secure-file' +import { writeRestrictedWindowsFile } from '../../shared/secure-path-windows-acl' import { credentialDecryptionMessage, type IntegrationCredentialService -} from '../shared/integration-credential-errors' +} from '../../shared/integration-credential-errors' // Empty files mean no saved credential; keep status consistent with token reads. export function credentialFileHasContent(path: string): boolean { diff --git a/src/main/integration-state-file-cache.test.ts b/src/main/credentials/integration-state-file-cache.test.ts similarity index 100% rename from src/main/integration-state-file-cache.test.ts rename to src/main/credentials/integration-state-file-cache.test.ts diff --git a/src/main/integration-state-file-cache.ts b/src/main/credentials/integration-state-file-cache.ts similarity index 93% rename from src/main/integration-state-file-cache.ts rename to src/main/credentials/integration-state-file-cache.ts index 9a735221410..ade024c7a96 100644 --- a/src/main/integration-state-file-cache.ts +++ b/src/main/credentials/integration-state-file-cache.ts @@ -1,5 +1,5 @@ import { statSync } from 'node:fs' -import { fileStatSignature } from './file-stat-signature' +import { fileStatSignature } from '../filesystem/file-stat-signature' export type IntegrationStateFileCache = { get(): T diff --git a/src/main/integration-token-file-cache.test.ts b/src/main/credentials/integration-token-file-cache.test.ts similarity index 98% rename from src/main/integration-token-file-cache.test.ts rename to src/main/credentials/integration-token-file-cache.test.ts index c6b2390503a..3707dcae02b 100644 --- a/src/main/integration-token-file-cache.test.ts +++ b/src/main/credentials/integration-token-file-cache.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { setSecretStore } from '../shared/secret-store' +import { setSecretStore } from '../../shared/secret-store' import { createIntegrationTokenFileCache } from './integration-token-file-cache' let directory = '' diff --git a/src/main/integration-token-file-cache.ts b/src/main/credentials/integration-token-file-cache.ts similarity index 95% rename from src/main/integration-token-file-cache.ts rename to src/main/credentials/integration-token-file-cache.ts index 2bcfbc974f8..b625afdbd1a 100644 --- a/src/main/integration-token-file-cache.ts +++ b/src/main/credentials/integration-token-file-cache.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs' -import type { IntegrationCredentialService } from '../shared/integration-credential-errors' +import type { IntegrationCredentialService } from '../../shared/integration-credential-errors' import { CredentialDecryptionError, credentialFileHasContent, diff --git a/src/main/protected-secret-persistence-concurrency.test.ts b/src/main/credentials/protected-secret-persistence-concurrency.test.ts similarity index 99% rename from src/main/protected-secret-persistence-concurrency.test.ts rename to src/main/credentials/protected-secret-persistence-concurrency.test.ts index 1b429cdaa8b..c4a1bbc1c68 100644 --- a/src/main/protected-secret-persistence-concurrency.test.ts +++ b/src/main/credentials/protected-secret-persistence-concurrency.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { setSecretStore } from '../shared/secret-store' +import { setSecretStore } from '../../shared/secret-store' import { ProtectedSecretPersistence, type ProtectedSecretRetentionUpdate diff --git a/src/main/protected-secret-persistence.test.ts b/src/main/credentials/protected-secret-persistence.test.ts similarity index 98% rename from src/main/protected-secret-persistence.test.ts rename to src/main/credentials/protected-secret-persistence.test.ts index c0689dd004d..7a717a0a103 100644 --- a/src/main/protected-secret-persistence.test.ts +++ b/src/main/credentials/protected-secret-persistence.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from 'vitest' -import { setSecretStore } from '../shared/secret-store' +import { setSecretStore } from '../../shared/secret-store' const cipherState = { available: true } diff --git a/src/main/protected-secret-persistence.ts b/src/main/credentials/protected-secret-persistence.ts similarity index 99% rename from src/main/protected-secret-persistence.ts rename to src/main/credentials/protected-secret-persistence.ts index c130bfc652b..486ead6e76b 100644 --- a/src/main/protected-secret-persistence.ts +++ b/src/main/credentials/protected-secret-persistence.ts @@ -1,4 +1,4 @@ -import { getSecretStore } from '../shared/secret-store' +import { getSecretStore } from '../../shared/secret-store' export const PROTECTED_SECRET_SLOT = { opencodeSessionCookie: 'settings.opencodeSessionCookie', diff --git a/src/main/daemon/automatic-work-run-marker-store.ts b/src/main/daemon/automatic-work-run-marker-store.ts index bc8b9810ff9..9766756798e 100644 --- a/src/main/daemon/automatic-work-run-marker-store.ts +++ b/src/main/daemon/automatic-work-run-marker-store.ts @@ -1,6 +1,6 @@ import { readFileSync } from 'node:fs' import { uptime } from 'node:os' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' import type { AutomaticWorkMode } from '../../shared/host-spawn-admission' import { decideStartupAutomaticWorkMode, diff --git a/src/main/daemon/daemon-host-file-hash-cache.ts b/src/main/daemon/daemon-host-file-hash-cache.ts index 3808aed3116..d6712977cbf 100644 --- a/src/main/daemon/daemon-host-file-hash-cache.ts +++ b/src/main/daemon/daemon-host-file-hash-cache.ts @@ -1,8 +1,8 @@ import { createHash } from 'node:crypto' import { readFileSync, statSync } from 'node:fs' -import { fileStatSignature } from '../file-stat-signature' +import { fileStatSignature } from '../filesystem/file-stat-signature' -export { fileStatSignature as daemonHostFileStatSignature } from '../file-stat-signature' +export { fileStatSignature as daemonHostFileStatSignature } from '../filesystem/file-stat-signature' // Metadata validation avoids rereading unchanged daemon code on the main thread. const cachedHashes = new Map() diff --git a/src/main/daemon/history-manager.test.ts b/src/main/daemon/history-manager.test.ts index 9f51452aea2..6126739310f 100644 --- a/src/main/daemon/history-manager.test.ts +++ b/src/main/daemon/history-manager.test.ts @@ -12,7 +12,7 @@ import { writeFileSync } from 'node:fs' import { HistoryManager } from './history-manager' -import * as hostTreeRemoval from '../host-tree-removal' +import * as hostTreeRemoval from '../filesystem/host-tree-removal' import { flushPendingSessionTreeRemovals } from './terminal-history-session-tombstone' import type { TerminalSnapshot, TerminalModes } from './types' import { getHistorySessionDirName } from './history-paths' diff --git a/src/main/daemon/legacy-restore-records.ts b/src/main/daemon/legacy-restore-records.ts index 6ea099e5edd..637b6b0d3ab 100644 --- a/src/main/daemon/legacy-restore-records.ts +++ b/src/main/daemon/legacy-restore-records.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' import type { LegacyRestoreRecord } from '../../shared/host-spawn-admission' import { DEFAULT_MAX_HOST_TERMINALS } from './host-terminal-ledger' diff --git a/src/main/daemon/macos-daemon-bundle-retirement.ts b/src/main/daemon/macos-daemon-bundle-retirement.ts index 7641785b2e0..ad98de8341b 100644 --- a/src/main/daemon/macos-daemon-bundle-retirement.ts +++ b/src/main/daemon/macos-daemon-bundle-retirement.ts @@ -1,7 +1,7 @@ import { readdir } from 'node:fs/promises' import { join } from 'node:path' import { runProcess } from '@orca/process-host' -import { rm } from '../asar-transparent-fs' +import { rm } from '../filesystem/asar-transparent-fs' import { macDaemonCopyBundlePath } from './macos-daemon-bundle' const LSREGISTER = diff --git a/src/main/daemon/macos-daemon-bundle.ts b/src/main/daemon/macos-daemon-bundle.ts index 83238e85984..a532a483839 100644 --- a/src/main/daemon/macos-daemon-bundle.ts +++ b/src/main/daemon/macos-daemon-bundle.ts @@ -2,8 +2,8 @@ import { existsSync } from 'node:fs' import { mkdir, mkdtemp, realpath, rename } from 'node:fs/promises' import { dirname, isAbsolute, join, resolve } from 'node:path' import { runProcess } from '@orca/process-host' -import { cloneMacTree } from '../macos-tree-clone' -import { rm } from '../asar-transparent-fs' +import { cloneMacTree } from '../filesystem/macos-tree-clone' +import { rm } from '../filesystem/asar-transparent-fs' import { ensurePrivateDir } from './daemon-private-file-modes' import { inspectMacProcessCodeIdentity } from './daemon-mac-code-identity' diff --git a/src/main/daemon/macos-daemon-launchd.ts b/src/main/daemon/macos-daemon-launchd.ts index 16eba1d7c94..31e7566bc56 100644 --- a/src/main/daemon/macos-daemon-launchd.ts +++ b/src/main/daemon/macos-daemon-launchd.ts @@ -5,7 +5,7 @@ import { getAppEnvironment } from '../../shared/app-environment' import { LOCAL_BUILD_COMPATIBILITY_CONTRACT } from '../../shared/local-build-compatibility-contract' import { NODE_RUNTIME_DARWIN_MINIMUM_OS } from '../../shared/node-runtime-pin' import { runProcess } from '@orca/process-host' -import { rm } from '../asar-transparent-fs' +import { rm } from '../filesystem/asar-transparent-fs' import { compareDottedVersions } from '../orcad/native-host-abi' import { DaemonClient } from './client' import { DaemonEndpointOwnershipError, holdDaemonAdoptionLease } from './daemon-endpoint-adoption' diff --git a/src/main/daemon/terminal-history-session-tombstone-retry.test.ts b/src/main/daemon/terminal-history-session-tombstone-retry.test.ts index f8a00603d39..650359d5bd7 100644 --- a/src/main/daemon/terminal-history-session-tombstone-retry.test.ts +++ b/src/main/daemon/terminal-history-session-tombstone-retry.test.ts @@ -7,7 +7,7 @@ const { removeHostTreeMock } = vi.hoisted(() => ({ removeHostTreeMock: vi.fn<(dir: string) => Promise>() })) -vi.mock('../host-tree-removal', () => ({ +vi.mock('../filesystem/host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) diff --git a/src/main/daemon/terminal-history-session-tombstone.ts b/src/main/daemon/terminal-history-session-tombstone.ts index 84feb11887e..6cd6155a034 100644 --- a/src/main/daemon/terminal-history-session-tombstone.ts +++ b/src/main/daemon/terminal-history-session-tombstone.ts @@ -3,7 +3,7 @@ import { randomUUID } from 'node:crypto' import { existsSync, readdirSync, renameSync } from 'node:fs' import { join } from 'node:path' -import { removeHostTree } from '../host-tree-removal' +import { removeHostTree } from '../filesystem/host-tree-removal' import { ensurePrivateDir } from './daemon-private-file-modes' import { getHistorySessionDirName } from './history-paths' import { getTerminalHistoryQuarantineOwnerDir } from './terminal-history-recovery-quarantine' diff --git a/src/main/asar-transparent-fs.ts b/src/main/filesystem/asar-transparent-fs.ts similarity index 100% rename from src/main/asar-transparent-fs.ts rename to src/main/filesystem/asar-transparent-fs.ts diff --git a/src/main/destination-serialized-local-rename.test.ts b/src/main/filesystem/destination-serialized-local-rename.test.ts similarity index 97% rename from src/main/destination-serialized-local-rename.test.ts rename to src/main/filesystem/destination-serialized-local-rename.test.ts index 1169dfcd898..27aafde4cd9 100644 --- a/src/main/destination-serialized-local-rename.test.ts +++ b/src/main/filesystem/destination-serialized-local-rename.test.ts @@ -28,8 +28,8 @@ vi.mock('fs/promises', async () => { }) import { renameLocalPathSerializedByDestination } from './destination-serialized-local-rename' -import { registerFilesystemMutationHandlers } from './ipc/filesystem/filesystem-mutations' -import { RuntimeFileCommands } from './runtime/orca-runtime-files' +import { registerFilesystemMutationHandlers } from '../ipc/filesystem/filesystem-mutations' +import { RuntimeFileCommands } from '../runtime/orca-runtime-files' const REPO_PATH = path.resolve('/workspace/repo') const store = { diff --git a/src/main/destination-serialized-local-rename.ts b/src/main/filesystem/destination-serialized-local-rename.ts similarity index 91% rename from src/main/destination-serialized-local-rename.ts rename to src/main/filesystem/destination-serialized-local-rename.ts index f605815ed56..076ed784770 100644 --- a/src/main/destination-serialized-local-rename.ts +++ b/src/main/filesystem/destination-serialized-local-rename.ts @@ -1,7 +1,7 @@ import { realpath, rename } from 'node:fs/promises' import { dirname, normalize } from 'node:path' -import { assertNoClobberRenameDestinationAvailable } from '../shared/filesystem-rename-collision' -import { windowsFsPath } from './wsl/wsl-unc-drive-fs-path' +import { assertNoClobberRenameDestinationAvailable } from '../../shared/filesystem-rename-collision' +import { windowsFsPath } from '../wsl/wsl-unc-drive-fs-path' // Parent-scoped serialization covers Unicode aliases without guessing filesystem collation. const pendingRenamesByParent = new Map>() diff --git a/src/main/durable-file-write-syscall-proof.test.ts b/src/main/filesystem/durable-file-write-syscall-proof.test.ts similarity index 100% rename from src/main/durable-file-write-syscall-proof.test.ts rename to src/main/filesystem/durable-file-write-syscall-proof.test.ts diff --git a/src/main/durable-file-write.test.ts b/src/main/filesystem/durable-file-write.test.ts similarity index 100% rename from src/main/durable-file-write.test.ts rename to src/main/filesystem/durable-file-write.test.ts diff --git a/src/main/durable-file-write.ts b/src/main/filesystem/durable-file-write.ts similarity index 97% rename from src/main/durable-file-write.ts rename to src/main/filesystem/durable-file-write.ts index 047e7df3263..f8ebfeb7dad 100644 --- a/src/main/durable-file-write.ts +++ b/src/main/filesystem/durable-file-write.ts @@ -3,11 +3,11 @@ import { closeSync, fsyncSync, openSync, rmSync, writeFileSync } from 'node:fs' import { open, readdir, rm, stat } from 'node:fs/promises' import { basename, dirname, join } from 'node:path' +import { publishFileWithoutOverwrite } from '../codex-accounts/fs-utils' import { - publishFileWithoutOverwrite, renameFileWithWindowsRetry, renameFileWithWindowsRetryAsync -} from './codex-accounts/fs-utils' +} from '../../shared/windows-retry-file-operations' /** Persist directory changes where supported; Windows and some filesystems reject directory fsync. */ async function syncDirectory(directory: string): Promise { diff --git a/src/main/file-stat-signature.ts b/src/main/filesystem/file-stat-signature.ts similarity index 100% rename from src/main/file-stat-signature.ts rename to src/main/filesystem/file-stat-signature.ts diff --git a/src/main/file-transaction-lock.test.ts b/src/main/filesystem/file-transaction-lock.test.ts similarity index 100% rename from src/main/file-transaction-lock.test.ts rename to src/main/filesystem/file-transaction-lock.test.ts diff --git a/src/main/file-transaction-lock.ts b/src/main/filesystem/file-transaction-lock.ts similarity index 100% rename from src/main/file-transaction-lock.ts rename to src/main/filesystem/file-transaction-lock.ts diff --git a/src/main/home-path-expansion.ts b/src/main/filesystem/home-path-expansion.ts similarity index 100% rename from src/main/home-path-expansion.ts rename to src/main/filesystem/home-path-expansion.ts diff --git a/src/main/host-checkout-removal.test.ts b/src/main/filesystem/host-checkout-removal.test.ts similarity index 100% rename from src/main/host-checkout-removal.test.ts rename to src/main/filesystem/host-checkout-removal.test.ts diff --git a/src/main/host-tree-removal-asar.electron.test.ts b/src/main/filesystem/host-tree-removal-asar.electron.test.ts similarity index 96% rename from src/main/host-tree-removal-asar.electron.test.ts rename to src/main/filesystem/host-tree-removal-asar.electron.test.ts index 647c354c1fb..65988e1dc0d 100644 --- a/src/main/host-tree-removal-asar.electron.test.ts +++ b/src/main/filesystem/host-tree-removal-asar.electron.test.ts @@ -11,7 +11,7 @@ import { createRequire, isBuiltin } from 'node:module' import { tmpdir } from 'node:os' import { dirname, join } from 'node:path' import { afterAll, describe, expect, it } from 'vitest' -import { removeTreeSync } from '../shared/windows-transient-lock-removal' +import { removeTreeSync } from '../../shared/windows-transient-lock-removal' /** Electron’s asar fs shim makes recursive removal fail; plain Node cannot reproduce it. */ const requireFromTest = createRequire(import.meta.url) @@ -67,7 +67,7 @@ async function bundleHostTreeRemoval(outFile: string): Promise { minify: false, ssr: true, rollupOptions: { - input: 'src/main/host-tree-removal.ts', + input: 'src/main/filesystem/host-tree-removal.ts', // Match production externals: externalizing original-fs here could hide a bundling regression. output: { format: 'cjs' }, external: (id: string) => isBuiltin(id) || id === 'electron' || id.startsWith('electron/') diff --git a/src/main/host-tree-removal.ts b/src/main/filesystem/host-tree-removal.ts similarity index 91% rename from src/main/host-tree-removal.ts rename to src/main/filesystem/host-tree-removal.ts index 54f7776bcd1..563bee871cc 100644 --- a/src/main/host-tree-removal.ts +++ b/src/main/filesystem/host-tree-removal.ts @@ -1,13 +1,13 @@ // Host deletion needs bounded Windows lock retries and unpatched fs for Electron’s .asar handling. -import { getErrorCode } from './git/worktree-operation-options' -import { unregisteredFolderRefusal } from '../shared/worktree/removal' +import { getErrorCode } from '../git/worktree-operation-options' +import { unregisteredFolderRefusal } from '../../shared/worktree/removal' import { join, win32 } from 'node:path' import { lstat, readdir, rm, rmdir, unlink } from './asar-transparent-fs' -import { isWindowsAbsolutePathLike } from '../shared/cross-platform-path' -import { isWslUncPath } from '../shared/wsl-paths' -import { stripWin32LongPathPrefix } from '../shared/windows-path-access' -import { removeTree } from '../shared/windows-transient-lock-removal' +import { isWindowsAbsolutePathLike } from '../../shared/cross-platform-path' +import { isWslUncPath } from '../../shared/wsl-paths' +import { stripWin32LongPathPrefix } from '../../shared/windows-path-access' +import { removeTree } from '../../shared/windows-transient-lock-removal' /** Convert a native host filesystem path to the Win32 long-path namespace. */ export function toHostFilesystemPath(targetPath: string): string { diff --git a/src/main/macos-tree-clone.test.ts b/src/main/filesystem/macos-tree-clone.test.ts similarity index 100% rename from src/main/macos-tree-clone.test.ts rename to src/main/filesystem/macos-tree-clone.test.ts diff --git a/src/main/macos-tree-clone.ts b/src/main/filesystem/macos-tree-clone.ts similarity index 100% rename from src/main/macos-tree-clone.ts rename to src/main/filesystem/macos-tree-clone.ts diff --git a/src/main/rolling-file-backup.ts b/src/main/filesystem/rolling-file-backup.ts similarity index 87% rename from src/main/rolling-file-backup.ts rename to src/main/filesystem/rolling-file-backup.ts index 9817e3fd362..18b242f4ce7 100644 --- a/src/main/rolling-file-backup.ts +++ b/src/main/filesystem/rolling-file-backup.ts @@ -1,6 +1,9 @@ import { randomUUID } from 'node:crypto' import { lstatSync, rmSync } from 'node:fs' -import { copyFileWithWindowsRetry, renameFileWithWindowsRetry } from './codex-accounts/fs-utils' +import { + copyFileWithWindowsRetry, + renameFileWithWindowsRetry +} from '../../shared/windows-retry-file-operations' export function writeRollingFileBackup(sourcePath: string, backupPath: string): void { try { diff --git a/src/main/sidecar-snapshot-file.test.ts b/src/main/filesystem/sidecar-snapshot-file.test.ts similarity index 100% rename from src/main/sidecar-snapshot-file.test.ts rename to src/main/filesystem/sidecar-snapshot-file.test.ts diff --git a/src/main/sidecar-snapshot-file.ts b/src/main/filesystem/sidecar-snapshot-file.ts similarity index 100% rename from src/main/sidecar-snapshot-file.ts rename to src/main/filesystem/sidecar-snapshot-file.ts diff --git a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client-worker-lifecycle.test.ts b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client-worker-lifecycle.test.ts index c2d6c856a47..bc640744b95 100644 --- a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client-worker-lifecycle.test.ts +++ b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client-worker-lifecycle.test.ts @@ -1,7 +1,7 @@ import { EventEmitter } from 'node:events' import { Worker } from 'node:worker_threads' import { afterEach, describe, expect, it } from 'vitest' -import type { WorkerRequestTransport } from '../lazy-worker-thread-host' +import type { WorkerRequestTransport } from '../worker-threads/worker-thread-transport' import { ForeignSqliteReaderClient } from './foreign-sqlite-reader-client' const FAILURE = { status: 'error', error: 'Unable to read the Cursor desktop login' } diff --git a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.test.ts b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.test.ts index 668fdf20282..d08c911c0f9 100644 --- a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.test.ts +++ b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from 'vitest' -import type { WorkerRequestTransport } from '../lazy-worker-thread-host' +import type { WorkerRequestTransport } from '../worker-threads/worker-thread-transport' import { ForeignSqliteReaderClient, ForeignSqliteReaderLane } from './foreign-sqlite-reader-client' import type { ForeignSqliteReaderRequest } from './foreign-sqlite-reader-protocol' diff --git a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.ts b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.ts index 223c474b1c7..72ff491f825 100644 --- a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.ts +++ b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.ts @@ -1,5 +1,5 @@ -import type { WorkerThreadFactory } from '../lazy-worker-thread-host' -import { WorkerThreadRequestQueue } from '../worker-thread-request-queue' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' +import { WorkerThreadRequestQueue } from '../worker-threads/worker-thread-request-queue' import { cursorProfileReadFailure, parseCursorProfileReadResult, diff --git a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry-path.ts b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry-path.ts index 8e4ed7499be..8b015759a29 100644 --- a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry-path.ts +++ b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry-path.ts @@ -1,6 +1,9 @@ import { existsSync } from 'node:fs' import { join } from 'node:path' -import { resolveWorkerThreadEntryPath, type WorkerEntryLayout } from '../worker-thread-entry-path' +import { + resolveWorkerThreadEntryPath, + type WorkerEntryLayout +} from '../worker-threads/worker-thread-entry-path' // Electron-free: the OpenCode scanner reaches this from plain-Node processes too. diff --git a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-spawn.ts b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-spawn.ts index 7ad4dd43427..0b1d5984d27 100644 --- a/src/main/foreign-sqlite-readers/foreign-sqlite-reader-spawn.ts +++ b/src/main/foreign-sqlite-readers/foreign-sqlite-reader-spawn.ts @@ -1,7 +1,7 @@ import { existsSync } from 'node:fs' import { stat } from 'node:fs/promises' import { Worker } from 'node:worker_threads' -import { currentWorkerEntryLayout } from '../worker-thread-entry-path' +import { currentWorkerEntryLayout } from '../worker-threads/worker-thread-entry-path' import type { CursorDesktopProfileReadResult } from './cursor-profile-result' import { ForeignSqliteReaderClient } from './foreign-sqlite-reader-client' import { resolveForeignSqliteReaderEntryPath } from './foreign-sqlite-reader-entry-path' diff --git a/src/main/git/windows-worktree-removal.ts b/src/main/git/windows-worktree-removal.ts index 6159ec044bc..6cdc02b2787 100644 --- a/src/main/git/windows-worktree-removal.ts +++ b/src/main/git/windows-worktree-removal.ts @@ -1,7 +1,7 @@ import { join, resolve } from 'node:path' import { readFile } from 'node:fs/promises' -import { lstat, readdir } from '../asar-transparent-fs' -import { removeHostCheckout } from '../host-tree-removal' +import { lstat, readdir } from '../filesystem/asar-transparent-fs' +import { removeHostCheckout } from '../filesystem/host-tree-removal' import { parseWslPath } from '../wsl' import { CLIENT_REMOVAL_HOME } from '../worktree-removal-home-guard' import { diff --git a/src/main/git/worktree-preparation-add.ts b/src/main/git/worktree-preparation-add.ts index bcbeb4dae8f..3bc606fd893 100644 --- a/src/main/git/worktree-preparation-add.ts +++ b/src/main/git/worktree-preparation-add.ts @@ -2,7 +2,7 @@ import { lstat } from 'node:fs/promises' import { isUnsupportedWorktreeAddLockReasonError } from '../../shared/git-worktree-command-capabilities' import { resolveWorktreeHostPath } from '../../shared/git-metadata-path' import { windowsLongPathGitArgs } from '../../shared/windows-long-path-git-args' -import { toHostFilesystemPath } from '../host-tree-removal' +import { toHostFilesystemPath } from '../filesystem/host-tree-removal' import { withLocalGitCapabilityCacheForExecution } from './git-capability-state' import { gitExecFileAsync } from './runner' import { diff --git a/src/main/git/worktree-preparation-discard.ts b/src/main/git/worktree-preparation-discard.ts index 902f098fc86..0af4524b0c3 100644 --- a/src/main/git/worktree-preparation-discard.ts +++ b/src/main/git/worktree-preparation-discard.ts @@ -4,7 +4,7 @@ import { waitForPromiseWithSignal } from '../../shared/abort-signal-reason' import { resolveWorktreeHostPath } from '../../shared/git-metadata-path' import { findLinkedWorktreeGitDirectory } from '../../shared/git-worktree-admin' import { windowsLongPathGitArgs } from '../../shared/windows-long-path-git-args' -import { toHostFilesystemPath } from '../host-tree-removal' +import { toHostFilesystemPath } from '../filesystem/host-tree-removal' import { gitExecFileAsync } from './runner' import { getErrorCode, diff --git a/src/main/git/worktree-preparation-lock.test.ts b/src/main/git/worktree-preparation-lock.test.ts index 4bb2b0cadd8..843e0e74059 100644 --- a/src/main/git/worktree-preparation-lock.test.ts +++ b/src/main/git/worktree-preparation-lock.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { toHostFilesystemPath } from '../host-tree-removal' +import { toHostFilesystemPath } from '../filesystem/host-tree-removal' import type * as FilePromises from 'node:fs/promises' const mocks = vi.hoisted(() => ({ diff --git a/src/main/git/worktree-preparation-lock.ts b/src/main/git/worktree-preparation-lock.ts index d0ea67935a7..6c93e325a5a 100644 --- a/src/main/git/worktree-preparation-lock.ts +++ b/src/main/git/worktree-preparation-lock.ts @@ -2,7 +2,7 @@ import { readFile, unlink, writeFile } from 'node:fs/promises' import { posix, win32 } from 'node:path' import { isWindowsAbsolutePathLike } from '../../shared/cross-platform-path' import { resolveGitMetadataPath, type GitMetadataPathOptions } from '../../shared/git-metadata-path' -import { toHostFilesystemPath } from '../host-tree-removal' +import { toHostFilesystemPath } from '../filesystem/host-tree-removal' import { gitExecFileAsync } from './runner' import { getErrorCode, diff --git a/src/main/git/worktree-removal-real-git.test.ts b/src/main/git/worktree-removal-real-git.test.ts index 3d134be5bf2..3e58311b1d7 100644 --- a/src/main/git/worktree-removal-real-git.test.ts +++ b/src/main/git/worktree-removal-real-git.test.ts @@ -7,7 +7,7 @@ import { join } from 'node:path' import { performance } from 'node:perf_hooks' import { promisify } from 'node:util' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import * as nativeFs from '../asar-transparent-fs' +import * as nativeFs from '../filesystem/asar-transparent-fs' import * as diskFs from 'node:fs/promises' import * as runner from './runner' import { diff --git a/src/main/git/worktree-removal.ts b/src/main/git/worktree-removal.ts index 2a6c9de2925..97bdb811a48 100644 --- a/src/main/git/worktree-removal.ts +++ b/src/main/git/worktree-removal.ts @@ -3,7 +3,7 @@ import { pruneGitWorktrees } from './worktree-prune-guard' import type { RemoveWorktreeResult } from '../../shared/worktree/create-types' import { assertWorktreeUnlockedForRemoval } from '../../shared/worktree/removal' import { windowsLongPathGitArgs } from '../../shared/windows-long-path-git-args' -import { removeHostTree } from '../host-tree-removal' +import { removeHostTree } from '../filesystem/host-tree-removal' import { withSpan } from '../observability/tracer' import { parseWslPath } from '../wsl' import { gitExecFileAsync } from './runner' diff --git a/src/main/github/conflict-summary-cache.ts b/src/main/github/conflict-summary-cache.ts index 02ac3214906..38da459528b 100644 --- a/src/main/github/conflict-summary-cache.ts +++ b/src/main/github/conflict-summary-cache.ts @@ -1,5 +1,5 @@ import type { PRConflictSummary } from '../../shared/github/pull-request-types' -import { dedupeInFlightRun } from '../in-flight-run-dedupe' +import { dedupeInFlightRun } from '../runtime/concurrency/in-flight-run-dedupe' // Throttle even manual refreshes to one base fetch per minute; GitHub recomputes mergeability asynchronously. export const CONFLICT_SUMMARY_BASE_FETCH_WINDOW_MS = 60_000 diff --git a/src/main/ipc/command-path-directory-worker-client.ts b/src/main/ipc/command-path-directory-worker-client.ts index 63ad146799d..c01373f05d9 100644 --- a/src/main/ipc/command-path-directory-worker-client.ts +++ b/src/main/ipc/command-path-directory-worker-client.ts @@ -1,7 +1,11 @@ import { existsSync } from 'node:fs' import { Worker } from 'node:worker_threads' -import { LazyWorkerThreadHost, type WorkerThreadFactory } from '../lazy-worker-thread-host' -import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath } from '../worker-thread-entry-path' +import { LazyWorkerThreadHost } from '../worker-threads/lazy-worker-thread-host' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' +import { + currentWorkerEntryLayout, + resolveWorkerThreadEntryPath +} from '../worker-threads/worker-thread-entry-path' import type { DetectionDirectoryRequest, DetectionDirectoryResponse diff --git a/src/main/ipc/filesystem/filesystem-download-handlers.ts b/src/main/ipc/filesystem/filesystem-download-handlers.ts index 15ef200f1d1..64fe3b7fa00 100644 --- a/src/main/ipc/filesystem/filesystem-download-handlers.ts +++ b/src/main/ipc/filesystem/filesystem-download-handlers.ts @@ -2,7 +2,7 @@ import { BrowserWindow, dialog, ipcMain } from 'electron' import { randomUUID } from 'node:crypto' import { open, writeFile } from 'node:fs/promises' import { SshHostNotServedError } from '../../providers/ssh-host-not-served-error' -import { sanitizeLocalDownloadFilename } from '../../local-download-filename' +import { sanitizeLocalDownloadFilename } from './local-download-filename' import { abortWhenRendererGone } from '../renderer-lifetime-abort' import type { FilesystemHandlerContext } from './filesystem-handler-context' import { diff --git a/src/main/ipc/filesystem/filesystem-mutations.ts b/src/main/ipc/filesystem/filesystem-mutations.ts index 7a7cb2199cc..1587c94b0aa 100644 --- a/src/main/ipc/filesystem/filesystem-mutations.ts +++ b/src/main/ipc/filesystem/filesystem-mutations.ts @@ -13,7 +13,7 @@ import { SshHostNotServedError } from '../../providers/ssh-host-not-served-error import { resolveLocalDroppedPathsForAgent } from '../dropped-path-resolution' import type { SshMutationExpectation } from '../../../shared/ssh-types' import { assertSshMutationExpectation } from '../../ssh/connection/ssh-connection-generation' -import { renameLocalPathSerializedByDestination } from '../../destination-serialized-local-rename' +import { renameLocalPathSerializedByDestination } from '../../filesystem/destination-serialized-local-rename' import { assertNotExists, rethrowWithUserMessage } from './filesystem-create-path-guards' import type { ImportItemResult, diff --git a/src/main/ipc/filesystem/local-disk-write-precondition.ts b/src/main/ipc/filesystem/local-disk-write-precondition.ts index 95c5b8f4888..ae048276a29 100644 --- a/src/main/ipc/filesystem/local-disk-write-precondition.ts +++ b/src/main/ipc/filesystem/local-disk-write-precondition.ts @@ -17,7 +17,7 @@ import { import { readlink, realpath, stat, writeFile } from 'node:fs/promises' import { basename, dirname, join, normalize, resolve } from 'node:path' import { runKeyedSerializedOperation } from '../../cli/keyed-promise-queue' -import { serializedParentDirectoryKey } from '../../destination-serialized-local-rename' +import { serializedParentDirectoryKey } from '../../filesystem/destination-serialized-local-rename' import { windowsFsPath } from '../../wsl/wsl-unc-drive-fs-path' import { assertLocalWriteTargetIsRegularFile, diff --git a/src/main/local-download-filename.ts b/src/main/ipc/filesystem/local-download-filename.ts similarity index 100% rename from src/main/local-download-filename.ts rename to src/main/ipc/filesystem/local-download-filename.ts diff --git a/src/main/ipc/filesystem/watcher-process/parcel-watcher-entry-path.ts b/src/main/ipc/filesystem/watcher-process/parcel-watcher-entry-path.ts index e5d5082f91b..fd77cc07673 100644 --- a/src/main/ipc/filesystem/watcher-process/parcel-watcher-entry-path.ts +++ b/src/main/ipc/filesystem/watcher-process/parcel-watcher-entry-path.ts @@ -3,7 +3,7 @@ import { getForkedChildEntryPath, resolveForkedChildEntryPath, resolveForkedChildEntryPathWithoutApp -} from '../../../forked-child-entry-path' +} from '../../../worker-threads/forked-child-entry-path' const WATCHER_ENTRY_FILENAME = 'parcel-watcher-process-entry.js' diff --git a/src/main/ipc/jira/issue-summary-generation.ts b/src/main/ipc/jira/issue-summary-generation.ts index 322dc597b90..07d1df0a864 100644 --- a/src/main/ipc/jira/issue-summary-generation.ts +++ b/src/main/ipc/jira/issue-summary-generation.ts @@ -9,7 +9,7 @@ import { cancelJiraIssueSummaryRequest, generateJiraIssueSummaryRequest } from '../../text-generation/jira-issue-summary-requests' -import { addFanoutListener } from '../../event-listener-fanout' +import { addFanoutListener } from '../../runtime/events/event-listener-fanout' export function registerJiraIssueSummaryGenerationHandlers( store: Pick, diff --git a/src/main/ipc/renderer-lifetime-abort.ts b/src/main/ipc/renderer-lifetime-abort.ts index de552274dd3..6be925c5cfd 100644 --- a/src/main/ipc/renderer-lifetime-abort.ts +++ b/src/main/ipc/renderer-lifetime-abort.ts @@ -1,4 +1,4 @@ -import { addFanoutListeners, type FanoutEventSource } from '../event-listener-fanout' +import { addFanoutListeners, type FanoutEventSource } from '../runtime/events/event-listener-fanout' export type RendererLifetimeSender = FanoutEventSource diff --git a/src/main/ipc/runtime-ssh-access-handlers.ts b/src/main/ipc/runtime-ssh-access-handlers.ts index 30d5502e30a..ffd24857a12 100644 --- a/src/main/ipc/runtime-ssh-access-handlers.ts +++ b/src/main/ipc/runtime-ssh-access-handlers.ts @@ -4,7 +4,7 @@ import { RuntimeSshAccessUnlinkRequestSchema } from '../../shared/runtime-ssh-access' import { linkRuntimeSshAccess, unlinkRuntimeSshAccess } from '../ssh/runtime-ssh-access' -import { addFanoutListener } from '../event-listener-fanout' +import { addFanoutListener } from '../runtime/events/event-listener-fanout' export function registerRuntimeSshAccessHandlers(options: { getUserDataPath: () => string diff --git a/src/main/ipc/worktrees-removal-recovery.test.ts b/src/main/ipc/worktrees-removal-recovery.test.ts index 45fcd245894..dfcdb711068 100644 --- a/src/main/ipc/worktrees-removal-recovery.test.ts +++ b/src/main/ipc/worktrees-removal-recovery.test.ts @@ -6,7 +6,7 @@ import * as gitRunner from '../git/runner' import { removeWorktree } from '../git/worktree' import { removeWorktree as removeNativeWorktree } from '../git/worktree-removal' import { readTranslatedWorktreeGraph } from '../git/worktree-list-reader' -import { toHostFilesystemPath } from '../host-tree-removal' +import { toHostFilesystemPath } from '../filesystem/host-tree-removal' import { removeTree } from '../../shared/windows-transient-lock-removal' import * as scopedRootsInvalidation from './registered-worktree-roots-scoped-invalidation' import * as authorizedRootsCache from './registered-worktree-roots-cache' diff --git a/src/main/jira/client.ts b/src/main/jira/client.ts index 9c673f3f301..6d54f5ce8fd 100644 --- a/src/main/jira/client.ts +++ b/src/main/jira/client.ts @@ -1,5 +1,5 @@ import { taskProviderFailure } from '../../shared/task-provider-failure' -import { CredentialDecryptionError } from '../integration-credential-file' +import { CredentialDecryptionError } from '../credentials/integration-credential-file' import type { JiraAuthType, JiraConnectArgs, diff --git a/src/main/jira/site-credential-store.ts b/src/main/jira/site-credential-store.ts index d72162ce1c7..47fda409e1a 100644 --- a/src/main/jira/site-credential-store.ts +++ b/src/main/jira/site-credential-store.ts @@ -1,13 +1,13 @@ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs' import { homedir } from 'node:os' import { join } from 'node:path' -import { writeEncryptedCredential } from '../integration-credential-file' -import { readCredentialFileProtection } from '../credential-file-protection' +import { writeEncryptedCredential } from '../credentials/integration-credential-file' +import { readCredentialFileProtection } from '../credentials/credential-file-protection' import type { SecretAtRestProtection } from '../../shared/secret-at-rest-protection' import type { JiraSite, JiraSiteSelection } from '../../shared/jira/jira-types' -import { createIntegrationStateFileCache } from '../integration-state-file-cache' +import { createIntegrationStateFileCache } from '../credentials/integration-state-file-cache' import { isJiraGatewayBaseUrl } from './gateway-base-url' -import { createIntegrationTokenFileCache } from '../integration-token-file-cache' +import { createIntegrationTokenFileCache } from '../credentials/integration-token-file-cache' export type JiraSiteFile = { version: 1 diff --git a/src/main/linear/client.ts b/src/main/linear/client.ts index 103087bd8b9..6656ebcdc25 100644 --- a/src/main/linear/client.ts +++ b/src/main/linear/client.ts @@ -25,7 +25,7 @@ import { saveWorkspaceToken, getWorkspaceTokenProtection } from './linear-token-store' -import { CredentialDecryptionError } from '../integration-credential-file' +import { CredentialDecryptionError } from '../credentials/integration-credential-file' import type { LinearConnectionStatus, LinearViewer, diff --git a/src/main/linear/linear-token-store.ts b/src/main/linear/linear-token-store.ts index cedf13f5f0f..e8e52a21979 100644 --- a/src/main/linear/linear-token-store.ts +++ b/src/main/linear/linear-token-store.ts @@ -1,5 +1,5 @@ import { unlinkSync } from 'node:fs' -import { writeEncryptedCredential } from '../integration-credential-file' +import { writeEncryptedCredential } from '../credentials/integration-credential-file' import { LEGACY_WORKSPACE_ID, ensureOrcaDir, @@ -23,7 +23,7 @@ import { workspaceTokenFileCache } from './linear-workspace-registry' import type { LinearWorkspace } from '../../shared/linear/workspace-types' -import { readCredentialFileProtection } from '../credential-file-protection' +import { readCredentialFileProtection } from '../credentials/credential-file-protection' import type { SecretAtRestProtection } from '../../shared/secret-at-rest-protection' export function saveWorkspaceToken(workspaceId: string, apiKey: string): void { diff --git a/src/main/linear/linear-workspace-registry.ts b/src/main/linear/linear-workspace-registry.ts index 1e95def7256..f4d4ec959b6 100644 --- a/src/main/linear/linear-workspace-registry.ts +++ b/src/main/linear/linear-workspace-registry.ts @@ -13,8 +13,8 @@ import { type LinearWorkspaceFile } from './linear-workspace-record' import type { LinearWorkspace } from '../../shared/linear/workspace-types' -import { createIntegrationStateFileCache } from '../integration-state-file-cache' -import { createIntegrationTokenFileCache } from '../integration-token-file-cache' +import { createIntegrationStateFileCache } from '../credentials/integration-state-file-cache' +import { createIntegrationTokenFileCache } from '../credentials/integration-token-file-cache' export const workspaceTokenFileCache = createIntegrationTokenFileCache({ service: 'Linear', diff --git a/src/main/local-worktree-filesystem.ts b/src/main/local-worktree-filesystem.ts index f66c2548648..6bfbcc3ed97 100644 --- a/src/main/local-worktree-filesystem.ts +++ b/src/main/local-worktree-filesystem.ts @@ -3,13 +3,13 @@ import { runProcess } from '@orca/process-host' import { lstat, stat, readFile, realpath } from 'node:fs/promises' import { buildWslExecArgs } from '../shared/wsl-login-shell-command' import { quotePosixShell } from '../shared/shell-argument-quoting' -import { removeHostTree } from './host-tree-removal' +import { removeHostTree } from './filesystem/host-tree-removal' import { toLinuxPath } from './wsl' import { resolveWslInteropSpawnCwd } from './wsl-interop-spawn-directory' import { describeWslProcessFailure } from './wsl/wsl-process-failure' import type { WorktreeProofAccess } from './worktree-orphan-gitdir-proof' -export { toHostFilesystemPath, toHostRemovalPath } from './host-tree-removal' +export { toHostFilesystemPath, toHostRemovalPath } from './filesystem/host-tree-removal' export type LocalWorktreeFilesystemOptions = { wslDistro?: string diff --git a/src/main/local-worktree-removal-recovery.test.ts b/src/main/local-worktree-removal-recovery.test.ts index b63c8cce37c..b8fc85e505e 100644 --- a/src/main/local-worktree-removal-recovery.test.ts +++ b/src/main/local-worktree-removal-recovery.test.ts @@ -17,7 +17,7 @@ vi.mock('./local-worktree-filesystem', () => ({ removeLocalWorktreePath: removeLocalWorktreePathMock })) -vi.mock('./asar-transparent-fs', () => ({ rm: hostRmMock })) +vi.mock('./filesystem/asar-transparent-fs', () => ({ rm: hostRmMock })) vi.mock('./git/worktree', () => ({ listWorktreesStrict: listWorktreesStrictMock diff --git a/src/main/managed-data-accounts/profile-removal.ts b/src/main/managed-data-accounts/profile-removal.ts index a944533f725..65778d1d8b1 100644 --- a/src/main/managed-data-accounts/profile-removal.ts +++ b/src/main/managed-data-accounts/profile-removal.ts @@ -2,7 +2,7 @@ import { existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync } fr import { readdir } from 'node:fs/promises' import { dirname, join } from 'node:path' import { z } from 'zod' -import { removeHostTree } from '../host-tree-removal' +import { removeHostTree } from '../filesystem/host-tree-removal' import type { ManagedDataAccountProvider, ManagedDataAccountsState diff --git a/src/main/native-chat/agent-session-journal/journal-checkpoint-owner.ts b/src/main/native-chat/agent-session-journal/journal-checkpoint-owner.ts index 6d0026f77b8..a801d8c8f30 100644 --- a/src/main/native-chat/agent-session-journal/journal-checkpoint-owner.ts +++ b/src/main/native-chat/agent-session-journal/journal-checkpoint-owner.ts @@ -1,7 +1,7 @@ import { setTimeout, clearTimeout } from 'node:timers' import { Worker } from 'node:worker_threads' import type Database from '../../sqlite/sync-database' -import type { WorkerRequestTransport } from '../../worker-thread-transport' +import type { WorkerRequestTransport } from '../../worker-threads/worker-thread-transport' import { journalCheckpointWorkerSource } from './journal-checkpoint-worker-source' import { JOURNAL_SIZE_LIMIT_BYTES } from './journal-database' diff --git a/src/main/orcad-migration-export-holds.test.ts b/src/main/orcad-migration-export-holds.test.ts index 294d40326e5..3ee29a4d68a 100644 --- a/src/main/orcad-migration-export-holds.test.ts +++ b/src/main/orcad-migration-export-holds.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultWorkspaceSession } from '../shared/constants' import type { WorkspaceSessionState } from '../shared/workspace-session-state-types' -import { writeFileDurableSync } from './durable-file-write' +import { writeFileDurableSync } from './filesystem/durable-file-write' import { getTerminalScrollbackSnapshotPath, readTerminalScrollbackStoredBytesSync, diff --git a/src/main/orcad/orcad-forked-child-paths.test.ts b/src/main/orcad/orcad-forked-child-paths.test.ts index a7093c54a33..cbc9bff0880 100644 --- a/src/main/orcad/orcad-forked-child-paths.test.ts +++ b/src/main/orcad/orcad-forked-child-paths.test.ts @@ -12,7 +12,7 @@ import { FOREIGN_SQLITE_READER_ENTRY_FILENAME, resolveForeignSqliteReaderEntryPath } from '../foreign-sqlite-readers/foreign-sqlite-reader-entry-path' -import { currentWorkerEntryLayout } from '../worker-thread-entry-path' +import { currentWorkerEntryLayout } from '../worker-threads/worker-thread-entry-path' import { installOrcadHostAdapters } from './orcad-host-adapters' // Compose real adapters and deployment paths: isolated resolver tests missed nonexistent fork targets. diff --git a/src/main/orcad/orcad-plaintext-credential-migration.test.ts b/src/main/orcad/orcad-plaintext-credential-migration.test.ts index 441db6d032e..658dec396bb 100644 --- a/src/main/orcad/orcad-plaintext-credential-migration.test.ts +++ b/src/main/orcad/orcad-plaintext-credential-migration.test.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import type { SecretStore } from '../../shared/secret-store' import { _resetSecretStoreForTests, setSecretStore } from '../../shared/secret-store' -import { readStoredCredentialToken } from '../integration-credential-file' +import { readStoredCredentialToken } from '../credentials/integration-credential-file' import { migratePlaintextCredentials } from './orcad-plaintext-credential-migration' import { orcadSecretStateFileName } from './orcad-secret-key-record' import { createOrcadSecretStore } from './orcad-secret-store' diff --git a/src/main/orcad/orcad-plaintext-credential-migration.ts b/src/main/orcad/orcad-plaintext-credential-migration.ts index 18d15e54018..7a3e6067f08 100644 --- a/src/main/orcad/orcad-plaintext-credential-migration.ts +++ b/src/main/orcad/orcad-plaintext-credential-migration.ts @@ -5,7 +5,7 @@ import { join } from 'node:path' import type { SecretStore } from '../../shared/secret-store' import { classifyUnenvelopedCredential } from '../../shared/secret-at-rest-protection' import { hardenExistingSecureFile, writeSecureFile } from '../../shared/secure-file' -import { writeCredentialFileAtomic } from '../integration-credential-file' +import { writeCredentialFileAtomic } from '../credentials/integration-credential-file' import { getWorkspaceTokenDir, getWorkspaceTokenPath, diff --git a/src/main/orcad/orcad-secret-key-resolution.ts b/src/main/orcad/orcad-secret-key-resolution.ts index 9e1e2ee5773..c15125474be 100644 --- a/src/main/orcad/orcad-secret-key-resolution.ts +++ b/src/main/orcad/orcad-secret-key-resolution.ts @@ -1,7 +1,7 @@ import { randomBytes } from 'node:crypto' import { join } from 'node:path' import process from 'node:process' -import { withFileTransactionLock } from '../file-transaction-lock' +import { withFileTransactionLock } from '../filesystem/file-transaction-lock' import { profileStateAccessMachineIdentity } from '../persistence/profile-state/profile-state-access-identity' import { resolveOrcadLegacyKeyringReader, diff --git a/src/main/orcad/orcad-secret-store.test.ts b/src/main/orcad/orcad-secret-store.test.ts index be7039ed846..f2366adbc29 100644 --- a/src/main/orcad/orcad-secret-store.test.ts +++ b/src/main/orcad/orcad-secret-store.test.ts @@ -17,7 +17,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { credentialDecryptionMessage } from '../../shared/integration-credential-errors' import { classifyUnenvelopedCredential } from '../../shared/secret-at-rest-protection' import { _resetSecretStoreForTests, setSecretStore } from '../../shared/secret-store' -import { readStoredCredentialToken, writeEncryptedCredential } from '../integration-credential-file' +import { + readStoredCredentialToken, + writeEncryptedCredential +} from '../credentials/integration-credential-file' import type { OrcadLegacyKeyLookup, OrcadLegacyKeyringReader } from './orcad-legacy-keyring-key' import { orcadSecretStateFileName } from './orcad-secret-key-record' import { diff --git a/src/main/persistence/applying-settings/settings-update-effects.ts b/src/main/persistence/applying-settings/settings-update-effects.ts index c96e98c6501..a8952620608 100644 --- a/src/main/persistence/applying-settings/settings-update-effects.ts +++ b/src/main/persistence/applying-settings/settings-update-effects.ts @@ -1,5 +1,5 @@ import type { GlobalSettings } from '../../../shared/global-settings-types' -import { PROTECTED_SECRET_SLOT } from '../../protected-secret-persistence' +import { PROTECTED_SECRET_SLOT } from '../../credentials/protected-secret-persistence' import { retireAtRestCommandSettings } from '../../native-chat/agent-session-wire/at-rest-command-context' import { createAgentModelCatalogSettingsExpiry } from '../../native-chat/agent-model-catalog/agent-model-catalog-account-expiry' import { agentModelCatalogStore } from '../../native-chat/agent-model-catalog/agent-model-catalog-store' diff --git a/src/main/persistence/applying-settings/settings-update.ts b/src/main/persistence/applying-settings/settings-update.ts index 9ae7ef8d042..7bf5ade195b 100644 --- a/src/main/persistence/applying-settings/settings-update.ts +++ b/src/main/persistence/applying-settings/settings-update.ts @@ -39,7 +39,7 @@ import { normalizeSourceControlAiSettings, projectSourceControlAiToLegacyCommitMessageAi } from '../../../shared/source-control-ai' -import type { ProtectedSecretPersistence } from '../../protected-secret-persistence' +import type { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' import { normalizeNotificationSettings } from './onboarding-normalization' import { retireLegacyInstructionsForClearedTextActionRecipes } from './source-control-settings' import { diff --git a/src/main/persistence/applying-settings/terminal-settings-migrations.ts b/src/main/persistence/applying-settings/terminal-settings-migrations.ts index bccce6f16ca..d593fe3457b 100644 --- a/src/main/persistence/applying-settings/terminal-settings-migrations.ts +++ b/src/main/persistence/applying-settings/terminal-settings-migrations.ts @@ -11,7 +11,7 @@ import { normalizeTuiAgentArgsRecord, normalizeTuiAgentEnvRecord } from '../../../shared/tui-agent-launch-defaults' -import { expandLeadingHomePath } from '../../home-path-expansion' +import { expandLeadingHomePath } from '../../filesystem/home-path-expansion' /** Unexpanded, a leading ~ resolves inside each repo and worktrees land in /~ (#34944). */ export function expandWorkspaceDirHome(settings: Partial): Partial { diff --git a/src/main/persistence/applying-settings/ui-state-update.ts b/src/main/persistence/applying-settings/ui-state-update.ts index 66966709b31..afa237db29f 100644 --- a/src/main/persistence/applying-settings/ui-state-update.ts +++ b/src/main/persistence/applying-settings/ui-state-update.ts @@ -30,7 +30,7 @@ import { persistedUIValuesEqual } from '../../../shared/persisted-ui-equality' import { PROTECTED_SECRET_SLOT, type ProtectedSecretPersistence -} from '../../protected-secret-persistence' +} from '../../credentials/protected-secret-persistence' import { normalizeGroupBy, normalizeProjectOrderBy, diff --git a/src/main/persistence/atomic-snapshot-writer.ts b/src/main/persistence/atomic-snapshot-writer.ts index 5e811f8d544..36084da2578 100644 --- a/src/main/persistence/atomic-snapshot-writer.ts +++ b/src/main/persistence/atomic-snapshot-writer.ts @@ -1,7 +1,10 @@ import { chmodSync, mkdirSync, renameSync, unlinkSync, writeFileSync } from 'node:fs' import { chmod, mkdir, rename, rm, writeFile } from 'node:fs/promises' import { dirname } from 'node:path' -import { durableWriteTempPath, removeStaleDurableWriteTempFiles } from '../durable-file-write' +import { + durableWriteTempPath, + removeStaleDurableWriteTempFiles +} from '../filesystem/durable-file-write' const STALE_WRITE_TEMP_AGE_MS = 24 * 60 * 60 * 1000 diff --git a/src/main/persistence/leasing-ssh-ptys/ssh-target-reassignment.ts b/src/main/persistence/leasing-ssh-ptys/ssh-target-reassignment.ts index 3558ed0aba9..94a2e84936a 100644 --- a/src/main/persistence/leasing-ssh-ptys/ssh-target-reassignment.ts +++ b/src/main/persistence/leasing-ssh-ptys/ssh-target-reassignment.ts @@ -6,8 +6,8 @@ import { migrateUiHostScopeSshTargetId, migrateWorkspaceSessionSshTargetId } from '../../ssh/targets/ssh-target-id-migration' -import type { ProtectedSecretPersistence } from '../../protected-secret-persistence' -import { sshPtyOwnerLeaseSecretSlot } from '../../protected-secret-persistence' +import type { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' +import { sshPtyOwnerLeaseSecretSlot } from '../../credentials/protected-secret-persistence' import { migrateRetirementNamespaceHostIdentity, sshHostIdentity diff --git a/src/main/persistence/leasing-ssh-ptys/ssh-target-state.ts b/src/main/persistence/leasing-ssh-ptys/ssh-target-state.ts index 9d97a86330a..f7a21997dcd 100644 --- a/src/main/persistence/leasing-ssh-ptys/ssh-target-state.ts +++ b/src/main/persistence/leasing-ssh-ptys/ssh-target-state.ts @@ -1,7 +1,7 @@ import type { PersistedState } from '../../../shared/persisted-state-types' import type { RemovedSshTargetTombstone, SshTarget } from '../../../shared/ssh-types' -import type { ProtectedSecretPersistence } from '../../protected-secret-persistence' -import { sshPtyOwnerLeaseSecretSlot } from '../../protected-secret-persistence' +import type { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' +import { sshPtyOwnerLeaseSecretSlot } from '../../credentials/protected-secret-persistence' import { MAX_REMOVED_SSH_TARGET_TOMBSTONES, capRemovedSshTargetTombstones, diff --git a/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.test.ts b/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.test.ts index 019330f25a1..f94c8a85821 100644 --- a/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.test.ts +++ b/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.test.ts @@ -8,7 +8,8 @@ const secretStore = vi.hoisted(() => ({ vi.mock('../../../shared/secret-store', () => ({ getSecretStore: () => secretStore })) -const { ProtectedSecretPersistence } = await import('../../protected-secret-persistence') +const { ProtectedSecretPersistence } = + await import('../../credentials/protected-secret-persistence') const { LEGACY_OPENCODE_GO_API_KEY_SLOT, migrateLegacyOpenCodeGoApiKey, diff --git a/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.ts b/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.ts index aae3491bc7c..6fedf5601e9 100644 --- a/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.ts +++ b/src/main/persistence/loading-store/legacy-opencode-go-api-key-migration.ts @@ -1,4 +1,4 @@ -import type { ProtectedSecretPersistence } from '../../protected-secret-persistence' +import type { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' // Only migration reads the former encrypted settings slot. export const LEGACY_OPENCODE_GO_API_KEY_SLOT = 'settings.opencodeGoApiKey' diff --git a/src/main/persistence/loading-store/loaded-state-parsing.ts b/src/main/persistence/loading-store/loaded-state-parsing.ts index 6b8dc2ebc1d..cf8eb39ae81 100644 --- a/src/main/persistence/loading-store/loaded-state-parsing.ts +++ b/src/main/persistence/loading-store/loaded-state-parsing.ts @@ -13,7 +13,7 @@ import { logStartupMilestone } from '../../startup/startup-diagnostics' import { PROTECTED_SECRET_SLOT, sshPtyOwnerLeaseSecretSlot -} from '../../protected-secret-persistence' +} from '../../credentials/protected-secret-persistence' import { isLegacyOpenCodeSessionCookie, isLegacySshPtyOwnerLease diff --git a/src/main/persistence/loading-store/profile-state-selective-serialization.test.ts b/src/main/persistence/loading-store/profile-state-selective-serialization.test.ts index 3ddb82eaa94..309dc1fe115 100644 --- a/src/main/persistence/loading-store/profile-state-selective-serialization.test.ts +++ b/src/main/persistence/loading-store/profile-state-selective-serialization.test.ts @@ -1,6 +1,6 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { getDefaultPersistedState } from '../../../shared/constants' -import { ProtectedSecretPersistence } from '../../protected-secret-persistence' +import { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' import { serializeSelectiveProfileStateDomains } from './profile-state-authority-writes' import { StateSerializationSecretHandlingOperations } from './state-serialization-secret-handling' diff --git a/src/main/persistence/loading-store/profile-state-selective-write.ts b/src/main/persistence/loading-store/profile-state-selective-write.ts index 286626c33c2..08468ff2f89 100644 --- a/src/main/persistence/loading-store/profile-state-selective-write.ts +++ b/src/main/persistence/loading-store/profile-state-selective-write.ts @@ -1,4 +1,4 @@ -import type { ProtectedSecretRetentionUpdate } from '../../protected-secret-persistence' +import type { ProtectedSecretRetentionUpdate } from '../../credentials/protected-secret-persistence' import type { ProfileStateAuthority, ProfileStateDomainReplacement, diff --git a/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts b/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts index 006d64efa39..343cc541992 100644 --- a/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts +++ b/src/main/persistence/loading-store/profile-state-temp-cleanup-lifetime.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { basename, join } from 'node:path' import { afterEach, expect, it, vi } from 'vitest' import { removeTreeSync } from '../../../shared/windows-transient-lock-removal' -import * as durableFileWrite from '../../durable-file-write' +import * as durableFileWrite from '../../filesystem/durable-file-write' import { STALE_DURABLE_WRITE_TEMP_AGE_MS } from '../tracking-repos/worktree-metadata-normalization' import { createWorkerMaintenanceFixture, diff --git a/src/main/persistence/loading-store/state-serialization-secret-handling.ts b/src/main/persistence/loading-store/state-serialization-secret-handling.ts index dbb19cc6228..2ad4a087e17 100644 --- a/src/main/persistence/loading-store/state-serialization-secret-handling.ts +++ b/src/main/persistence/loading-store/state-serialization-secret-handling.ts @@ -10,7 +10,7 @@ import { PROTECTED_SECRET_SLOT, sshPtyOwnerLeaseSecretSlot, type ProtectedSecretRetentionUpdate -} from '../../protected-secret-persistence' +} from '../../credentials/protected-secret-persistence' import { stripRetiredGlobalSettings } from '../applying-settings/terminal-settings-migrations' import { LEGACY_OPENCODE_GO_API_KEY_SLOT } from './legacy-opencode-go-api-key-migration' import { omitDefaultWorktreeMetaFieldsInMap } from '../../../shared/worktree/meta-persisted-defaults' diff --git a/src/main/persistence/loading-store/store-runtime-state.ts b/src/main/persistence/loading-store/store-runtime-state.ts index 771ec32455f..9f59b7edc35 100644 --- a/src/main/persistence/loading-store/store-runtime-state.ts +++ b/src/main/persistence/loading-store/store-runtime-state.ts @@ -1,4 +1,4 @@ -import { removeStaleDurableWriteTempFiles } from '../../durable-file-write' +import { removeStaleDurableWriteTempFiles } from '../../filesystem/durable-file-write' import type { GlobalSettings } from '../../../shared/global-settings-types' import type { PersistedState } from '../../../shared/persisted-state-types' import type { @@ -13,7 +13,7 @@ import { getProfileTerminalScrollbackSnapshotRoot, type TerminalScrollbackSnapshotStorage } from '../../terminal-scrollback-snapshots' -import { ProtectedSecretPersistence } from '../../protected-secret-persistence' +import { ProtectedSecretPersistence } from '../../credentials/protected-secret-persistence' import { getDataFile, getGithubCacheFile } from './user-data-path' import { dirname, join } from 'node:path' import { STALE_DURABLE_WRITE_TEMP_AGE_MS } from '../tracking-repos/worktree-metadata-normalization' diff --git a/src/main/persistence/loading-store/write-flush-barriers.ts b/src/main/persistence/loading-store/write-flush-barriers.ts index 666fd759fa8..bb302fcdadb 100644 --- a/src/main/persistence/loading-store/write-flush-barriers.ts +++ b/src/main/persistence/loading-store/write-flush-barriers.ts @@ -1,6 +1,6 @@ import { writeFileSync, renameSync, unlinkSync } from 'node:fs' import { rename, rm, writeFile } from 'node:fs/promises' -import { durableWriteTempPath } from '../../durable-file-write' +import { durableWriteTempPath } from '../../filesystem/durable-file-write' import { getGithubCacheFile } from './user-data-path' import type { StoreRuntimeState } from './store-runtime-state' diff --git a/src/main/persistence/migrating-orcad-catalog/migration-journal-directory.ts b/src/main/persistence/migrating-orcad-catalog/migration-journal-directory.ts index 9fe407afb51..4743ef1c27e 100644 --- a/src/main/persistence/migrating-orcad-catalog/migration-journal-directory.ts +++ b/src/main/persistence/migrating-orcad-catalog/migration-journal-directory.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { writeSecureJsonFileWithinLimit } from '../../../shared/bounded-secure-json-file' import { errorMessage } from '../../../shared/error-message' import { readNodeFileSyncWithinLimit } from '../../../shared/node-bounded-file-reader' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' const JOURNAL_FILE = /^[A-Za-z0-9_-]{1,128}\.json$/ // `.json....tmp`: a durable write that died before its rename. diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-installers.ts b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-installers.ts index d8a082a0698..ebc946141cf 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-installers.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-installers.ts @@ -9,7 +9,7 @@ import { parseOrcadMigrationTerminalRestoreHintsText, type OrcadMigrationTerminalRestoreHint } from '../../../shared/orcad-migration/orcad-migration-terminal-restore-hints' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' import { getOrcadMigrationReceivedBlobPath, stagedOrcadMigrationBlobFiles diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-staging.ts b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-staging.ts index 4c87a19cc8e..7f21144ce8c 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-staging.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-migration-blob-staging.ts @@ -15,7 +15,7 @@ import { type OrcadMigrationBlobUploadState } from '../../../shared/orcad-migration/orcad-migration-blob-transfer' import type { OrcadMigrationManifest } from '../../../shared/orcad-migration/orcad-migration-manifest' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' import { appendOrcadMigrationStagedChunk, ensureOrcadMigrationDirectory, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-migration-staged-file.ts b/src/main/persistence/migrating-orcad-catalog/orcad-migration-staged-file.ts index 951b35ecb2f..5b1370e5468 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-migration-staged-file.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-migration-staged-file.ts @@ -16,7 +16,7 @@ import { } from 'node:fs' import { join } from 'node:path' import type { OrcadMigrationManifest } from '../../../shared/orcad-migration/orcad-migration-manifest' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' export const ORCAD_MIGRATION_STAGING_DIRECTORY = '.orcad-migration-staging' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-scrollback-snapshot-transfer.ts b/src/main/persistence/migrating-orcad-catalog/orcad-scrollback-snapshot-transfer.ts index c02720a0142..3b7a1fdbdd0 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-scrollback-snapshot-transfer.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-scrollback-snapshot-transfer.ts @@ -8,7 +8,7 @@ import { type OrcadMigrationSnapshotUploadState, type OrcadMigrationTerminalScrollbackSnapshot } from '../../../shared/orcad-migration/orcad-migration-scrollback' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' import { getTerminalScrollbackSnapshotPath, getTerminalScrollbackSnapshotRoot, diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-shell-history-installer.ts b/src/main/persistence/migrating-orcad-catalog/orcad-shell-history-installer.ts index 8876a7c59de..7125f723818 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-shell-history-installer.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-shell-history-installer.ts @@ -22,7 +22,7 @@ import { durableWriteTempPath, syncDirectoryDurablySync, writeFileDurableSync -} from '../../durable-file-write' +} from '../../filesystem/durable-file-write' import { resolveUnixPaneShellPath } from '../../daemon/shell-ready' import { resolveUnixShellPath } from '../../providers/local-pty/local-pty-executable-spawn' import { readHistoryMeta, resolveShellKind } from '../../terminal-history' diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts index f82a95b76d4..ca9e1b2e9a2 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-history-installer.ts @@ -17,7 +17,7 @@ import { parsePaneKey } from '../../../shared/stable-pane-id' import { getHistorySessionDirName } from '../../daemon/history-paths' import { isTerminalCheckpointFile } from '../../daemon/terminal-history-checkpoint-reader' import type { SessionMeta } from '../../daemon/terminal-history-metadata' -import { syncDirectoryDurablySync } from '../../durable-file-write' +import { syncDirectoryDurablySync } from '../../filesystem/durable-file-write' import { getOrcadMigrationReceivedBlobPath, listOrcadMigrationReceivedBlobNames diff --git a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-restore-hint-store.ts b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-restore-hint-store.ts index fb90abd2816..16b821009c4 100644 --- a/src/main/persistence/migrating-orcad-catalog/orcad-terminal-restore-hint-store.ts +++ b/src/main/persistence/migrating-orcad-catalog/orcad-terminal-restore-hint-store.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { z } from 'zod' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' import { MAX_ORCAD_MIGRATION_TERMINAL_RESTORE_HINTS, isOrcadMigrationTerminalRestoreHintCwd, diff --git a/src/main/persistence/profile-state/legacy-json/profile-state-authority-exports.ts b/src/main/persistence/profile-state/legacy-json/profile-state-authority-exports.ts index a549ceaaa6f..13ff30a6109 100644 --- a/src/main/persistence/profile-state/legacy-json/profile-state-authority-exports.ts +++ b/src/main/persistence/profile-state/legacy-json/profile-state-authority-exports.ts @@ -1,6 +1,6 @@ import { existsSync, mkdirSync, readFileSync } from 'node:fs' import { dirname } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../../filesystem/durable-file-write' import { readProfileStateSnapshot } from '../profile-state-documents' import { stageProfileStateRecoveryJson, diff --git a/src/main/persistence/profile-state/legacy-json/profile-state-recovery.ts b/src/main/persistence/profile-state/legacy-json/profile-state-recovery.ts index bd05ad21150..d913fedf5c3 100644 --- a/src/main/persistence/profile-state/legacy-json/profile-state-recovery.ts +++ b/src/main/persistence/profile-state/legacy-json/profile-state-recovery.ts @@ -2,7 +2,7 @@ import { profileStateDatabaseFiles } from '../profile-state-storage-classificati import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs' import { dirname } from 'node:path' import { parseProfileStateRoot } from '../profile-state-document-validation' -import { durableWriteTempPath, writeFileDurableSync } from '../../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../../filesystem/durable-file-write' import { bestEffortFsyncDirectorySync } from '../../../../shared/secure-file' import { quarantineProfileStateDatabase, diff --git a/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.test.ts b/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.test.ts index edf3050c976..26e2d53d453 100644 --- a/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.test.ts +++ b/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.test.ts @@ -2,7 +2,7 @@ import * as fs from 'node:fs' import { tmpdir } from 'node:os' import { basename, join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import { durableWriteTempPath, writeFileDurableSync } from '../../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../../filesystem/durable-file-write' import { profileStateJsonExportPath } from './profile-state-export-path' import { writeVersionedProfileStateExport } from './profile-state-versioned-export' diff --git a/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.ts b/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.ts index 674db03ce96..9aa5f051cbc 100644 --- a/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.ts +++ b/src/main/persistence/profile-state/legacy-json/profile-state-versioned-export.ts @@ -1,7 +1,10 @@ import { lstatSync, mkdirSync, readFileSync, rmSync } from 'node:fs' import { dirname } from 'node:path' import { bestEffortFsyncDirectorySync, fsyncFileSync } from '../../../../shared/secure-file' -import { durableWriteTempPath, publishFileDurableSync } from '../../../durable-file-write' +import { + durableWriteTempPath, + publishFileDurableSync +} from '../../../filesystem/durable-file-write' import { profileStateJsonExportPath, profileStateJsonExportPaths diff --git a/src/main/persistence/profile-state/profile-state-authority-marker-writes.test.ts b/src/main/persistence/profile-state/profile-state-authority-marker-writes.test.ts index cd1ddc0cfb2..130e3800ab5 100644 --- a/src/main/persistence/profile-state/profile-state-authority-marker-writes.test.ts +++ b/src/main/persistence/profile-state/profile-state-authority-marker-writes.test.ts @@ -2,7 +2,7 @@ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import * as durableFileWrite from '../../durable-file-write' +import * as durableFileWrite from '../../filesystem/durable-file-write' import { prepareProfileProjectDomainChanges } from '../../orca-profiles/profile-project-domain-changes' import { readProfileProjectTransferState, diff --git a/src/main/persistence/profile-state/profile-state-authority-marker.test.ts b/src/main/persistence/profile-state/profile-state-authority-marker.test.ts index 33a84c71c25..95a44786008 100644 --- a/src/main/persistence/profile-state/profile-state-authority-marker.test.ts +++ b/src/main/persistence/profile-state/profile-state-authority-marker.test.ts @@ -2,7 +2,7 @@ import * as fs from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import * as durableFileWrite from '../../durable-file-write' +import * as durableFileWrite from '../../filesystem/durable-file-write' import { bootstrapProfileStateAuthority } from './profile-state-authority-bootstrap' import { hasProfileStateAuthorityMarker, diff --git a/src/main/persistence/profile-state/profile-state-authority-marker.ts b/src/main/persistence/profile-state/profile-state-authority-marker.ts index 20dff8282ad..baf3536aaa2 100644 --- a/src/main/persistence/profile-state/profile-state-authority-marker.ts +++ b/src/main/persistence/profile-state/profile-state-authority-marker.ts @@ -1,5 +1,5 @@ import { lstatSync } from 'node:fs' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' export function profileStateAuthorityMarkerPath(databaseFile: string): string { return `${databaseFile}.authority` diff --git a/src/main/persistence/profile-state/profile-state-backup-temporary-files.ts b/src/main/persistence/profile-state/profile-state-backup-temporary-files.ts index 3e22f9f80f8..1aa593df9ab 100644 --- a/src/main/persistence/profile-state/profile-state-backup-temporary-files.ts +++ b/src/main/persistence/profile-state/profile-state-backup-temporary-files.ts @@ -1,6 +1,6 @@ import { createHash } from 'node:crypto' import { lstat, readdir, rm } from 'node:fs/promises' -import { durableWriteTempPath } from '../../durable-file-write' +import { durableWriteTempPath } from '../../filesystem/durable-file-write' import { profileStateAccessBootIdentity } from './profile-state-access-identity' import { profileStateAccessPidNamespace } from './profile-state-access-owner' import { basename, dirname, join } from 'node:path' diff --git a/src/main/persistence/profile-state/profile-state-backup-worker.ts b/src/main/persistence/profile-state/profile-state-backup-worker.ts index adf62b801e6..6f4d02155d7 100644 --- a/src/main/persistence/profile-state/profile-state-backup-worker.ts +++ b/src/main/persistence/profile-state/profile-state-backup-worker.ts @@ -7,7 +7,7 @@ import { Worker } from 'node:worker_threads' import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath -} from '../../worker-thread-entry-path' +} from '../../worker-threads/worker-thread-entry-path' import { type ProfileStateBackupJob, writeProfileStateBackup } from './profile-state-backup-job' import { isRecord } from './profile-state-document-validation' diff --git a/src/main/persistence/profile-state/profile-state-database-publication.ts b/src/main/persistence/profile-state/profile-state-database-publication.ts index d58ea038cd9..f4c5e9d4b18 100644 --- a/src/main/persistence/profile-state/profile-state-database-publication.ts +++ b/src/main/persistence/profile-state/profile-state-database-publication.ts @@ -1,5 +1,5 @@ import { dirname } from 'node:path' -import { publishFileDurableSync } from '../../durable-file-write' +import { publishFileDurableSync } from '../../filesystem/durable-file-write' import { profileStatePublicationFailureText } from './profile-state-startup-failure' class ProfileStateDatabasePublicationError extends Error { diff --git a/src/main/persistence/profile-state/profile-state-database-quarantine.ts b/src/main/persistence/profile-state/profile-state-database-quarantine.ts index c8023c4fc17..985cb4e9114 100644 --- a/src/main/persistence/profile-state/profile-state-database-quarantine.ts +++ b/src/main/persistence/profile-state/profile-state-database-quarantine.ts @@ -3,7 +3,7 @@ import { randomUUID } from 'node:crypto' import { existsSync, mkdirSync, rmSync } from 'node:fs' import { basename, dirname, join } from 'node:path' import { bestEffortFsyncDirectorySync, fsyncFileSync } from '../../../shared/secure-file' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' import { hardenSqliteDatabaseFiles } from '../../sqlite/harden-database-files' import { copyProfileStateRecoveryFiles } from './profile-state-recovery-copy' diff --git a/src/main/persistence/profile-state/profile-state-database-recovery.test.ts b/src/main/persistence/profile-state/profile-state-database-recovery.test.ts index ebfca9cccfe..544be9161a5 100644 --- a/src/main/persistence/profile-state/profile-state-database-recovery.test.ts +++ b/src/main/persistence/profile-state/profile-state-database-recovery.test.ts @@ -12,7 +12,7 @@ import { tmpdir } from 'node:os' import { basename, dirname, join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import Database from '../../sqlite/sync-database' -import * as durableFileWrite from '../../durable-file-write' +import * as durableFileWrite from '../../filesystem/durable-file-write' import { openProfileStateDatabase, openProfileStateDatabaseReadOnly diff --git a/src/main/persistence/profile-state/profile-state-database-recovery.ts b/src/main/persistence/profile-state/profile-state-database-recovery.ts index c44f0f83e51..9a5ec67b392 100644 --- a/src/main/persistence/profile-state/profile-state-database-recovery.ts +++ b/src/main/persistence/profile-state/profile-state-database-recovery.ts @@ -1,7 +1,7 @@ import { profileStateDatabaseFiles } from './profile-state-storage-classification' import { existsSync, lstatSync, mkdirSync, rmSync } from 'node:fs' import { dirname } from 'node:path' -import { durableWriteTempPath, renameDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, renameDurableSync } from '../../filesystem/durable-file-write' import { hardenSqliteDatabaseFiles } from '../../sqlite/harden-database-files' import { bestEffortFsyncDirectorySync, fsyncFileSync } from '../../../shared/secure-file' import { openProfileStateDatabaseReadOnly } from './profile-state-database' diff --git a/src/main/persistence/profile-state/profile-state-database-snapshot.test.ts b/src/main/persistence/profile-state/profile-state-database-snapshot.test.ts index 238e067e9a3..236cf80f215 100644 --- a/src/main/persistence/profile-state/profile-state-database-snapshot.test.ts +++ b/src/main/persistence/profile-state/profile-state-database-snapshot.test.ts @@ -19,7 +19,7 @@ import { import { exportProfileStateJson, importProfileStateJson } from './profile-state-documents' import { writeProfileStateDatabaseSnapshotAsync } from './profile-state-database-snapshot' import type Database from '../../sqlite/sync-database' -import * as durableFileWrite from '../../durable-file-write' +import * as durableFileWrite from '../../filesystem/durable-file-write' import * as fsPromises from 'node:fs/promises' vi.mock('node:fs/promises', async (importOriginal) => { diff --git a/src/main/persistence/profile-state/profile-state-database-snapshot.ts b/src/main/persistence/profile-state/profile-state-database-snapshot.ts index 903c2a6644a..fd216434819 100644 --- a/src/main/persistence/profile-state/profile-state-database-snapshot.ts +++ b/src/main/persistence/profile-state/profile-state-database-snapshot.ts @@ -3,7 +3,7 @@ import { access, mkdir, open, realpath, rm, stat } from 'node:fs/promises' import { basename, dirname, resolve } from 'node:path' import Database from '../../sqlite/sync-database' import { hardenSqliteDatabaseFiles } from '../../sqlite/harden-database-files' -import { durableWriteTempPath, renameDurable } from '../../durable-file-write' +import { durableWriteTempPath, renameDurable } from '../../filesystem/durable-file-write' /** Caller owns the destination and keeps the source connection open until completion. */ export async function writeProfileStateDatabaseSnapshotAsync( diff --git a/src/main/persistence/profile-state/profile-state-recovery-command.ts b/src/main/persistence/profile-state/profile-state-recovery-command.ts index 214b456ec6f..1912ff7ddc4 100644 --- a/src/main/persistence/profile-state/profile-state-recovery-command.ts +++ b/src/main/persistence/profile-state/profile-state-recovery-command.ts @@ -15,7 +15,7 @@ import { restoreProfileStateJsonExport } from './legacy-json/profile-state-recov import { restoreProfileStateDatabaseBackup } from './profile-state-database-recovery' import { quarantineProfileStateDatabase } from './profile-state-database-quarantine' import { ProfileStateSqliteAuthority } from './profile-state-sqlite-authority' -import { durableWriteTempPath, writeFileDurableSync } from '../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../filesystem/durable-file-write' import { assertProfileStateMaintenance, type ProfileStateMaintenance } from './profile-state-access' import { openProfileStateDatabaseReadOnly, diff --git a/src/main/persistence/profile-state/profile-state-startup-authority.test.ts b/src/main/persistence/profile-state/profile-state-startup-authority.test.ts index 615c15b40e5..efe8684a611 100644 --- a/src/main/persistence/profile-state/profile-state-startup-authority.test.ts +++ b/src/main/persistence/profile-state/profile-state-startup-authority.test.ts @@ -1,5 +1,5 @@ import { build } from 'esbuild' -import type * as WorkerEntryPath from '../../worker-thread-entry-path' +import type * as WorkerEntryPath from '../../worker-threads/worker-thread-entry-path' import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from 'vitest' import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' @@ -13,7 +13,7 @@ import { import { openProfileStateDatabase, profileStateDatabaseFile } from './profile-state-database' const bundle = vi.hoisted(() => ({ directory: '' })) -vi.mock('../../worker-thread-entry-path', async (importOriginal) => { +vi.mock('../../worker-threads/worker-thread-entry-path', async (importOriginal) => { const original = await importOriginal() return { ...original, diff --git a/src/main/persistence/profile-state/profile-state-writer-worker-path.ts b/src/main/persistence/profile-state/profile-state-writer-worker-path.ts index d1068eb26b0..0f1d5924977 100644 --- a/src/main/persistence/profile-state/profile-state-writer-worker-path.ts +++ b/src/main/persistence/profile-state/profile-state-writer-worker-path.ts @@ -3,7 +3,7 @@ import { dirname, join } from 'node:path' import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath -} from '../../worker-thread-entry-path' +} from '../../worker-threads/worker-thread-entry-path' export function resolveProfileStateWriterWorkerPath(moduleDir = __dirname): string { const entry = resolveWorkerThreadEntryPath( diff --git a/src/main/persistence/restoring-sessions/floating-workspace-normalization.ts b/src/main/persistence/restoring-sessions/floating-workspace-normalization.ts index d83e5306cc7..25c4c98086f 100644 --- a/src/main/persistence/restoring-sessions/floating-workspace-normalization.ts +++ b/src/main/persistence/restoring-sessions/floating-workspace-normalization.ts @@ -1,6 +1,6 @@ import { realpathSync, statSync } from 'node:fs' import { isAbsolute, resolve } from 'node:path' -import { expandLeadingHomePath } from '../../home-path-expansion' +import { expandLeadingHomePath } from '../../filesystem/home-path-expansion' export function resolveFloatingWorkspacePath(input: string, home: string): string { const expanded = expandLeadingHomePath(input, home) diff --git a/src/main/plugins/panels/plugin-source-transpile-client.ts b/src/main/plugins/panels/plugin-source-transpile-client.ts index 6e6e5e03879..47ff58c995c 100644 --- a/src/main/plugins/panels/plugin-source-transpile-client.ts +++ b/src/main/plugins/panels/plugin-source-transpile-client.ts @@ -3,7 +3,7 @@ import { Worker } from 'node:worker_threads' import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath -} from '../../worker-thread-entry-path' +} from '../../worker-threads/worker-thread-entry-path' import type { PluginSourceTranspiled, PluginSourceTranspileRequest, diff --git a/src/main/plugins/view/plugin-view-renderer-relay.ts b/src/main/plugins/view/plugin-view-renderer-relay.ts index 1bf50fd342c..4d4e016fc6b 100644 --- a/src/main/plugins/view/plugin-view-renderer-relay.ts +++ b/src/main/plugins/view/plugin-view-renderer-relay.ts @@ -1,6 +1,6 @@ import { randomUUID } from 'node:crypto' import { ipcMain, type IpcMainEvent, type WebContents } from 'electron' -import { addFanoutListener, addFanoutListeners } from '../../event-listener-fanout' +import { addFanoutListener, addFanoutListeners } from '../../runtime/events/event-listener-fanout' import { PLUGIN_VIEW_REPLY_CHANNEL, PLUGIN_VIEW_REQUEST_CHANNEL, diff --git a/src/main/ports/port-scan-command-client.ts b/src/main/ports/port-scan-command-client.ts index 25ff9511560..daafdbc944e 100644 --- a/src/main/ports/port-scan-command-client.ts +++ b/src/main/ports/port-scan-command-client.ts @@ -1,12 +1,12 @@ import { existsSync } from 'node:fs' import { Worker } from 'node:worker_threads' -import type { WorkerThreadFactory } from '../lazy-worker-thread-host' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath, type WorkerEntryLayout -} from '../worker-thread-entry-path' -import { WorkerThreadRequestQueue } from '../worker-thread-request-queue' +} from '../worker-threads/worker-thread-entry-path' +import { WorkerThreadRequestQueue } from '../worker-threads/worker-thread-request-queue' import { PORT_SCAN_COMMAND_TIMEOUT_MS, PortScanCommandTimeoutError, diff --git a/src/main/providers/local-filesystem-provider.ts b/src/main/providers/local-filesystem-provider.ts index c0e2bba4e02..d46dfb6f44b 100644 --- a/src/main/providers/local-filesystem-provider.ts +++ b/src/main/providers/local-filesystem-provider.ts @@ -5,7 +5,7 @@ import { readAuthorizedDocPreviewFile, readAuthorizedDocPreviewFileChunk } from '../../shared/doc-preview-file-access' -import { renameLocalPathSerializedByDestination } from '../destination-serialized-local-rename' +import { renameLocalPathSerializedByDestination } from '../filesystem/destination-serialized-local-rename' import type { resolveAuthorizedPath as ResolveAuthorizedPath } from '../ipc/filesystem/filesystem-auth' import { isENOENT } from '../ipc/filesystem/filesystem-path-containment' import { diff --git a/src/main/rate-limits/gemini-oauth-sources.ts b/src/main/rate-limits/gemini-oauth-sources.ts index 81d5aa43fd6..ce86f5d9259 100644 --- a/src/main/rate-limits/gemini-oauth-sources.ts +++ b/src/main/rate-limits/gemini-oauth-sources.ts @@ -3,7 +3,7 @@ import { homedir } from 'node:os' import path from 'node:path' import { getMainHttpClient } from '../network/http-client' import { extractOAuthClientCredentials } from './gemini-cli-oauth-extractor' -import { writeCredentialFileAtomic } from '../integration-credential-file' +import { writeCredentialFileAtomic } from '../credentials/integration-credential-file' const API_TIMEOUT_MS = 10_000 const OAUTH_CREDS_PATH = path.join(homedir(), '.gemini', 'oauth_creds.json') diff --git a/src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts b/src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts index 6ab5077b63b..34d8636c92f 100644 --- a/src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts +++ b/src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts @@ -23,7 +23,7 @@ vi.mock('node:fs/promises', () => ({ })) // Refresh must never write the developer's real ~/.gemini. -vi.mock('../integration-credential-file', () => ({ +vi.mock('../credentials/integration-credential-file', () => ({ writeCredentialFileAtomic: vi.fn().mockReturnValue(true) })) diff --git a/src/main/rate-limits/gemini-usage-fetcher.test.ts b/src/main/rate-limits/gemini-usage-fetcher.test.ts index 609c815dd2d..b072ea4c0de 100644 --- a/src/main/rate-limits/gemini-usage-fetcher.test.ts +++ b/src/main/rate-limits/gemini-usage-fetcher.test.ts @@ -18,7 +18,7 @@ vi.mock('node:fs/promises', () => ({ })) // Refresh must never write the developer's real ~/.gemini. -vi.mock('../integration-credential-file', () => ({ +vi.mock('../credentials/integration-credential-file', () => ({ writeCredentialFileAtomic: vi.fn().mockReturnValue(true) })) diff --git a/src/main/runtime/agent-session/records/agent-session-recovery-capsule.test.ts b/src/main/runtime/agent-session/records/agent-session-recovery-capsule.test.ts index 0db1984c3f3..9310b2e6e34 100644 --- a/src/main/runtime/agent-session/records/agent-session-recovery-capsule.test.ts +++ b/src/main/runtime/agent-session/records/agent-session-recovery-capsule.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 { z } from 'zod' -import * as durable from '../../../durable-file-write' +import * as durable from '../../../filesystem/durable-file-write' import { marker, NOW, diff --git a/src/main/runtime/agent-session/records/agent-session-recovery-capsule.ts b/src/main/runtime/agent-session/records/agent-session-recovery-capsule.ts index 9a29e4f3c7b..ad565f79c77 100644 --- a/src/main/runtime/agent-session/records/agent-session-recovery-capsule.ts +++ b/src/main/runtime/agent-session/records/agent-session-recovery-capsule.ts @@ -8,8 +8,8 @@ import { removeStaleDurableWriteTempFiles, renameDurable, writeTempFileDurable -} from '../../../durable-file-write' -import { withFileTransactionLock } from '../../../file-transaction-lock' +} from '../../../filesystem/durable-file-write' +import { withFileTransactionLock } from '../../../filesystem/file-transaction-lock' import { MAX_FAILURE_FIELD_LENGTH, normalizeState, diff --git a/src/main/runtime/agent-session/records/agent-session-runtime-end-record.test.ts b/src/main/runtime/agent-session/records/agent-session-runtime-end-record.test.ts index 9e1d4514746..38b2abdc221 100644 --- a/src/main/runtime/agent-session/records/agent-session-runtime-end-record.test.ts +++ b/src/main/runtime/agent-session/records/agent-session-runtime-end-record.test.ts @@ -5,10 +5,10 @@ import { mkdir, mkdtemp, readdir, rm, utimes, 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 * as DurableFileWrite from '../../../durable-file-write' +import type * as DurableFileWrite from '../../../filesystem/durable-file-write' const writes = vi.hoisted(() => ({ fail: false })) -vi.mock('../../../durable-file-write', async (importOriginal) => { +vi.mock('../../../filesystem/durable-file-write', async (importOriginal) => { const actual = await importOriginal() return { ...actual, diff --git a/src/main/runtime/agent-session/records/agent-session-runtime-end-record.ts b/src/main/runtime/agent-session/records/agent-session-runtime-end-record.ts index 4991950fb9e..f1f993a98fd 100644 --- a/src/main/runtime/agent-session/records/agent-session-runtime-end-record.ts +++ b/src/main/runtime/agent-session/records/agent-session-runtime-end-record.ts @@ -3,7 +3,7 @@ import { mkdirSync, readdirSync, rmSync, statSync } from 'node:fs' import { join } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../../../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../../../filesystem/durable-file-write' import { readNodeFileSyncWithinLimit } from '../../../../shared/node-bounded-file-reader' import type { AgentSessionOrcaStopCause } from '../../../../shared/agent-session/lifecycle/agent-session-orca-stop' import { diff --git a/src/main/in-flight-run-dedupe.ts b/src/main/runtime/concurrency/in-flight-run-dedupe.ts similarity index 100% rename from src/main/in-flight-run-dedupe.ts rename to src/main/runtime/concurrency/in-flight-run-dedupe.ts diff --git a/src/main/runtime/device-registry.ts b/src/main/runtime/device-registry.ts index 60b9de61c55..4de5e93e72c 100644 --- a/src/main/runtime/device-registry.ts +++ b/src/main/runtime/device-registry.ts @@ -1,7 +1,7 @@ // Per-device revocable tokens isolate compromises; persist with hardened metadata-style permissions. import { join } from 'node:path' import type { DeviceScope } from '../../shared/runtime-types' -import { removeStaleDurableWriteTempFiles } from '../durable-file-write' +import { removeStaleDurableWriteTempFiles } from '../filesystem/durable-file-write' import { DEVICE_REGISTRY_FILENAME } from './mobile-pairing-files' import { mintTokenDevice } from './device-credential' import { planDeviceKeyFork } from './device-key-fork' diff --git a/src/main/event-listener-fanout.test.ts b/src/main/runtime/events/event-listener-fanout.test.ts similarity index 100% rename from src/main/event-listener-fanout.test.ts rename to src/main/runtime/events/event-listener-fanout.test.ts diff --git a/src/main/event-listener-fanout.ts b/src/main/runtime/events/event-listener-fanout.ts similarity index 100% rename from src/main/event-listener-fanout.ts rename to src/main/runtime/events/event-listener-fanout.ts diff --git a/src/main/runtime/host-descriptor.ts b/src/main/runtime/host-descriptor.ts index 1105c296153..a38087c82d6 100644 --- a/src/main/runtime/host-descriptor.ts +++ b/src/main/runtime/host-descriptor.ts @@ -6,7 +6,7 @@ import { type RuntimeHostDescriptor } from '../../shared/runtime-host-descriptor' import { profileStateAccessMachineIdentity } from '../persistence/profile-state/profile-state-access-identity' -import { withFileTransactionLock } from '../file-transaction-lock' +import { withFileTransactionLock } from '../filesystem/file-transaction-lock' import type { RuntimeSourceStamp } from '../../shared/runtime-source-env' export const HOST_INSTALLATION_FILENAME = 'host-installation.json' diff --git a/src/main/runtime/rpc/dispatcher-request-parsing.ts b/src/main/runtime/rpc/dispatcher-request-parsing.ts index 35d213f9d79..fb4b6b7e5a4 100644 --- a/src/main/runtime/rpc/dispatcher-request-parsing.ts +++ b/src/main/runtime/rpc/dispatcher-request-parsing.ts @@ -1,4 +1,4 @@ -import { getCompiledSchema } from '../../zod-schema-compilation' +import { getCompiledSchema } from '../../schema-validation/zod-schema-compilation' import { formatZodError, type RpcAnyMethodDeclaration, diff --git a/src/main/runtime/runtime-failed-local-worktree-removal.test.ts b/src/main/runtime/runtime-failed-local-worktree-removal.test.ts index d85d4b8885e..e4c8a7233e3 100644 --- a/src/main/runtime/runtime-failed-local-worktree-removal.test.ts +++ b/src/main/runtime/runtime-failed-local-worktree-removal.test.ts @@ -12,8 +12,8 @@ import type { Repo } from '../../shared/repo-types' import type { GitPushTarget } from '../../shared/worktree/types' import { removeTree } from '../../shared/windows-transient-lock-removal' import type { Store } from '../persistence/loading-store/store' -import type * as HostTreeRemoval from '../host-tree-removal' -import { removeHostTree } from '../host-tree-removal' +import type * as HostTreeRemoval from '../filesystem/host-tree-removal' +import { removeHostTree } from '../filesystem/host-tree-removal' import { listWorktreesStrict, removeWorktree } from '../git/worktree' import { areWorktreePathsEqual } from '../git/worktree-path-comparison' import { acquireWatcherRemovalGate, beginTerminalInstall } from '../ipc/watcher-removal-gate' @@ -40,7 +40,7 @@ import type { RuntimeStore } from './runtime-store-contract' vi.mock('../project-runtime-git-options', () => ({ getLocalProjectWorktreeGitOptions: () => ({}) })) -vi.mock('../host-tree-removal', async (importOriginal) => { +vi.mock('../filesystem/host-tree-removal', async (importOriginal) => { const actual = await importOriginal() return { ...actual, removeHostTree: vi.fn(actual.removeHostTree) } }) diff --git a/src/main/runtime/runtime-interrupted-local-worktree-removal.test.ts b/src/main/runtime/runtime-interrupted-local-worktree-removal.test.ts index 85a4f3e9ce2..1551d3aeeff 100644 --- a/src/main/runtime/runtime-interrupted-local-worktree-removal.test.ts +++ b/src/main/runtime/runtime-interrupted-local-worktree-removal.test.ts @@ -15,9 +15,9 @@ import { buildDetectedGitWorktrees } from '../ipc/worktrees/listing/ssh-worktree import { removeTree } from '../../shared/windows-transient-lock-removal' import type { RemoveWorktreeResult } from '../../shared/worktree/create-types' import type { Store } from '../persistence/loading-store/store' -import type * as HostTreeRemoval from '../host-tree-removal' -import { removeHostTree } from '../host-tree-removal' -import * as nativeFs from '../asar-transparent-fs' +import type * as HostTreeRemoval from '../filesystem/host-tree-removal' +import { removeHostTree } from '../filesystem/host-tree-removal' +import * as nativeFs from '../filesystem/asar-transparent-fs' import * as diskFs from 'node:fs/promises' import * as nativeRemoval from '../git/windows-worktree-removal' import * as graphReader from '../git/worktree-list-reader' @@ -63,7 +63,7 @@ vi.mock('node:fs/promises', async (importOriginal) => { vi.mock('../project-runtime-git-options', () => ({ getLocalProjectWorktreeGitOptions: vi.fn(() => ({})) })) -vi.mock('../host-tree-removal', async (importOriginal) => { +vi.mock('../filesystem/host-tree-removal', async (importOriginal) => { const actual = await importOriginal() return { ...actual, removeHostTree: vi.fn(actual.removeHostTree) } }) diff --git a/src/main/zod-schema-compilation.test.ts b/src/main/schema-validation/zod-schema-compilation.test.ts similarity index 100% rename from src/main/zod-schema-compilation.test.ts rename to src/main/schema-validation/zod-schema-compilation.test.ts diff --git a/src/main/zod-schema-compilation.ts b/src/main/schema-validation/zod-schema-compilation.ts similarity index 100% rename from src/main/zod-schema-compilation.ts rename to src/main/schema-validation/zod-schema-compilation.ts diff --git a/src/main/skills/skill-package-tar.ts b/src/main/skills/skill-package-tar.ts index 99fad1417cb..c4d58db0ec0 100644 --- a/src/main/skills/skill-package-tar.ts +++ b/src/main/skills/skill-package-tar.ts @@ -7,7 +7,11 @@ import { pipeline } from 'node:stream/promises' import { createGunzip } from 'node:zlib' import { SKILL_PACKAGE_MAX_COMPRESSED_BYTES } from '../../shared/skill-package-manifest' import { createDeterministicGzipStore } from './skill-package-deterministic-gzip' -import { buildUstarEntryHeader, USTAR_BLOCK_BYTES, ustarPaddingBytes } from '../ustar-entry-header' +import { + buildUstarEntryHeader, + USTAR_BLOCK_BYTES, + ustarPaddingBytes +} from '../archive/ustar-entry-header' const TAR_BLOCK_BYTES = USTAR_BLOCK_BYTES const TAR_EXPANDED_LIMIT = 40 * 1024 * 1024 diff --git a/src/main/speech/openai-api-key-store.ts b/src/main/speech/openai-api-key-store.ts index 66c943a35a1..e93a2eb9577 100644 --- a/src/main/speech/openai-api-key-store.ts +++ b/src/main/speech/openai-api-key-store.ts @@ -1,5 +1,5 @@ import { getSecretStore } from '../../shared/secret-store' -import { readCredentialFileProtection } from '../credential-file-protection' +import { readCredentialFileProtection } from '../credentials/credential-file-protection' import { classifyUnenvelopedCredential, type SecretAtRestProtection diff --git a/src/main/speech/stt-worker-paths.ts b/src/main/speech/stt-worker-paths.ts index 96964f05277..90a6c8432f0 100644 --- a/src/main/speech/stt-worker-paths.ts +++ b/src/main/speech/stt-worker-paths.ts @@ -5,7 +5,10 @@ import { SPEECH_RECOGNIZER_DIR_ENV, speechRecognizerPackageName } from '../../shared/speech-recognizer-package' -import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath } from '../worker-thread-entry-path' +import { + currentWorkerEntryLayout, + resolveWorkerThreadEntryPath +} from '../worker-threads/worker-thread-entry-path' /** Mobile maps voice_model_not_ready: to host-supported model setup, including hosts with no recognizer. */ export const LOCAL_SPEECH_UNAVAILABLE_ERROR = 'voice_model_not_ready:unavailable' diff --git a/src/main/ssh/legacy-relay/legacy-relay-cli-call-limits.ts b/src/main/ssh/legacy-relay/legacy-relay-cli-call-limits.ts index 02e33739d78..9c983a3e9f3 100644 --- a/src/main/ssh/legacy-relay/legacy-relay-cli-call-limits.ts +++ b/src/main/ssh/legacy-relay/legacy-relay-cli-call-limits.ts @@ -12,7 +12,7 @@ import { readPromptBasePayloadHash, replayStableCallerParams } from '../../runtime/rpc/orchestration-mutation-receipt' -import { getCompiledSchema } from '../../zod-schema-compilation' +import { getCompiledSchema } from '../../schema-validation/zod-schema-compilation' import type { LegacyRelayCliCall } from './legacy-relay-cli-caller' /** Enough for a coordinator and its workers' waits; past it a host is flooding this desktop. */ diff --git a/src/main/ssh/ssh-host-key-store.ts b/src/main/ssh/ssh-host-key-store.ts index 077f36394ca..75dd8fdecca 100644 --- a/src/main/ssh/ssh-host-key-store.ts +++ b/src/main/ssh/ssh-host-key-store.ts @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto' import { mkdir, readFile } from 'node:fs/promises' import { dirname, join } from 'node:path' -import { withSidecarSnapshotQueue, writeSidecarSnapshot } from '../sidecar-snapshot-file' +import { withSidecarSnapshotQueue, writeSidecarSnapshot } from '../filesystem/sidecar-snapshot-file' import { formatHostKeyFingerprint, readHostKeyType, diff --git a/src/main/startup/http1-compatibility-marker.ts b/src/main/startup/http1-compatibility-marker.ts index 968d805bc84..2ad797cf3a4 100644 --- a/src/main/startup/http1-compatibility-marker.ts +++ b/src/main/startup/http1-compatibility-marker.ts @@ -1,6 +1,6 @@ import { readFileSync, rmSync } from 'node:fs' import { join } from 'node:path' -import { durableWriteTempPath, writeFileDurableSync } from '../durable-file-write' +import { durableWriteTempPath, writeFileDurableSync } from '../filesystem/durable-file-write' import { bestEffortFsyncDirectorySync } from '../../shared/secure-file' /** A tiny profile-scoped marker selects HTTP/2 before the first Electron session without reparsing multi-MB settings before Store startup. Profile identity prevents cross-profile reuse. */ diff --git a/src/main/startup/main-process-ready-identity-write.test.ts b/src/main/startup/main-process-ready-identity-write.test.ts index bc79f45d03c..b17c962d15a 100644 --- a/src/main/startup/main-process-ready-identity-write.test.ts +++ b/src/main/startup/main-process-ready-identity-write.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import type * as DurableFileWrite from '../durable-file-write' +import type * as DurableFileWrite from '../filesystem/durable-file-write' import { JIRA_IMAGE_SCHEME } from '../../shared/jira/jira-attachment-image' const ORIGINAL_PLATFORM = process.platform @@ -31,7 +31,7 @@ const mocks = vi.hoisted(() => ({ writeFileDurableSync: vi.fn() })) -vi.mock('../durable-file-write', async (importOriginal) => { +vi.mock('../filesystem/durable-file-write', async (importOriginal) => { const actual = await importOriginal() return { ...actual, diff --git a/src/main/terminal-config-import/preview.ts b/src/main/terminal-config-import/preview.ts index c2559db15b4..70f48fa757d 100644 --- a/src/main/terminal-config-import/preview.ts +++ b/src/main/terminal-config-import/preview.ts @@ -3,7 +3,7 @@ import type { WebContents } from 'electron' import type { GlobalSettings } from '../../shared/global-settings-types' import type { TerminalConfigImportPreview } from '../../shared/terminal-config-import-preview' import type { Store } from '../persistence/loading-store/store' -import { validateImportSource } from '../import-source-validation' +import { validateImportSource } from '../configuration-import/import-source-validation' import { chooseTerminalConfigFile } from './choose-config-file' import { settingsChanges } from './settings-changes' diff --git a/src/main/terminal-history-deletion.ts b/src/main/terminal-history-deletion.ts index d0409591021..fe05fc42365 100644 --- a/src/main/terminal-history-deletion.ts +++ b/src/main/terminal-history-deletion.ts @@ -1,7 +1,7 @@ import { basename, dirname, join } from 'node:path' import { existsSync, mkdirSync, renameSync } from 'node:fs' import { readdir } from 'node:fs/promises' -import { removeHostTree } from './host-tree-removal' +import { removeHostTree } from './filesystem/host-tree-removal' import { deleteFishHistoryFile, resolveFishHistoryDir } from './fish-history-session' import { readHistoryMeta } from './terminal-history' import { diff --git a/src/main/terminal-history-gc-fs-call-count.test.ts b/src/main/terminal-history-gc-fs-call-count.test.ts index 4e367ac41c2..362f38eae7f 100644 --- a/src/main/terminal-history-gc-fs-call-count.test.ts +++ b/src/main/terminal-history-gc-fs-call-count.test.ts @@ -19,7 +19,7 @@ const { fsCalls, removeHostTreeMock } = vi.hoisted(() => ({ removeHostTreeMock: vi.fn<(dir: string) => Promise>() })) -vi.mock('./host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) +vi.mock('./filesystem/host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) // Count real filesystem calls so the measured I/O still reaches disk. vi.mock('node:fs/promises', async () => { diff --git a/src/main/terminal-history-gc.test.ts b/src/main/terminal-history-gc.test.ts index b4b09cf8917..50275b1fc2f 100644 --- a/src/main/terminal-history-gc.test.ts +++ b/src/main/terminal-history-gc.test.ts @@ -17,7 +17,7 @@ const { removeHostTreeMock } = vi.hoisted(() => ({ })) // The stub must delete tombstones: reporting success while leaving them on disk loops the drain. -vi.mock('./host-tree-removal', () => ({ +vi.mock('./filesystem/host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) diff --git a/src/main/terminal-history-tombstone-retry.test.ts b/src/main/terminal-history-tombstone-retry.test.ts index ef860aafaea..df9ef097303 100644 --- a/src/main/terminal-history-tombstone-retry.test.ts +++ b/src/main/terminal-history-tombstone-retry.test.ts @@ -11,7 +11,7 @@ const { removeHostTreeMock, deleteWslFishHistoryFileMock } = vi.hoisted(() => ({ deleteWslFishHistoryFileMock: vi.fn<(distro: string, session: string) => Promise>() })) -vi.mock('./host-tree-removal', () => ({ +vi.mock('./filesystem/host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) diff --git a/src/main/terminal-history-tombstone-scan-cost.test.ts b/src/main/terminal-history-tombstone-scan-cost.test.ts index 5abbe290a33..91840bba812 100644 --- a/src/main/terminal-history-tombstone-scan-cost.test.ts +++ b/src/main/terminal-history-tombstone-scan-cost.test.ts @@ -30,7 +30,7 @@ vi.mock('node:fs/promises', async (importOriginal) => { } }) -vi.mock('./host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) +vi.mock('./filesystem/host-tree-removal', () => ({ removeHostTree: removeHostTreeMock })) import { cancelPendingHistoryTreeRemovalRetries, diff --git a/src/main/usage-cache-snapshot-writer.ts b/src/main/usage-cache-snapshot-writer.ts index 08faf228351..a7908fa0d89 100644 --- a/src/main/usage-cache-snapshot-writer.ts +++ b/src/main/usage-cache-snapshot-writer.ts @@ -4,7 +4,7 @@ import { durableWriteTempPath, removeStaleDurableWriteTempFiles, writeFileDurableIfCurrent -} from './durable-file-write' +} from './filesystem/durable-file-write' // Serialize durable writes per store and skip superseded snapshots. export class UsageCacheSnapshotWriter { diff --git a/src/main/usage/usage-scan-worker-cache-cleanup.test.ts b/src/main/usage/usage-scan-worker-cache-cleanup.test.ts index aabf7d13b35..7e011fe775f 100644 --- a/src/main/usage/usage-scan-worker-cache-cleanup.test.ts +++ b/src/main/usage/usage-scan-worker-cache-cleanup.test.ts @@ -5,7 +5,7 @@ import { join, resolve } from 'node:path' import { Worker } from 'node:worker_threads' import { build } from 'esbuild' import { afterAll, beforeAll, describe, expect, it } from 'vitest' -import { durableWriteTempPath } from '../durable-file-write' +import { durableWriteTempPath } from '../filesystem/durable-file-write' import { createUsageScanWorkerTransport } from './usage-scan-worker-cache-cleanup' import type { UsageScanWorkerRequest } from './usage-scan-worker-protocol' import { usageSourceCachePath } from './usage-source-cache-file' diff --git a/src/main/usage/usage-scan-worker-cache-cleanup.ts b/src/main/usage/usage-scan-worker-cache-cleanup.ts index 9476d2b7a1a..d7486a62400 100644 --- a/src/main/usage/usage-scan-worker-cache-cleanup.ts +++ b/src/main/usage/usage-scan-worker-cache-cleanup.ts @@ -1,5 +1,8 @@ -import type { WorkerRequestTransport, WorkerThreadFactory } from '../lazy-worker-thread-host' -import { removeStaleDurableWriteTempFiles } from '../durable-file-write' +import type { + WorkerRequestTransport, + WorkerThreadFactory +} from '../worker-threads/worker-thread-transport' +import { removeStaleDurableWriteTempFiles } from '../filesystem/durable-file-write' import type { UsageScanWorkerRequest } from './usage-scan-worker-protocol' import { usageSourceCachePath } from './usage-source-cache-file' diff --git a/src/main/usage/usage-scan-worker-client.ts b/src/main/usage/usage-scan-worker-client.ts index 47b2bbea439..78940cfe1c0 100644 --- a/src/main/usage/usage-scan-worker-client.ts +++ b/src/main/usage/usage-scan-worker-client.ts @@ -1,5 +1,5 @@ -import { WorkerThreadRequestQueue } from '../worker-thread-request-queue' -import type { WorkerThreadFactory } from '../lazy-worker-thread-host' +import { WorkerThreadRequestQueue } from '../worker-threads/worker-thread-request-queue' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' import type { ClaudeUsageDailyAggregate, ClaudeUsageSession } from '../claude-usage/types' import type { CodexUsageDailyAggregate, CodexUsageSession } from '../codex-usage/types' import type { OpenCodeUsageDailyAggregate, OpenCodeUsageSession } from '../opencode-usage/types' diff --git a/src/main/usage/usage-scan-worker-spawn.ts b/src/main/usage/usage-scan-worker-spawn.ts index f49c1ded8d6..80711efdbf6 100644 --- a/src/main/usage/usage-scan-worker-spawn.ts +++ b/src/main/usage/usage-scan-worker-spawn.ts @@ -1,7 +1,10 @@ import { claudeProfileTranscriptDirs } from '../claude-usage/transcript-file-discovery' import { existsSync } from 'node:fs' import { Worker } from 'node:worker_threads' -import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath } from '../worker-thread-entry-path' +import { + currentWorkerEntryLayout, + resolveWorkerThreadEntryPath +} from '../worker-threads/worker-thread-entry-path' import type { ClaudeUsageDailyAggregate, ClaudeUsageSession } from '../claude-usage/types' import type { CodexUsageDailyAggregate, CodexUsageSession } from '../codex-usage/types' import type { OpenCodeUsageDailyAggregate, OpenCodeUsageSession } from '../opencode-usage/types' diff --git a/src/main/usage/usage-source-cache-file.ts b/src/main/usage/usage-source-cache-file.ts index ae66cd36310..9c23a6c0db9 100644 --- a/src/main/usage/usage-source-cache-file.ts +++ b/src/main/usage/usage-source-cache-file.ts @@ -5,7 +5,7 @@ import { durableWriteTempPath, removeStaleDurableWriteTempFiles, writeFileDurable -} from '../durable-file-write' +} from '../filesystem/durable-file-write' // Only scans need bulky per-source records; worker-owned sidecars keep them off main. diff --git a/src/main/warp-themes/index.ts b/src/main/warp-themes/index.ts index da01eeb792d..f203a7f0df5 100644 --- a/src/main/warp-themes/index.ts +++ b/src/main/warp-themes/index.ts @@ -14,7 +14,7 @@ import { type PreviewOperationBudget, type WarpThemePreviewOptions } from './preview-operation-budget' -import { validateImportSource } from '../import-source-validation' +import { validateImportSource } from '../configuration-import/import-source-validation' import { filesFromAutoDirectories } from './auto-discovered-theme-files' import { filesFromDirectory, type ThemeSourceSelection } from './theme-source-selection' import { diff --git a/src/main/window/project-move-pause.ts b/src/main/window/project-move-pause.ts index 034a0089474..76121bdcf7d 100644 --- a/src/main/window/project-move-pause.ts +++ b/src/main/window/project-move-pause.ts @@ -7,7 +7,7 @@ import { type ProjectMovePauseResponse } from '../../shared/project-move-pause' import type { WorkspaceSleepOutcome, WorkspaceSleepRequest } from '../../shared/workspace-sleep' -import { addFanoutListener, addFanoutListeners } from '../event-listener-fanout' +import { addFanoutListener, addFanoutListeners } from '../runtime/events/event-listener-fanout' type SleepRuntime = { sleepWorkspaces: (request: WorkspaceSleepRequest) => Promise diff --git a/src/main/window/session-tab-close-request-relay.ts b/src/main/window/session-tab-close-request-relay.ts index 834da75f24f..e9564342bdc 100644 --- a/src/main/window/session-tab-close-request-relay.ts +++ b/src/main/window/session-tab-close-request-relay.ts @@ -7,7 +7,7 @@ import type { SessionTabCloseResponse } from '../../shared/session-tab-close' import { SESSION_TAB_CLOSE_TIMEOUT_ERROR } from '../../shared/session-tab-close' -import { addFanoutListener, addFanoutListeners } from '../event-listener-fanout' +import { addFanoutListener, addFanoutListeners } from '../runtime/events/event-listener-fanout' const SESSION_TAB_CLOSE_CONFIRMATION_MS = 5 * 60_000 const SESSION_TAB_CLOSE_RESPONSE_GRACE_MS = 5_000 diff --git a/src/main/window/terminal-pane-reveal-relay.ts b/src/main/window/terminal-pane-reveal-relay.ts index 57a4d1871ee..74acc5a80f7 100644 --- a/src/main/window/terminal-pane-reveal-relay.ts +++ b/src/main/window/terminal-pane-reveal-relay.ts @@ -6,7 +6,7 @@ import type { TerminalPaneRevealReply, TerminalPaneRevealTarget } from '../../shared/terminal-pane-reveal' -import { addFanoutListener } from '../event-listener-fanout' +import { addFanoutListener } from '../runtime/events/event-listener-fanout' import { abortWhenRendererGone } from '../ipc/renderer-lifetime-abort' import { focusExistingMainWindow } from './focus-existing-window' diff --git a/src/main/window/terminal-tab-close-request-relay.ts b/src/main/window/terminal-tab-close-request-relay.ts index b3b7d6d7a65..df2d46d0ec5 100644 --- a/src/main/window/terminal-tab-close-request-relay.ts +++ b/src/main/window/terminal-tab-close-request-relay.ts @@ -6,7 +6,7 @@ import type { TerminalTabCloseRequest, TerminalTabCloseResponse } from '../../shared/terminal-tab-close' -import { addFanoutListener, addFanoutListeners } from '../event-listener-fanout' +import { addFanoutListener, addFanoutListeners } from '../runtime/events/event-listener-fanout' const TERMINAL_TAB_CLOSE_TIMEOUT_MS = 20_000 diff --git a/src/main/worker-thread-child-process/worker-thread-child-process.ts b/src/main/worker-thread-child-process/worker-thread-child-process.ts index b21c0fec975..f3a6526288b 100644 --- a/src/main/worker-thread-child-process/worker-thread-child-process.ts +++ b/src/main/worker-thread-child-process/worker-thread-child-process.ts @@ -1,8 +1,12 @@ import { EventEmitter } from 'node:events' import { existsSync } from 'node:fs' import { Worker } from 'node:worker_threads' -import { LazyWorkerThreadHost, type WorkerThreadFactory } from '../lazy-worker-thread-host' -import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath } from '../worker-thread-entry-path' +import { LazyWorkerThreadHost } from '../worker-threads/lazy-worker-thread-host' +import type { WorkerThreadFactory } from '../worker-threads/worker-thread-transport' +import { + currentWorkerEntryLayout, + resolveWorkerThreadEntryPath +} from '../worker-threads/worker-thread-entry-path' import type { WorkerThreadChildErrorPayload, WorkerThreadChildEvent, diff --git a/src/main/forked-child-entry-path.ts b/src/main/worker-threads/forked-child-entry-path.ts similarity index 95% rename from src/main/forked-child-entry-path.ts rename to src/main/worker-threads/forked-child-entry-path.ts index 37e901c702a..3fdbb0e57fc 100644 --- a/src/main/forked-child-entry-path.ts +++ b/src/main/worker-threads/forked-child-entry-path.ts @@ -1,6 +1,6 @@ import { existsSync } from 'node:fs' import { join } from 'node:path' -import { getAppEnvironment, hasAppEnvironment } from '../shared/app-environment' +import { getAppEnvironment, hasAppEnvironment } from '../../shared/app-environment' /** Plain-Node entries import this module; the build guard rejects literal Electron requires. */ export function resolveForkedChildEntryPath( diff --git a/src/main/lazy-worker-thread-host.ts b/src/main/worker-threads/lazy-worker-thread-host.ts similarity index 97% rename from src/main/lazy-worker-thread-host.ts rename to src/main/worker-threads/lazy-worker-thread-host.ts index 5b674f1c083..a3a0f5ea464 100644 --- a/src/main/lazy-worker-thread-host.ts +++ b/src/main/worker-threads/lazy-worker-thread-host.ts @@ -1,5 +1,4 @@ import type { WorkerRequestTransport, WorkerThreadFactory } from './worker-thread-transport' -export type { WorkerRequestTransport, WorkerThreadFactory } from './worker-thread-transport' /** Clients own request state and must fail queued calls when spawning fails. */ export class LazyWorkerThreadHost { diff --git a/src/main/worker-thread-entry-path.ts b/src/main/worker-threads/worker-thread-entry-path.ts similarity index 94% rename from src/main/worker-thread-entry-path.ts rename to src/main/worker-threads/worker-thread-entry-path.ts index 2673114ad5a..b269fd6dd62 100644 --- a/src/main/worker-thread-entry-path.ts +++ b/src/main/worker-threads/worker-thread-entry-path.ts @@ -1,5 +1,5 @@ import { basename, dirname, join } from 'node:path' -import { getAppEnvironment, hasAppEnvironment } from '../shared/app-environment' +import { getAppEnvironment, hasAppEnvironment } from '../../shared/app-environment' /** Keep this reachable from plain-Node entries; the build guard rejects Electron imports here. */ export type WorkerEntryLayout = { diff --git a/src/main/worker-thread-request-queue.test.ts b/src/main/worker-threads/worker-thread-request-queue.test.ts similarity index 100% rename from src/main/worker-thread-request-queue.test.ts rename to src/main/worker-threads/worker-thread-request-queue.test.ts diff --git a/src/main/worker-thread-request-queue.ts b/src/main/worker-threads/worker-thread-request-queue.ts similarity index 98% rename from src/main/worker-thread-request-queue.ts rename to src/main/worker-threads/worker-thread-request-queue.ts index 4b4eec256af..702e88a3a82 100644 --- a/src/main/worker-thread-request-queue.ts +++ b/src/main/worker-threads/worker-thread-request-queue.ts @@ -1,4 +1,5 @@ -import { LazyWorkerThreadHost, type WorkerThreadFactory } from './lazy-worker-thread-host' +import { LazyWorkerThreadHost } from './lazy-worker-thread-host' +import type { WorkerThreadFactory } from './worker-thread-transport' /** Serialize worker calls; failures must never move their work onto the main thread. */ diff --git a/src/main/worker-thread-transport.ts b/src/main/worker-threads/worker-thread-transport.ts similarity index 100% rename from src/main/worker-thread-transport.ts rename to src/main/worker-threads/worker-thread-transport.ts diff --git a/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.test.ts b/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.test.ts index dce2ebd319c..2186205ff05 100644 --- a/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.test.ts +++ b/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.test.ts @@ -12,7 +12,7 @@ const { snapshotWriteSpy, userDataDirHolder } = vi.hoisted(() => ({ userDataDirHolder: { dir: '' } })) -vi.mock('../../sidecar-snapshot-file', async (importOriginal) => { +vi.mock('../../filesystem/sidecar-snapshot-file', async (importOriginal) => { const actual = await importOriginal>() const writeSidecarSnapshot = actual.writeSidecarSnapshot as ( file: string, diff --git a/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.ts b/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.ts index 6e54bd68164..78b4a9966d0 100644 --- a/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.ts +++ b/src/main/workspaces/cleanup/workspace-cleanup-scan-snapshot.ts @@ -9,7 +9,7 @@ import { sidecarSnapshotFile, withSidecarSnapshotQueue, writeSidecarSnapshot -} from '../../sidecar-snapshot-file' +} from '../../filesystem/sidecar-snapshot-file' import type { ExecutionHostId } from '../../../shared/execution-host' import { activeWorkspaceSnapshotPruneKeys, diff --git a/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.test.ts b/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.test.ts index 9fcd07b7b2a..9321a6d62b2 100644 --- a/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.test.ts +++ b/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.test.ts @@ -12,7 +12,7 @@ const { snapshotWriteSpy, userDataDirHolder } = vi.hoisted(() => ({ userDataDirHolder: { dir: '' } })) -vi.mock('../../sidecar-snapshot-file', async (importOriginal) => { +vi.mock('../../filesystem/sidecar-snapshot-file', async (importOriginal) => { const actual = await importOriginal>() const writeSidecarSnapshot = actual.writeSidecarSnapshot as ( file: string, diff --git a/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.ts b/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.ts index f87a8d8bdd0..d1fe7e64181 100644 --- a/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.ts +++ b/src/main/workspaces/space-analysis/workspace-space-analysis-snapshot.ts @@ -7,7 +7,7 @@ import { sidecarSnapshotFile, withSidecarSnapshotQueue, writeSidecarSnapshot -} from '../../sidecar-snapshot-file' +} from '../../filesystem/sidecar-snapshot-file' import type { ExecutionHostId } from '../../../shared/execution-host' import { activeWorkspaceSnapshotPruneKeys, diff --git a/src/main/workspaces/space-analysis/workspace-space-scan-worker-client.ts b/src/main/workspaces/space-analysis/workspace-space-scan-worker-client.ts index 4f52b7ea3e7..bd81a405c12 100644 --- a/src/main/workspaces/space-analysis/workspace-space-scan-worker-client.ts +++ b/src/main/workspaces/space-analysis/workspace-space-scan-worker-client.ts @@ -3,11 +3,11 @@ import { Worker } from 'node:worker_threads' import type { Repo } from '../../../shared/repo-types' import type { Worktree } from '../../../shared/worktree/types' import type { WorkspaceSpaceWorktree } from '../../../shared/workspace-space-types' -import { WorkerThreadRequestQueue } from '../../worker-thread-request-queue' +import { WorkerThreadRequestQueue } from '../../worker-threads/worker-thread-request-queue' import { currentWorkerEntryLayout, resolveWorkerThreadEntryPath -} from '../../worker-thread-entry-path' +} from '../../worker-threads/worker-thread-entry-path' import type { WorkspaceSpaceScanWorkerRequest, WorkspaceSpaceScanWorkerResponse diff --git a/src/main/worktree-create-preparation-pool.ts b/src/main/worktree-create-preparation-pool.ts index 1f8c8ea0ac6..68713b327fc 100644 --- a/src/main/worktree-create-preparation-pool.ts +++ b/src/main/worktree-create-preparation-pool.ts @@ -11,7 +11,7 @@ import type { AddWorktreeOptions } from './git/worktree' import { prepareWorktreeCreateCheckout } from './git/worktree-create-preparation' import { WorktreePreparationLockOwnershipError } from './git/worktree-preparation-lock' import { queuePreparedWorktreeTipRefresh } from './worktree-preparation-refresh-queue' -import { toHostFilesystemPath } from './host-tree-removal' +import { toHostFilesystemPath } from './filesystem/host-tree-removal' import { createPreparationActivity } from './worktree-create-preparation-activity' import { profileStateAccessMachineIdentity } from './persistence/profile-state/profile-state-access-identity' import type { PreparationActivity } from './worktree-create-preparation-activity' diff --git a/src/main/worktree-create-preparation.ts b/src/main/worktree-create-preparation.ts index 0f3e25a5948..24bedb77b3e 100644 --- a/src/main/worktree-create-preparation.ts +++ b/src/main/worktree-create-preparation.ts @@ -40,7 +40,7 @@ import { recordPreparationConsume, resetPreparationConsumeHistoryForTests } from './worktree-create-preparation-burst' -import { toHostFilesystemPath } from './host-tree-removal' +import { toHostFilesystemPath } from './filesystem/host-tree-removal' import type { WorktreeCreateTimingRecorder } from './worktree-create-timing' export { diff --git a/src/main/worktree-removal-records.ts b/src/main/worktree-removal-records.ts index bb739870d81..33c55d9c48e 100644 --- a/src/main/worktree-removal-records.ts +++ b/src/main/worktree-removal-records.ts @@ -4,7 +4,7 @@ import { sidecarSnapshotFile, withSidecarSnapshotQueue, writeSidecarSnapshot -} from './sidecar-snapshot-file' +} from './filesystem/sidecar-snapshot-file' const RECORDS_FILE_NAME = 'orca-worktree-removals.json' const RECORDS_VERSION = 1 diff --git a/src/main/worktree-trash.ts b/src/main/worktree-trash.ts index 750840d571f..ae71909bbb3 100644 --- a/src/main/worktree-trash.ts +++ b/src/main/worktree-trash.ts @@ -2,7 +2,7 @@ import { lstat, readdir, rmdir } from 'node:fs/promises' import { join } from 'node:path' -import { removeHostTree } from './host-tree-removal' +import { removeHostTree } from './filesystem/host-tree-removal' import { isFolderRepo } from '../shared/repo-kind' import { computeWorkspaceRoot, getWorktreePathSettings } from './ipc/worktree-logic' import type { GlobalSettings } from '../shared/global-settings-types' diff --git a/src/main/wsl/wsl-directory-upload.ts b/src/main/wsl/wsl-directory-upload.ts index 491e8138a6f..0983dbb91a3 100644 --- a/src/main/wsl/wsl-directory-upload.ts +++ b/src/main/wsl/wsl-directory-upload.ts @@ -13,7 +13,11 @@ import { collectLocalUploadPlan, type LocalUploadPlan } from '../ssh/system-transport/system-ssh-file-transfer' -import { buildUstarEntryHeader, USTAR_BLOCK_BYTES, ustarPaddingBytes } from '../ustar-entry-header' +import { + buildUstarEntryHeader, + USTAR_BLOCK_BYTES, + ustarPaddingBytes +} from '../archive/ustar-entry-header' export const WSL_GUEST_SOURCE_UNAVAILABLE = 'ORCA_WSL_GUEST_SOURCE_UNAVAILABLE' export const WSL_UPLOAD_PROMOTED = 'ORCA_WSL_UPLOAD_PROMOTED' diff --git a/src/main/wsl/wsl-distro-holder-record.ts b/src/main/wsl/wsl-distro-holder-record.ts index 959ec4c7be8..86399d64a2e 100644 --- a/src/main/wsl/wsl-distro-holder-record.ts +++ b/src/main/wsl/wsl-distro-holder-record.ts @@ -4,7 +4,7 @@ import { durableWriteTempPath, removeStaleDurableWriteTempFiles, writeFileDurable -} from '../durable-file-write' +} from '../filesystem/durable-file-write' import { hasErrorCode } from '../daemon/daemon-process-inspection' /** Per-distro record intentionally survives Orca quit so the next launch can re-adopt the surviving holder. */ diff --git a/src/main/wsl/wsl-drive-unc-conversion-stores.ts b/src/main/wsl/wsl-drive-unc-conversion-stores.ts index 3673f9a4cbe..722e5d60742 100644 --- a/src/main/wsl/wsl-drive-unc-conversion-stores.ts +++ b/src/main/wsl/wsl-drive-unc-conversion-stores.ts @@ -12,7 +12,7 @@ import { durableWriteTempPath, syncDirectoryDurablySync, writeFileDurableSync -} from '../durable-file-write' +} from '../filesystem/durable-file-write' import { rewriteWslMoveOrchestrationHistoryFile } from '../persistence/moving-wsl-projects/wsl-move-orchestration-history-rewrite' import Database from '../sqlite/sync-database' import { hashWorktreeId } from '../terminal-history-id' diff --git a/src/main/wsl/wsl-unc-drive-file-content.test.ts b/src/main/wsl/wsl-unc-drive-file-content.test.ts index 4d822cbb0aa..056f6c20f66 100644 --- a/src/main/wsl/wsl-unc-drive-file-content.test.ts +++ b/src/main/wsl/wsl-unc-drive-file-content.test.ts @@ -85,7 +85,7 @@ vi.mock('node:fs/promises', async (importOriginal) => ({ import { readLocalFileContent } from '../ipc/filesystem/filesystem-file-content-inspection' import { readLocalFileRange } from '../ipc/filesystem/local-file-range-read' import { writeLocalTextFileWithDiskPrecondition } from '../ipc/filesystem/local-disk-write-precondition' -import { renameLocalPathSerializedByDestination } from '../destination-serialized-local-rename' +import { renameLocalPathSerializedByDestination } from '../filesystem/destination-serialized-local-rename' const UNC = String.raw`\\wsl.localhost\Ubuntu\mnt\c\src\app` const originalPlatform = process.platform diff --git a/src/shared/windows-private-credential-file.test.ts b/src/shared/windows-private-credential-file.test.ts index 4ba999dc85f..20536032a38 100644 --- a/src/shared/windows-private-credential-file.test.ts +++ b/src/shared/windows-private-credential-file.test.ts @@ -8,7 +8,7 @@ import { setWindowsSecurityForTests } from './windows-security-addon' import { readPrivateWindowsFile } from './secure-path-windows-acl' -import { writeCredentialFileAtomic } from '../main/integration-credential-file' +import { writeCredentialFileAtomic } from '../main/credentials/integration-credential-file' const roots: string[] = [] afterEach(() => {