diff --git a/.claude/settings.json b/.claude/settings.json index fa4bc827c6..4c3d6a1531 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -8,7 +8,7 @@ "type": "command", "timeout": 180, "statusMessage": "Running build + lint + typecheck before commit…", - "command": "node -e \"\nconst chunks = [];\nprocess.stdin.on('data', d => chunks.push(d));\nprocess.stdin.on('end', () => {\n const input = JSON.parse(Buffer.concat(chunks).toString());\n const cmd = input.tool_input?.command || '';\n if (!/git\\\\s+commit\\\\b/.test(cmd)) process.exit(0);\n const { execSync } = require('child_process');\n const cwd = execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();\n const steps = [\n ['bun run build', 'Build'],\n ['bun run lint', 'Lint'],\n ['bun run --filter \\'*\\' typecheck 2>&1 | grep -v \\'vitest\\\\|test\\\\.ts\\' || true', 'Typecheck'],\n ];\n const failures = [];\n for (const [script, label] of steps) {\n try { execSync(script, { cwd, stdio: 'pipe' }); }\n catch (e) {\n failures.push(label + ':\\\\n' + (e.stdout?.toString() || e.message).slice(0, 400));\n }\n }\n if (failures.length > 0) {\n process.stdout.write(JSON.stringify({\n continue: false,\n stopReason: '\\u274c Pre-commit checks failed:\\\\n\\\\n' + failures.join('\\\\n\\\\n') + '\\\\n\\\\nFix the issues above before committing.',\n }));\n }\n});\"" + "command": "node -e \"\nconst chunks = [];\nprocess.stdin.on('data', d => chunks.push(d));\nprocess.stdin.on('end', () => {\n const input = JSON.parse(Buffer.concat(chunks).toString());\n const cmd = input.tool_input?.command || '';\n if (!/git\\s+commit\\b/.test(cmd)) process.exit(0);\n const { execSync } = require('child_process');\n const fs = require('fs');\n const path = require('path');\n const os = require('os');\n // A leading 'cd ' in the command is the real target directory:\n // Claude Code prefixes this whenever the session's tracked cwd differs\n // from this hook process's own cwd (e.g. a sibling repo worktree) — the\n // hook process itself always inherits the primary working directory,\n // never the command's actual target.\n function resolveTargetDir() {\n const m = cmd.match(/^\\s*cd\\s+('([^']+)'|(\\S+))\\s*(?:&&|;|\\n|$)/);\n if (m) {\n let dir = m[2] || m[3];\n if (dir.startsWith('~')) dir = path.join(os.homedir(), dir.slice(1));\n dir = path.resolve(process.cwd(), dir);\n if (fs.existsSync(dir)) return dir;\n }\n return process.cwd();\n }\n const targetDir = resolveTargetDir();\n let repoRoot;\n try {\n repoRoot = execSync('git rev-parse --show-toplevel', { cwd: targetDir, encoding: 'utf8' }).trim();\n } catch {\n process.exit(0);\n }\n // Only this repo's own bun build/lint/typecheck applies — skip silently\n // for any other repo (e.g. a sibling Go/Python repo touched in the same session).\n const pkgPath = path.join(repoRoot, 'package.json');\n if (!fs.existsSync(pkgPath)) process.exit(0);\n let pkg;\n try {\n pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n } catch {\n process.exit(0);\n }\n if (pkg.name !== 'hyperframes-monorepo') process.exit(0);\n const steps = [\n ['bun run build', 'Build'],\n ['bun run lint', 'Lint'],\n ['bun run --filter \\'*\\' typecheck 2>&1 | grep -v \\'vitest\\\\|test\\\\.ts\\' || true', 'Typecheck'],\n ];\n const failures = [];\n for (const [script, label] of steps) {\n try {\n execSync(script, { cwd: repoRoot, stdio: 'pipe' });\n } catch (e) {\n failures.push(label + ':\\n' + (e.stdout?.toString() || e.message).slice(0, 400));\n }\n }\n if (failures.length > 0) {\n process.stdout.write(JSON.stringify({\n continue: false,\n stopReason: '❌ Pre-commit checks failed:\\n\\n' + failures.join('\\n\\n') + '\\n\\nFix the issues above before committing.',\n }));\n }\n});\"" } ] } diff --git a/lefthook.yml b/lefthook.yml index 44e676c7ee..ac248273b5 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -9,7 +9,7 @@ pre-commit: # Auto-format and re-stage so the committed snapshot is always formatted. # Replaces --check which only reports — that left unformatted files in # commits when the hook ran after the amend snapshot was taken. - run: bunx oxfmt --no-error-on-unmatched-pattern {staged_files} && git add {staged_files} + run: bunx oxfmt --no-error-on-unmatched-pattern {staged_files} && git add -f {staged_files} skills-manifest: glob: "skills/**" # Regenerate the freshness fingerprint when a skill changes, then re-stage diff --git a/packages/producer/node_modules/.bin/puppeteer b/packages/producer/node_modules/.bin/puppeteer deleted file mode 120000 index 833ff8ddb7..0000000000 --- a/packages/producer/node_modules/.bin/puppeteer +++ /dev/null @@ -1 +0,0 @@ -../puppeteer/lib/cjs/puppeteer/node/cli.js \ No newline at end of file diff --git a/packages/producer/node_modules/.bin/tsc b/packages/producer/node_modules/.bin/tsc deleted file mode 120000 index 0863208a6a..0000000000 --- a/packages/producer/node_modules/.bin/tsc +++ /dev/null @@ -1 +0,0 @@ -../typescript/bin/tsc \ No newline at end of file diff --git a/packages/producer/node_modules/.bin/tsserver b/packages/producer/node_modules/.bin/tsserver deleted file mode 120000 index f8f8f1a0c3..0000000000 --- a/packages/producer/node_modules/.bin/tsserver +++ /dev/null @@ -1 +0,0 @@ -../typescript/bin/tsserver \ No newline at end of file diff --git a/packages/producer/node_modules/.bin/tsx b/packages/producer/node_modules/.bin/tsx deleted file mode 120000 index f7282dd89e..0000000000 --- a/packages/producer/node_modules/.bin/tsx +++ /dev/null @@ -1 +0,0 @@ -../tsx/dist/cli.mjs \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/archivo-black b/packages/producer/node_modules/@fontsource/archivo-black deleted file mode 120000 index fbc481dc0d..0000000000 --- a/packages/producer/node_modules/@fontsource/archivo-black +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+archivo-black@5.2.8/node_modules/@fontsource/archivo-black \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/eb-garamond b/packages/producer/node_modules/@fontsource/eb-garamond deleted file mode 120000 index b54816b149..0000000000 --- a/packages/producer/node_modules/@fontsource/eb-garamond +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+eb-garamond@5.2.7/node_modules/@fontsource/eb-garamond \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/ibm-plex-mono b/packages/producer/node_modules/@fontsource/ibm-plex-mono deleted file mode 120000 index 140029c34a..0000000000 --- a/packages/producer/node_modules/@fontsource/ibm-plex-mono +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+ibm-plex-mono@5.2.7/node_modules/@fontsource/ibm-plex-mono \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/inter b/packages/producer/node_modules/@fontsource/inter deleted file mode 120000 index 1bf2eb5a13..0000000000 --- a/packages/producer/node_modules/@fontsource/inter +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+inter@5.2.8/node_modules/@fontsource/inter \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/jetbrains-mono b/packages/producer/node_modules/@fontsource/jetbrains-mono deleted file mode 120000 index 14a85c74cd..0000000000 --- a/packages/producer/node_modules/@fontsource/jetbrains-mono +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+jetbrains-mono@5.2.8/node_modules/@fontsource/jetbrains-mono \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/lato b/packages/producer/node_modules/@fontsource/lato deleted file mode 120000 index de4f30fb22..0000000000 --- a/packages/producer/node_modules/@fontsource/lato +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+lato@5.2.7/node_modules/@fontsource/lato \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/league-gothic b/packages/producer/node_modules/@fontsource/league-gothic deleted file mode 120000 index 6a599e57d8..0000000000 --- a/packages/producer/node_modules/@fontsource/league-gothic +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+league-gothic@5.2.8/node_modules/@fontsource/league-gothic \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/montserrat b/packages/producer/node_modules/@fontsource/montserrat deleted file mode 120000 index abbeb2d345..0000000000 --- a/packages/producer/node_modules/@fontsource/montserrat +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+montserrat@5.2.8/node_modules/@fontsource/montserrat \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/noto-sans-jp b/packages/producer/node_modules/@fontsource/noto-sans-jp deleted file mode 120000 index 51c28b998d..0000000000 --- a/packages/producer/node_modules/@fontsource/noto-sans-jp +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+noto-sans-jp@5.2.9/node_modules/@fontsource/noto-sans-jp \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/nunito b/packages/producer/node_modules/@fontsource/nunito deleted file mode 120000 index e79a9ae770..0000000000 --- a/packages/producer/node_modules/@fontsource/nunito +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+nunito@5.2.7/node_modules/@fontsource/nunito \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/open-sans b/packages/producer/node_modules/@fontsource/open-sans deleted file mode 120000 index 13ee61cb83..0000000000 --- a/packages/producer/node_modules/@fontsource/open-sans +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+open-sans@5.2.7/node_modules/@fontsource/open-sans \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/oswald b/packages/producer/node_modules/@fontsource/oswald deleted file mode 120000 index da415b169c..0000000000 --- a/packages/producer/node_modules/@fontsource/oswald +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+oswald@5.2.8/node_modules/@fontsource/oswald \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/outfit b/packages/producer/node_modules/@fontsource/outfit deleted file mode 120000 index bb81a7df04..0000000000 --- a/packages/producer/node_modules/@fontsource/outfit +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+outfit@5.2.8/node_modules/@fontsource/outfit \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/playfair-display b/packages/producer/node_modules/@fontsource/playfair-display deleted file mode 120000 index 6d9d55a1f6..0000000000 --- a/packages/producer/node_modules/@fontsource/playfair-display +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+playfair-display@5.2.8/node_modules/@fontsource/playfair-display \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/poppins b/packages/producer/node_modules/@fontsource/poppins deleted file mode 120000 index 62c1ad7868..0000000000 --- a/packages/producer/node_modules/@fontsource/poppins +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+poppins@5.2.7/node_modules/@fontsource/poppins \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/roboto b/packages/producer/node_modules/@fontsource/roboto deleted file mode 120000 index 043bf0a8b7..0000000000 --- a/packages/producer/node_modules/@fontsource/roboto +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+roboto@5.2.10/node_modules/@fontsource/roboto \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/source-code-pro b/packages/producer/node_modules/@fontsource/source-code-pro deleted file mode 120000 index f4ea15d758..0000000000 --- a/packages/producer/node_modules/@fontsource/source-code-pro +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+source-code-pro@5.2.7/node_modules/@fontsource/source-code-pro \ No newline at end of file diff --git a/packages/producer/node_modules/@fontsource/space-mono b/packages/producer/node_modules/@fontsource/space-mono deleted file mode 120000 index 18459a3fe5..0000000000 --- a/packages/producer/node_modules/@fontsource/space-mono +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@fontsource+space-mono@5.2.9/node_modules/@fontsource/space-mono \ No newline at end of file diff --git a/packages/producer/node_modules/@hono/node-server b/packages/producer/node_modules/@hono/node-server deleted file mode 120000 index 800b92aa61..0000000000 --- a/packages/producer/node_modules/@hono/node-server +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@hono+node-server@1.19.14+6cc71d4692e16749/node_modules/@hono/node-server \ No newline at end of file diff --git a/packages/producer/node_modules/@hyperframes/core b/packages/producer/node_modules/@hyperframes/core deleted file mode 120000 index 5e990a8233..0000000000 --- a/packages/producer/node_modules/@hyperframes/core +++ /dev/null @@ -1 +0,0 @@ -../../../core \ No newline at end of file diff --git a/packages/producer/node_modules/@hyperframes/engine b/packages/producer/node_modules/@hyperframes/engine deleted file mode 120000 index 4f4e7c42dc..0000000000 --- a/packages/producer/node_modules/@hyperframes/engine +++ /dev/null @@ -1 +0,0 @@ -../../../engine \ No newline at end of file diff --git a/packages/producer/node_modules/@webgpu/types b/packages/producer/node_modules/@webgpu/types deleted file mode 120000 index 5621cfa863..0000000000 --- a/packages/producer/node_modules/@webgpu/types +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/.bun/@webgpu+types@0.1.70/node_modules/@webgpu/types \ No newline at end of file diff --git a/packages/producer/node_modules/hono b/packages/producer/node_modules/hono deleted file mode 120000 index 31605dfdb3..0000000000 --- a/packages/producer/node_modules/hono +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/hono@4.12.18/node_modules/hono \ No newline at end of file diff --git a/packages/producer/node_modules/linkedom b/packages/producer/node_modules/linkedom deleted file mode 120000 index 123065f6b9..0000000000 --- a/packages/producer/node_modules/linkedom +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/linkedom@0.18.12/node_modules/linkedom \ No newline at end of file diff --git a/packages/producer/node_modules/postcss b/packages/producer/node_modules/postcss deleted file mode 120000 index 709373f6a0..0000000000 --- a/packages/producer/node_modules/postcss +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/postcss@8.5.14/node_modules/postcss \ No newline at end of file diff --git a/packages/producer/node_modules/puppeteer b/packages/producer/node_modules/puppeteer deleted file mode 120000 index d7eae96123..0000000000 --- a/packages/producer/node_modules/puppeteer +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/puppeteer@24.43.1+1fb4c65d43e298b9/node_modules/puppeteer \ No newline at end of file diff --git a/packages/producer/node_modules/puppeteer-core b/packages/producer/node_modules/puppeteer-core deleted file mode 120000 index c36460890a..0000000000 --- a/packages/producer/node_modules/puppeteer-core +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/puppeteer-core@24.43.1/node_modules/puppeteer-core \ No newline at end of file diff --git a/packages/producer/node_modules/tsx b/packages/producer/node_modules/tsx deleted file mode 120000 index 3d7426c25a..0000000000 --- a/packages/producer/node_modules/tsx +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/tsx@4.21.0/node_modules/tsx \ No newline at end of file diff --git a/packages/producer/node_modules/typescript b/packages/producer/node_modules/typescript deleted file mode 120000 index 597fd69ba4..0000000000 --- a/packages/producer/node_modules/typescript +++ /dev/null @@ -1 +0,0 @@ -../../../node_modules/.bun/typescript@5.9.3/node_modules/typescript \ No newline at end of file