- Move src/ → plugin/ with subdirectories: - plugin/core/ (business logic, models, store, permissions, utils, memory) - plugin/tools/ (query, resources) - plugin/commands/ (placeholder for slash commands) - plugin/hooks/ (placeholder for lifecycle hooks) - plugin/index.ts (wiring layer only, no business logic) - Add install.mjs with --install, --uninstall, --openclaw-profile-path - Add skills/ and docs/ root directories - Move planning docs (PLAN.md, FEAT.md, AGENT_TASKS.md) to docs/ - Remove old scripts/install.sh - Update tsconfig rootDir: src → plugin - Update README.md and README.zh.md with new layout - Bump version to 0.2.0 - All tests pass
19 lines
571 B
TypeScript
19 lines
571 B
TypeScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
export function ensureDirForFile(filePath: string): void {
|
|
const dir = path.dirname(filePath);
|
|
fs.mkdirSync(dir, { recursive: true });
|
|
}
|
|
|
|
export function readJsonFile<T>(filePath: string, fallback: T): T {
|
|
if (!fs.existsSync(filePath)) return fallback;
|
|
const raw = fs.readFileSync(filePath, "utf8");
|
|
return JSON.parse(raw) as T;
|
|
}
|
|
|
|
export function writeJsonFile(filePath: string, data: unknown): void {
|
|
ensureDirForFile(filePath);
|
|
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf8");
|
|
}
|