From 4306935dbc62070f946c4ff01a6e26d007d31ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E6=9C=88?= Date: Wed, 3 Jun 2026 00:22:13 +0800 Subject: [PATCH] refactor: remove legacy symlink migration code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove migrateStorageIfNeeded() which created symlinks from ~/.uncaged/workflow → ~/.uwf and ~/.uncaged/json-cas → ~/.ocas. This was temporary migration support. Users who still have old paths can run a one-time copy manually. Zero 'uncaged' references remain in active codebase. --- .../src/__tests__/store-storage-root.test.ts | 53 +------------------ packages/cli/src/cli.ts | 4 +- packages/cli/src/store.ts | 26 +-------- 3 files changed, 3 insertions(+), 80 deletions(-) diff --git a/packages/cli/src/__tests__/store-storage-root.test.ts b/packages/cli/src/__tests__/store-storage-root.test.ts index 333d70f..b62010f 100644 --- a/packages/cli/src/__tests__/store-storage-root.test.ts +++ b/packages/cli/src/__tests__/store-storage-root.test.ts @@ -1,13 +1,7 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test"; -import { lstat, mkdir, rm, writeFile } from "node:fs/promises"; import { homedir } from "node:os"; import { join } from "node:path"; -import { - getDefaultStorageRoot, - getGlobalCasDir, - migrateStorageIfNeeded, - resolveStorageRoot, -} from "../store.js"; +import { getDefaultStorageRoot, getGlobalCasDir, resolveStorageRoot } from "../store.js"; describe("Storage root resolution", () => { const envKeys = ["UWF_STORAGE_ROOT", "WORKFLOW_STORAGE_ROOT", "OCAS_DIR"] as const; @@ -55,48 +49,3 @@ describe("Storage root resolution", () => { expect(getGlobalCasDir()).toBe("/tmp/ocas-primary"); }); }); - -describe("migrateStorageIfNeeded", () => { - let fakeHome: string; - - beforeEach(async () => { - fakeHome = join( - homedir(), - `.uwf-migrate-test-${Date.now()}-${Math.random().toString(36).slice(2)}`, - ); - await mkdir(fakeHome, { recursive: true }); - }); - - afterEach(async () => { - await rm(fakeHome, { recursive: true, force: true }); - }); - - test("creates symlinks from legacy paths when new paths are missing", async () => { - const oldWorkflow = join(fakeHome, ".uncaged", "workflow"); - const oldCas = join(fakeHome, ".uncaged", "json-cas"); - await mkdir(oldWorkflow, { recursive: true }); - await mkdir(oldCas, { recursive: true }); - await writeFile(join(oldWorkflow, "config.yaml"), "defaultAgent: test\n", "utf8"); - - migrateStorageIfNeeded(fakeHome); - - const newWorkflow = join(fakeHome, ".uwf"); - const newCas = join(fakeHome, ".ocas"); - const workflowStat = await lstat(newWorkflow); - const casStat = await lstat(newCas); - expect(workflowStat.isSymbolicLink()).toBe(true); - expect(casStat.isSymbolicLink()).toBe(true); - }); - - test("skips migration when new paths already exist", async () => { - const oldWorkflow = join(fakeHome, ".uncaged", "workflow"); - const newWorkflow = join(fakeHome, ".uwf"); - await mkdir(oldWorkflow, { recursive: true }); - await mkdir(newWorkflow, { recursive: true }); - - migrateStorageIfNeeded(fakeHome); - - const stat = await lstat(newWorkflow); - expect(stat.isDirectory()).toBe(true); - }); -}); diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index e072feb..0fdb272 100755 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -30,9 +30,7 @@ import { import { parseTimeInput } from "./commands/thread-time-parser.js"; import { cmdWorkflowAdd, cmdWorkflowList, cmdWorkflowShow } from "./commands/workflow.js"; import { formatOutput, type OutputFormat } from "./format.js"; -import { migrateStorageIfNeeded, resolveStorageRoot } from "./store.js"; - -migrateStorageIfNeeded(); +import { resolveStorageRoot } from "./store.js"; function writeOutput(data: unknown): void { const fmt = program.opts().format as OutputFormat; diff --git a/packages/cli/src/store.ts b/packages/cli/src/store.ts index 17db95b..941664d 100644 --- a/packages/cli/src/store.ts +++ b/packages/cli/src/store.ts @@ -1,5 +1,5 @@ import type { Dirent } from "node:fs"; -import { existsSync, symlinkSync } from "node:fs"; +import { existsSync } from "node:fs"; import { access, mkdir, readdir, readFile, rename } from "node:fs/promises"; import { homedir } from "node:os"; import { join } from "node:path"; @@ -133,30 +133,6 @@ export function resolveStorageRoot(): string { return getDefaultStorageRoot(); } -/** Symlink legacy storage paths to ~/.uwf and ~/.ocas when upgrading from older installs. */ -export function migrateStorageIfNeeded(home: string = homedir()): void { - const oldPath = join(home, ".uncaged", "workflow"); - const newPath = join(home, ".uwf"); - - if (!existsSync(newPath) && existsSync(oldPath)) { - symlinkSync(oldPath, newPath); - // biome-ignore lint/suspicious/noConsole: migration notice - console.log("⚠️ Storage linked: ~/.uwf → legacy workflow directory (symlink)"); - // biome-ignore lint/suspicious/noConsole: migration notice - console.log( - " This symlink is temporary. Copy your data to ~/.uwf/ and remove the symlink in a future version.", - ); - } - - const oldCas = join(home, ".uncaged", "json-cas"); - const newCas = join(home, ".ocas"); - if (!existsSync(newCas) && existsSync(oldCas)) { - symlinkSync(oldCas, newCas); - // biome-ignore lint/suspicious/noConsole: migration notice - console.log("⚠️ CAS storage linked: ~/.ocas → legacy CAS directory (symlink)"); - } -} - /** * Deprecated: Use `getGlobalCasDir()` instead. * Returns the old CAS directory for backward compatibility.