mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-15 02:42:45 +08:00
feat: remove old vanilla JS/CSS frontend, make React SPA the sole entry for ccw view
Remove the entire old template-based frontend (~106K lines) and make the React SPA the only way to access the ccw dashboard via `ccw view`. Key changes: - Delete all old frontend files: dashboard-css/ (37 CSS), dashboard-js/ (59 JS), assets/, dashboard.html, and legacy HTML templates - Delete dashboard-generator.ts and dashboard-generator-patch.ts - Simplify server.ts: remove ~234 lines of old frontend code (template constants, MODULE_CSS_FILES/MODULE_FILES arrays, generateServerDashboard(), /assets/* serving) - Rebase React frontend from /react/ to root / (vite.config.ts, react-frontend.ts) - Add /react/* -> /* 301 redirect for backward compatibility - Remove --frontend and --new CLI flags from view and serve commands - Remove generateDashboard export from public API (index.ts) - Simplify serve.ts and view.ts to always use React without conditional branching - Update all affected tests (unit, e2e) for React-only architecture BREAKING CHANGE: --frontend and --new CLI flags removed; generateDashboard export removed from ccw package; /react/ base path changed to /
This commit is contained in:
@@ -95,14 +95,25 @@ describe('path-validator utility module', async () => {
|
||||
assert.deepEqual(realpathCalls, [absolute]);
|
||||
});
|
||||
|
||||
it('validatePath rejects paths outside allowed directories', async () => {
|
||||
it('validatePath rejects paths outside allowed directories when sandbox is enabled', async () => {
|
||||
process.env.CCW_ENABLE_SANDBOX = '1';
|
||||
await assert.rejects(
|
||||
mod.validatePath('C:\\secret\\file.txt', { allowedDirectories: ['C:\\allowed'] }),
|
||||
(err: any) => err instanceof Error && err.message.includes('Access denied: path'),
|
||||
);
|
||||
});
|
||||
|
||||
it('validatePath re-checks symlink target after realpath', async () => {
|
||||
it('validatePath allows paths outside allowed directories when sandbox is disabled (default)', async () => {
|
||||
delete process.env.CCW_ENABLE_SANDBOX;
|
||||
const link = 'C:\\secret\\file.txt';
|
||||
realpathPlan.set(link, { type: 'return', value: link });
|
||||
|
||||
const result = await mod.validatePath(link, { allowedDirectories: ['C:\\allowed'] });
|
||||
assert.equal(result, 'C:/secret/file.txt');
|
||||
});
|
||||
|
||||
it('validatePath re-checks symlink target after realpath when sandbox is enabled', async () => {
|
||||
process.env.CCW_ENABLE_SANDBOX = '1';
|
||||
const link = 'C:\\allowed\\link.txt';
|
||||
realpathPlan.set(link, { type: 'return', value: 'C:\\secret\\target.txt' });
|
||||
|
||||
|
||||
Reference in New Issue
Block a user