{"_id":"@onivoro/server-vscode","_rev":"29-af01da26dcf339f3aeafb34c603f40b6","name":"@onivoro/server-vscode","dist-tags":{"latest":"24.39.0"},"versions":{"0.0.8":{"name":"@onivoro/server-vscode","version":"0.0.8","_id":"@onivoro/server-vscode@0.0.8","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"dist":{"shasum":"a6c704e4a0a1805d5e4d4a5618d3837704af3b44","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-0.0.8.tgz","fileCount":11,"integrity":"sha512-W1p1KENtd39QxkGTzDD/Y8JKHQ3oZ8UxauSHXdtwVpGTOmltdHV3OYe52J6EgZ3W/bDrGG1Bl2A65IxNDzfs1A==","signatures":[{"sig":"MEQCIHsWZB1Ag+X4yiJw6ovwOXaLBB+9alr0EZdO3IF+dOxXAiA35nFXv3kTjnekSMCHe6sJFUvJgCg+IJ18a3PGRxunqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7306,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfM8cKCRA9TVsSAnZWagAAnhMP/AzjAoknH0Qx9P9JzD50\nskIZfUzqz+J6mSmDrO0mz8Hk4xQKGDAIAr9L7XBbykSIxlI8xmlvwcIU/o4C\nLAIDgtoJZoxEU+9ZO10VJObOJ+4R1tVjv/aSA76VlunOuTp1xl4B7IdS7H/a\ntccBGs19Yhjq5kEqoiL0oDU9xOYmfRiIkrKhdVmB0gAfSY4rfGOJ7tqTS/On\nV692Nw0zFBsV3B2t5F0DqUuFW2RVpNuZ5lrqDlDA+5Z/TlGWXu0Yl+kY950a\nTLZbzS3PvcbVhseDwr2T8JK/C+dszQgd+skN1MZvHNOK6SHfxd5tJbu9tkQX\nIE6K8T4Vzh+LBQgEercRgQGjzqABndOv3cvtXpRcRQWZq63badjXvYxyFs0/\nqEsLhNp1tiQZQpk+7xtW/1l1QwpfLldRMoD+SG82Ir/IqwYCWzs53iz+lvPN\nJiLlRFI5VWI5+aBWLpZuTQA7Gv7zXFJuM6rvpSNUpS2vJBzLTsOOdtERah3l\ntz+QGMEdWQKa9YlhHzbx3tlFdvsxpwjRGwo9HRW4gQo82YfFEuplTcPt2RZ/\n5El7heURXFch+5+RtwWTNcw96GhAR6X1kstLAyOvuHPsqAvInV9XlrXN09GS\neGki12sbxdYsjZ+sHMb7vvYGenCelsAfNC++kPNfBx3HzKkqQOEG5EC0oh7w\nlgYL\r\n=sz2K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","typings":"index.d.ts","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"_npmVersion":"6.13.4","description":"This library was generated with [Nx](https://nx.dev).","directories":{},"_nodeVersion":"12.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server-vscode_0.0.8_1597228810216_0.5322639264731661","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@onivoro/server-vscode","version":"0.0.2","_id":"@onivoro/server-vscode@0.0.2","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"dist":{"shasum":"8096fc1ea4bb9de581ae6accb0109bc97dae5338","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-0.0.2.tgz","fileCount":14,"integrity":"sha512-nNLC6z05jq8k6m54ygPIoXxCN0u2EUX0gyN1KIQEDdkxvLJr/cxaIwzaCAuiYlK2WOjC08UQTfDIB/Ww3iHjrg==","signatures":[{"sig":"MEUCIHFxrL0ndxF0a95YBBigx5QVjrbEWPwpaLd6GGE6aU11AiEA6K48zGXFXkHHU2S7tP0ty+gKVUzwyvXV8kpzV0U9R+4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPIxQCRA9TVsSAnZWagAAElQQAKScJS1gBvcn9Gx3bNEs\ntrTas1gv8PpXlSQs4JUFq/HgmxsYVj+Oe1ccBAm06t/kzu60qwte96RIZa1d\niXV5Xb/vbZPjose4KQSl93pfT4nvUjdChOnVvInAJIOI8/E+RWu9kwcT47A3\nFhs0MzM8nRNdbUKlT3IsIRgX39qSdXmZKVXJ1t2EURh4/M8ykQYIaWs/2B4I\nXtm3VKxhNYZBQR1SKE1dNWxyUKKQaWY4Rh+el8PnCHR2AWvfD6d8R7pvW3L0\n2YsYlS7Ek/kmVVYLWgIpoJ4n9H1DKOgJcbqSRfabIdv6Qa/C7K/Q8coI7hVO\nYU7x+EZubUN14JsE5klptsVopz4rPw1eH29P+enUCcY70Fo8XhSHv6WyIh64\nP9L3GqhNEfmC5bDCcENLkuuw+icbUwZbhUcz3Esafy6sxXCmU2MmIYfqNJx3\na84uTCcMcTuHkyY8QSPhA2QWyuvSbv2WDqJwQhOC3XGJ16CRwBgGIjWDqsmH\n36esbqT8e/OIG0kKTabXP9PRBdGWIqkAIY6odtJVHz1+4JgMs10Ho908Z28w\nJeNs3IIDunJYlpeOOFnEK66pmqiM+Fm4uuaHF9MCz8YP4sUdzaYjir1XCCRf\nq+86rTif6GLi9Y81KIofNSqXOE0+xF9KrEmxLnrNIjmXl/hhPq5PTqYzJfs+\ncBYd\r\n=6HLe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","typings":"index.d.ts","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"_npmVersion":"6.13.4","description":"This library was generated with [Nx](https://nx.dev).","directories":{},"_nodeVersion":"12.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server-vscode_0.0.2_1597803599538_0.8989775064174499","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@onivoro/server-vscode","version":"0.0.3","_id":"@onivoro/server-vscode@0.0.3","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"dist":{"shasum":"f706e38e2ef7804e61250959b02d91ced2740a3b","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-0.0.3.tgz","fileCount":14,"integrity":"sha512-v0XzuvDgaRL9rRpaffSTn94YciniFuRBzIAbmG6sTxSB82fy4ez72M/UGrlyo3KLfj6sDVhaT4Stu0wGts50QA==","signatures":[{"sig":"MEUCICXde7s6ssUtn0MaTj0cP1R61JrJWriM0USLAhp8hWIuAiEAhU2fQ1I5abm0OzKAtEL2FnXPnCOAwHfhhMw0/na6QcI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPIzbCRA9TVsSAnZWagAAICcP/jboqQu7ohbTBwD0t0V3\nS7usMjw4XbKW6+Jc3Bi+1oE3pax1o/6rt09n+CX85b/OrKqaY4o51lzU2c7Z\nbJn00xl8r3YwwKC4OJKUJl7nOZoawIeYJKPoTJKWkt3S/8zRkmGAxvr+lBLb\nR0cU0vfklO+8PY5VtE+0POY0TJl+Qm0wyvTeJkQSsoBbPtTrwA8snjeyjf9C\nTlLLRBDd2IgKA1boZpc7CL5oZPo6L0NaGd/HEAsHK51rqvZ40GRJmubR4Qbz\nsBIZ/2chYJW4oCMkWulanJc7uX1fvRFBdRFyexYPp/ucw/bhXjox+uGzG7S3\nYItGSRo/ks3o0r2Dg97699tPAq0XFIN7rO78Th39S71n5bnvG9O96D+qjj+0\nbWkUIJpexr172zKk+8/tHAPXDLVBgU779Fa0ib90HQPGpkDe6kuEjAe1Iw1F\n/x3rU2Y4n8vY8GyuV+i8G8IWXn12C/aSfqkFSnEjNBu6zKA8OLFVCPGE9aAd\nLPhgmISwUwwqluszDHInRyEKpxRgZiHSfKI1v4F6D7Php9gC/P0azm401c1i\nAzuxYKa/S4lRoSIE7E0KZe1pfU0D+mAGeQ9E+lbHA+PV8ecbKMfR5Ht0aruy\nWUT8KbBP5XautBZCACBD1rk3lP/y/I/Ygh4h5KJSiimwFgnlTrUDP41EzkFo\n9dQ9\r\n=KopY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","typings":"index.d.ts","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"_npmVersion":"6.13.4","description":"This library was generated with [Nx](https://nx.dev).","directories":{},"_nodeVersion":"12.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server-vscode_0.0.3_1597803739238_0.06207886958532405","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@onivoro/server-vscode","version":"0.0.4","_id":"@onivoro/server-vscode@0.0.4","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"dist":{"shasum":"23c10941aa432621845e0eda67108918a79f7177","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-0.0.4.tgz","fileCount":14,"integrity":"sha512-h6FdIQIVtDimIWFLea74K+R0M6L2SwZuaTjTN7lF5XEqxwibE/NnJCT1XXzRxOAd+4tD0N03kphiHpdjR7mNZw==","signatures":[{"sig":"MEQCICX3j1SuNhxEJZhGmjN7vNrlFmtuC5p8/FS/1YH2y1xrAiA3dBSrjfjGw0vRfA7zACyPbHtFkp9JjvzZtdW+q+fYzA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPJiXCRA9TVsSAnZWagAA+BQQAJHKfY0yKK0C0+0ZA+It\nvFBIFzVcApk0W/nu6++9Up0itHuZHxmfkCJ27dQWN6vdnNJAiTNrqQ7XlIQj\n4k3xmAGTdR8UbVAWSXae9GFZwAmUO+px7mu3cCF6C1HsbMKceNMJqzYQVJ3h\nmZJwdvGvms9lQig0Eg8fuEwWLQ1jsl5Dlj4ldJ+BwizSOLv8dQ8aGiEThZQ0\nbJcgT7JAnYBHcLw7v7svMGlC5TFwjfsxR5WiGX1WXrgSAtlm0wUfFI/RHk5C\nbwJFckr6oxJYSuQKtWspE6k8oo2v2uXYbbCux6q4KGxyLIN2BRevobGx+dQc\nKDhP1m0B4la0PjwC64eXZL9hyo0TmR1hP5eMHSgKvDJmgQz3TBVs5F6LQvw9\nAgn20NjHD1Mw7pKJ6bdskNP7VZx4otWmVTRW1wmX8ALBAuzP9uyCjO6bOJWf\nfGkjwtUUNYr+G+A2iAlhg5QRACXUvUWHrvdXDE+jEyAj+eu+jGa/JnfMKA9W\n+Wgo4j27OYLtLOJNmYlm5r5ZmK0Q9AaEE3EVc8FLBirkP4qVtssXepW2Y9SB\nveeiz7rZ/oL42DcIu+zQrduCOMLAzrWDgpyL8uBNaJKCjtQV1mbA9rJrZHxq\nlen/YPdPPv7EAPQaYxj6LZEwNpUD5q0IxtGCkn05pPYR5Ah9fjMDeqqP/QgW\nIUuK\r\n=QJeo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","typings":"index.d.ts","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"_npmVersion":"6.13.4","description":"This library was generated with [Nx](https://nx.dev).","directories":{},"_nodeVersion":"12.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server-vscode_0.0.4_1597806743311_0.7867363841699959","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@onivoro/server-vscode","version":"0.1.0","_id":"@onivoro/server-vscode@0.1.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/server-vscode#readme","bugs":{"url":"https://github.com/onivoro/server-vscode/issues"},"dist":{"shasum":"ebfa3a32120e43b114433f00fc38284911eb859d","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-0.1.0.tgz","fileCount":13,"integrity":"sha512-eDXfA6PMd8ncq7URhp+YpGuHvaC272OXU43aeVZoTaY+AUYn32vt2Xd8Rhi3vrD7iocM1KP3Pdo9V+As0YJtfQ==","signatures":[{"sig":"MEYCIQCS1d4DiAH2F0/jS/leeoSBBXKdK9d3ycuXRcs0Y7auYQIhAOlfkmEimRrnH9hsfIdM0aDLRB1HmQ7e1LXq01je4ga3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8679,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLecsCRA9TVsSAnZWagAATLYP/1OfmVyLECdPUkEgodfH\nO/xF3oMU3amlWeMOGxzuxUWVCPoKyxfRT60SwkpsBbVhZpF6v0Lu6GskLQbr\nygjT4cReieHP2IjgagiLe2CLl/gE8Z/Jv324dA5+dymgQ4pozVXByGfhq+C9\nLlAVQ3N4TSlasD+o3g6fN7ed9XCwIYNKou8A7ZGq6ifb+gn1fvrg7pP30EHG\nldPzMPaU/QxJaeABITQY3+D3/Zk4WtIJU9TxOZuejbTgi02ZgXpD/bRvStBB\n6hyAsKYPQOKmjHPsW/CsIXv4BK79raE4qdgjgJQR5bZj1JUFp2dKmDM63dEq\n4dwmt9uEo7W+OycIBCecz30ucABOoL5XdZrqLZNgbV8CXQ/9ZtM83eFd4YY8\nBLdhj7dIXQLYL6f/bHeH2kQyBBY2/h7dDNpLf6sFxB4qsMwTzzui+jw+iniy\nOw9xtIZpIlEuCE6bto54xcrqtpVAO3USo4T+g0wxeQXJ0Hv/4q42HqwjUnYS\nnnCAlTC+aokUhNUBuK3pyKSR2k1QP6/nXYj3O/FahNUaykc1bdObDINur5eN\n9yfD4ENdRYzUBTvnYvcAameazPj8ywnBRLr99wUlAFS4V7AQZLlQ+JgRSmNc\nUlbibMcDPJKnS6RPrOBUxQ1y2xZU97knBgDhu9GT8eAeuejo78octtarGIKn\nUxKG\r\n=S1lD\r\n-----END PGP SIGNATURE-----\r\n"},"scripts":{"test":"jest","build":"tsc -p tsconfig.json","release":"rm -rf dist && npm run build && npm version minor && cp package.json dist && cd dist && npm publish --access public"},"_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/server-vscode.git"},"_npmVersion":"6.14.8","directories":{},"_nodeVersion":"14.9.0","dependencies":{"rxjs":"^6.6.3","vscode":"^1.1.37"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.4.2","ts-jest":"^26.4.1","typescript":"^4.0.3","@types/jest":"^26.0.14","@types/node":"^14.11.2","@types/vscode":"^1.53.0"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_0.1.0_1613621035571_0.2628931028367947","host":"s3://npm-registry-packages"}},"24.33.15":{"name":"@onivoro/server-vscode","version":"24.33.15","license":"MIT","_id":"@onivoro/server-vscode@24.33.15","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"f5ed2f41985521d1032b8fd3de7ca3aa71048f2f","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.15.tgz","fileCount":105,"integrity":"sha512-cV0Mh4hWskCdhhHy3/bqrFISuKBktfwWdariDFtF1IOOS64DkpuLTXrBnPG/GvaQmJyHLL/+7LL3wzxqo36YWw==","signatures":[{"sig":"MEQCIG2/R3FYMM4taBblLEoUlCwCnqtQz5EWp4Erkx8ozF6hAiAkNHK/FTvAEuxkUDd8i2mtdQ+I6h7tVFulMOURLgNnEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178580},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"4e0f95b638fc8f0b8976639e2b6bfbada9435b84","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.15","@onivoro/isomorphic-jsonrpc":"24.33.15"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","vscode":"^1.74.0","@nestjs/core":"*","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.15_1774683225484_0.3834523227372961","host":"s3://npm-registry-packages-npm-production"}},"24.33.16":{"name":"@onivoro/server-vscode","version":"24.33.16","license":"MIT","_id":"@onivoro/server-vscode@24.33.16","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"d804516f67169fdd00dac980fbaea1bc59af209e","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.16.tgz","fileCount":105,"integrity":"sha512-2smi5mzrZh/xdSGHoEo/V4RrlqTfyo/Q+ThereZGo8MQSUr899rSqSIcqQi445rYi1oRbv1nV76bcupEUtZ7CA==","signatures":[{"sig":"MEUCIF+rsUeQrCQRpIcXcZIHZvFcxVMp7rWMkVE/4leUjaHaAiEAjlYvMz26cVSjTMTuE2/JUslnBjH5Shg7hoBpHC0JAA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178580},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"532e53fedf16f056a9574becb7ee65d13061d0c4","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.16","@onivoro/isomorphic-jsonrpc":"24.33.16"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","vscode":"^1.74.0","@nestjs/core":"*","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.16_1776137381297_0.2467443740229076","host":"s3://npm-registry-packages-npm-production"}},"24.33.17":{"name":"@onivoro/server-vscode","version":"24.33.17","license":"MIT","_id":"@onivoro/server-vscode@24.33.17","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"1943bbfba2a17b65fdf9d659e1bd4b340c32c9a4","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.17.tgz","fileCount":105,"integrity":"sha512-c/q5rOpquLejP389rLwd2V8DfYm5UWO/fjcFnABqBgwgsrW5kTvEeCH6LspTwiw/G7HNMOpw85Ear506yhoNAg==","signatures":[{"sig":"MEYCIQDxqOg34arWS4C9hmg5G2I5UHvBBY2gkgIxvemtzdaEhgIhAPOySfWglrd9pZJl6mjiidJ8mqyE1lOedZMgQzzIL0dK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178580},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"acab07f63ca2ec310a507f6ca4381fd25987bbc5","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.17","@onivoro/isomorphic-jsonrpc":"24.33.17"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","vscode":"^1.74.0","@nestjs/core":"*","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.17_1776238206063_0.6175013337093513","host":"s3://npm-registry-packages-npm-production"}},"24.33.18":{"name":"@onivoro/server-vscode","version":"24.33.18","license":"MIT","_id":"@onivoro/server-vscode@24.33.18","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"cb082e542f25bacb2dc0a9398bbcee8238818a51","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.18.tgz","fileCount":105,"integrity":"sha512-kYv2pVNdfUwoL6ypgbfxAvp3jlcFVkpXXIFGuqgn+BvSXcBle3IQRy2UawUGxw3wMMUO4B7lLZKeemewjE+ESA==","signatures":[{"sig":"MEUCIQDFWx1rXk862vTHNPWZIWm+/Z7V9oWKlN3lYoKQYbyWSwIgd4ga8ojIe74nZzh5qtwrkFt2htrvooijytPkHGVLHbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178587},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"9b31ab113f354aee15498a6a3e8b501caa7d5d92","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.18","@onivoro/isomorphic-jsonrpc":"24.33.18"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.18_1776396107027_0.6289419618696994","host":"s3://npm-registry-packages-npm-production"}},"24.33.19":{"name":"@onivoro/server-vscode","version":"24.33.19","license":"MIT","_id":"@onivoro/server-vscode@24.33.19","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"e3507ebdec33b4cf776b61f9569f75726acb8989","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.19.tgz","fileCount":105,"integrity":"sha512-YsGQah2T49BYEjGUzE3q1hCo+uSTBamkolcfOSfdT66t1lcMY2N6OnwHp/tovd6Fz7engOO3KDui85EdgWTWdQ==","signatures":[{"sig":"MEUCIQCBoozZYv6ASMmGtwmWXqaiBk0HPBH0ki7UxKl3Qg8oXwIgD0VoCrXT+P7PTV53v4zWCwgJ/ok3+nRlePmin+MaFWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178587},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"18023cd05b5a799c4769cc4f0e30d5163d8d9ab9","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.19","@onivoro/isomorphic-jsonrpc":"24.33.19"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.19_1776399703922_0.45136023258000657","host":"s3://npm-registry-packages-npm-production"}},"24.33.20":{"name":"@onivoro/server-vscode","version":"24.33.20","license":"MIT","_id":"@onivoro/server-vscode@24.33.20","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"4b27c42dfc714447bbe69bd3a0ba07479ed471e8","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.20.tgz","fileCount":105,"integrity":"sha512-wuBNE5D7A30DLx5DrIusuV8bhzDH2wMog8bNp0bMd/Y4qNHxIaH0CwHmQLgsXyNW6bK4j4yKjlB52gzPQ+KgOQ==","signatures":[{"sig":"MEUCIER1h1hGTPpiomSwFMjwhcgx7/qC6lVZxh8VkyadyuNlAiEA5rZapBdoKorMUBDp4d94blb4UNR+d3lyg6jM+ixTOtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178587},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"6139aba7b9160b5d37711c651f452f46ed235eca","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.20","@onivoro/isomorphic-jsonrpc":"24.33.20"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.20_1776547963527_0.9817732861252533","host":"s3://npm-registry-packages-npm-production"}},"24.33.21":{"name":"@onivoro/server-vscode","version":"24.33.21","license":"MIT","_id":"@onivoro/server-vscode@24.33.21","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"573ec3ce6e29aa776fae22f750ad61eeb7547d83","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.33.21.tgz","fileCount":105,"integrity":"sha512-WJidiKtSDiaM8vK+ynq3xkftK54jHywZLkFlelwNRbpnAECzt5We56iLHneB7PzMKD7lyIP1QoAtn0yRmQ0l/Q==","signatures":[{"sig":"MEUCIGGDwahLPOPaA1NmG4VauHd9QA0pNQJd+O8gxO18CN5KAiEAj9QG9U/tgaLdAkE9GRo7Szw5kV/X6PrCxzKkHgxctZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178587},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"da5da8f673284fce276eb41d4da2a1ae8a760a77","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.33.21","@onivoro/isomorphic-jsonrpc":"24.33.21"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.33.21_1776562271794_0.9356659807870329","host":"s3://npm-registry-packages-npm-production"}},"24.34.0":{"name":"@onivoro/server-vscode","version":"24.34.0","license":"MIT","_id":"@onivoro/server-vscode@24.34.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"2a5fde1fc81e4e0bedcdf3994c2b41adb2cdda17","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.34.0.tgz","fileCount":105,"integrity":"sha512-JgN5U6zCulkW2m4EykBaVUSliRDhtXti/LtUcWE46EOx0/y9E3gPlwJjIvlgmENLE/+0w+Iq0ja2YvFY4d98TA==","signatures":[{"sig":"MEYCIQDMSwssLlbNdIjTfi52nqWHw2zfmsKIfu0ZSN1Jbz4h3wIhAMCE04hr6275Exi2MJsghRacivjZGq5KRyxF1B1TYiWA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"a3f90d7ada333c6c0406e354849283c857e94c30","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.34.0","@onivoro/isomorphic-jsonrpc":"24.34.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.34.0_1776837768116_0.5728742492770316","host":"s3://npm-registry-packages-npm-production"}},"24.34.1":{"name":"@onivoro/server-vscode","version":"24.34.1","license":"MIT","_id":"@onivoro/server-vscode@24.34.1","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"5dfa1546b68cebf85ff9921e29b2c1fb84acd856","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.34.1.tgz","fileCount":105,"integrity":"sha512-Nxvw88anbcsYamc+56J20LCna874W6SgcKoVOcujQ7KN/LsGL/T3ZEOi3/auwEMeIvq76PoAvqKo92g7cyv6dw==","signatures":[{"sig":"MEUCIQDsfILD1LnFmYpTpolDdf/E6UqaABcQ4uC5k7iVsJzcngIgHVXKF0n/FXxDX9uOgZSrCxb7ryl/NWhdVu7mP8oc4Tc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"0f390195f2af3a71ffcef11320b58c7446f24c2c","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.34.1","@onivoro/isomorphic-jsonrpc":"24.34.1"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.34.1_1776856398840_0.519496752337536","host":"s3://npm-registry-packages-npm-production"}},"24.34.2":{"name":"@onivoro/server-vscode","version":"24.34.2","license":"MIT","_id":"@onivoro/server-vscode@24.34.2","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"929301329eaaa2be633e667ec491256eb149e6a2","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.34.2.tgz","fileCount":105,"integrity":"sha512-CWUhFPp/NMMPXyHU80CpS9LvtvWcvB/aO2pD3atWU4/fTCUSi4Or1HgJhoC+BTL7Unu8VVO2b8pNW8j59TiYHQ==","signatures":[{"sig":"MEYCIQD5FPL4NLpyhPowes/yDFF/ASWD8+Cx0rhZh8hIXrawwwIhAICQSKdx9ceLUR3yz63IognUo9OVKmSFCNL4LwJuO3wd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"87bbf44de652a58cbbacca1ccc910a9a3364e288","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.34.2","@onivoro/isomorphic-jsonrpc":"24.34.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.34.2_1776893572127_0.13070298423698246","host":"s3://npm-registry-packages-npm-production"}},"24.35.0":{"name":"@onivoro/server-vscode","version":"24.35.0","license":"MIT","_id":"@onivoro/server-vscode@24.35.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"1e8a9dd55be213721c0b0fe326917ffea19954e9","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.35.0.tgz","fileCount":105,"integrity":"sha512-xO6dlrEIcSj2/c6f44BerYj6KV0ASajnjxfERy/3XWKmG5gSh8xaoIgCryweF8R3j83GXTrtT7gONaggdIIg9w==","signatures":[{"sig":"MEUCIQDkd+sB3cNjnFc7uM743RkGWnqRP65mk2Ok3NAoQr3MmgIgZL3Qq6pBvv25kl2xGmOr8HPTm9mDakxQCwX/l478CWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"17f4f99fe6379903f2b2ef6e6fedc40943e0466f","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.35.0","@onivoro/isomorphic-jsonrpc":"24.35.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.35.0_1776909561848_0.36522249141350405","host":"s3://npm-registry-packages-npm-production"}},"24.35.1":{"name":"@onivoro/server-vscode","version":"24.35.1","license":"MIT","_id":"@onivoro/server-vscode@24.35.1","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"6dc5dd41ae54d91ae0797334928d0b1b790effca","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.35.1.tgz","fileCount":105,"integrity":"sha512-ULADeOofYmH+Lbm2OqPiXNUGbv4nSD0ayp03vMB9D6UtlNU8Un68FABnujINY0T8zlNaLoILXtk46x92rocUdA==","signatures":[{"sig":"MEUCIQDg00akXfYbY76kDC7Henf2G+e3pjAmC3JBs4QyE8K6fgIgcF9b1Iql9szQaHp0tL8oq6v2DfI7Km7JRJGTzI2/hx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"73866e79047b0584cc29e3cd4348bc19951079ff","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.35.1","@onivoro/isomorphic-jsonrpc":"24.35.1"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.35.1_1777065902416_0.36668785923638114","host":"s3://npm-registry-packages-npm-production"}},"24.35.2":{"name":"@onivoro/server-vscode","version":"24.35.2","license":"MIT","_id":"@onivoro/server-vscode@24.35.2","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"d73022e52e3f778b79223a4c346768c807579883","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.35.2.tgz","fileCount":105,"integrity":"sha512-scwQlXOuWKlxzpvRBRGF7rtX/833DzqLJNiMU7ydbj4YXEYq+mlgQaV6nUOxHXV5z91qybEoldD7P2VzYuddww==","signatures":[{"sig":"MEUCIQCDfZ3NIZeNLVJhoqg5Lnkg2f5+LaSSdQIULvUnqzhXkAIgV15/P0uZnPaJC/fbiAsC6LepBWxrSYRpIDQnJQFnOxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"5d3419081048ddedd2810d205b1bf829634b3cc8","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.35.2","@onivoro/isomorphic-jsonrpc":"24.35.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.35.2_1777321489617_0.08495746345551347","host":"s3://npm-registry-packages-npm-production"}},"24.35.3":{"name":"@onivoro/server-vscode","version":"24.35.3","license":"MIT","_id":"@onivoro/server-vscode@24.35.3","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"3a984294322f9c35239ea562d633a6abf19178a0","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.35.3.tgz","fileCount":105,"integrity":"sha512-vcslqnTRg1ecwpMq2jmmo9ubRgtmCDWAxoPAqNapkoDvMpl+cGgs+m/zXlZnbcYgua98yxEHY+fXGCuEyhxd+Q==","signatures":[{"sig":"MEUCIHZdi6tmMsqwXOUIhMd4yg3pWXgycdzQbU3J1dSNeDlVAiEA9VSuzQXEibxyx8wB3zsg+DxKQIVZ5sNWObKQjkK++DE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"2f7d7c102d56b98f12e61e4f7ff456706828e6ac","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.35.3","@onivoro/isomorphic-jsonrpc":"24.35.3"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.35.3_1778341191326_0.10701830132899848","host":"s3://npm-registry-packages-npm-production"}},"24.35.4":{"name":"@onivoro/server-vscode","version":"24.35.4","license":"MIT","_id":"@onivoro/server-vscode@24.35.4","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"c1ac67de32d4fb9bfd20b543e61d677d77fd7b1c","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.35.4.tgz","fileCount":105,"integrity":"sha512-MNq3XOBsyOz9aSvxyAGoguelT0sXGaApl9HNerHO2UL9ZJdHfh5gChnfnWKeWdcM08ie8B7WYMj+04WXd/GoGw==","signatures":[{"sig":"MEYCIQCkXoDNCdMveYd2bfbKw7W6CvsiEhKkOjBWS+mjTNSIMgIhAPzOzUSDA0/WViMgi2gjjl2hNoe9i/3PlwyIAp70cocn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"7071f6296e6fe7680b22239595c6c1a09da6f1b5","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.35.4","@onivoro/isomorphic-jsonrpc":"24.35.4"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.35.4_1778343314410_0.17304054251021972","host":"s3://npm-registry-packages-npm-production"}},"24.36.0":{"name":"@onivoro/server-vscode","version":"24.36.0","license":"MIT","_id":"@onivoro/server-vscode@24.36.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"98955f55c8a3a489640a6596e0e28eb801e7c587","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.36.0.tgz","fileCount":105,"integrity":"sha512-CAt+F4T+KR3iKc0kRukTByj9U8UmwGvIQeDakv6p1zMjtNFSGCj0mhmK6u0OCSsp0J6mLfZWlyGoynud6cLivg==","signatures":[{"sig":"MEUCIAY+IludxHIVN0DqWFlVdo8mgX2q93T+aoKKNzMhBTqnAiEA9SDIYJKMfWuPrIJ7qIBBFcW+fjI/dhNC5H7sQ0p1GHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"802792e07fbe835963c83e235180988e9fdf8264","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.36.0","@onivoro/isomorphic-jsonrpc":"24.36.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.36.0_1778359002536_0.6762822739860721","host":"s3://npm-registry-packages-npm-production"}},"24.37.0":{"name":"@onivoro/server-vscode","version":"24.37.0","license":"MIT","_id":"@onivoro/server-vscode@24.37.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"09299ffd4ebbf1b8aefe775be3550c72dc3c1a5b","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.37.0.tgz","fileCount":105,"integrity":"sha512-5DGmNRN7XVFdCU6yNwqt2eNVNylcUmRlsWgClUesBJca/fZWDgPyOM776IbOPhHcVh1cCvd+MdP6bF4ERLTLkw==","signatures":[{"sig":"MEUCIDR1909q54qYstMx/0k5cgr2TwXsJOC8xApf3xFhP/BoAiEA3hIsIGn9HZ/zPRnP2nlfhEnDrXz58XSIOjHtI3SKWUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"f77c87fe2e2b06c7c0e86761867f3353a5cbd309","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.37.0","@onivoro/isomorphic-jsonrpc":"24.37.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.37.0_1778401330968_0.30291470898652295","host":"s3://npm-registry-packages-npm-production"}},"24.38.0":{"name":"@onivoro/server-vscode","version":"24.38.0","license":"MIT","_id":"@onivoro/server-vscode@24.38.0","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"a9302ac2c481c44500ab964e234110f65ac1e92f","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.38.0.tgz","fileCount":105,"integrity":"sha512-rT9qDrrBDW9FMB4PGoLZtu06nfwzqXdX6svWceyu406sPbAOEZPkj4iZkZwzuErM/5s9sj+YvL11EirY0ZC7pw==","signatures":[{"sig":"MEQCICMRD97KAiY6tcOBDhsenm+0jvZKTmUJ+biQ7ZRbCPloAiBMAkEBjx7ThuzXaMsUf2sJTem0UMQMiwETQoPMyV9q/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"aa60b8695d8782dc522ee2331b97d4416f119a1a","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.38.0","@onivoro/isomorphic-jsonrpc":"24.38.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.38.0_1778446737682_0.06054121910543775","host":"s3://npm-registry-packages-npm-production"}},"24.38.1":{"name":"@onivoro/server-vscode","version":"24.38.1","license":"MIT","_id":"@onivoro/server-vscode@24.38.1","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"50539aafc7f4d344cdb228f7d9483d19802bb869","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.38.1.tgz","fileCount":105,"integrity":"sha512-C37gLPRJSl6VuPUVq2NcNUW5F8YS2bwb1BPMXy/0Omn6FdpKgsPM4/c/TSLLExxt2Ax5zqY+3WT0mu5/E6GEeg==","signatures":[{"sig":"MEUCIEi4tBI1PYjyfytrQ2+TofOGaTWsIm9hUmke+C0GIawAAiEApwgfB7php6IOQdbDRB0pBFg1wF1NProXb1gjo+LPGH0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"062ab9d46c0c032121077cb48cfcbb9c56eaa816","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.38.1","@onivoro/isomorphic-jsonrpc":"24.38.1"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.38.1_1778562334078_0.9502407332938458","host":"s3://npm-registry-packages-npm-production"}},"24.38.2":{"name":"@onivoro/server-vscode","version":"24.38.2","license":"MIT","_id":"@onivoro/server-vscode@24.38.2","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"homepage":"https://github.com/onivoro/monorepo#readme","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"20e74d9a77cfcdc80daf2738553ddb5b4fdaf8c6","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.38.2.tgz","fileCount":105,"integrity":"sha512-EXindd1glpiTSeCh1J19AOTGBXbsApWUm3GOOusY2Y4FOiambXCuZ+/yzuU1uWdUKo5V4zHRouLnZe6vgOpRmQ==","signatures":[{"sig":"MEUCIQCbz42xvzvWevJawXlV5c05N3A/3SshLCuHWDQ2ScVm+gIgfu6hOa8nqIsCdayd8wmtDEIpn1M6ZJQM8Ei0zclmX48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178584},"main":"./src/index.js","type":"commonjs","types":"./src/index.d.ts","gitHead":"be9e8662b5ec38ad83510299696f8187b75c78e3","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"10.9.3","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.38.2","@onivoro/isomorphic-jsonrpc":"24.38.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"tmp":"tmp/server-vscode_24.38.2_1778826834555_0.8407733986997021","host":"s3://npm-registry-packages-npm-production"}},"24.39.0":{"_id":"@onivoro/server-vscode@24.39.0","bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"dist":{"shasum":"fbbf3f467a40d2ec4014582f7be44726ac0b9870","tarball":"https://registry.npmjs.org/@onivoro/server-vscode/-/server-vscode-24.39.0.tgz","fileCount":105,"integrity":"sha512-WZzlnUgeTgJhKemRsh4updUSpwAZEzzeKmE92XxO+qRh4bzJVk/NcQNL0kBpXNGA0uQtmKNZzsP8ej9/qIvL3g==","signatures":[{"sig":"MEYCIQCpk15u5NpkfonUeok+q5u42w+jp8mwyppa46OcHGKCSAIhALasVvy1+oIJvUdfzMZlYecjjFGDnuyXZUwT0MZ8eFRf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD+/bgI1ms2PGS/vUfLYMBKZC7wpp+pTeGfkM59EpaV6AIhAKcj+MZZrHBIK6Hy7o5asJlnBJwjVVXSxRjtxlWrRoZ4"}],"unpackedSize":178584},"main":"./src/index.js","name":"@onivoro/server-vscode","type":"commonjs","types":"./src/index.d.ts","gitHead":"5ed9d3bcc8b47316c6f60f618cb25026ba7ea522","license":"MIT","version":"24.39.0","_npmUser":{"name":"icedlee337","email":"lee.e.norris@gmail.com"},"homepage":"https://github.com/onivoro/monorepo#readme","repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"_npmVersion":"11.3.0","description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","directories":{},"maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"_nodeVersion":"22.18.0","dependencies":{"tslib":"^2.3.0","@onivoro/server-stdio":"24.39.0","@onivoro/isomorphic-jsonrpc":"24.39.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"*","@nestjs/core":"*","@types/vscode":"^1.74.0","@nestjs/common":"*","reflect-metadata":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server-vscode_24.39.0_1790201667478_0.5630180224029604"}}},"time":{"created":"2020-08-12T10:40:10.000Z","modified":"2026-09-23T22:14:27.730Z","0.0.8":"2020-08-12T10:40:10.378Z","0.0.2":"2020-08-19T02:19:59.740Z","0.0.3":"2020-08-19T02:22:19.369Z","0.0.4":"2020-08-19T03:12:23.440Z","0.1.0":"2021-02-18T04:03:56.215Z","24.33.15":"2026-03-28T07:33:45.642Z","24.33.16":"2026-04-14T03:29:41.445Z","24.33.17":"2026-04-15T07:30:06.271Z","24.33.18":"2026-04-17T03:21:47.170Z","24.33.19":"2026-04-17T04:21:44.072Z","24.33.20":"2026-04-18T21:32:43.665Z","24.33.21":"2026-04-19T01:31:11.935Z","24.34.0":"2026-04-22T06:02:48.494Z","24.34.1":"2026-04-22T11:13:19.011Z","24.34.2":"2026-04-22T21:32:52.288Z","24.35.0":"2026-04-23T01:59:21.999Z","24.35.1":"2026-04-24T21:25:02.592Z","24.35.2":"2026-04-27T20:24:49.754Z","24.35.3":"2026-05-09T15:39:51.496Z","24.35.4":"2026-05-09T16:15:14.578Z","24.36.0":"2026-05-09T20:36:42.685Z","24.37.0":"2026-05-10T08:22:11.104Z","24.38.0":"2026-05-10T20:58:57.816Z","24.38.1":"2026-05-12T05:05:34.212Z","24.38.2":"2026-05-15T06:33:54.776Z","24.39.0":"2026-09-23T22:14:27.566Z"},"bugs":{"url":"https://github.com/onivoro/monorepo/issues"},"license":"MIT","homepage":"https://github.com/onivoro/monorepo#readme","repository":{"url":"git+https://github.com/onivoro/monorepo.git","type":"git"},"description":"NestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.","maintainers":[{"name":"icedlee337","email":"lee.e.norris@gmail.com"}],"readme":"# @onivoro/server-vscode\n\nNestJS-based framework for building VSCode extensions with a three-tier architecture: extension host + stdio server + React webview.\n\n## Installation\n\n```bash\nnpm install @onivoro/server-vscode\n```\n\n## Overview\n\nEach VSCode extension consists of **four Nx projects** that work together:\n\n| Project | Location | Runtime | Build Tool | Purpose |\n|---|---|---|---|---|\n| `app-browser-my-extension` | `apps/browser/my-extension/` | Browser (webview) | Vite | React UI rendered inside VSCode's webview panel |\n| `app-stdio-my-extension` | `apps/stdio/my-extension/` | Node.js (child process) | Webpack | NestJS backend server communicating via stdio JSON-RPC |\n| `app-vscode-my-extension` | `apps/vscode/my-extension/` | Node.js (extension host) | Webpack | VSCode extension host — orchestrates server + webview |\n| `lib-isomorphic-my-extension` | `libs/isomorphic/my-extension/` | Any | Vite | Shared constants and types across all three tiers |\n\n## Communication Architecture\n\n```\n┌─────────────────────────────────────────────────────────┐\n│  VSCode Extension Host (apps/vscode/my-extension)       │\n│                                                         │\n│  ┌───────────────────┐    ┌──────────────────────────┐  │\n│  │ CommandHandlers   │    │ WebviewHandlers           │  │\n│  │ (palette cmds)    │    │ (webview→extension msgs)  │  │\n│  └───────────────────┘    └──────────────────────────┘  │\n│                                                         │\n│  ┌───────────────────┐    ┌──────────────────────────┐  │\n│  │ ServerNotification│    │ WebviewProvider           │  │\n│  │ Handlers          │    │ (serves React app)        │  │\n│  └───────────────────┘    └──────────────────────────┘  │\n│           ▲                         ▲                   │\n└───────────┼─────────────────────────┼───────────────────┘\n            │ stdio JSON-RPC          │ postMessage\n            ▼                         ▼\n┌───────────────────────┐  ┌──────────────────────────────┐\n│ Stdio Server          │  │ React Webview                │\n│ (apps/stdio/          │  │ (apps/browser/               │\n│  my-extension)        │  │  my-extension)               │\n│                       │  │                              │\n│ NestJS + @StdioHandler│  │ Redux + MessageBus middleware│\n│ Spawned as child proc │  │ Rendered in webview iframe   │\n└───────────────────────┘  └──────────────────────────────┘\n```\n\n### Message Routing\n\n1. **Webview → Server** (request/response): Webview dispatches Redux action → `messageBusMiddleware` intercepts → sends via `WebviewMessageBus` → extension receives and checks for a `@WebviewHandler` → if none, forwards to stdio server → server `@StdioHandler` processes and responds → response dispatched back to Redux\n2. **Server → Extension** (notifications): Server calls `messageBus.sendNotification()` → extension `@ServerNotificationHandler` receives → can trigger VSCode UI (messages, status bar, etc.)\n3. **Extension → Server** (request/response): Command handler calls `messageBus.sendRequest()` → routes to stdio server → `@StdioHandler` processes and responds\n4. **Extension → Webview** (notifications): Notifications are automatically broadcast to both extension and webview (with sender exclusion)\n\n---\n\n## Project 1: VSCode Extension (`apps/vscode/my-extension/`)\n\nThe orchestrator. It spawns the stdio server, serves the webview, and bridges communication.\n\n### Directory Structure\n\n```\napps/vscode/my-extension/\n├── project.json\n├── package.json              # VSCode extension manifest (contributes, activationEvents)\n├── webpack.config.js\n├── tsconfig.json              # extends tsconfig.server.json\n├── tsconfig.app.json          # types: [\"node\", \"vscode\"]\n├── tsconfig.spec.json\n└── src/\n    ├── main.ts                # Extension entry point\n    ├── assets/                # Icons, images\n    │   └── icon.svg\n    └── app/\n        ├── my-extension-extension.module.ts    # NestJS module with @VscodeExtensionModule\n        ├── classes/\n        │   └── my-extension-webview-provider.class.ts\n        └── services/\n            ├── my-extension-command-handler.service.ts\n            ├── my-extension-webview-handler.service.ts\n            └── my-extension-server-notification-handler.service.ts\n```\n\n### Entry Point (`src/main.ts`)\n\n```typescript\nimport 'reflect-metadata';\nimport { createExtensionFromModule } from '@onivoro/server-vscode';\nimport { MyExtensionExtensionModule } from './app/my-extension-extension.module';\n\nexport const { activate, deactivate } = createExtensionFromModule(\n  MyExtensionExtensionModule,\n);\n```\n\n### Extension Module (`src/app/my-extension-extension.module.ts`)\n\nThe `@VscodeExtensionModule` decorator configures the extension. `createExtensionFromModule` reads this configuration to bootstrap everything automatically.\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { VscodeExtensionModule } from '@onivoro/server-vscode';\nimport { MyExtensionWebviewProvider } from './classes/my-extension-webview-provider.class';\nimport { MyExtensionCommandHandlerService } from './services/my-extension-command-handler.service';\nimport { MyExtensionWebviewHandlerService } from './services/my-extension-webview-handler.service';\nimport { MyExtensionServerNotificationHandlerService } from './services/my-extension-server-notification-handler.service';\n\n@VscodeExtensionModule({\n  name: 'MyExtension',                                          // Display name\n  serverScript: 'dist/server/main.js',                          // Relative to extensionPath (works for local debug + VSIX)\n  webviewViewType: MyExtensionWebviewProvider.viewType,          // Must match package.json views id\n  createWebviewProvider: (uri) => new MyExtensionWebviewProvider(uri),\n  commandHandlerTokens: [MyExtensionCommandHandlerService],      // Services with @CommandHandler methods\n  serverOutputChannel: {\n    name: 'MyExtension Server',                                  // OutputChannel for server logs\n    showOnError: true,\n  },\n})\n@Module({\n  providers: [\n    MyExtensionCommandHandlerService,\n    MyExtensionWebviewHandlerService,\n    MyExtensionServerNotificationHandlerService,\n  ],\n})\nexport class MyExtensionExtensionModule {}\n```\n\n### Webview Provider (`src/app/classes/my-extension-webview-provider.class.ts`)\n\nExtends `BaseWebviewProvider` to serve the React app from the bundled `dist/webview` directory.\n\n```typescript\nimport * as vscode from 'vscode';\nimport {\n  BaseWebviewProvider,\n  generateVscodeThemeBridgeInjection,\n} from '@onivoro/server-vscode';\n\nexport class MyExtensionWebviewProvider extends BaseWebviewProvider {\n  public static readonly viewType = 'my-extension.webview';      // Must match package.json views id\n\n  constructor(extensionUri: vscode.Uri) {\n    super(extensionUri, {\n      webviewDistPath: 'dist/webview',          // Relative to extensionPath (works for local debug + VSIX)\n      enableCacheBusting: true,\n      allowUnsafeInlineStyles: true,\n    });\n  }\n\n  protected override getInjectedScripts(nonce: string): string {\n    return generateVscodeThemeBridgeInjection(nonce);\n  }\n}\n```\n\n### Command Handler Service (`src/app/services/my-extension-command-handler.service.ts`)\n\nHandles VSCode command palette commands. Injects `VSCODE_API`, `MESSAGE_BUS`, and `WEBVIEW_PROVIDER`.\n\n```typescript\nimport { Injectable, Inject } from '@nestjs/common';\nimport {\n  CommandHandler,\n  BaseWebviewProvider,\n  WEBVIEW_PROVIDER,\n  VSCODE_API,\n  VscodeApi,\n} from '@onivoro/server-vscode';\nimport { MESSAGE_BUS, MessageBus } from '@onivoro/isomorphic-jsonrpc';\n\n@Injectable()\nexport class MyExtensionCommandHandlerService {\n  constructor(\n    @Inject(VSCODE_API) private readonly vscode: VscodeApi,\n    @Inject(MESSAGE_BUS) private readonly messageBus: MessageBus,\n    @Inject(WEBVIEW_PROVIDER) private readonly webviewProvider: BaseWebviewProvider,\n  ) {}\n\n  @CommandHandler('my-extension.exampleCommand')\n  async exampleCommand(): Promise<void> {\n    const result = await this.messageBus.sendRequest('example.method', { param: 'value' });\n    await this.vscode.window.showInformationMessage(`Result: ${JSON.stringify(result)}`);\n  }\n\n  @CommandHandler('my-extension.reloadWebview')\n  async reloadWebview(): Promise<void> {\n    this.webviewProvider.reload();\n    await this.vscode.window.showInformationMessage('Webview reloaded');\n  }\n}\n```\n\n### Webview Handler Service (`src/app/services/my-extension-webview-handler.service.ts`)\n\nHandles messages originating from the React webview. Requests from the webview are routed here first; if no handler matches, they pass through to the stdio server.\n\n```typescript\nimport { Injectable, Inject } from '@nestjs/common';\nimport {\n  WebviewHandler,\n  VscodeWorkspaceService,\n  VSCODE_API,\n  VscodeApi,\n} from '@onivoro/server-vscode';\n\n@Injectable()\nexport class MyExtensionWebviewHandlerService {\n  constructor(\n    @Inject(VSCODE_API) private readonly vscode: VscodeApi,\n    private readonly workspace: VscodeWorkspaceService,\n  ) {}\n\n  @WebviewHandler('showMessage')\n  async showMessage(params: { message: string; type?: 'info' | 'warning' | 'error' }): Promise<void> {\n    switch (params.type) {\n      case 'warning': await this.vscode.window.showWarningMessage(params.message); break;\n      case 'error':   await this.vscode.window.showErrorMessage(params.message); break;\n      default:        await this.vscode.window.showInformationMessage(params.message);\n    }\n  }\n\n  @WebviewHandler('showQuickPick')\n  async showQuickPick(params: {\n    items: Array<{ label: string; description?: string }>;\n    title?: string;\n    placeholder?: string;\n  }): Promise<{ label: string } | null> {\n    const result = await this.vscode.window.showQuickPick(params.items, {\n      title: params.title,\n      placeHolder: params.placeholder,\n    });\n    return result ? { label: result.label } : null;\n  }\n\n  @WebviewHandler('showInputBox')\n  async showInputBox(params: {\n    prompt?: string; placeholder?: string; value?: string; password?: boolean;\n  }): Promise<{ value: string } | null> {\n    const result = await this.vscode.window.showInputBox({\n      prompt: params.prompt, placeHolder: params.placeholder,\n      value: params.value, password: params.password,\n    });\n    return result !== undefined ? { value: result } : null;\n  }\n\n  @WebviewHandler('getWorkspaceFolders')\n  getWorkspaceFolders(): { folders: string[] } {\n    const folders = this.workspace.workspaceFolders;\n    return { folders: folders?.map((f) => f.uri.fsPath) ?? [] };\n  }\n\n  @WebviewHandler('getWorkspaceName')\n  getWorkspaceName(): { name: string | null } {\n    return { name: this.workspace.name ?? null };\n  }\n\n  @WebviewHandler('getConfiguration')\n  getConfiguration(params: { section: string; key: string }): { value: unknown } {\n    const config = this.workspace.getConfiguration(params.section);\n    return { value: config.get(params.key) };\n  }\n}\n```\n\n### Server Notification Handler Service (`src/app/services/my-extension-server-notification-handler.service.ts`)\n\nListens for notifications sent from the stdio server process. Notifications are also automatically broadcast to the webview.\n\n```typescript\nimport { Injectable, Inject } from '@nestjs/common';\nimport { ServerNotificationHandler, VSCODE_API, VscodeApi } from '@onivoro/server-vscode';\n\n@Injectable()\nexport class MyExtensionServerNotificationHandlerService {\n  constructor(@Inject(VSCODE_API) private readonly vscode: VscodeApi) {}\n\n  @ServerNotificationHandler('showMessage')\n  async handleShowMessage(params: { message: string; type?: 'info' | 'warning' | 'error' }): Promise<void> {\n    const { message, type = 'info' } = params;\n    switch (type) {\n      case 'warning': await this.vscode.window.showWarningMessage(message); break;\n      case 'error':   await this.vscode.window.showErrorMessage(message); break;\n      default:        await this.vscode.window.showInformationMessage(message);\n    }\n  }\n\n  @ServerNotificationHandler('taskProgress')\n  handleTaskProgress(params: { taskId: string; progress: number; message?: string }): void {\n    const { taskId, progress, message } = params;\n    const statusMessage = message\n      ? `Task ${taskId}: ${progress}% - ${message}`\n      : `Task ${taskId}: ${progress}%`;\n    this.vscode.window.setStatusBarMessage(statusMessage, 3000);\n  }\n\n  @ServerNotificationHandler('customEvent')\n  handleCustomEvent(params: { event: string; payload: unknown }): void {\n    console.log(`[MyExtension] Custom event: ${params.event}`, params.payload);\n  }\n}\n```\n\n### VSCode Extension Manifest (`package.json`)\n\nThis is a standard VSCode extension `package.json`. Key sections:\n\n```json\n{\n  \"name\": \"my-extension\",\n  \"displayName\": \"MyExtension\",\n  \"description\": \"VSCode extension for MyExtension\",\n  \"version\": \"1.0.0\",\n  \"publisher\": \"your-publisher-id\",\n  \"engines\": { \"vscode\": \"^1.74.0\" },\n  \"categories\": [\"Other\"],\n  \"activationEvents\": [\"onStartupFinished\"],\n  \"main\": \"./dist/main.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/your-org/your-repo\"\n  },\n  \"contributes\": {\n    \"commands\": [\n      { \"command\": \"my-extension.exampleCommand\", \"title\": \"MyExtension: Run Example Command\" },\n      { \"command\": \"my-extension.reloadWebview\", \"title\": \"MyExtension: Reload Webview\" }\n    ],\n    \"viewsContainers\": {\n      \"activitybar\": [\n        { \"id\": \"my-extension\", \"title\": \"MyExtension\", \"icon\": \"resources/icon.svg\" }\n      ]\n    },\n    \"views\": {\n      \"my-extension\": [\n        { \"type\": \"webview\", \"id\": \"my-extension.webview\", \"name\": \"MyExtension\", \"icon\": \"resources/icon.svg\" }\n      ]\n    }\n  }\n}\n```\n\n**Critical alignment points:**\n- `contributes.views.my-extension[0].id` must equal `MyExtensionWebviewProvider.viewType` and `@VscodeExtensionModule.webviewViewType`\n- `contributes.commands[*].command` must match the strings in `@CommandHandler()` decorators\n- `main` must point to the webpack output entry\n- `repository` field is required or `vsce` will prompt interactively\n\n### Nx Project Configuration (`project.json`)\n\n```json\n{\n  \"name\": \"app-vscode-my-extension\",\n  \"$schema\": \"../../../node_modules/nx/schemas/project-schema.json\",\n  \"sourceRoot\": \"apps/vscode/my-extension/src\",\n  \"projectType\": \"application\",\n  \"targets\": {\n    \"build\": {\n      \"executor\": \"@nx/webpack:webpack\",\n      \"dependsOn\": [\"app-stdio-my-extension:build\", \"app-browser-my-extension:build\"],\n      \"outputs\": [\"{options.outputPath}\"],\n      \"defaultConfiguration\": \"production\",\n      \"options\": {\n        \"target\": \"node\",\n        \"compiler\": \"tsc\",\n        \"outputPath\": \"apps/vscode/my-extension/dist\",\n        \"main\": \"apps/vscode/my-extension/src/main.ts\",\n        \"tsConfig\": \"apps/vscode/my-extension/tsconfig.app.json\",\n        \"generatePackageJson\": false,\n        \"assets\": [\n          { \"input\": \"apps/vscode/my-extension\", \"glob\": \"package.json\", \"output\": \".\" },\n          { \"input\": \"apps/vscode/my-extension\", \"glob\": \".vscodeignore\", \"output\": \".\" },\n          { \"input\": \"apps/vscode/my-extension/src/assets\", \"glob\": \"**/*\", \"output\": \"./resources\" },\n          { \"input\": \"apps/stdio/my-extension/dist\", \"glob\": \"main.js\", \"output\": \"./server\" },\n          { \"input\": \"apps/stdio/my-extension/dist\", \"glob\": \"main.js.map\", \"output\": \"./server\" },\n          { \"input\": \"dist/apps/browser/my-extension\", \"glob\": \"**/*\", \"output\": \"./webview\" }\n        ],\n        \"isolatedConfig\": true,\n        \"sourceMap\": true,\n        \"webpackConfig\": \"apps/vscode/my-extension/webpack.config.js\"\n      },\n      \"configurations\": {\n        \"development\": {},\n        \"production\": {}\n      }\n    }\n  }\n}\n```\n\n**Key build dependency:** The vscode project `dependsOn` both the stdio and browser builds. The `assets` array bundles their outputs into the extension:\n- `apps/stdio/my-extension/dist/main.js` → `dist/server/main.js` (referenced by `@VscodeExtensionModule.serverScript`)\n- `dist/apps/browser/my-extension/**/*` → `dist/webview/**/*` (referenced by `BaseWebviewProvider.webviewDistPath`)\n\n### TypeScript Configuration\n\n```json\n// tsconfig.json — extends the server base\n{ \"extends\": \"../../../tsconfig.server.json\", \"files\": [], \"include\": [],\n  \"references\": [{ \"path\": \"./tsconfig.app.json\" }, { \"path\": \"./tsconfig.spec.json\" }] }\n\n// tsconfig.app.json — adds vscode types\n{ \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": { \"outDir\": \"../../../dist/out-tsc\", \"types\": [\"node\", \"vscode\"] },\n  \"exclude\": [\"jest.config.ts\", \"src/**/*.spec.ts\", \"src/**/*.test.ts\"],\n  \"include\": [\"src/**/*.ts\"] }\n```\n\n### Webpack Configuration\n\nVSCode extensions ship without `node_modules`, so **all dependencies must be bundled** except `vscode` (provided by the runtime). The `withNx()` plugin externalizes all `node_modules` by default for Node targets — this must be overridden. NestJS also pulls in optional microservices transport packages (kafka, grpc, redis, etc.) that must be ignored.\n\n```javascript\nconst { composePlugins, withNx } = require('@nx/webpack');\nconst webpack = require('webpack');\n\nmodule.exports = composePlugins(withNx(), (config) => {\n  // Only 'vscode' should remain external (provided by the VS Code runtime).\n  config.externals = { vscode: 'commonjs vscode' };\n\n  // Ignore optional NestJS microservices transport dependencies\n  config.plugins = config.plugins || [];\n  config.plugins.push(\n    new webpack.IgnorePlugin({\n      checkResource(resource) {\n        const optionalDeps = [\n          '@grpc/grpc-js',\n          '@grpc/proto-loader',\n          'kafkajs',\n          'mqtt',\n          'nats',\n          'ioredis',\n          'amqplib',\n          'amqp-connection-manager',\n          'bufferutil',\n          'utf-8-validate',\n        ];\n        return optionalDeps.includes(resource);\n      },\n    })\n  );\n\n  config.ignoreWarnings = [/Failed to parse source map/];\n\n  return config;\n});\n```\n\n---\n\n## Project 2: Stdio Server (`apps/stdio/my-extension/`)\n\nThe backend process. Spawned by the extension as a child process; communicates via stdio using JSON-RPC.\n\n### Directory Structure\n\n```\napps/stdio/my-extension/\n├── project.json\n├── webpack.config.js\n├── tsconfig.json              # extends tsconfig.server.json\n├── tsconfig.app.json          # types: [\"node\", \"vscode\"]\n├── tsconfig.spec.json\n└── src/\n    ├── main.ts\n    └── app/\n        ├── app-stdio-my-extension.module.ts\n        ├── app-stdio-my-extension-config.class.ts\n        └── services/\n            └── my-extension-message-handler.service.ts\n```\n\n### Entry Point (`src/main.ts`)\n\n```typescript\nimport { bootstrapStdioApp } from '@onivoro/server-stdio';\nimport { AppStdioMyExtensionModule } from './app/app-stdio-my-extension.module';\n\nbootstrapStdioApp(AppStdioMyExtensionModule);\n```\n\n### NestJS Module (`src/app/app-stdio-my-extension.module.ts`)\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport {\n  StdioTransportModule,\n  StdioTransportService,\n  StdioMessageBus,\n  createStdioMessageBus,\n} from '@onivoro/server-stdio';\nimport { MESSAGE_BUS } from '@onivoro/isomorphic-jsonrpc';\nimport { AppStdioMyExtensionConfig } from './app-stdio-my-extension-config.class';\nimport { MyExtensionMessageHandlerService } from './services/my-extension-message-handler.service';\n\nconst config = new AppStdioMyExtensionConfig();\n\n@Module({\n  imports: [\n    StdioTransportModule.forRoot(),       // Handlers are auto-discovered, not passed here\n  ],\n  providers: [\n    { provide: AppStdioMyExtensionConfig, useValue: config },\n    {\n      provide: StdioMessageBus,\n      useFactory: (transportService: StdioTransportService) =>\n        createStdioMessageBus(transportService),\n      inject: [StdioTransportService],\n    },\n    { provide: MESSAGE_BUS, useExisting: StdioMessageBus },\n    MyExtensionMessageHandlerService,\n  ],\n  exports: [StdioMessageBus, MESSAGE_BUS],\n})\nexport class AppStdioMyExtensionModule {}\n```\n\n### Message Handler Service (`src/app/services/my-extension-message-handler.service.ts`)\n\nMethods decorated with `@StdioHandler` are auto-discovered by `StdioTransportModule`.\n\n```typescript\nimport { Injectable, Inject } from '@nestjs/common';\nimport { StdioHandler } from '@onivoro/server-stdio';\nimport { MESSAGE_BUS, MessageBus } from '@onivoro/isomorphic-jsonrpc';\n\n@Injectable()\nexport class MyExtensionMessageHandlerService {\n  constructor(@Inject(MESSAGE_BUS) private readonly messageBus: MessageBus) {}\n\n  @StdioHandler('health')\n  async health(): Promise<{ status: string; timestamp: string }> {\n    return { status: 'ok', timestamp: new Date().toISOString() };\n  }\n\n  @StdioHandler('example.method')\n  async exampleMethod(params: unknown): Promise<{ success: boolean; params: unknown }> {\n    return { success: true, params };\n  }\n\n  // Example: long-running task with progress notifications back to extension\n  @StdioHandler('demo.longRunningTask')\n  async demoLongRunningTask(params: { taskId: string }): Promise<{ success: boolean; taskId: string }> {\n    const { taskId } = params;\n    for (let progress = 0; progress <= 100; progress += 20) {\n      this.messageBus.sendNotification('extension.taskProgress', {\n        taskId, progress,\n        message: progress < 100 ? 'Processing...' : 'Complete!',\n      });\n      await new Promise((resolve) => setTimeout(resolve, 500));\n    }\n    this.messageBus.sendNotification('extension.showMessage', {\n      message: `Task ${taskId} completed successfully!`,\n      type: 'info',\n    });\n    return { success: true, taskId };\n  }\n}\n```\n\n### Nx Project Configuration (`project.json`)\n\n```json\n{\n  \"name\": \"app-stdio-my-extension\",\n  \"$schema\": \"../../../node_modules/nx/schemas/project-schema.json\",\n  \"sourceRoot\": \"apps/stdio/my-extension/src\",\n  \"projectType\": \"application\",\n  \"targets\": {\n    \"build\": {\n      \"executor\": \"@nx/webpack:webpack\",\n      \"outputs\": [\"{options.outputPath}\"],\n      \"defaultConfiguration\": \"production\",\n      \"options\": {\n        \"target\": \"node\",\n        \"compiler\": \"tsc\",\n        \"outputPath\": \"apps/stdio/my-extension/dist\",\n        \"main\": \"apps/stdio/my-extension/src/main.ts\",\n        \"tsConfig\": \"apps/stdio/my-extension/tsconfig.app.json\",\n        \"generatePackageJson\": false,\n        \"isolatedConfig\": true,\n        \"sourceMap\": true,\n        \"webpackConfig\": \"apps/stdio/my-extension/webpack.config.js\"\n      },\n      \"configurations\": { \"development\": {}, \"production\": {} }\n    }\n  }\n}\n```\n\n### Webpack Configuration\n\nThe stdio server runs as a child process of the extension — it also ships without `node_modules`, so all dependencies must be bundled. Unlike the extension, nothing should remain external.\n\n```javascript\nconst { composePlugins, withNx } = require('@nx/webpack');\nconst webpack = require('webpack');\n\nmodule.exports = composePlugins(withNx(), (config) => {\n  // Bundle everything — the server runs inside the extension package\n  // which has no node_modules.\n  config.externals = {};\n\n  // Ignore optional NestJS microservices transport dependencies\n  config.plugins = config.plugins || [];\n  config.plugins.push(\n    new webpack.IgnorePlugin({\n      checkResource(resource) {\n        const optionalDeps = [\n          '@grpc/grpc-js',\n          '@grpc/proto-loader',\n          'kafkajs',\n          'mqtt',\n          'nats',\n          'ioredis',\n          'amqplib',\n          'amqp-connection-manager',\n          'bufferutil',\n          'utf-8-validate',\n        ];\n        return optionalDeps.includes(resource);\n      },\n    })\n  );\n\n  config.ignoreWarnings = [/Failed to parse source map/];\n\n  return config;\n});\n```\n\n---\n\n## Project 3: Browser Webview (`apps/browser/my-extension/`)\n\nThe React UI rendered inside VSCode's webview panel.\n\n### Directory Structure\n\n```\napps/browser/my-extension/\n├── project.json\n├── index.html\n├── vite.config.ts\n├── tsconfig.json              # extends tsconfig.web.json\n├── tsconfig.app.json\n└── src/\n    ├── main.tsx\n    └── app/\n        ├── app.tsx\n        ├── pages/\n        │   └── SomePage.tsx\n        ├── components/\n        │   └── SomeComponent.tsx\n        ├── hooks/\n        │   └── use-rpc-request.hook.ts\n        └── state/\n            ├── store.ts\n            ├── middleware/\n            │   └── message-bus.middleware.ts\n            ├── slices/\n            │   ├── jsonrpc-request-entity.slice.ts\n            │   └── jsonrpc-response-entity.slice.ts\n            └── types/\n                └── root-state.type.ts\n```\n\n### Entry Point (`src/main.tsx`)\n\n```tsx\nimport { StrictMode } from 'react';\nimport { BrowserRouter } from 'react-router-dom';\nimport * as ReactDOM from 'react-dom/client';\nimport App from './app/app';\nimport { ThemeProvider, createTheme } from '@mui/material';\nimport { Provider } from 'react-redux';\nimport { store } from './app/state/store';\n\nconst theme = createTheme();\nconst root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);\n\nroot.render(\n  <StrictMode>\n    <Provider store={store}>\n      <ThemeProvider theme={theme}>\n        <BrowserRouter>\n          <App />\n        </BrowserRouter>\n      </ThemeProvider>\n    </Provider>\n  </StrictMode>,\n);\n```\n\n### Redux Store (`src/app/state/store.ts`)\n\n```typescript\nimport { configureStore } from '@reduxjs/toolkit';\nimport { buildReducers, SliceConfig } from '@onivoro/browser-redux';\nimport { jsonRpcRequestEntitySlice } from './slices/jsonrpc-request-entity.slice';\nimport { jsonRpcResponseEntitySlice } from './slices/jsonrpc-response-entity.slice';\nimport { messageBusMiddleware } from './middleware/message-bus.middleware';\n\nexport const sliceRegistry: SliceConfig[] = [\n  { slice: jsonRpcRequestEntitySlice },\n  { slice: jsonRpcResponseEntitySlice },\n];\n\nexport const store = configureStore({\n  reducer: buildReducers(sliceRegistry),\n  middleware: (getDefaultMiddleware) =>\n    getDefaultMiddleware().concat(messageBusMiddleware),\n});\n```\n\n### MessageBus Middleware (`src/app/state/middleware/message-bus.middleware.ts`)\n\nThis is the bridge between Redux and the JSON-RPC communication layer. When a request action is dispatched, the middleware sends it to the extension (and potentially on to the server) and dispatches the response back to Redux.\n\n```typescript\nimport { Middleware, isAction } from '@reduxjs/toolkit';\nimport { createWebviewMessageBus, WebviewMessageBus } from '@onivoro/browser-jsonrpc';\nimport { JsonRpcRequest } from '@onivoro/isomorphic-jsonrpc';\nimport { jsonRpcRequestEntitySlice } from '../slices/jsonrpc-request-entity.slice';\nimport { jsonRpcResponseEntitySlice } from '../slices/jsonrpc-response-entity.slice';\n\nlet messageBusInstance: WebviewMessageBus | null = null;\n\nfunction getMessageBus(): WebviewMessageBus | null {\n  if (messageBusInstance) return messageBusInstance;\n  try {\n    messageBusInstance = createWebviewMessageBus();\n    return messageBusInstance;\n  } catch {\n    console.warn('[MessageBusMiddleware] VSCode API not available');\n    return null;\n  }\n}\n\nexport const messageBusMiddleware: Middleware = (store) => (next) => (action) => {\n  const result = next(action);\n  if (!isAction(action)) return result;\n\n  const setOneActionType = jsonRpcRequestEntitySlice.actions.setOne.type;\n  if (action.type !== setOneActionType) return result;\n\n  const request = (action as ReturnType<typeof jsonRpcRequestEntitySlice.actions.setOne>)\n    .payload as JsonRpcRequest & { id: string };\n\n  const messageBus = getMessageBus();\n  if (!messageBus) return result;\n\n  messageBus.sendRequest(request.method, request.params)\n    .then((responseResult) => {\n      store.dispatch(jsonRpcResponseEntitySlice.actions.setOne({\n        id: request.id, jsonrpc: '2.0', result: responseResult,\n      }));\n    })\n    .catch((error: Error) => {\n      store.dispatch(jsonRpcResponseEntitySlice.actions.setOne({\n        id: request.id, jsonrpc: '2.0',\n        error: { code: -32603, message: error.message || 'Internal error' },\n      }));\n    });\n\n  return result;\n};\n\nexport function disposeMessageBus(): void {\n  if (messageBusInstance) { messageBusInstance.dispose(); messageBusInstance = null; }\n}\n```\n\n### Entity Slices (`src/app/state/slices/`)\n\n```typescript\n// jsonrpc-request-entity.slice.ts\nimport { createEntitySlice } from '@onivoro/browser-redux';\nimport { JsonRpcRequest } from '@onivoro/isomorphic-jsonrpc';\n\nexport const jsonRpcRequestEntitySlice = createEntitySlice<\n  Omit<JsonRpcRequest, 'id'> & { id: string }\n>('jsonRpcRequestEntitySlice');\n\n// jsonrpc-response-entity.slice.ts\nimport { createEntitySlice } from '@onivoro/browser-redux';\nimport { JsonRpcResponse } from '@onivoro/isomorphic-jsonrpc';\n\nexport const jsonRpcResponseEntitySlice = createEntitySlice<\n  Omit<JsonRpcResponse, 'id'> & { id: string }\n>('jsonRpcResponseEntitySlice');\n```\n\n### RPC Hook (`src/app/hooks/use-rpc-request.hook.ts`)\n\nConvenience hook for components to send JSON-RPC requests and look up responses.\n\n```typescript\nimport { useDispatch, useSelector } from 'react-redux';\nimport { jsonRpcRequestEntitySlice } from '../state/slices/jsonrpc-request-entity.slice';\nimport { jsonRpcResponseEntitySlice } from '../state/slices/jsonrpc-response-entity.slice';\nimport { JsonRpcRequest } from '@onivoro/isomorphic-jsonrpc';\nimport { v4 } from 'uuid';\n\nexport function useRpc() {\n  const dispatch = useDispatch();\n  const responseEntities = useSelector(jsonRpcResponseEntitySlice.selectors.entities);\n\n  function sendRequest<TParams = any>(_: Pick<JsonRpcRequest, 'method'> & { params?: TParams }) {\n    const id = v4();\n    const { method, params = {} } = _;\n    dispatch(jsonRpcRequestEntitySlice.actions.setOne({ id, jsonrpc: '2.0', method, params }));\n    return id;\n  }\n\n  function lookupResponse(id: string) {\n    return responseEntities[id];\n  }\n\n  return { sendRequest, lookupResponse };\n}\n```\n\n### Vite Configuration (`vite.config.ts`)\n\n```typescript\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\nimport { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';\nimport { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';\n\nexport default defineConfig(() => ({\n  root: __dirname,\n  cacheDir: '../../../node_modules/.vite/apps/browser/my-extension',\n  server: { port: 4200, host: 'localhost' },\n  preview: { port: 4300, host: 'localhost' },\n  plugins: [react(), nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],\n  build: {\n    outDir: '../../../dist/apps/browser/my-extension',\n    emptyOutDir: true,\n    reportCompressedSize: true,\n    commonjsOptions: { transformMixedEsModules: true },\n  },\n}));\n```\n\n### Nx Project Configuration (`project.json`)\n\n```json\n{\n  \"name\": \"app-browser-my-extension\",\n  \"$schema\": \"../../../node_modules/nx/schemas/project-schema.json\",\n  \"sourceRoot\": \"apps/browser/my-extension/src\",\n  \"projectType\": \"application\",\n  \"targets\": {}\n}\n```\n\nTargets are inferred by Nx from the `vite.config.ts`.\n\n---\n\n## Project 4: Shared Library (`libs/isomorphic/my-extension/`)\n\nConstants and types shared across all three tiers.\n\n### Directory Structure\n\n```\nlibs/isomorphic/my-extension/\n├── project.json\n├── tsconfig.json              # extends tsconfig.isomorphic.json\n├── tsconfig.lib.json\n├── tsconfig.spec.json\n└── src/\n    ├── index.ts               # Barrel export\n    └── lib/\n        ├── constants/\n        │   └── my-extension-commands.constant.ts\n        └── types/             # Add shared interfaces/types here\n```\n\n### Commands Constant (`src/lib/constants/my-extension-commands.constant.ts`)\n\n```typescript\nexport const myExtensionCommands = {\n  SELECT_JSONL_FILE: 'SELECT_JSONL_FILE',\n  // Add more shared command identifiers here\n};\n```\n\n### Barrel Export (`src/index.ts`)\n\n```typescript\nexport * from './lib/constants/my-extension-commands.constant';\n```\n\n### Nx Project Configuration (`project.json`)\n\n```json\n{\n  \"name\": \"lib-isomorphic-my-extension\",\n  \"$schema\": \"../../../node_modules/nx/schemas/project-schema.json\",\n  \"sourceRoot\": \"libs/isomorphic/my-extension/src\",\n  \"projectType\": \"library\",\n  \"targets\": {\n    \"build\": {\n      \"executor\": \"@nx/vite:build\",\n      \"generatePackageJson\": true,\n      \"outputs\": [\"{options.outputPath}\"],\n      \"options\": { \"outputPath\": \"dist/libs/isomorphic/my-extension\" }\n    }\n  }\n}\n```\n\n### TypeScript Configuration\n\n```json\n// tsconfig.json\n{ \"extends\": \"../../../tsconfig.isomorphic.json\", \"files\": [], \"include\": [],\n  \"references\": [{ \"path\": \"./tsconfig.lib.json\" }, { \"path\": \"./tsconfig.spec.json\" }] }\n\n// tsconfig.lib.json\n{ \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": { \"outDir\": \"../../../dist/out-tsc\" },\n  \"exclude\": [\"jest.config.ts\", \"src/**/*.spec.ts\", \"src/**/*.test.ts\"],\n  \"include\": [\"src/**/*.ts\"] }\n```\n\n---\n\n## Framework Libraries\n\nThese `@onivoro/*` libraries provide the foundation. They are not part of the extension itself but are required dependencies:\n\n| Import | Purpose |\n|---|---|\n| `@onivoro/server-vscode` | `createExtensionFromModule`, `@VscodeExtensionModule`, `@CommandHandler`, `@WebviewHandler`, `@ServerNotificationHandler`, `BaseWebviewProvider`, `VSCODE_API`, `VscodeApi`, `WEBVIEW_PROVIDER`, `VscodeWorkspaceService`, `generateVscodeThemeBridgeInjection` |\n| `@onivoro/server-stdio` | `bootstrapStdioApp`, `StdioTransportModule`, `StdioTransportService`, `StdioMessageBus`, `createStdioMessageBus`, `@StdioHandler` |\n| `@onivoro/isomorphic-jsonrpc` | `MESSAGE_BUS`, `MessageBus`, `JsonRpcRequest`, `JsonRpcResponse` |\n| `@onivoro/browser-jsonrpc` | `createWebviewMessageBus`, `WebviewMessageBus` |\n| `@onivoro/browser-redux` | `createEntitySlice`, `buildReducers`, `SliceConfig` |\n\n---\n\n## Building and Installing the VSIX\n\n### Prerequisites\n\n`@vscode/vsce` must be installed as a dev dependency in the monorepo root.\n\n### Package Target\n\nThe vscode project's `project.json` includes a `package` target that builds the `.vsix`:\n\n```json\n{\n  \"package\": {\n    \"executor\": \"nx:run-commands\",\n    \"dependsOn\": [\"build\"],\n    \"options\": {\n      \"command\": \"cd apps/vscode/my-extension/dist && node -e \\\"const p=require('./package.json');p.main='./main.js';require('fs').writeFileSync('./package.json',JSON.stringify(p,null,2))\\\" && mkdir -p dist && mv server dist/server && mv webview dist/webview && vsce package --no-dependencies --skip-license -o ../my-extension.vsix --baseContentUrl https://github.com/your-org/your-repo --baseImagesUrl https://github.com/your-org/your-repo\"\n    }\n  }\n}\n```\n\n**What this does:**\n1. `dependsOn: [\"build\"]` ensures the stdio server, browser webview, and extension are all built first\n2. Patches `dist/package.json` to fix the `main` entrypoint (the source `package.json` uses `\"main\": \"./dist/main.js\"` for development, but inside the `dist/` folder it needs to be `\"main\": \"./main.js\"`)\n3. Moves `server/` and `webview/` into a `dist/` subdirectory so that paths like `dist/server/main.js` and `dist/webview` resolve correctly from `extensionPath` in both contexts (local debug uses `apps/vscode/my-extension/` as the extension root; the VSIX uses the flat `dist/` content as the root)\n4. Runs `vsce package` to produce the `.vsix` file\n\n**Path resolution strategy:** Source code uses `dist/`-prefixed paths (`dist/server/main.js`, `dist/webview`) which resolve correctly during local debug (where `extensionPath` = the project source directory and built files live under `dist/`). The package command restructures the build output so the same `dist/` prefix resolves correctly inside the installed VSIX.\n\n### Build the VSIX\n\n```bash\nnx package app-vscode-my-extension\n```\n\nThis outputs `apps/vscode/my-extension/my-extension.vsix`.\n\n### Install Locally for Testing\n\n```bash\ncode --install-extension apps/vscode/my-extension/my-extension.vsix\n```\n\nThen reload VS Code (`Cmd+Shift+P` → \"Developer: Reload Window\"). The extension should appear in the activity bar and its commands should be available via the command palette (`Cmd+Shift+P` → \"MyExtension:\").\n\n---\n\n## Checklist: Creating a New Extension\n\nReplace `my-extension` with your extension's lowercase name and `MyExtension` with the PascalCase version throughout.\n\n1. **Create the shared library** (`libs/isomorphic/my-extension/`)\n   - [ ] `project.json` with `lib-isomorphic-my-extension` as the project name\n   - [ ] `tsconfig.json` extending `tsconfig.isomorphic.json`\n   - [ ] `tsconfig.lib.json`\n   - [ ] `src/index.ts` barrel export\n   - [ ] `src/lib/constants/my-extension-commands.constant.ts`\n   - [ ] Add path mapping to `tsconfig.base.json`\n\n2. **Create the stdio server** (`apps/stdio/my-extension/`)\n   - [ ] `project.json` with `app-stdio-my-extension` as the project name\n   - [ ] `webpack.config.js`\n   - [ ] `tsconfig.json` extending `tsconfig.server.json`\n   - [ ] `tsconfig.app.json` with `types: [\"node\", \"vscode\"]`\n   - [ ] `src/main.ts` — `bootstrapStdioApp()`\n   - [ ] `src/app/app-stdio-my-extension.module.ts` — NestJS module with `StdioTransportModule.forRoot()`\n   - [ ] `src/app/app-stdio-my-extension-config.class.ts`\n   - [ ] `src/app/services/my-extension-message-handler.service.ts` — at minimum a `@StdioHandler('health')` method\n\n3. **Create the browser webview** (`apps/browser/my-extension/`)\n   - [ ] `project.json` with `app-browser-my-extension` as the project name\n   - [ ] `vite.config.ts` with `outDir: '../../../dist/apps/browser/my-extension'`\n   - [ ] `index.html`\n   - [ ] `src/main.tsx` — React bootstrap with Redux Provider and MUI ThemeProvider\n   - [ ] `src/app/app.tsx`\n   - [ ] `src/app/state/store.ts` — configureStore with `messageBusMiddleware`\n   - [ ] `src/app/state/middleware/message-bus.middleware.ts`\n   - [ ] `src/app/state/slices/jsonrpc-request-entity.slice.ts`\n   - [ ] `src/app/state/slices/jsonrpc-response-entity.slice.ts`\n   - [ ] `src/app/hooks/use-rpc-request.hook.ts`\n\n4. **Create the VSCode extension** (`apps/vscode/my-extension/`)\n   - [ ] `project.json` with `app-vscode-my-extension` as the project name, `dependsOn` stdio + browser builds, and asset bundling\n   - [ ] `package.json` — VSCode manifest with commands, viewsContainers, views\n   - [ ] `webpack.config.js`\n   - [ ] `tsconfig.json` extending `tsconfig.server.json`\n   - [ ] `tsconfig.app.json` with `types: [\"node\", \"vscode\"]`\n   - [ ] `.vscodeignore`\n   - [ ] `src/main.ts` — `createExtensionFromModule()`\n   - [ ] `src/assets/icon.svg`\n   - [ ] `src/app/my-extension-extension.module.ts` — `@VscodeExtensionModule` + `@Module`\n   - [ ] `src/app/classes/my-extension-webview-provider.class.ts` — extends `BaseWebviewProvider`\n   - [ ] `src/app/services/my-extension-command-handler.service.ts` — `@CommandHandler` methods\n   - [ ] `src/app/services/my-extension-webview-handler.service.ts` — `@WebviewHandler` methods\n   - [ ] `src/app/services/my-extension-server-notification-handler.service.ts` — `@ServerNotificationHandler` methods\n\n5. **Verify alignment**\n   - [ ] `MyExtensionWebviewProvider.viewType` matches `package.json` `contributes.views` id\n   - [ ] `@CommandHandler` strings match `package.json` `contributes.commands` entries\n   - [ ] `@VscodeExtensionModule.serverScript` points to where stdio `main.js` is bundled\n   - [ ] Vite `outDir` for browser matches the extension's asset `input` path for webview\n\n6. **Build and test**\n   - [ ] `nx build app-stdio-my-extension`\n   - [ ] `nx build app-browser-my-extension`\n   - [ ] `nx build app-vscode-my-extension` (should cascade via dependsOn)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}