diff --git a/.gitignore b/.gitignore index a3a0323..d47c77f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules/ # Build output dist/ +coverage/ # Environment files .env diff --git a/apps/server/db/ensure-schema.ts b/apps/server/db/ensure-schema.ts index 0cbe4fc..a1bb600 100644 --- a/apps/server/db/ensure-schema.ts +++ b/apps/server/db/ensure-schema.ts @@ -20,10 +20,10 @@ const log = createModuleLogger('db'); */ function getMigrationsPath(): string { const currentDir = dirname(fileURLToPath(import.meta.url)); - // In dev (tsx): apps/server/db/ — need 3 levels up to workspace root - // In dist (tsc): dist/db/ — need 2 levels up to workspace root - const upThree = join(currentDir, '..', '..', '..', 'drizzle'); - if (existsSync(upThree)) return upThree; + // Dev: apps/server/db/ → 1 up → apps/server/drizzle/ + // Dist: apps/server/dist/db/ → 2 up → apps/server/drizzle/ + const upOne = join(currentDir, '..', 'drizzle'); + if (existsSync(upOne)) return upOne; return join(currentDir, '..', '..', 'drizzle'); } diff --git a/drizzle/0000_bizarre_naoko.sql b/apps/server/drizzle/0000_bizarre_naoko.sql similarity index 100% rename from drizzle/0000_bizarre_naoko.sql rename to apps/server/drizzle/0000_bizarre_naoko.sql diff --git a/drizzle/0001_overrated_gladiator.sql b/apps/server/drizzle/0001_overrated_gladiator.sql similarity index 100% rename from drizzle/0001_overrated_gladiator.sql rename to apps/server/drizzle/0001_overrated_gladiator.sql diff --git a/drizzle/0002_bumpy_killraven.sql b/apps/server/drizzle/0002_bumpy_killraven.sql similarity index 100% rename from drizzle/0002_bumpy_killraven.sql rename to apps/server/drizzle/0002_bumpy_killraven.sql diff --git a/drizzle/0003_curly_ser_duncan.sql b/apps/server/drizzle/0003_curly_ser_duncan.sql similarity index 100% rename from drizzle/0003_curly_ser_duncan.sql rename to apps/server/drizzle/0003_curly_ser_duncan.sql diff --git a/drizzle/0004_white_captain_britain.sql b/apps/server/drizzle/0004_white_captain_britain.sql similarity index 100% rename from drizzle/0004_white_captain_britain.sql rename to apps/server/drizzle/0004_white_captain_britain.sql diff --git a/drizzle/0005_blushing_wendell_vaughn.sql b/apps/server/drizzle/0005_blushing_wendell_vaughn.sql similarity index 100% rename from drizzle/0005_blushing_wendell_vaughn.sql rename to apps/server/drizzle/0005_blushing_wendell_vaughn.sql diff --git a/drizzle/0006_curvy_sandman.sql b/apps/server/drizzle/0006_curvy_sandman.sql similarity index 100% rename from drizzle/0006_curvy_sandman.sql rename to apps/server/drizzle/0006_curvy_sandman.sql diff --git a/drizzle/0007_robust_the_watchers.sql b/apps/server/drizzle/0007_robust_the_watchers.sql similarity index 100% rename from drizzle/0007_robust_the_watchers.sql rename to apps/server/drizzle/0007_robust_the_watchers.sql diff --git a/drizzle/0008_eliminate_plans_table.sql b/apps/server/drizzle/0008_eliminate_plans_table.sql similarity index 100% rename from drizzle/0008_eliminate_plans_table.sql rename to apps/server/drizzle/0008_eliminate_plans_table.sql diff --git a/drizzle/0009_drop_account_config_dir.sql b/apps/server/drizzle/0009_drop_account_config_dir.sql similarity index 100% rename from drizzle/0009_drop_account_config_dir.sql rename to apps/server/drizzle/0009_drop_account_config_dir.sql diff --git a/drizzle/0010_add_account_credentials.sql b/apps/server/drizzle/0010_add_account_credentials.sql similarity index 100% rename from drizzle/0010_add_account_credentials.sql rename to apps/server/drizzle/0010_add_account_credentials.sql diff --git a/drizzle/0011_drop_initiative_description.sql b/apps/server/drizzle/0011_drop_initiative_description.sql similarity index 100% rename from drizzle/0011_drop_initiative_description.sql rename to apps/server/drizzle/0011_drop_initiative_description.sql diff --git a/drizzle/0012_add_agent_user_dismissed_at.sql b/apps/server/drizzle/0012_add_agent_user_dismissed_at.sql similarity index 100% rename from drizzle/0012_add_agent_user_dismissed_at.sql rename to apps/server/drizzle/0012_add_agent_user_dismissed_at.sql diff --git a/drizzle/0013_add_proposals_table.sql b/apps/server/drizzle/0013_add_proposals_table.sql similarity index 100% rename from drizzle/0013_add_proposals_table.sql rename to apps/server/drizzle/0013_add_proposals_table.sql diff --git a/drizzle/0014_add_exit_code_to_agents.sql b/apps/server/drizzle/0014_add_exit_code_to_agents.sql similarity index 100% rename from drizzle/0014_add_exit_code_to_agents.sql rename to apps/server/drizzle/0014_add_exit_code_to_agents.sql diff --git a/drizzle/0015_add_agent_log_chunks.sql b/apps/server/drizzle/0015_add_agent_log_chunks.sql similarity index 100% rename from drizzle/0015_add_agent_log_chunks.sql rename to apps/server/drizzle/0015_add_agent_log_chunks.sql diff --git a/drizzle/0016_add_phase_content.sql b/apps/server/drizzle/0016_add_phase_content.sql similarity index 100% rename from drizzle/0016_add_phase_content.sql rename to apps/server/drizzle/0016_add_phase_content.sql diff --git a/drizzle/0017_drop_phase_description.sql b/apps/server/drizzle/0017_drop_phase_description.sql similarity index 100% rename from drizzle/0017_drop_phase_description.sql rename to apps/server/drizzle/0017_drop_phase_description.sql diff --git a/drizzle/0018_drop_phase_number.sql b/apps/server/drizzle/0018_drop_phase_number.sql similarity index 100% rename from drizzle/0018_drop_phase_number.sql rename to apps/server/drizzle/0018_drop_phase_number.sql diff --git a/drizzle/0019_add_execution_mode.sql b/apps/server/drizzle/0019_add_execution_mode.sql similarity index 100% rename from drizzle/0019_add_execution_mode.sql rename to apps/server/drizzle/0019_add_execution_mode.sql diff --git a/drizzle/0020_add_change_sets.sql b/apps/server/drizzle/0020_add_change_sets.sql similarity index 100% rename from drizzle/0020_add_change_sets.sql rename to apps/server/drizzle/0020_add_change_sets.sql diff --git a/drizzle/0021_drop_proposals.sql b/apps/server/drizzle/0021_drop_proposals.sql similarity index 100% rename from drizzle/0021_drop_proposals.sql rename to apps/server/drizzle/0021_drop_proposals.sql diff --git a/drizzle/0022_branch_refactor.sql b/apps/server/drizzle/0022_branch_refactor.sql similarity index 100% rename from drizzle/0022_branch_refactor.sql rename to apps/server/drizzle/0022_branch_refactor.sql diff --git a/drizzle/0023_rename_breakdown_decompose.sql b/apps/server/drizzle/0023_rename_breakdown_decompose.sql similarity index 100% rename from drizzle/0023_rename_breakdown_decompose.sql rename to apps/server/drizzle/0023_rename_breakdown_decompose.sql diff --git a/drizzle/0024_add_conversations.sql b/apps/server/drizzle/0024_add_conversations.sql similarity index 100% rename from drizzle/0024_add_conversations.sql rename to apps/server/drizzle/0024_add_conversations.sql diff --git a/drizzle/0025_fix_agents_fk_constraints.sql b/apps/server/drizzle/0025_fix_agents_fk_constraints.sql similarity index 100% rename from drizzle/0025_fix_agents_fk_constraints.sql rename to apps/server/drizzle/0025_fix_agents_fk_constraints.sql diff --git a/drizzle/meta/0000_snapshot.json b/apps/server/drizzle/meta/0000_snapshot.json similarity index 100% rename from drizzle/meta/0000_snapshot.json rename to apps/server/drizzle/meta/0000_snapshot.json diff --git a/drizzle/meta/0001_snapshot.json b/apps/server/drizzle/meta/0001_snapshot.json similarity index 100% rename from drizzle/meta/0001_snapshot.json rename to apps/server/drizzle/meta/0001_snapshot.json diff --git a/drizzle/meta/0002_snapshot.json b/apps/server/drizzle/meta/0002_snapshot.json similarity index 100% rename from drizzle/meta/0002_snapshot.json rename to apps/server/drizzle/meta/0002_snapshot.json diff --git a/drizzle/meta/0003_snapshot.json b/apps/server/drizzle/meta/0003_snapshot.json similarity index 100% rename from drizzle/meta/0003_snapshot.json rename to apps/server/drizzle/meta/0003_snapshot.json diff --git a/drizzle/meta/0004_snapshot.json b/apps/server/drizzle/meta/0004_snapshot.json similarity index 100% rename from drizzle/meta/0004_snapshot.json rename to apps/server/drizzle/meta/0004_snapshot.json diff --git a/drizzle/meta/0005_snapshot.json b/apps/server/drizzle/meta/0005_snapshot.json similarity index 100% rename from drizzle/meta/0005_snapshot.json rename to apps/server/drizzle/meta/0005_snapshot.json diff --git a/drizzle/meta/0006_snapshot.json b/apps/server/drizzle/meta/0006_snapshot.json similarity index 100% rename from drizzle/meta/0006_snapshot.json rename to apps/server/drizzle/meta/0006_snapshot.json diff --git a/drizzle/meta/0007_snapshot.json b/apps/server/drizzle/meta/0007_snapshot.json similarity index 100% rename from drizzle/meta/0007_snapshot.json rename to apps/server/drizzle/meta/0007_snapshot.json diff --git a/drizzle/meta/_journal.json b/apps/server/drizzle/meta/_journal.json similarity index 100% rename from drizzle/meta/_journal.json rename to apps/server/drizzle/meta/_journal.json diff --git a/drizzle/relations.ts b/apps/server/drizzle/relations.ts similarity index 100% rename from drizzle/relations.ts rename to apps/server/drizzle/relations.ts diff --git a/drizzle/schema.ts b/apps/server/drizzle/schema.ts similarity index 100% rename from drizzle/schema.ts rename to apps/server/drizzle/schema.ts diff --git a/docs/database-migrations.md b/docs/database-migrations.md index 9b47735..5d149fe 100644 --- a/docs/database-migrations.md +++ b/docs/database-migrations.md @@ -5,13 +5,13 @@ This project uses [drizzle-kit](https://orm.drizzle.team/kit-docs/overview) for ## Overview - **Schema definition:** `apps/server/db/schema.ts` (drizzle-orm table definitions) -- **Migration output:** `drizzle/` directory (SQL files + meta journal) +- **Migration output:** `apps/server/drizzle/` directory (SQL files + meta journal) - **Config:** `drizzle.config.ts` - **Runtime migrator:** `apps/server/db/ensure-schema.ts` (calls `drizzle-orm/better-sqlite3/migrator`) ## How It Works -On every server startup, `ensureSchema(db)` runs all pending migrations from the `drizzle/` folder. Drizzle tracks applied migrations in a `__drizzle_migrations` table so only new migrations are applied. This is safe to call repeatedly. +On every server startup, `ensureSchema(db)` runs all pending migrations from the `apps/server/drizzle/` folder. Drizzle tracks applied migrations in a `__drizzle_migrations` table so only new migrations are applied. This is safe to call repeatedly. ## Workflow @@ -22,7 +22,7 @@ On every server startup, `ensureSchema(db)` runs all pending migrations from the ```bash npx drizzle-kit generate ``` -3. Review the generated SQL in `drizzle/NNNN_*.sql` +3. Review the generated SQL in `apps/server/drizzle/NNNN_*.sql` 4. Commit the migration file along with your schema change ### Applying migrations diff --git a/drizzle.config.ts b/drizzle.config.ts index 161a3c4..cb39bb8 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -4,7 +4,7 @@ import { homedir } from 'node:os'; export default defineConfig({ schema: './apps/server/db/schema.ts', - out: './drizzle', + out: './apps/server/drizzle', dialect: 'sqlite', dbCredentials: { url: process.env.CW_DB_PATH ?? join(homedir(), '.cw', 'data', 'cw.db'), diff --git a/package.json b/package.json index fd1e935..07aae5b 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,14 @@ "apps/*", "packages/*" ], - "main": "./dist/index.js", + "main": "./apps/server/dist/index.js", "bin": { - "cw": "./dist/bin/cw.js" + "cw": "./apps/server/dist/bin/cw.js" }, "scripts": { "build": "tsc", "dev": "tsx watch apps/server/bin/cw.ts", - "clean": "rimraf dist", + "clean": "rimraf apps/server/dist", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", diff --git a/tsconfig.json b/tsconfig.json index f48805c..fa08cdf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "outDir": "./dist", + "outDir": "./apps/server/dist", "rootDir": "./apps/server", "strict": true, "esModuleInterop": true, @@ -13,5 +13,5 @@ "resolveJsonModule": true }, "include": ["apps/server/**/*"], - "exclude": ["node_modules", "dist"] + "exclude": ["node_modules", "apps/server/dist", "apps/server/drizzle"] } diff --git a/vitest.config.ts b/vitest.config.ts index 3c324f3..8504de2 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -15,6 +15,7 @@ export default defineConfig({ coverage: { provider: 'v8', reporter: ['text', 'json', 'html'], + reportsDirectory: './apps/server/coverage', }, }, });