* chore: move @types/canvas-confetti to devDependencies, remove unused get-tsconfig direct dep * chore: configure knip with workspace entry points for all packages * refactor(shared): split 1119-line types.ts into domain modules under types/ * refactor: remove llm-service.ts shim, migrate all import sites to llm/service directly * refactor(settings): migrate 4 manually-resolved settings into conversion registry * refactor: split gmail-sync.ts into gmail-api, email-router, and thin orchestrator * refactor(orchestrator): extract useKeyboardShortcuts and usePipelineControls from OrchestratorPage Splits the 840-line OrchestratorPage into a thin orchestration shell (~480 lines) by extracting keyboard shortcut handling into useKeyboardShortcuts.ts and pipeline control logic into usePipelineControls.ts. Net negative line count across all files. * feat: create settings registry (Step 1) Introduces a single source of truth for all settings, combining schema definitions, default logic, parsing, and serialization into a single configuration object. * feat: derive schema, keys, and types from settings registry (Step 2) Derives AppSettings nested shape, SettingKey DB union, and updateSettingsSchema Zod shape automatically from the settings registry. * refactor: gut envSettings and remove settings-conversion (Step 3) Replaces manual env arrays with registry-driven maps in envSettings.ts. Deletes settings-conversion.ts since all parsing/defaults now live in the registry. * refactor: simplify getEffectiveSettings with generic loop (Step 4) Replaces ~334 lines of manual key-by-key unpacking with a generic registry-driven iteration loop (~40 lines). Models, typed, string, and virtual kinds are automatically derived. * refactor: simplify settingsUpdateRegistry (Step 5) Replaces ~350 lines of explicit per-key update handlers with a dynamic generic loop over the settings registry, properly routing persistence and side effects. * refactor(settings): implement nested settings registry and clean up tests - Migrate settings system to use a centralized nested registry (`settings-schema.ts`, `registry.ts`) - Remove obsolete flat-to-nested conversion logic (`settings-conversion.ts`) - Address Biome warnings by explicitly ignoring intentional `any` usage in generic runtime schema builder and registry logic - Clean up unused variables in test files (`SettingsPage.test.tsx`) to achieve a 100% green CI pipeline * refactor(settings): address PR comments on env data and registry parsing - Narrow `getEnvSettingsData` return type to `Partial<AppSettings>` to satisfy strict typing and omit 'typed' registry entries - Introduce `parseNonEmptyStringOrNull` for typed string settings so empty-string overrides cleanly fall back to defaults (matching original `||` logic) - Add missing unit tests for registry parse/serialize helpers (JSON, bools, numeric clamping)
115 lines
3.8 KiB
JSON
115 lines
3.8 KiB
JSON
{
|
|
"name": "job-ops-orchestrator",
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"description": "Unified orchestrator for job application pipeline",
|
|
"main": "src/server/index.ts",
|
|
"scripts": {
|
|
"dev": "concurrently \"npm run dev:server\" \"npm run dev:client\"",
|
|
"dev:server": "tsx watch src/server/index.ts",
|
|
"dev:client": "vite --host",
|
|
"check:all": "npm run check:types && npm run check:fix && npm run format:fix",
|
|
"ci": "biome ci",
|
|
"check": "biome check",
|
|
"check:fix": "biome check --write",
|
|
"check:types": "tsc --noEmit",
|
|
"format": "biome format",
|
|
"format:fix": "biome format --write",
|
|
"build:client": "vite build",
|
|
"start": "tsx src/server/index.ts",
|
|
"db:migrate": "tsx src/server/db/migrate.ts",
|
|
"db:migrate:prod": "tsx src/server/db/migrate.ts",
|
|
"db:clear": "tsx src/server/db/clear.ts",
|
|
"db:drop": "tsx src/server/db/clear.ts --drop",
|
|
"pipeline:run": "tsx src/server/pipeline/run.ts",
|
|
"test": "vitest",
|
|
"test:run": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@hookform/resolvers": "^5.2.2",
|
|
"@paralleldrive/cuid2": "^3.0.6",
|
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
"@radix-ui/react-checkbox": "1.3.2",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "2.1.15",
|
|
"@radix-ui/react-label": "^2.1.8",
|
|
"@radix-ui/react-popover": "1.1.15",
|
|
"@radix-ui/react-progress": "^1.1.8",
|
|
"@radix-ui/react-radio-group": "^1.3.8",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.8",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@tailwindcss/vite": "^4.1.18",
|
|
"@tanstack/react-query": "^5.90.21",
|
|
"better-sqlite3": "^11.6.0",
|
|
"canvas-confetti": "^1.9.4",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^17.2.3",
|
|
"drizzle-orm": "^0.38.2",
|
|
"express": "^4.18.2",
|
|
"framer-motion": "^12.34.3",
|
|
"html-to-text": "^9.0.5",
|
|
"jsdom": "^25.0.1",
|
|
"lucide-react": "^0.561.0",
|
|
"next-themes": "^0.4.6",
|
|
"react-hook-form": "^7.71.1",
|
|
"react-markdown": "^10.1.0",
|
|
"react-transition-group": "^4.4.5",
|
|
"recharts": "^2.12.5",
|
|
"remark-gfm": "^4.0.1",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.4.0",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"tinykeys": "^3.0.0",
|
|
"tsx": "^4.19.2",
|
|
"vaul": "^1.1.2",
|
|
"zod": "^3.23.8"
|
|
},
|
|
"devDependencies": {
|
|
"@biomejs/biome": "2.3.12",
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.1",
|
|
"@types/better-sqlite3": "^7.6.8",
|
|
"@types/canvas-confetti": "^1.9.0",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^4.17.21",
|
|
"@types/html-to-text": "^9.0.4",
|
|
"@types/jsdom": "^27.0.0",
|
|
"@types/node": "^22.10.1",
|
|
"@types/react": "18.3.12",
|
|
"@types/react-dom": "18.3.1",
|
|
"@types/react-transition-group": "^4.4.12",
|
|
"@vitejs/plugin-react": "^4.3.4",
|
|
"autoprefixer": "^10.4.22",
|
|
"concurrently": "^9.1.0",
|
|
"drizzle-kit": "^0.30.1",
|
|
"postcss": "^8.5.6",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-router-dom": "^7.0.2",
|
|
"tailwindcss": "^4.1.18",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5.7.2",
|
|
"vite": "^6.0.3",
|
|
"vitest": "^4.0.16"
|
|
},
|
|
"optionalDependencies": {
|
|
"@biomejs/cli-linux-x64": "^2.3.12",
|
|
"@rollup/rollup-linux-arm64-gnu": "^4.30.0",
|
|
"@rollup/rollup-linux-x64-gnu": "^4.30.0",
|
|
"@tailwindcss/oxide-linux-arm64-gnu": "4.1.18",
|
|
"@tailwindcss/oxide-linux-x64-gnu": "4.1.18",
|
|
"lightningcss-linux-arm64-gnu": "^1.29.3",
|
|
"lightningcss-linux-x64-gnu": "^1.29.3"
|
|
}
|
|
}
|