feat(KB-336): rename data directory from .kb to .fusion

- Rename data directory from .kb to .fusion across core, CLI, dashboard, and engine
- Update all path references in source files, tests, and CLI output
- Remove deprecated central-core infrastructure (central-core, central-db, central-integration)
- Remove obsolete test files (PlanningModeModal.test.tsx, ScheduleForm.test.tsx)
- Add changeset for the directory rename breaking change
This commit is contained in:
gsxdsm
2026-03-31 20:00:25 -07:00
parent 5ae3b1e891
commit 80ab88db3d
28 changed files with 116 additions and 108 deletions

View File

@@ -14,7 +14,7 @@ import { applyPresetToSelection, generatePresetId, validatePresetId } from "../u
* Each section groups related settings fields under a sidebar nav item.
* Sections have a `scope` to indicate where their settings are stored:
* - "global": User-level settings stored in ~/.pi/kb/settings.json (shared across projects)
* - "project": Project-specific settings stored in .kb/config.json
* - "project": Project-specific settings stored in .fusion/config.json
* - undefined: Section operates independently of settings storage (e.g. authentication)
*
* To add a new section:
@@ -1256,8 +1256,8 @@ export function SettingsModal({
<input
id="autoBackupDir"
type="text"
placeholder=".kb/backups"
value={form.autoBackupDir || ".kb/backups"}
placeholder=".fusion/backups"
value={form.autoBackupDir || ".fusion/backups"}
onChange={(e) =>
setForm((f) => ({ ...f, autoBackupDir: e.target.value }))
}

View File

@@ -455,7 +455,7 @@ describe("task file operations", () => {
await readFile(mockStore, "FN-123", "PROMPT.md");
expect(mockReadFile).toHaveBeenCalledWith(
"/project/.kb/tasks/KB-123/PROMPT.md",
"/project/.fusion/tasks/KB-123/PROMPT.md",
"utf-8",
);
});
@@ -476,7 +476,7 @@ describe("task file operations", () => {
await readFile(mockStore, "FN-123", "PROMPT.md");
expect(mockReadFile).toHaveBeenCalledWith(
"/project/.kb/tasks/KB-123/PROMPT.md",
"/project/.fusion/tasks/KB-123/PROMPT.md",
"utf-8",
);
});
@@ -597,7 +597,7 @@ describe("workspace operations", () => {
expect(result.content).toBe("Task description");
expect(mockReadFile).toHaveBeenCalledWith(
"/project/.kb/tasks/KB-123/PROMPT.md",
"/project/.fusion/tasks/KB-123/PROMPT.md",
"utf-8",
);
});
@@ -641,7 +641,7 @@ describe("workspace operations", () => {
expect(result.success).toBe(true);
expect(mockWriteFile).toHaveBeenCalledWith(
"/project/.kb/tasks/KB-123/output.txt",
"/project/.fusion/tasks/KB-123/output.txt",
"Task output",
"utf-8",
);

View File

@@ -96,7 +96,7 @@ async function getTaskBasePath(store: TaskStore, taskId: string): Promise<string
}
// Fall back to task directory
const rootDir = store.getRootDir();
return resolve(join(rootDir, ".kb", "tasks", taskId));
return resolve(join(rootDir, ".fusion", "tasks", taskId));
} catch (err: any) {
if (err.code === "ENOENT" || err.message?.includes("not found")) {
throw new FileServiceError(`Task ${taskId} not found`, "ENOTASK");

View File

@@ -1949,7 +1949,7 @@ export function createApiRoutes(store: TaskStore, options?: ServerOptions): Rout
// Remove PROMPT.md to force regeneration
const { rm } = await import("node:fs/promises");
const { join } = await import("node:path");
const promptPath = join(store.getRootDir(), ".kb", "tasks", task.id, "PROMPT.md");
const promptPath = join(store.getRootDir(), ".fusion", "tasks", task.id, "PROMPT.md");
await rm(promptPath, { force: true });
const updated = await store.getTask(task.id);