{"owner":"Innei","repo":"Shiro","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":10410,"categories":["anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["packages/types/pnpm-lock.yaml","packages/types/package.json",".claude/skills/sync-upstream-feature/SKILL.md","packages/types/tsconfig.json"],"skills":{"packages/types/pnpm-lock.yaml":"lockfileVersion: '9.0'\n\nsettings:\n  autoInstallPeers: true\n  excludeLinksFromLockfile: false\n\nimporters:\n\n  .:\n    devDependencies:\n      tsdown:\n        specifier: 0.11.11\n        version: 0.11.11(typescript@5.6.2)\n\npackages:\n\n  '@babel/generator@7.27.1':\n    resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-string-parser@7.27.1':\n    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-validator-identifier@7.27.1':\n    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/parser@7.27.2':\n    resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}\n    engines: {node: '>=6.0.0'}\n    hasBin: true\n\n  '@babel/types@7.27.1':\n    resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}\n    engines: {node: '>=6.9.0'}\n\n  '@emnapi/core@1.4.3':\n    resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}\n\n  '@emnapi/runtime@1.4.3':\n    resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}\n\n  '@emnapi/wasi-threads@1.0.2':\n    resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}\n\n  '@jridgewell/gen-mapping@0.3.5':\n    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/resolve-uri@3.1.2':\n    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/set-array@1.2.1':\n    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/sourcemap-codec@1.5.0':\n    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==}\n\n  '@oxc-project/types@0.69.0':\n    resolution: {integrity: sha512-bu3gzdAlLgncoaqyqWVpMAKx4axo+j3ewvvdAt5iCLtvHB/n3Qeif67NU+2TM/ami1nV5/KVO9lxCH8paPATBA==}\n\n  '@quansync/fs@0.1.3':\n    resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}\n    engines: {node: '>=20.0.0'}\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-Qnj12Et8isg99mLZoWYKCdepAUVVeBNdpBKAG/L+jEz6sQ2L2FhHB4owmF3wXyzHVzLUmhT1Io1q49vBEldbjQ==}\n    cpu: [arm64]\n    os: [darwin]\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-xgkCsHfe353jWscfOay8eyHdj/jg9Qp7fEsB9k1+YGnfinBtRbyAVhJ6LmZOVNfchN316bB59l4HFIL01S/kMQ==}\n    cpu: [x64]\n    os: [darwin]\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-H6ZAQq4B0D03sGxVn5KDCHnopXV+QHoYk2yemRqSx4tjXDnynt8fRXxdjDbBcsmlxSp/l4t/zKeSzVjXRIT3RA==}\n    cpu: [x64]\n    os: [freebsd]\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-GwxeaGEC/qfgnd63SsklcQft04ygrnJDzdIbH5FvMPZ2L7eQ6FqhYYfF2aoQqnjgim5UO5BrFm97EmSjDWhBsA==}\n    cpu: [arm]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-ItBOhvZtYHIGJ1AtX7xf7v0RvZbXgdsv5gHk8vDykGMAbl+t4Wa9OJIIa6C8V2nBFJXWH+14GudrEfQfQUFbtQ==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-UiHjNo1ffN9Nt53mmawmnuVn2l9vdYGd91XxFrOTrEKRxO5bJL6wBhd82t+uBeHWycR/6qlSCJkTsHJQPf2UbA==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-p3sIHw1vmqqK70474mEvyl0aj1PvvUEWiKxG+zvpNRTzWxcTxrsRCtlqxTJ1A8R0z76tdn00PsMQrFOSMnLotQ==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-STOhk06GmHu/mvrZnp32JkQAN07g1ZjuaChf8r0/7NnnOIg6xiTcBxhMxL5hTR7os075ziRRUoHlfEssIJxSBw==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-18l5SdnDs49KuWsJ1ZjxQ72f4OBv++wQDkYeTkIDFON+lWIY6pCc4Zb7ehD8aflq6gisokt0GsZWO8Dyi7iqrA==}\n    engines: {node: '>=14.21.3'}\n    cpu: [wasm32]\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-LqyxWnfBr0IkLVrFwBxARbEUYcpzXgDaBCqBn1rrKiLt6KUxoTA95WWkHQhYFjqmQHJOoBAFHXykoRpqdJPH9w==}\n    cpu: [arm64]\n    os: [win32]\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-v4DdzJg8hmZL2koD/CphCUK79oCfdVnGLkCXmNhlmNId9f/6e0xKYgMnxcKL6B/ToM+Jl0iiVfGpKPE3ss+a1g==}\n    cpu: [ia32]\n    os: [win32]\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-4WHgT6kseymPm32LrUISpKnX/rX1YAPsfys7uWUm4sdEHJA16kX7ZLCDrAkgNMfbYD3ZuMzEnV6pbD2bDHQn0A==}\n    cpu: [x64]\n    os: [win32]\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-m0VRAx0VjzbiV55GPB3kRbxonm9pkiTzn5HVu/xWfCqGfnFY2G9bjJCnwwZ+pNE0Lg/dppOYHfnPIZcOLgF4tg==}\n\n  '@tybys/wasm-util@0.9.0':\n    resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}\n\n  ansis@4.0.0:\n    resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==}\n    engines: {node: '>=14'}\n\n  ast-kit@2.0.0:\n    resolution: {integrity: sha512-P63jzlYNz96MF9mCcprU+a7I5/ZQ5QAn3y+mZcPWEcGV3CHF/GWnkFPj3oCrWLUjL47+PD9PNiCUdXxw0cWdsg==}\n    engines: {node: '>=20.18.0'}\n\n  birpc@2.3.0:\n    resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}\n\n  cac@6.7.14:\n    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}\n    engines: {node: '>=8'}\n\n  chokidar@4.0.3:\n    resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}\n    engines: {node: '>= 14.16.0'}\n\n  debug@4.4.1:\n    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}\n    engines: {node: '>=6.0'}\n    peerDependencies:\n      supports-color: '*'\n    peerDependenciesMeta:\n      supports-color:\n        optional: true\n\n  defu@6.1.4:\n    resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}\n\n  diff@8.0.1:\n    resolution: {integrity: sha512-rEaM3KmVm78zE3dFZaop3aCQa2MTm+T4kcigUFLVU/KbOYdiY6JnL2g2puOYnct3QFw9pjZadaCbCZ1O8ArMlQ==}\n    engines: {node: '>=0.3.1'}\n\n  dts-resolver@2.0.1:\n    resolution: {integrity: sha512-Pe2kqaQTNVxleYpt9Q9658fn6rEpoZbMbDpEBbcU6pnuGM3Q0IdM+Rv67kN6qcyp8Bv2Uv9NYy5Y1rG1LSgfoQ==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      oxc-resolver: ^9.0.2\n    peerDependenciesMeta:\n      oxc-resolver:\n        optional: true\n\n  empathic@1.1.0:\n    resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==}\n    engines: {node: '>=14'}\n\n  fdir@6.4.4:\n    resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}\n    peerDependencies:\n      picomatch: ^3 || ^4\n    peerDependenciesMeta:\n      picomatch:\n        optional: true\n\n  get-tsconfig@4.10.0:\n    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}\n\n  hookable@5.5.3:\n    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}\n\n  jiti@2.4.2:\n    resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}\n    hasBin: true\n\n  jsesc@3.1.0:\n    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}\n    engines: {node: '>=6'}\n    hasBin: true\n\n  ms@2.1.3:\n    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}\n\n  pathe@2.0.3:\n    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}\n\n  picomatch@4.0.2:\n    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}\n    engines: {node: '>=12'}\n\n  quansync@0.2.10:\n    resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}\n\n  readdirp@4.1.2:\n    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}\n    engines: {node: '>= 14.18.0'}\n\n  resolve-pkg-maps@1.0.0:\n    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}\n\n  rolldown-plugin-dts@0.13.2:\n    resolution: {integrity: sha512-3/jQZ2d+cOFuPQZ/QC0wmGQv3n6XbJswEgNIPaUoNusTtBrl2Owxn05EOhosr3jkv8eUlzOX4rf9klt2z14SRg==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      rolldown: ^1.0.0-beta.8-commit.2a5c6a6\n      typescript: ^5.0.0\n      vue-tsc: ~2.2.0\n    peerDependenciesMeta:\n      typescript:\n        optional: true\n      vue-tsc:\n        optional: true\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    resolution: {integrity: sha512-A/10eaVhZhiRyHPz5jMQN4MU2i4JQGSci0vcqqhuozk/sertEUmZHkwHntNBKujdRdgG99apR2LSWYUsU7iKbA==}\n    hasBin: true\n    peerDependencies:\n      '@oxc-project/runtime': 0.69.0\n    peerDependenciesMeta:\n      '@oxc-project/runtime':\n        optional: true\n\n  semver@7.7.2:\n    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}\n    engines: {node: '>=10'}\n    hasBin: true\n\n  tinyexec@1.0.1:\n    resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}\n\n  tinyglobby@0.2.13:\n    resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}\n    engines: {node: '>=12.0.0'}\n\n  tsdown@0.11.11:\n    resolution: {integrity: sha512-Hd3rOtoOKsHxBOQ9PhNkwe6nfkLtELQaV6cvIvqzVnU3SS42DChIdtK1kR48F9yBSrc7/InuLTlpayQbys18mw==}\n    engines: {node: '>=18.0.0'}\n    hasBin: true\n    peerDependencies:\n      publint: ^0.3.0\n      typescript: ^5.0.0\n      unplugin-lightningcss: ^0.4.0\n      unplugin-unused: ^0.5.0\n    peerDependenciesMeta:\n      publint:\n        optional: true\n      typescript:\n        optional: true\n      unplugin-lightningcss:\n        optional: true\n      unplugin-unused:\n        optional: true\n\n  tslib@2.8.1:\n    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}\n\n  typescript@5.6.2:\n    resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}\n    engines: {node: '>=14.17'}\n    hasBin: true\n\n  unconfig@7.3.2:\n    resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}\n\nsnapshots:\n\n  '@babel/generator@7.27.1':\n    dependencies:\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      '@jridgewell/gen-mapping': 0.3.5\n      '@jridgewell/trace-mapping': 0.3.25\n      jsesc: 3.1.0\n\n  '@babel/helper-string-parser@7.27.1': {}\n\n  '@babel/helper-validator-identifier@7.27.1': {}\n\n  '@babel/parser@7.27.2':\n    dependencies:\n      '@babel/types': 7.27.1\n\n  '@babel/types@7.27.1':\n    dependencies:\n      '@babel/helper-string-parser': 7.27.1\n      '@babel/helper-validator-identifier': 7.27.1\n\n  '@emnapi/core@1.4.3':\n    dependencies:\n      '@emnapi/wasi-threads': 1.0.2\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/runtime@1.4.3':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/wasi-threads@1.0.2':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@jridgewell/gen-mapping@0.3.5':\n    dependencies:\n      '@jridgewell/set-array': 1.2.1\n      '@jridgewell/sourcemap-codec': 1.5.0\n      '@jridgewell/trace-mapping': 0.3.25\n\n  '@jridgewell/resolve-uri@3.1.2': {}\n\n  '@jridgewell/set-array@1.2.1': {}\n\n  '@jridgewell/sourcemap-codec@1.5.0': {}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    dependencies:\n      '@jridgewell/resolve-uri': 3.1.2\n      '@jridgewell/sourcemap-codec': 1.5.0\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    dependencies:\n      '@emnapi/core': 1.4.3\n      '@emnapi/runtime': 1.4.3\n      '@tybys/wasm-util': 0.9.0\n    optional: true\n\n  '@oxc-project/types@0.69.0': {}\n\n  '@quansync/fs@0.1.3':\n    dependencies:\n      quansync: 0.2.10\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    dependencies:\n      '@napi-rs/wasm-runtime': 0.2.10\n    optional: true\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e': {}\n\n  '@tybys/wasm-util@0.9.0':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  ansis@4.0.0: {}\n\n  ast-kit@2.0.0:\n    dependencies:\n      '@babel/parser': 7.27.2\n      pathe: 2.0.3\n\n  birpc@2.3.0: {}\n\n  cac@6.7.14: {}\n\n  chokidar@4.0.3:\n    dependencies:\n      readdirp: 4.1.2\n\n  debug@4.4.1:\n    dependencies:\n      ms: 2.1.3\n\n  defu@6.1.4: {}\n\n  diff@8.0.1: {}\n\n  dts-resolver@2.0.1: {}\n\n  empathic@1.1.0: {}\n\n  fdir@6.4.4(picomatch@4.0.2):\n    optionalDependencies:\n      picomatch: 4.0.2\n\n  get-tsconfig@4.10.0:\n    dependencies:\n      resolve-pkg-maps: 1.0.0\n\n  hookable@5.5.3: {}\n\n  jiti@2.4.2: {}\n\n  jsesc@3.1.0: {}\n\n  ms@2.1.3: {}\n\n  pathe@2.0.3: {}\n\n  picomatch@4.0.2: {}\n\n  quansync@0.2.10: {}\n\n  readdirp@4.1.2: {}\n\n  resolve-pkg-maps@1.0.0: {}\n\n  rolldown-plugin-dts@0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2):\n    dependencies:\n      '@babel/generator': 7.27.1\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      ast-kit: 2.0.0\n      birpc: 2.3.0\n      debug: 4.4.1\n      dts-resolver: 2.0.1\n      get-tsconfig: 4.10.0\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - oxc-resolver\n      - supports-color\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    dependencies:\n      '@oxc-project/types': 0.69.0\n      '@rolldown/pluginutils': 1.0.0-beta.8-commit.d95f99e\n      ansis: 4.0.0\n    optionalDependencies:\n      '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.d95f99e\n\n  semver@7.7.2: {}\n\n  tinyexec@1.0.1: {}\n\n  tinyglobby@0.2.13:\n    dependencies:\n      fdir: 6.4.4(picomatch@4.0.2)\n      picomatch: 4.0.2\n\n  tsdown@0.11.11(typescript@5.6.2):\n    dependencies:\n      ansis: 4.0.0\n      cac: 6.7.14\n      chokidar: 4.0.3\n      debug: 4.4.1\n      diff: 8.0.1\n      empathic: 1.1.0\n      hookable: 5.5.3\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n      rolldown-plugin-dts: 0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2)\n      semver: 7.7.2\n      tinyexec: 1.0.1\n      tinyglobby: 0.2.13\n      unconfig: 7.3.2\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - '@oxc-project/runtime'\n      - oxc-resolver\n      - supports-color\n      - vue-tsc\n\n  tslib@2.8.1:\n    optional: true\n\n  typescript@5.6.2:\n    optional: true\n\n  unconfig@7.3.2:\n    dependencies:\n      '@quansync/fs': 0.1.3\n      defu: 6.1.4\n      jiti: 2.4.2\n      quansync: 0.2.10\n","packages/types/package.json":"{\n  \"name\": \"shiro-types\",\n  \"version\": \"0.0.38\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\"\n    },\n    \"./sandbox\": {\n      \"import\": \"./dist/sandbox.mjs\"\n    },\n    \"./styles\": \"./dist/styles.css\"\n  },\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"scripts\": {\n    \"build\": \"tsdown && cd ../../apps/web && tailwindcss -i src/styles/index.css -o ../../packages/types/dist/styles.css\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"25.0.10\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"tsdown\": \"0.14.0\"\n  }\n}",".claude/skills/sync-upstream-feature/SKILL.md":"---\nname: sync-upstream-feature\ndescription: Use when porting a feature from the closed-source Shiroi repo to the open-source Shiro repo. Triggers on \"sync from upstream\", \"port feature from Shiroi\", \"bring X from Shiroi to Shiro\", or any task requiring code migration between the two repos.\n---\n\n# Sync Upstream Feature\n\n## Overview\n\nPort features stripped during Shiroi-to-Shiro sync back into the open-source repo. The closed-source Shiroi repo lives at `/Users/innei/git/innei-repo/Shiroi`, the open-source Shiro at `/Users/innei/git/innei-repo/Shiro`.\n\n## Repo Layout\n\n| Repo | Path | Role |\n|------|------|------|\n| Shiro | `/Users/innei/git/innei-repo/Shiro` | Open-source, primary working dir |\n| Shiroi | `/Users/innei/git/innei-repo/Shiroi` | Closed-source upstream, read-only reference |\n\nBoth share the same monorepo structure (`apps/web/src/...`). Shiroi is the superset.\n\n## Workflow\n\n```dot\ndigraph sync {\n  rankdir=TB;\n  node [shape=box];\n\n  explore [label=\"1. Explore: find target code in both repos\"];\n  diff [label=\"2. Diff: identify what Shiroi has that Shiro lacks\"];\n  layers [label=\"3. Map all touchpoints across layers\"];\n  deps [label=\"4. Add dependencies (package.json)\"];\n  core [label=\"5. Port core components\"];\n  integrate [label=\"6. Wire into routing (Content, Markdown, page)\"];\n  api [label=\"7. Sync API query params\"];\n  style [label=\"8. Sync conditional styling\"];\n  lint [label=\"9. Lint/typecheck modified files only\"];\n  review [label=\"10. Code review via Codex\"];\n\n  explore -> diff -> layers -> deps -> core -> integrate -> api -> style -> lint -> review;\n}\n```\n\n### 1. Explore Both Repos\n\nUse parallel Explore agents to search the target feature keyword in both repos. Identify:\n- Which files exist in Shiroi but not Shiro\n- Which files exist in both but differ\n- Which dependencies Shiroi has that Shiro lacks\n\n### 2. Diff: Identify the Gap\n\nCompare key files side-by-side. Focus on:\n- **Component files**: Shiroi may have extra renderers, wrappers, or providers\n- **Routing files** (`*Content.tsx`): Shiroi branches on a discriminator (e.g. `contentFormat`), Shiro always takes one path\n- **Lazy-load entries** (`*Markdown.tsx`): Used in preview/peek contexts, often overlooked\n- **API query definitions** (`queries/definition/*.ts`): Shiroi may pass extra params (e.g. `prefer: 'lexical'`)\n- **Server-side API files** (`api.ts`): Direct `apiClient` calls may also need params\n\n### 3. Map All Touchpoints\n\nA feature typically spans these layers (check ALL):\n\n| Layer | Files | What to sync |\n|-------|-------|--------------|\n| Dependencies | `package.json`, `pnpm-lock.yaml` | New npm packages |\n| Core components | `components/ui/...` | Rendering logic |\n| Route renderers | `*LexicalRenderer.tsx`, etc. | Per-route wrappers |\n| Content branching | `*Content.tsx` | `contentFormat` discriminator |\n| Lazy-load entries | `*Markdown.tsx` | Dynamic import + branching for preview/peek |\n| API queries | `queries/definition/*.ts` | Query params like `prefer` |\n| Server API | `app/[locale]/.../api.ts` | Direct apiClient calls |\n| Conditional styles | `page.tsx`, `layout.tsx` | `prose` class gating |\n| TOC / headings | `TocHeadingStrategy.tsx` | Already wired, verify |\n\n### 4. Add Dependencies\n\nRead Shiroi's `package.json`, extract only the packages needed for **rendering** (not editing/dashboard). Add to Shiro's `package.json` alphabetically, then `pnpm install`.\n\n### 5. Port Core Components\n\nCopy from Shiroi, adapting for Shiro:\n- Remove Shiroi-exclusive wrappers (e.g. `LexicalCommentWrapper` is sponsorship-only)\n- Check that all `~/` imports resolve in Shiro (modal types, hooks, constants)\n- Fix any API mismatches (e.g. `contentClassName` prop may not exist in Shiro's modal types)\n\n### 6. Wire Into Routing\n\nThree integration points per content type (note/post/page):\n\n**`*Content.tsx`** (server component entry):\n```tsx\nif (contentFormat === 'lexical') return <XxxLexicalRenderer />\nreturn <XxxMarkdownRenderer />\n```\n\n**`*Markdown.tsx`** (lazy-load entry for preview/peek):\n```tsx\nconst XxxLexicalRenderer = dynamic(() => import('./XxxLexicalRenderer').then(m => m.XxxLexicalRenderer))\n// ... branch on contentFormat from data selector\n```\n\n**`page.tsx` / `layout.tsx`** (conditional prose):\n```tsx\nclassName={clsx(data.contentFormat !== 'lexical' && 'prose')}\n```\n\n### 7. Sync API Query Params\n\nCompare `queries/definition/*.ts` and `app/.../api.ts` between repos. Add missing params (e.g. `prefer: 'lexical'`).\n\n### 8. Lint and Verify\n\n- Lint **only modified files**: `pnpm exec eslint --fix <files>`\n- Typecheck: `pnpm exec tsc --noEmit` — ignore pre-existing errors, verify new files don't appear in output\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Only update `*Content.tsx`, forget `*Markdown.tsx` | Markdown.tsx is the lazy entry for preview/peek — always update both |\n| Forget API `prefer` param | Backend won't return rich content without it |\n| Copy Shiroi-only wrappers verbatim | Strip sponsorship features (comment anchoring, AI, etc.) |\n| Leave `prose` class unconditional | Rich content has its own typography — gate with `contentFormat` |\n| Add editing dependencies when only rendering needed | Only port what's required for the read path |\n","packages/types/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \".\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"~/*\": [\n        \"../../apps/web/src/*\"\n      ]\n    }\n  },\n}"},"files":{"packages/types/pnpm-lock.yaml":"lockfileVersion: '9.0'\n\nsettings:\n  autoInstallPeers: true\n  excludeLinksFromLockfile: false\n\nimporters:\n\n  .:\n    devDependencies:\n      tsdown:\n        specifier: 0.11.11\n        version: 0.11.11(typescript@5.6.2)\n\npackages:\n\n  '@babel/generator@7.27.1':\n    resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-string-parser@7.27.1':\n    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-validator-identifier@7.27.1':\n    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/parser@7.27.2':\n    resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}\n    engines: {node: '>=6.0.0'}\n    hasBin: true\n\n  '@babel/types@7.27.1':\n    resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}\n    engines: {node: '>=6.9.0'}\n\n  '@emnapi/core@1.4.3':\n    resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}\n\n  '@emnapi/runtime@1.4.3':\n    resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}\n\n  '@emnapi/wasi-threads@1.0.2':\n    resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}\n\n  '@jridgewell/gen-mapping@0.3.5':\n    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/resolve-uri@3.1.2':\n    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/set-array@1.2.1':\n    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/sourcemap-codec@1.5.0':\n    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==}\n\n  '@oxc-project/types@0.69.0':\n    resolution: {integrity: sha512-bu3gzdAlLgncoaqyqWVpMAKx4axo+j3ewvvdAt5iCLtvHB/n3Qeif67NU+2TM/ami1nV5/KVO9lxCH8paPATBA==}\n\n  '@quansync/fs@0.1.3':\n    resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}\n    engines: {node: '>=20.0.0'}\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-Qnj12Et8isg99mLZoWYKCdepAUVVeBNdpBKAG/L+jEz6sQ2L2FhHB4owmF3wXyzHVzLUmhT1Io1q49vBEldbjQ==}\n    cpu: [arm64]\n    os: [darwin]\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-xgkCsHfe353jWscfOay8eyHdj/jg9Qp7fEsB9k1+YGnfinBtRbyAVhJ6LmZOVNfchN316bB59l4HFIL01S/kMQ==}\n    cpu: [x64]\n    os: [darwin]\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-H6ZAQq4B0D03sGxVn5KDCHnopXV+QHoYk2yemRqSx4tjXDnynt8fRXxdjDbBcsmlxSp/l4t/zKeSzVjXRIT3RA==}\n    cpu: [x64]\n    os: [freebsd]\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-GwxeaGEC/qfgnd63SsklcQft04ygrnJDzdIbH5FvMPZ2L7eQ6FqhYYfF2aoQqnjgim5UO5BrFm97EmSjDWhBsA==}\n    cpu: [arm]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-ItBOhvZtYHIGJ1AtX7xf7v0RvZbXgdsv5gHk8vDykGMAbl+t4Wa9OJIIa6C8V2nBFJXWH+14GudrEfQfQUFbtQ==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-UiHjNo1ffN9Nt53mmawmnuVn2l9vdYGd91XxFrOTrEKRxO5bJL6wBhd82t+uBeHWycR/6qlSCJkTsHJQPf2UbA==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-p3sIHw1vmqqK70474mEvyl0aj1PvvUEWiKxG+zvpNRTzWxcTxrsRCtlqxTJ1A8R0z76tdn00PsMQrFOSMnLotQ==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-STOhk06GmHu/mvrZnp32JkQAN07g1ZjuaChf8r0/7NnnOIg6xiTcBxhMxL5hTR7os075ziRRUoHlfEssIJxSBw==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-18l5SdnDs49KuWsJ1ZjxQ72f4OBv++wQDkYeTkIDFON+lWIY6pCc4Zb7ehD8aflq6gisokt0GsZWO8Dyi7iqrA==}\n    engines: {node: '>=14.21.3'}\n    cpu: [wasm32]\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-LqyxWnfBr0IkLVrFwBxARbEUYcpzXgDaBCqBn1rrKiLt6KUxoTA95WWkHQhYFjqmQHJOoBAFHXykoRpqdJPH9w==}\n    cpu: [arm64]\n    os: [win32]\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-v4DdzJg8hmZL2koD/CphCUK79oCfdVnGLkCXmNhlmNId9f/6e0xKYgMnxcKL6B/ToM+Jl0iiVfGpKPE3ss+a1g==}\n    cpu: [ia32]\n    os: [win32]\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-4WHgT6kseymPm32LrUISpKnX/rX1YAPsfys7uWUm4sdEHJA16kX7ZLCDrAkgNMfbYD3ZuMzEnV6pbD2bDHQn0A==}\n    cpu: [x64]\n    os: [win32]\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-m0VRAx0VjzbiV55GPB3kRbxonm9pkiTzn5HVu/xWfCqGfnFY2G9bjJCnwwZ+pNE0Lg/dppOYHfnPIZcOLgF4tg==}\n\n  '@tybys/wasm-util@0.9.0':\n    resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}\n\n  ansis@4.0.0:\n    resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==}\n    engines: {node: '>=14'}\n\n  ast-kit@2.0.0:\n    resolution: {integrity: sha512-P63jzlYNz96MF9mCcprU+a7I5/ZQ5QAn3y+mZcPWEcGV3CHF/GWnkFPj3oCrWLUjL47+PD9PNiCUdXxw0cWdsg==}\n    engines: {node: '>=20.18.0'}\n\n  birpc@2.3.0:\n    resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}\n\n  cac@6.7.14:\n    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}\n    engines: {node: '>=8'}\n\n  chokidar@4.0.3:\n    resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}\n    engines: {node: '>= 14.16.0'}\n\n  debug@4.4.1:\n    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}\n    engines: {node: '>=6.0'}\n    peerDependencies:\n      supports-color: '*'\n    peerDependenciesMeta:\n      supports-color:\n        optional: true\n\n  defu@6.1.4:\n    resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}\n\n  diff@8.0.1:\n    resolution: {integrity: sha512-rEaM3KmVm78zE3dFZaop3aCQa2MTm+T4kcigUFLVU/KbOYdiY6JnL2g2puOYnct3QFw9pjZadaCbCZ1O8ArMlQ==}\n    engines: {node: '>=0.3.1'}\n\n  dts-resolver@2.0.1:\n    resolution: {integrity: sha512-Pe2kqaQTNVxleYpt9Q9658fn6rEpoZbMbDpEBbcU6pnuGM3Q0IdM+Rv67kN6qcyp8Bv2Uv9NYy5Y1rG1LSgfoQ==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      oxc-resolver: ^9.0.2\n    peerDependenciesMeta:\n      oxc-resolver:\n        optional: true\n\n  empathic@1.1.0:\n    resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==}\n    engines: {node: '>=14'}\n\n  fdir@6.4.4:\n    resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}\n    peerDependencies:\n      picomatch: ^3 || ^4\n    peerDependenciesMeta:\n      picomatch:\n        optional: true\n\n  get-tsconfig@4.10.0:\n    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}\n\n  hookable@5.5.3:\n    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}\n\n  jiti@2.4.2:\n    resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}\n    hasBin: true\n\n  jsesc@3.1.0:\n    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}\n    engines: {node: '>=6'}\n    hasBin: true\n\n  ms@2.1.3:\n    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}\n\n  pathe@2.0.3:\n    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}\n\n  picomatch@4.0.2:\n    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}\n    engines: {node: '>=12'}\n\n  quansync@0.2.10:\n    resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}\n\n  readdirp@4.1.2:\n    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}\n    engines: {node: '>= 14.18.0'}\n\n  resolve-pkg-maps@1.0.0:\n    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}\n\n  rolldown-plugin-dts@0.13.2:\n    resolution: {integrity: sha512-3/jQZ2d+cOFuPQZ/QC0wmGQv3n6XbJswEgNIPaUoNusTtBrl2Owxn05EOhosr3jkv8eUlzOX4rf9klt2z14SRg==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      rolldown: ^1.0.0-beta.8-commit.2a5c6a6\n      typescript: ^5.0.0\n      vue-tsc: ~2.2.0\n    peerDependenciesMeta:\n      typescript:\n        optional: true\n      vue-tsc:\n        optional: true\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    resolution: {integrity: sha512-A/10eaVhZhiRyHPz5jMQN4MU2i4JQGSci0vcqqhuozk/sertEUmZHkwHntNBKujdRdgG99apR2LSWYUsU7iKbA==}\n    hasBin: true\n    peerDependencies:\n      '@oxc-project/runtime': 0.69.0\n    peerDependenciesMeta:\n      '@oxc-project/runtime':\n        optional: true\n\n  semver@7.7.2:\n    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}\n    engines: {node: '>=10'}\n    hasBin: true\n\n  tinyexec@1.0.1:\n    resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}\n\n  tinyglobby@0.2.13:\n    resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}\n    engines: {node: '>=12.0.0'}\n\n  tsdown@0.11.11:\n    resolution: {integrity: sha512-Hd3rOtoOKsHxBOQ9PhNkwe6nfkLtELQaV6cvIvqzVnU3SS42DChIdtK1kR48F9yBSrc7/InuLTlpayQbys18mw==}\n    engines: {node: '>=18.0.0'}\n    hasBin: true\n    peerDependencies:\n      publint: ^0.3.0\n      typescript: ^5.0.0\n      unplugin-lightningcss: ^0.4.0\n      unplugin-unused: ^0.5.0\n    peerDependenciesMeta:\n      publint:\n        optional: true\n      typescript:\n        optional: true\n      unplugin-lightningcss:\n        optional: true\n      unplugin-unused:\n        optional: true\n\n  tslib@2.8.1:\n    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}\n\n  typescript@5.6.2:\n    resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}\n    engines: {node: '>=14.17'}\n    hasBin: true\n\n  unconfig@7.3.2:\n    resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}\n\nsnapshots:\n\n  '@babel/generator@7.27.1':\n    dependencies:\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      '@jridgewell/gen-mapping': 0.3.5\n      '@jridgewell/trace-mapping': 0.3.25\n      jsesc: 3.1.0\n\n  '@babel/helper-string-parser@7.27.1': {}\n\n  '@babel/helper-validator-identifier@7.27.1': {}\n\n  '@babel/parser@7.27.2':\n    dependencies:\n      '@babel/types': 7.27.1\n\n  '@babel/types@7.27.1':\n    dependencies:\n      '@babel/helper-string-parser': 7.27.1\n      '@babel/helper-validator-identifier': 7.27.1\n\n  '@emnapi/core@1.4.3':\n    dependencies:\n      '@emnapi/wasi-threads': 1.0.2\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/runtime@1.4.3':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/wasi-threads@1.0.2':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@jridgewell/gen-mapping@0.3.5':\n    dependencies:\n      '@jridgewell/set-array': 1.2.1\n      '@jridgewell/sourcemap-codec': 1.5.0\n      '@jridgewell/trace-mapping': 0.3.25\n\n  '@jridgewell/resolve-uri@3.1.2': {}\n\n  '@jridgewell/set-array@1.2.1': {}\n\n  '@jridgewell/sourcemap-codec@1.5.0': {}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    dependencies:\n      '@jridgewell/resolve-uri': 3.1.2\n      '@jridgewell/sourcemap-codec': 1.5.0\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    dependencies:\n      '@emnapi/core': 1.4.3\n      '@emnapi/runtime': 1.4.3\n      '@tybys/wasm-util': 0.9.0\n    optional: true\n\n  '@oxc-project/types@0.69.0': {}\n\n  '@quansync/fs@0.1.3':\n    dependencies:\n      quansync: 0.2.10\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    dependencies:\n      '@napi-rs/wasm-runtime': 0.2.10\n    optional: true\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e': {}\n\n  '@tybys/wasm-util@0.9.0':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  ansis@4.0.0: {}\n\n  ast-kit@2.0.0:\n    dependencies:\n      '@babel/parser': 7.27.2\n      pathe: 2.0.3\n\n  birpc@2.3.0: {}\n\n  cac@6.7.14: {}\n\n  chokidar@4.0.3:\n    dependencies:\n      readdirp: 4.1.2\n\n  debug@4.4.1:\n    dependencies:\n      ms: 2.1.3\n\n  defu@6.1.4: {}\n\n  diff@8.0.1: {}\n\n  dts-resolver@2.0.1: {}\n\n  empathic@1.1.0: {}\n\n  fdir@6.4.4(picomatch@4.0.2):\n    optionalDependencies:\n      picomatch: 4.0.2\n\n  get-tsconfig@4.10.0:\n    dependencies:\n      resolve-pkg-maps: 1.0.0\n\n  hookable@5.5.3: {}\n\n  jiti@2.4.2: {}\n\n  jsesc@3.1.0: {}\n\n  ms@2.1.3: {}\n\n  pathe@2.0.3: {}\n\n  picomatch@4.0.2: {}\n\n  quansync@0.2.10: {}\n\n  readdirp@4.1.2: {}\n\n  resolve-pkg-maps@1.0.0: {}\n\n  rolldown-plugin-dts@0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2):\n    dependencies:\n      '@babel/generator': 7.27.1\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      ast-kit: 2.0.0\n      birpc: 2.3.0\n      debug: 4.4.1\n      dts-resolver: 2.0.1\n      get-tsconfig: 4.10.0\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - oxc-resolver\n      - supports-color\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    dependencies:\n      '@oxc-project/types': 0.69.0\n      '@rolldown/pluginutils': 1.0.0-beta.8-commit.d95f99e\n      ansis: 4.0.0\n    optionalDependencies:\n      '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.d95f99e\n\n  semver@7.7.2: {}\n\n  tinyexec@1.0.1: {}\n\n  tinyglobby@0.2.13:\n    dependencies:\n      fdir: 6.4.4(picomatch@4.0.2)\n      picomatch: 4.0.2\n\n  tsdown@0.11.11(typescript@5.6.2):\n    dependencies:\n      ansis: 4.0.0\n      cac: 6.7.14\n      chokidar: 4.0.3\n      debug: 4.4.1\n      diff: 8.0.1\n      empathic: 1.1.0\n      hookable: 5.5.3\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n      rolldown-plugin-dts: 0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2)\n      semver: 7.7.2\n      tinyexec: 1.0.1\n      tinyglobby: 0.2.13\n      unconfig: 7.3.2\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - '@oxc-project/runtime'\n      - oxc-resolver\n      - supports-color\n      - vue-tsc\n\n  tslib@2.8.1:\n    optional: true\n\n  typescript@5.6.2:\n    optional: true\n\n  unconfig@7.3.2:\n    dependencies:\n      '@quansync/fs': 0.1.3\n      defu: 6.1.4\n      jiti: 2.4.2\n      quansync: 0.2.10\n","packages/types/package.json":"{\n  \"name\": \"shiro-types\",\n  \"version\": \"0.0.38\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\"\n    },\n    \"./sandbox\": {\n      \"import\": \"./dist/sandbox.mjs\"\n    },\n    \"./styles\": \"./dist/styles.css\"\n  },\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"scripts\": {\n    \"build\": \"tsdown && cd ../../apps/web && tailwindcss -i src/styles/index.css -o ../../packages/types/dist/styles.css\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"25.0.10\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"tsdown\": \"0.14.0\"\n  }\n}",".claude/skills/sync-upstream-feature/SKILL.md":"---\nname: sync-upstream-feature\ndescription: Use when porting a feature from the closed-source Shiroi repo to the open-source Shiro repo. Triggers on \"sync from upstream\", \"port feature from Shiroi\", \"bring X from Shiroi to Shiro\", or any task requiring code migration between the two repos.\n---\n\n# Sync Upstream Feature\n\n## Overview\n\nPort features stripped during Shiroi-to-Shiro sync back into the open-source repo. The closed-source Shiroi repo lives at `/Users/innei/git/innei-repo/Shiroi`, the open-source Shiro at `/Users/innei/git/innei-repo/Shiro`.\n\n## Repo Layout\n\n| Repo | Path | Role |\n|------|------|------|\n| Shiro | `/Users/innei/git/innei-repo/Shiro` | Open-source, primary working dir |\n| Shiroi | `/Users/innei/git/innei-repo/Shiroi` | Closed-source upstream, read-only reference |\n\nBoth share the same monorepo structure (`apps/web/src/...`). Shiroi is the superset.\n\n## Workflow\n\n```dot\ndigraph sync {\n  rankdir=TB;\n  node [shape=box];\n\n  explore [label=\"1. Explore: find target code in both repos\"];\n  diff [label=\"2. Diff: identify what Shiroi has that Shiro lacks\"];\n  layers [label=\"3. Map all touchpoints across layers\"];\n  deps [label=\"4. Add dependencies (package.json)\"];\n  core [label=\"5. Port core components\"];\n  integrate [label=\"6. Wire into routing (Content, Markdown, page)\"];\n  api [label=\"7. Sync API query params\"];\n  style [label=\"8. Sync conditional styling\"];\n  lint [label=\"9. Lint/typecheck modified files only\"];\n  review [label=\"10. Code review via Codex\"];\n\n  explore -> diff -> layers -> deps -> core -> integrate -> api -> style -> lint -> review;\n}\n```\n\n### 1. Explore Both Repos\n\nUse parallel Explore agents to search the target feature keyword in both repos. Identify:\n- Which files exist in Shiroi but not Shiro\n- Which files exist in both but differ\n- Which dependencies Shiroi has that Shiro lacks\n\n### 2. Diff: Identify the Gap\n\nCompare key files side-by-side. Focus on:\n- **Component files**: Shiroi may have extra renderers, wrappers, or providers\n- **Routing files** (`*Content.tsx`): Shiroi branches on a discriminator (e.g. `contentFormat`), Shiro always takes one path\n- **Lazy-load entries** (`*Markdown.tsx`): Used in preview/peek contexts, often overlooked\n- **API query definitions** (`queries/definition/*.ts`): Shiroi may pass extra params (e.g. `prefer: 'lexical'`)\n- **Server-side API files** (`api.ts`): Direct `apiClient` calls may also need params\n\n### 3. Map All Touchpoints\n\nA feature typically spans these layers (check ALL):\n\n| Layer | Files | What to sync |\n|-------|-------|--------------|\n| Dependencies | `package.json`, `pnpm-lock.yaml` | New npm packages |\n| Core components | `components/ui/...` | Rendering logic |\n| Route renderers | `*LexicalRenderer.tsx`, etc. | Per-route wrappers |\n| Content branching | `*Content.tsx` | `contentFormat` discriminator |\n| Lazy-load entries | `*Markdown.tsx` | Dynamic import + branching for preview/peek |\n| API queries | `queries/definition/*.ts` | Query params like `prefer` |\n| Server API | `app/[locale]/.../api.ts` | Direct apiClient calls |\n| Conditional styles | `page.tsx`, `layout.tsx` | `prose` class gating |\n| TOC / headings | `TocHeadingStrategy.tsx` | Already wired, verify |\n\n### 4. Add Dependencies\n\nRead Shiroi's `package.json`, extract only the packages needed for **rendering** (not editing/dashboard). Add to Shiro's `package.json` alphabetically, then `pnpm install`.\n\n### 5. Port Core Components\n\nCopy from Shiroi, adapting for Shiro:\n- Remove Shiroi-exclusive wrappers (e.g. `LexicalCommentWrapper` is sponsorship-only)\n- Check that all `~/` imports resolve in Shiro (modal types, hooks, constants)\n- Fix any API mismatches (e.g. `contentClassName` prop may not exist in Shiro's modal types)\n\n### 6. Wire Into Routing\n\nThree integration points per content type (note/post/page):\n\n**`*Content.tsx`** (server component entry):\n```tsx\nif (contentFormat === 'lexical') return <XxxLexicalRenderer />\nreturn <XxxMarkdownRenderer />\n```\n\n**`*Markdown.tsx`** (lazy-load entry for preview/peek):\n```tsx\nconst XxxLexicalRenderer = dynamic(() => import('./XxxLexicalRenderer').then(m => m.XxxLexicalRenderer))\n// ... branch on contentFormat from data selector\n```\n\n**`page.tsx` / `layout.tsx`** (conditional prose):\n```tsx\nclassName={clsx(data.contentFormat !== 'lexical' && 'prose')}\n```\n\n### 7. Sync API Query Params\n\nCompare `queries/definition/*.ts` and `app/.../api.ts` between repos. Add missing params (e.g. `prefer: 'lexical'`).\n\n### 8. Lint and Verify\n\n- Lint **only modified files**: `pnpm exec eslint --fix <files>`\n- Typecheck: `pnpm exec tsc --noEmit` — ignore pre-existing errors, verify new files don't appear in output\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Only update `*Content.tsx`, forget `*Markdown.tsx` | Markdown.tsx is the lazy entry for preview/peek — always update both |\n| Forget API `prefer` param | Backend won't return rich content without it |\n| Copy Shiroi-only wrappers verbatim | Strip sponsorship features (comment anchoring, AI, etc.) |\n| Leave `prose` class unconditional | Rich content has its own typography — gate with `contentFormat` |\n| Add editing dependencies when only rendering needed | Only port what's required for the read path |\n","packages/types/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \".\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"~/*\": [\n        \"../../apps/web/src/*\"\n      ]\n    }\n  },\n}"},"items":[{"name":"SKILL.md","path":".claude/skills/sync-upstream-feature/SKILL.md","rawUrl":"https://raw.githubusercontent.com/Innei/Shiro/HEAD/.claude/skills/sync-upstream-feature/SKILL.md","title":"sync-upstream-feature","category":"anthropic-skill","format":"markdown","content":"---\nname: sync-upstream-feature\ndescription: Use when porting a feature from the closed-source Shiroi repo to the open-source Shiro repo. Triggers on \"sync from upstream\", \"port feature from Shiroi\", \"bring X from Shiroi to Shiro\", or any task requiring code migration between the two repos.\n---\n\n# Sync Upstream Feature\n\n## Overview\n\nPort features stripped during Shiroi-to-Shiro sync back into the open-source repo. The closed-source Shiroi repo lives at `/Users/innei/git/innei-repo/Shiroi`, the open-source Shiro at `/Users/innei/git/innei-repo/Shiro`.\n\n## Repo Layout\n\n| Repo | Path | Role |\n|------|------|------|\n| Shiro | `/Users/innei/git/innei-repo/Shiro` | Open-source, primary working dir |\n| Shiroi | `/Users/innei/git/innei-repo/Shiroi` | Closed-source upstream, read-only reference |\n\nBoth share the same monorepo structure (`apps/web/src/...`). Shiroi is the superset.\n\n## Workflow\n\n```dot\ndigraph sync {\n  rankdir=TB;\n  node [shape=box];\n\n  explore [label=\"1. Explore: find target code in both repos\"];\n  diff [label=\"2. Diff: identify what Shiroi has that Shiro lacks\"];\n  layers [label=\"3. Map all touchpoints across layers\"];\n  deps [label=\"4. Add dependencies (package.json)\"];\n  core [label=\"5. Port core components\"];\n  integrate [label=\"6. Wire into routing (Content, Markdown, page)\"];\n  api [label=\"7. Sync API query params\"];\n  style [label=\"8. Sync conditional styling\"];\n  lint [label=\"9. Lint/typecheck modified files only\"];\n  review [label=\"10. Code review via Codex\"];\n\n  explore -> diff -> layers -> deps -> core -> integrate -> api -> style -> lint -> review;\n}\n```\n\n### 1. Explore Both Repos\n\nUse parallel Explore agents to search the target feature keyword in both repos. Identify:\n- Which files exist in Shiroi but not Shiro\n- Which files exist in both but differ\n- Which dependencies Shiroi has that Shiro lacks\n\n### 2. Diff: Identify the Gap\n\nCompare key files side-by-side. Focus on:\n- **Component files**: Shiroi may have extra renderers, wrappers, or providers\n- **Routing files** (`*Content.tsx`): Shiroi branches on a discriminator (e.g. `contentFormat`), Shiro always takes one path\n- **Lazy-load entries** (`*Markdown.tsx`): Used in preview/peek contexts, often overlooked\n- **API query definitions** (`queries/definition/*.ts`): Shiroi may pass extra params (e.g. `prefer: 'lexical'`)\n- **Server-side API files** (`api.ts`): Direct `apiClient` calls may also need params\n\n### 3. Map All Touchpoints\n\nA feature typically spans these layers (check ALL):\n\n| Layer | Files | What to sync |\n|-------|-------|--------------|\n| Dependencies | `package.json`, `pnpm-lock.yaml` | New npm packages |\n| Core components | `components/ui/...` | Rendering logic |\n| Route renderers | `*LexicalRenderer.tsx`, etc. | Per-route wrappers |\n| Content branching | `*Content.tsx` | `contentFormat` discriminator |\n| Lazy-load entries | `*Markdown.tsx` | Dynamic import + branching for preview/peek |\n| API queries | `queries/definition/*.ts` | Query params like `prefer` |\n| Server API | `app/[locale]/.../api.ts` | Direct apiClient calls |\n| Conditional styles | `page.tsx`, `layout.tsx` | `prose` class gating |\n| TOC / headings | `TocHeadingStrategy.tsx` | Already wired, verify |\n\n### 4. Add Dependencies\n\nRead Shiroi's `package.json`, extract only the packages needed for **rendering** (not editing/dashboard). Add to Shiro's `package.json` alphabetically, then `pnpm install`.\n\n### 5. Port Core Components\n\nCopy from Shiroi, adapting for Shiro:\n- Remove Shiroi-exclusive wrappers (e.g. `LexicalCommentWrapper` is sponsorship-only)\n- Check that all `~/` imports resolve in Shiro (modal types, hooks, constants)\n- Fix any API mismatches (e.g. `contentClassName` prop may not exist in Shiro's modal types)\n\n### 6. Wire Into Routing\n\nThree integration points per content type (note/post/page):\n\n**`*Content.tsx`** (server component entry):\n```tsx\nif (contentFormat === 'lexical') return <XxxLexicalRenderer />\nreturn <XxxMarkdownRenderer />\n```\n\n**`*Markdown.tsx`** (lazy-load entry for preview/peek):\n```tsx\nconst XxxLexicalRenderer = dynamic(() => import('./XxxLexicalRenderer').then(m => m.XxxLexicalRenderer))\n// ... branch on contentFormat from data selector\n```\n\n**`page.tsx` / `layout.tsx`** (conditional prose):\n```tsx\nclassName={clsx(data.contentFormat !== 'lexical' && 'prose')}\n```\n\n### 7. Sync API Query Params\n\nCompare `queries/definition/*.ts` and `app/.../api.ts` between repos. Add missing params (e.g. `prefer: 'lexical'`).\n\n### 8. Lint and Verify\n\n- Lint **only modified files**: `pnpm exec eslint --fix <files>`\n- Typecheck: `pnpm exec tsc --noEmit` — ignore pre-existing errors, verify new files don't appear in output\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Only update `*Content.tsx`, forget `*Markdown.tsx` | Markdown.tsx is the lazy entry for preview/peek — always update both |\n| Forget API `prefer` param | Backend won't return rich content without it |\n| Copy Shiroi-only wrappers verbatim | Strip sponsorship features (comment anchoring, AI, etc.) |\n| Leave `prose` class unconditional | Rich content has its own typography — gate with `contentFormat` |\n| Add editing dependencies when only rendering needed | Only port what's required for the read path |\n","frontmatter":{"name":"sync-upstream-feature","description":"Use when porting a feature from the closed-source Shiroi repo to the open-source Shiro repo. Triggers on \"sync from upstream\", \"port feature from Shiroi\", \"bring X from Shiroi to Shiro\", or any task requiring code migration between the two repos."},"isInternal":false,"tokens":1368,"sizeBytes":5238},{"name":"package.json","path":"packages/types/package.json","rawUrl":"https://raw.githubusercontent.com/Innei/Shiro/HEAD/packages/types/package.json","title":"shiro-types","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"shiro-types\",\n  \"version\": \"0.0.38\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\"\n    },\n    \"./sandbox\": {\n      \"import\": \"./dist/sandbox.mjs\"\n    },\n    \"./styles\": \"./dist/styles.css\"\n  },\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"scripts\": {\n    \"build\": \"tsdown && cd ../../apps/web && tailwindcss -i src/styles/index.css -o ../../packages/types/dist/styles.css\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"25.0.10\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"tsdown\": \"0.14.0\"\n  }\n}","frontmatter":{"name":"shiro-types","version":"0.0.38","license":"MIT","type":"module","exports":{".":{"import":"./dist/index.mjs"},"./sandbox":{"import":"./dist/sandbox.mjs"},"./styles":"./dist/styles.css"},"main":"./dist/index.mjs","types":"./dist/index.d.mts","scripts":{"build":"tsdown && cd ../../apps/web && tailwindcss -i src/styles/index.css -o ../../packages/types/dist/styles.css"},"devDependencies":{"@types/node":"25.0.10","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","tsdown":"0.14.0"}},"isInternal":false,"tokens":202,"sizeBytes":615},{"name":"pnpm-lock.yaml","path":"packages/types/pnpm-lock.yaml","rawUrl":"https://raw.githubusercontent.com/Innei/Shiro/HEAD/packages/types/pnpm-lock.yaml","title":"Types Skill","category":"anthropic-skill","format":"yaml","content":"lockfileVersion: '9.0'\n\nsettings:\n  autoInstallPeers: true\n  excludeLinksFromLockfile: false\n\nimporters:\n\n  .:\n    devDependencies:\n      tsdown:\n        specifier: 0.11.11\n        version: 0.11.11(typescript@5.6.2)\n\npackages:\n\n  '@babel/generator@7.27.1':\n    resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-string-parser@7.27.1':\n    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-validator-identifier@7.27.1':\n    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/parser@7.27.2':\n    resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}\n    engines: {node: '>=6.0.0'}\n    hasBin: true\n\n  '@babel/types@7.27.1':\n    resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}\n    engines: {node: '>=6.9.0'}\n\n  '@emnapi/core@1.4.3':\n    resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}\n\n  '@emnapi/runtime@1.4.3':\n    resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}\n\n  '@emnapi/wasi-threads@1.0.2':\n    resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}\n\n  '@jridgewell/gen-mapping@0.3.5':\n    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/resolve-uri@3.1.2':\n    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/set-array@1.2.1':\n    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/sourcemap-codec@1.5.0':\n    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==}\n\n  '@oxc-project/types@0.69.0':\n    resolution: {integrity: sha512-bu3gzdAlLgncoaqyqWVpMAKx4axo+j3ewvvdAt5iCLtvHB/n3Qeif67NU+2TM/ami1nV5/KVO9lxCH8paPATBA==}\n\n  '@quansync/fs@0.1.3':\n    resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}\n    engines: {node: '>=20.0.0'}\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-Qnj12Et8isg99mLZoWYKCdepAUVVeBNdpBKAG/L+jEz6sQ2L2FhHB4owmF3wXyzHVzLUmhT1Io1q49vBEldbjQ==}\n    cpu: [arm64]\n    os: [darwin]\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-xgkCsHfe353jWscfOay8eyHdj/jg9Qp7fEsB9k1+YGnfinBtRbyAVhJ6LmZOVNfchN316bB59l4HFIL01S/kMQ==}\n    cpu: [x64]\n    os: [darwin]\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-H6ZAQq4B0D03sGxVn5KDCHnopXV+QHoYk2yemRqSx4tjXDnynt8fRXxdjDbBcsmlxSp/l4t/zKeSzVjXRIT3RA==}\n    cpu: [x64]\n    os: [freebsd]\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-GwxeaGEC/qfgnd63SsklcQft04ygrnJDzdIbH5FvMPZ2L7eQ6FqhYYfF2aoQqnjgim5UO5BrFm97EmSjDWhBsA==}\n    cpu: [arm]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-ItBOhvZtYHIGJ1AtX7xf7v0RvZbXgdsv5gHk8vDykGMAbl+t4Wa9OJIIa6C8V2nBFJXWH+14GudrEfQfQUFbtQ==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-UiHjNo1ffN9Nt53mmawmnuVn2l9vdYGd91XxFrOTrEKRxO5bJL6wBhd82t+uBeHWycR/6qlSCJkTsHJQPf2UbA==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-p3sIHw1vmqqK70474mEvyl0aj1PvvUEWiKxG+zvpNRTzWxcTxrsRCtlqxTJ1A8R0z76tdn00PsMQrFOSMnLotQ==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-STOhk06GmHu/mvrZnp32JkQAN07g1ZjuaChf8r0/7NnnOIg6xiTcBxhMxL5hTR7os075ziRRUoHlfEssIJxSBw==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-18l5SdnDs49KuWsJ1ZjxQ72f4OBv++wQDkYeTkIDFON+lWIY6pCc4Zb7ehD8aflq6gisokt0GsZWO8Dyi7iqrA==}\n    engines: {node: '>=14.21.3'}\n    cpu: [wasm32]\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-LqyxWnfBr0IkLVrFwBxARbEUYcpzXgDaBCqBn1rrKiLt6KUxoTA95WWkHQhYFjqmQHJOoBAFHXykoRpqdJPH9w==}\n    cpu: [arm64]\n    os: [win32]\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-v4DdzJg8hmZL2koD/CphCUK79oCfdVnGLkCXmNhlmNId9f/6e0xKYgMnxcKL6B/ToM+Jl0iiVfGpKPE3ss+a1g==}\n    cpu: [ia32]\n    os: [win32]\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-4WHgT6kseymPm32LrUISpKnX/rX1YAPsfys7uWUm4sdEHJA16kX7ZLCDrAkgNMfbYD3ZuMzEnV6pbD2bDHQn0A==}\n    cpu: [x64]\n    os: [win32]\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-m0VRAx0VjzbiV55GPB3kRbxonm9pkiTzn5HVu/xWfCqGfnFY2G9bjJCnwwZ+pNE0Lg/dppOYHfnPIZcOLgF4tg==}\n\n  '@tybys/wasm-util@0.9.0':\n    resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}\n\n  ansis@4.0.0:\n    resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==}\n    engines: {node: '>=14'}\n\n  ast-kit@2.0.0:\n    resolution: {integrity: sha512-P63jzlYNz96MF9mCcprU+a7I5/ZQ5QAn3y+mZcPWEcGV3CHF/GWnkFPj3oCrWLUjL47+PD9PNiCUdXxw0cWdsg==}\n    engines: {node: '>=20.18.0'}\n\n  birpc@2.3.0:\n    resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}\n\n  cac@6.7.14:\n    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}\n    engines: {node: '>=8'}\n\n  chokidar@4.0.3:\n    resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}\n    engines: {node: '>= 14.16.0'}\n\n  debug@4.4.1:\n    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}\n    engines: {node: '>=6.0'}\n    peerDependencies:\n      supports-color: '*'\n    peerDependenciesMeta:\n      supports-color:\n        optional: true\n\n  defu@6.1.4:\n    resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}\n\n  diff@8.0.1:\n    resolution: {integrity: sha512-rEaM3KmVm78zE3dFZaop3aCQa2MTm+T4kcigUFLVU/KbOYdiY6JnL2g2puOYnct3QFw9pjZadaCbCZ1O8ArMlQ==}\n    engines: {node: '>=0.3.1'}\n\n  dts-resolver@2.0.1:\n    resolution: {integrity: sha512-Pe2kqaQTNVxleYpt9Q9658fn6rEpoZbMbDpEBbcU6pnuGM3Q0IdM+Rv67kN6qcyp8Bv2Uv9NYy5Y1rG1LSgfoQ==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      oxc-resolver: ^9.0.2\n    peerDependenciesMeta:\n      oxc-resolver:\n        optional: true\n\n  empathic@1.1.0:\n    resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==}\n    engines: {node: '>=14'}\n\n  fdir@6.4.4:\n    resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}\n    peerDependencies:\n      picomatch: ^3 || ^4\n    peerDependenciesMeta:\n      picomatch:\n        optional: true\n\n  get-tsconfig@4.10.0:\n    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}\n\n  hookable@5.5.3:\n    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}\n\n  jiti@2.4.2:\n    resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}\n    hasBin: true\n\n  jsesc@3.1.0:\n    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}\n    engines: {node: '>=6'}\n    hasBin: true\n\n  ms@2.1.3:\n    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}\n\n  pathe@2.0.3:\n    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}\n\n  picomatch@4.0.2:\n    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}\n    engines: {node: '>=12'}\n\n  quansync@0.2.10:\n    resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}\n\n  readdirp@4.1.2:\n    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}\n    engines: {node: '>= 14.18.0'}\n\n  resolve-pkg-maps@1.0.0:\n    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}\n\n  rolldown-plugin-dts@0.13.2:\n    resolution: {integrity: sha512-3/jQZ2d+cOFuPQZ/QC0wmGQv3n6XbJswEgNIPaUoNusTtBrl2Owxn05EOhosr3jkv8eUlzOX4rf9klt2z14SRg==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      rolldown: ^1.0.0-beta.8-commit.2a5c6a6\n      typescript: ^5.0.0\n      vue-tsc: ~2.2.0\n    peerDependenciesMeta:\n      typescript:\n        optional: true\n      vue-tsc:\n        optional: true\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    resolution: {integrity: sha512-A/10eaVhZhiRyHPz5jMQN4MU2i4JQGSci0vcqqhuozk/sertEUmZHkwHntNBKujdRdgG99apR2LSWYUsU7iKbA==}\n    hasBin: true\n    peerDependencies:\n      '@oxc-project/runtime': 0.69.0\n    peerDependenciesMeta:\n      '@oxc-project/runtime':\n        optional: true\n\n  semver@7.7.2:\n    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}\n    engines: {node: '>=10'}\n    hasBin: true\n\n  tinyexec@1.0.1:\n    resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}\n\n  tinyglobby@0.2.13:\n    resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}\n    engines: {node: '>=12.0.0'}\n\n  tsdown@0.11.11:\n    resolution: {integrity: sha512-Hd3rOtoOKsHxBOQ9PhNkwe6nfkLtELQaV6cvIvqzVnU3SS42DChIdtK1kR48F9yBSrc7/InuLTlpayQbys18mw==}\n    engines: {node: '>=18.0.0'}\n    hasBin: true\n    peerDependencies:\n      publint: ^0.3.0\n      typescript: ^5.0.0\n      unplugin-lightningcss: ^0.4.0\n      unplugin-unused: ^0.5.0\n    peerDependenciesMeta:\n      publint:\n        optional: true\n      typescript:\n        optional: true\n      unplugin-lightningcss:\n        optional: true\n      unplugin-unused:\n        optional: true\n\n  tslib@2.8.1:\n    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}\n\n  typescript@5.6.2:\n    resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}\n    engines: {node: '>=14.17'}\n    hasBin: true\n\n  unconfig@7.3.2:\n    resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}\n\nsnapshots:\n\n  '@babel/generator@7.27.1':\n    dependencies:\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      '@jridgewell/gen-mapping': 0.3.5\n      '@jridgewell/trace-mapping': 0.3.25\n      jsesc: 3.1.0\n\n  '@babel/helper-string-parser@7.27.1': {}\n\n  '@babel/helper-validator-identifier@7.27.1': {}\n\n  '@babel/parser@7.27.2':\n    dependencies:\n      '@babel/types': 7.27.1\n\n  '@babel/types@7.27.1':\n    dependencies:\n      '@babel/helper-string-parser': 7.27.1\n      '@babel/helper-validator-identifier': 7.27.1\n\n  '@emnapi/core@1.4.3':\n    dependencies:\n      '@emnapi/wasi-threads': 1.0.2\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/runtime@1.4.3':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/wasi-threads@1.0.2':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@jridgewell/gen-mapping@0.3.5':\n    dependencies:\n      '@jridgewell/set-array': 1.2.1\n      '@jridgewell/sourcemap-codec': 1.5.0\n      '@jridgewell/trace-mapping': 0.3.25\n\n  '@jridgewell/resolve-uri@3.1.2': {}\n\n  '@jridgewell/set-array@1.2.1': {}\n\n  '@jridgewell/sourcemap-codec@1.5.0': {}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    dependencies:\n      '@jridgewell/resolve-uri': 3.1.2\n      '@jridgewell/sourcemap-codec': 1.5.0\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    dependencies:\n      '@emnapi/core': 1.4.3\n      '@emnapi/runtime': 1.4.3\n      '@tybys/wasm-util': 0.9.0\n    optional: true\n\n  '@oxc-project/types@0.69.0': {}\n\n  '@quansync/fs@0.1.3':\n    dependencies:\n      quansync: 0.2.10\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    dependencies:\n      '@napi-rs/wasm-runtime': 0.2.10\n    optional: true\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e': {}\n\n  '@tybys/wasm-util@0.9.0':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  ansis@4.0.0: {}\n\n  ast-kit@2.0.0:\n    dependencies:\n      '@babel/parser': 7.27.2\n      pathe: 2.0.3\n\n  birpc@2.3.0: {}\n\n  cac@6.7.14: {}\n\n  chokidar@4.0.3:\n    dependencies:\n      readdirp: 4.1.2\n\n  debug@4.4.1:\n    dependencies:\n      ms: 2.1.3\n\n  defu@6.1.4: {}\n\n  diff@8.0.1: {}\n\n  dts-resolver@2.0.1: {}\n\n  empathic@1.1.0: {}\n\n  fdir@6.4.4(picomatch@4.0.2):\n    optionalDependencies:\n      picomatch: 4.0.2\n\n  get-tsconfig@4.10.0:\n    dependencies:\n      resolve-pkg-maps: 1.0.0\n\n  hookable@5.5.3: {}\n\n  jiti@2.4.2: {}\n\n  jsesc@3.1.0: {}\n\n  ms@2.1.3: {}\n\n  pathe@2.0.3: {}\n\n  picomatch@4.0.2: {}\n\n  quansync@0.2.10: {}\n\n  readdirp@4.1.2: {}\n\n  resolve-pkg-maps@1.0.0: {}\n\n  rolldown-plugin-dts@0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2):\n    dependencies:\n      '@babel/generator': 7.27.1\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      ast-kit: 2.0.0\n      birpc: 2.3.0\n      debug: 4.4.1\n      dts-resolver: 2.0.1\n      get-tsconfig: 4.10.0\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - oxc-resolver\n      - supports-color\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    dependencies:\n      '@oxc-project/types': 0.69.0\n      '@rolldown/pluginutils': 1.0.0-beta.8-commit.d95f99e\n      ansis: 4.0.0\n    optionalDependencies:\n      '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.d95f99e\n\n  semver@7.7.2: {}\n\n  tinyexec@1.0.1: {}\n\n  tinyglobby@0.2.13:\n    dependencies:\n      fdir: 6.4.4(picomatch@4.0.2)\n      picomatch: 4.0.2\n\n  tsdown@0.11.11(typescript@5.6.2):\n    dependencies:\n      ansis: 4.0.0\n      cac: 6.7.14\n      chokidar: 4.0.3\n      debug: 4.4.1\n      diff: 8.0.1\n      empathic: 1.1.0\n      hookable: 5.5.3\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n      rolldown-plugin-dts: 0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2)\n      semver: 7.7.2\n      tinyexec: 1.0.1\n      tinyglobby: 0.2.13\n      unconfig: 7.3.2\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - '@oxc-project/runtime'\n      - oxc-resolver\n      - supports-color\n      - vue-tsc\n\n  tslib@2.8.1:\n    optional: true\n\n  typescript@5.6.2:\n    optional: true\n\n  unconfig@7.3.2:\n    dependencies:\n      '@quansync/fs': 0.1.3\n      defu: 6.1.4\n      jiti: 2.4.2\n      quansync: 0.2.10\n","isInternal":false,"tokens":8665,"sizeBytes":17937},{"name":"tsconfig.json","path":"packages/types/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/Innei/Shiro/HEAD/packages/types/tsconfig.json","title":"Types Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \".\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"~/*\": [\n        \"../../apps/web/src/*\"\n      ]\n    }\n  },\n}","isInternal":false,"tokens":175,"sizeBytes":587}],"systemPromptSnippet":"<yakaai_skills repo=\"Innei/Shiro\">\n<!-- File: .claude/skills/sync-upstream-feature/SKILL.md (Tokens: ~1368 | Category: anthropic-skill) -->\n---\nname: sync-upstream-feature\ndescription: Use when porting a feature from the closed-source Shiroi repo to the open-source Shiro repo. Triggers on \"sync from upstream\", \"port feature from Shiroi\", \"bring X from Shiroi to Shiro\", or any task requiring code migration between the two repos.\n---\n\n# Sync Upstream Feature\n\n## Overview\n\nPort features stripped during Shiroi-to-Shiro sync back into the open-source repo. The closed-source Shiroi repo lives at `/Users/innei/git/innei-repo/Shiroi`, the open-source Shiro at `/Users/innei/git/innei-repo/Shiro`.\n\n## Repo Layout\n\n| Repo | Path | Role |\n|------|------|------|\n| Shiro | `/Users/innei/git/innei-repo/Shiro` | Open-source, primary working dir |\n| Shiroi | `/Users/innei/git/innei-repo/Shiroi` | Closed-source upstream, read-only reference |\n\nBoth share the same monorepo structure (`apps/web/src/...`). Shiroi is the superset.\n\n## Workflow\n\n```dot\ndigraph sync {\n  rankdir=TB;\n  node [shape=box];\n\n  explore [label=\"1. Explore: find target code in both repos\"];\n  diff [label=\"2. Diff: identify what Shiroi has that Shiro lacks\"];\n  layers [label=\"3. Map all touchpoints across layers\"];\n  deps [label=\"4. Add dependencies (package.json)\"];\n  core [label=\"5. Port core components\"];\n  integrate [label=\"6. Wire into routing (Content, Markdown, page)\"];\n  api [label=\"7. Sync API query params\"];\n  style [label=\"8. Sync conditional styling\"];\n  lint [label=\"9. Lint/typecheck modified files only\"];\n  review [label=\"10. Code review via Codex\"];\n\n  explore -> diff -> layers -> deps -> core -> integrate -> api -> style -> lint -> review;\n}\n```\n\n### 1. Explore Both Repos\n\nUse parallel Explore agents to search the target feature keyword in both repos. Identify:\n- Which files exist in Shiroi but not Shiro\n- Which files exist in both but differ\n- Which dependencies Shiroi has that Shiro lacks\n\n### 2. Diff: Identify the Gap\n\nCompare key files side-by-side. Focus on:\n- **Component files**: Shiroi may have extra renderers, wrappers, or providers\n- **Routing files** (`*Content.tsx`): Shiroi branches on a discriminator (e.g. `contentFormat`), Shiro always takes one path\n- **Lazy-load entries** (`*Markdown.tsx`): Used in preview/peek contexts, often overlooked\n- **API query definitions** (`queries/definition/*.ts`): Shiroi may pass extra params (e.g. `prefer: 'lexical'`)\n- **Server-side API files** (`api.ts`): Direct `apiClient` calls may also need params\n\n### 3. Map All Touchpoints\n\nA feature typically spans these layers (check ALL):\n\n| Layer | Files | What to sync |\n|-------|-------|--------------|\n| Dependencies | `package.json`, `pnpm-lock.yaml` | New npm packages |\n| Core components | `components/ui/...` | Rendering logic |\n| Route renderers | `*LexicalRenderer.tsx`, etc. | Per-route wrappers |\n| Content branching | `*Content.tsx` | `contentFormat` discriminator |\n| Lazy-load entries | `*Markdown.tsx` | Dynamic import + branching for preview/peek |\n| API queries | `queries/definition/*.ts` | Query params like `prefer` |\n| Server API | `app/[locale]/.../api.ts` | Direct apiClient calls |\n| Conditional styles | `page.tsx`, `layout.tsx` | `prose` class gating |\n| TOC / headings | `TocHeadingStrategy.tsx` | Already wired, verify |\n\n### 4. Add Dependencies\n\nRead Shiroi's `package.json`, extract only the packages needed for **rendering** (not editing/dashboard). Add to Shiro's `package.json` alphabetically, then `pnpm install`.\n\n### 5. Port Core Components\n\nCopy from Shiroi, adapting for Shiro:\n- Remove Shiroi-exclusive wrappers (e.g. `LexicalCommentWrapper` is sponsorship-only)\n- Check that all `~/` imports resolve in Shiro (modal types, hooks, constants)\n- Fix any API mismatches (e.g. `contentClassName` prop may not exist in Shiro's modal types)\n\n### 6. Wire Into Routing\n\nThree integration points per content type (note/post/page):\n\n**`*Content.tsx`** (server component entry):\n```tsx\nif (contentFormat === 'lexical') return <XxxLexicalRenderer />\nreturn <XxxMarkdownRenderer />\n```\n\n**`*Markdown.tsx`** (lazy-load entry for preview/peek):\n```tsx\nconst XxxLexicalRenderer = dynamic(() => import('./XxxLexicalRenderer').then(m => m.XxxLexicalRenderer))\n// ... branch on contentFormat from data selector\n```\n\n**`page.tsx` / `layout.tsx`** (conditional prose):\n```tsx\nclassName={clsx(data.contentFormat !== 'lexical' && 'prose')}\n```\n\n### 7. Sync API Query Params\n\nCompare `queries/definition/*.ts` and `app/.../api.ts` between repos. Add missing params (e.g. `prefer: 'lexical'`).\n\n### 8. Lint and Verify\n\n- Lint **only modified files**: `pnpm exec eslint --fix <files>`\n- Typecheck: `pnpm exec tsc --noEmit` — ignore pre-existing errors, verify new files don't appear in output\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Only update `*Content.tsx`, forget `*Markdown.tsx` | Markdown.tsx is the lazy entry for preview/peek — always update both |\n| Forget API `prefer` param | Backend won't return rich content without it |\n| Copy Shiroi-only wrappers verbatim | Strip sponsorship features (comment anchoring, AI, etc.) |\n| Leave `prose` class unconditional | Rich content has its own typography — gate with `contentFormat` |\n| Add editing dependencies when only rendering needed | Only port what's required for the read path |\n\n<!-- File: packages/types/package.json (Tokens: ~202 | Category: anthropic-skill) -->\n{\n  \"name\": \"shiro-types\",\n  \"version\": \"0.0.38\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./dist/index.mjs\"\n    },\n    \"./sandbox\": {\n      \"import\": \"./dist/sandbox.mjs\"\n    },\n    \"./styles\": \"./dist/styles.css\"\n  },\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"scripts\": {\n    \"build\": \"tsdown && cd ../../apps/web && tailwindcss -i src/styles/index.css -o ../../packages/types/dist/styles.css\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"25.0.10\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"tsdown\": \"0.14.0\"\n  }\n}\n\n<!-- File: packages/types/pnpm-lock.yaml (Tokens: ~8665 | Category: anthropic-skill) -->\nlockfileVersion: '9.0'\n\nsettings:\n  autoInstallPeers: true\n  excludeLinksFromLockfile: false\n\nimporters:\n\n  .:\n    devDependencies:\n      tsdown:\n        specifier: 0.11.11\n        version: 0.11.11(typescript@5.6.2)\n\npackages:\n\n  '@babel/generator@7.27.1':\n    resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-string-parser@7.27.1':\n    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/helper-validator-identifier@7.27.1':\n    resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}\n    engines: {node: '>=6.9.0'}\n\n  '@babel/parser@7.27.2':\n    resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}\n    engines: {node: '>=6.0.0'}\n    hasBin: true\n\n  '@babel/types@7.27.1':\n    resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}\n    engines: {node: '>=6.9.0'}\n\n  '@emnapi/core@1.4.3':\n    resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==}\n\n  '@emnapi/runtime@1.4.3':\n    resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}\n\n  '@emnapi/wasi-threads@1.0.2':\n    resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}\n\n  '@jridgewell/gen-mapping@0.3.5':\n    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/resolve-uri@3.1.2':\n    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/set-array@1.2.1':\n    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}\n    engines: {node: '>=6.0.0'}\n\n  '@jridgewell/sourcemap-codec@1.5.0':\n    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==}\n\n  '@oxc-project/types@0.69.0':\n    resolution: {integrity: sha512-bu3gzdAlLgncoaqyqWVpMAKx4axo+j3ewvvdAt5iCLtvHB/n3Qeif67NU+2TM/ami1nV5/KVO9lxCH8paPATBA==}\n\n  '@quansync/fs@0.1.3':\n    resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}\n    engines: {node: '>=20.0.0'}\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-Qnj12Et8isg99mLZoWYKCdepAUVVeBNdpBKAG/L+jEz6sQ2L2FhHB4owmF3wXyzHVzLUmhT1Io1q49vBEldbjQ==}\n    cpu: [arm64]\n    os: [darwin]\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-xgkCsHfe353jWscfOay8eyHdj/jg9Qp7fEsB9k1+YGnfinBtRbyAVhJ6LmZOVNfchN316bB59l4HFIL01S/kMQ==}\n    cpu: [x64]\n    os: [darwin]\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-H6ZAQq4B0D03sGxVn5KDCHnopXV+QHoYk2yemRqSx4tjXDnynt8fRXxdjDbBcsmlxSp/l4t/zKeSzVjXRIT3RA==}\n    cpu: [x64]\n    os: [freebsd]\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-GwxeaGEC/qfgnd63SsklcQft04ygrnJDzdIbH5FvMPZ2L7eQ6FqhYYfF2aoQqnjgim5UO5BrFm97EmSjDWhBsA==}\n    cpu: [arm]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-ItBOhvZtYHIGJ1AtX7xf7v0RvZbXgdsv5gHk8vDykGMAbl+t4Wa9OJIIa6C8V2nBFJXWH+14GudrEfQfQUFbtQ==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-UiHjNo1ffN9Nt53mmawmnuVn2l9vdYGd91XxFrOTrEKRxO5bJL6wBhd82t+uBeHWycR/6qlSCJkTsHJQPf2UbA==}\n    cpu: [arm64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-p3sIHw1vmqqK70474mEvyl0aj1PvvUEWiKxG+zvpNRTzWxcTxrsRCtlqxTJ1A8R0z76tdn00PsMQrFOSMnLotQ==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-STOhk06GmHu/mvrZnp32JkQAN07g1ZjuaChf8r0/7NnnOIg6xiTcBxhMxL5hTR7os075ziRRUoHlfEssIJxSBw==}\n    cpu: [x64]\n    os: [linux]\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-18l5SdnDs49KuWsJ1ZjxQ72f4OBv++wQDkYeTkIDFON+lWIY6pCc4Zb7ehD8aflq6gisokt0GsZWO8Dyi7iqrA==}\n    engines: {node: '>=14.21.3'}\n    cpu: [wasm32]\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-LqyxWnfBr0IkLVrFwBxARbEUYcpzXgDaBCqBn1rrKiLt6KUxoTA95WWkHQhYFjqmQHJOoBAFHXykoRpqdJPH9w==}\n    cpu: [arm64]\n    os: [win32]\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-v4DdzJg8hmZL2koD/CphCUK79oCfdVnGLkCXmNhlmNId9f/6e0xKYgMnxcKL6B/ToM+Jl0iiVfGpKPE3ss+a1g==}\n    cpu: [ia32]\n    os: [win32]\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-4WHgT6kseymPm32LrUISpKnX/rX1YAPsfys7uWUm4sdEHJA16kX7ZLCDrAkgNMfbYD3ZuMzEnV6pbD2bDHQn0A==}\n    cpu: [x64]\n    os: [win32]\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e':\n    resolution: {integrity: sha512-m0VRAx0VjzbiV55GPB3kRbxonm9pkiTzn5HVu/xWfCqGfnFY2G9bjJCnwwZ+pNE0Lg/dppOYHfnPIZcOLgF4tg==}\n\n  '@tybys/wasm-util@0.9.0':\n    resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}\n\n  ansis@4.0.0:\n    resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==}\n    engines: {node: '>=14'}\n\n  ast-kit@2.0.0:\n    resolution: {integrity: sha512-P63jzlYNz96MF9mCcprU+a7I5/ZQ5QAn3y+mZcPWEcGV3CHF/GWnkFPj3oCrWLUjL47+PD9PNiCUdXxw0cWdsg==}\n    engines: {node: '>=20.18.0'}\n\n  birpc@2.3.0:\n    resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}\n\n  cac@6.7.14:\n    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}\n    engines: {node: '>=8'}\n\n  chokidar@4.0.3:\n    resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}\n    engines: {node: '>= 14.16.0'}\n\n  debug@4.4.1:\n    resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}\n    engines: {node: '>=6.0'}\n    peerDependencies:\n      supports-color: '*'\n    peerDependenciesMeta:\n      supports-color:\n        optional: true\n\n  defu@6.1.4:\n    resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}\n\n  diff@8.0.1:\n    resolution: {integrity: sha512-rEaM3KmVm78zE3dFZaop3aCQa2MTm+T4kcigUFLVU/KbOYdiY6JnL2g2puOYnct3QFw9pjZadaCbCZ1O8ArMlQ==}\n    engines: {node: '>=0.3.1'}\n\n  dts-resolver@2.0.1:\n    resolution: {integrity: sha512-Pe2kqaQTNVxleYpt9Q9658fn6rEpoZbMbDpEBbcU6pnuGM3Q0IdM+Rv67kN6qcyp8Bv2Uv9NYy5Y1rG1LSgfoQ==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      oxc-resolver: ^9.0.2\n    peerDependenciesMeta:\n      oxc-resolver:\n        optional: true\n\n  empathic@1.1.0:\n    resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==}\n    engines: {node: '>=14'}\n\n  fdir@6.4.4:\n    resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}\n    peerDependencies:\n      picomatch: ^3 || ^4\n    peerDependenciesMeta:\n      picomatch:\n        optional: true\n\n  get-tsconfig@4.10.0:\n    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}\n\n  hookable@5.5.3:\n    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}\n\n  jiti@2.4.2:\n    resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}\n    hasBin: true\n\n  jsesc@3.1.0:\n    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}\n    engines: {node: '>=6'}\n    hasBin: true\n\n  ms@2.1.3:\n    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}\n\n  pathe@2.0.3:\n    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}\n\n  picomatch@4.0.2:\n    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}\n    engines: {node: '>=12'}\n\n  quansync@0.2.10:\n    resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}\n\n  readdirp@4.1.2:\n    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}\n    engines: {node: '>= 14.18.0'}\n\n  resolve-pkg-maps@1.0.0:\n    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}\n\n  rolldown-plugin-dts@0.13.2:\n    resolution: {integrity: sha512-3/jQZ2d+cOFuPQZ/QC0wmGQv3n6XbJswEgNIPaUoNusTtBrl2Owxn05EOhosr3jkv8eUlzOX4rf9klt2z14SRg==}\n    engines: {node: '>=20.18.0'}\n    peerDependencies:\n      rolldown: ^1.0.0-beta.8-commit.2a5c6a6\n      typescript: ^5.0.0\n      vue-tsc: ~2.2.0\n    peerDependenciesMeta:\n      typescript:\n        optional: true\n      vue-tsc:\n        optional: true\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    resolution: {integrity: sha512-A/10eaVhZhiRyHPz5jMQN4MU2i4JQGSci0vcqqhuozk/sertEUmZHkwHntNBKujdRdgG99apR2LSWYUsU7iKbA==}\n    hasBin: true\n    peerDependencies:\n      '@oxc-project/runtime': 0.69.0\n    peerDependenciesMeta:\n      '@oxc-project/runtime':\n        optional: true\n\n  semver@7.7.2:\n    resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}\n    engines: {node: '>=10'}\n    hasBin: true\n\n  tinyexec@1.0.1:\n    resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}\n\n  tinyglobby@0.2.13:\n    resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}\n    engines: {node: '>=12.0.0'}\n\n  tsdown@0.11.11:\n    resolution: {integrity: sha512-Hd3rOtoOKsHxBOQ9PhNkwe6nfkLtELQaV6cvIvqzVnU3SS42DChIdtK1kR48F9yBSrc7/InuLTlpayQbys18mw==}\n    engines: {node: '>=18.0.0'}\n    hasBin: true\n    peerDependencies:\n      publint: ^0.3.0\n      typescript: ^5.0.0\n      unplugin-lightningcss: ^0.4.0\n      unplugin-unused: ^0.5.0\n    peerDependenciesMeta:\n      publint:\n        optional: true\n      typescript:\n        optional: true\n      unplugin-lightningcss:\n        optional: true\n      unplugin-unused:\n        optional: true\n\n  tslib@2.8.1:\n    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}\n\n  typescript@5.6.2:\n    resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}\n    engines: {node: '>=14.17'}\n    hasBin: true\n\n  unconfig@7.3.2:\n    resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}\n\nsnapshots:\n\n  '@babel/generator@7.27.1':\n    dependencies:\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      '@jridgewell/gen-mapping': 0.3.5\n      '@jridgewell/trace-mapping': 0.3.25\n      jsesc: 3.1.0\n\n  '@babel/helper-string-parser@7.27.1': {}\n\n  '@babel/helper-validator-identifier@7.27.1': {}\n\n  '@babel/parser@7.27.2':\n    dependencies:\n      '@babel/types': 7.27.1\n\n  '@babel/types@7.27.1':\n    dependencies:\n      '@babel/helper-string-parser': 7.27.1\n      '@babel/helper-validator-identifier': 7.27.1\n\n  '@emnapi/core@1.4.3':\n    dependencies:\n      '@emnapi/wasi-threads': 1.0.2\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/runtime@1.4.3':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@emnapi/wasi-threads@1.0.2':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  '@jridgewell/gen-mapping@0.3.5':\n    dependencies:\n      '@jridgewell/set-array': 1.2.1\n      '@jridgewell/sourcemap-codec': 1.5.0\n      '@jridgewell/trace-mapping': 0.3.25\n\n  '@jridgewell/resolve-uri@3.1.2': {}\n\n  '@jridgewell/set-array@1.2.1': {}\n\n  '@jridgewell/sourcemap-codec@1.5.0': {}\n\n  '@jridgewell/trace-mapping@0.3.25':\n    dependencies:\n      '@jridgewell/resolve-uri': 3.1.2\n      '@jridgewell/sourcemap-codec': 1.5.0\n\n  '@napi-rs/wasm-runtime@0.2.10':\n    dependencies:\n      '@emnapi/core': 1.4.3\n      '@emnapi/runtime': 1.4.3\n      '@tybys/wasm-util': 0.9.0\n    optional: true\n\n  '@oxc-project/types@0.69.0': {}\n\n  '@quansync/fs@0.1.3':\n    dependencies:\n      quansync: 0.2.10\n\n  '@rolldown/binding-darwin-arm64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-darwin-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-freebsd-x64@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-arm64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-gnu@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-linux-x64-musl@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-wasm32-wasi@1.0.0-beta.8-commit.d95f99e':\n    dependencies:\n      '@napi-rs/wasm-runtime': 0.2.10\n    optional: true\n\n  '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/binding-win32-x64-msvc@1.0.0-beta.8-commit.d95f99e':\n    optional: true\n\n  '@rolldown/pluginutils@1.0.0-beta.8-commit.d95f99e': {}\n\n  '@tybys/wasm-util@0.9.0':\n    dependencies:\n      tslib: 2.8.1\n    optional: true\n\n  ansis@4.0.0: {}\n\n  ast-kit@2.0.0:\n    dependencies:\n      '@babel/parser': 7.27.2\n      pathe: 2.0.3\n\n  birpc@2.3.0: {}\n\n  cac@6.7.14: {}\n\n  chokidar@4.0.3:\n    dependencies:\n      readdirp: 4.1.2\n\n  debug@4.4.1:\n    dependencies:\n      ms: 2.1.3\n\n  defu@6.1.4: {}\n\n  diff@8.0.1: {}\n\n  dts-resolver@2.0.1: {}\n\n  empathic@1.1.0: {}\n\n  fdir@6.4.4(picomatch@4.0.2):\n    optionalDependencies:\n      picomatch: 4.0.2\n\n  get-tsconfig@4.10.0:\n    dependencies:\n      resolve-pkg-maps: 1.0.0\n\n  hookable@5.5.3: {}\n\n  jiti@2.4.2: {}\n\n  jsesc@3.1.0: {}\n\n  ms@2.1.3: {}\n\n  pathe@2.0.3: {}\n\n  picomatch@4.0.2: {}\n\n  quansync@0.2.10: {}\n\n  readdirp@4.1.2: {}\n\n  resolve-pkg-maps@1.0.0: {}\n\n  rolldown-plugin-dts@0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2):\n    dependencies:\n      '@babel/generator': 7.27.1\n      '@babel/parser': 7.27.2\n      '@babel/types': 7.27.1\n      ast-kit: 2.0.0\n      birpc: 2.3.0\n      debug: 4.4.1\n      dts-resolver: 2.0.1\n      get-tsconfig: 4.10.0\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - oxc-resolver\n      - supports-color\n\n  rolldown@1.0.0-beta.8-commit.d95f99e:\n    dependencies:\n      '@oxc-project/types': 0.69.0\n      '@rolldown/pluginutils': 1.0.0-beta.8-commit.d95f99e\n      ansis: 4.0.0\n    optionalDependencies:\n      '@rolldown/binding-darwin-arm64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-darwin-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-freebsd-x64': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-linux-x64-musl': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-wasm32-wasi': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.8-commit.d95f99e\n      '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.8-commit.d95f99e\n\n  semver@7.7.2: {}\n\n  tinyexec@1.0.1: {}\n\n  tinyglobby@0.2.13:\n    dependencies:\n      fdir: 6.4.4(picomatch@4.0.2)\n      picomatch: 4.0.2\n\n  tsdown@0.11.11(typescript@5.6.2):\n    dependencies:\n      ansis: 4.0.0\n      cac: 6.7.14\n      chokidar: 4.0.3\n      debug: 4.4.1\n      diff: 8.0.1\n      empathic: 1.1.0\n      hookable: 5.5.3\n      rolldown: 1.0.0-beta.8-commit.d95f99e\n      rolldown-plugin-dts: 0.13.2(rolldown@1.0.0-beta.8-commit.d95f99e)(typescript@5.6.2)\n      semver: 7.7.2\n      tinyexec: 1.0.1\n      tinyglobby: 0.2.13\n      unconfig: 7.3.2\n    optionalDependencies:\n      typescript: 5.6.2\n    transitivePeerDependencies:\n      - '@oxc-project/runtime'\n      - oxc-resolver\n      - supports-color\n      - vue-tsc\n\n  tslib@2.8.1:\n    optional: true\n\n  typescript@5.6.2:\n    optional: true\n\n  unconfig@7.3.2:\n    dependencies:\n      '@quansync/fs': 0.1.3\n      defu: 6.1.4\n      jiti: 2.4.2\n      quansync: 0.2.10\n\n<!-- File: packages/types/tsconfig.json (Tokens: ~175 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"preserve\",\n    \"baseUrl\": \".\",\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"~/*\": [\n        \"../../apps/web/src/*\"\n      ]\n    }\n  },\n}\n</yakaai_skills>"}