{"_id":"@076lik/git-panel","_rev":"12-fcd0ca4cdf6a57e2abbcff453ef75d75","name":"@076lik/git-panel","dist-tags":{"latest":"3.0.1"},"versions":{"2.2.0":{"name":"@076lik/git-panel","version":"2.2.0","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.0","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"74ce3d020136e770a91a933d291017c5cd7120e6","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.0.tgz","fileCount":17,"integrity":"sha512-wZMB8508Z/RCPiFjOymfj9KK+TACkMNflAxrJoKG0sC4mzvXX1lKJ/1NjJZ4UGn9o66RMi01/yjkDK/x8BLNmA==","signatures":[{"sig":"MEUCIQCSMvH7dbw5eBBY60n9Z7SEjmvbLrxnHzZRP9et0y36TgIgSN0eSYyaABggiunH/u+v9DyaLSIEN9wD6eqYaEWEd7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1591149},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"9a5a7aad1ed386a12adea99da76002d33fe82798","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.0_1779081917293_0.7017771232988159","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@076lik/git-panel","version":"2.2.1","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.1","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"6b6ea12e9fba26c8b9148bcc0659407c34ea6377","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.1.tgz","fileCount":18,"integrity":"sha512-RZ02PmRKWkFD80anRXELdacfMSKsZmrsZHEjmQCf2xSmxian8bDG9kSKqgfG1RtQKTJFzQ8lmUQDNK+20R1ycA==","signatures":[{"sig":"MEQCIGaOoItTelYD4OFFV07reNzP6rNNIx/RbBIdZggTxshXAiAu85ICCCgn2ZuTVyVPEOCu3lSAp+jKMPzty5q+LOsXYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1593404},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"6a87588701586636ee9588fdd9d3285e408d34e4","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.1_1779082838794_0.0677125498262241","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@076lik/git-panel","version":"2.2.2","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.2","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"6e047c3116a075d27b711a11cd1cdfbe17e2e7f9","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.2.tgz","fileCount":18,"integrity":"sha512-u3BQbB4ycWvsoyhwiQAw8y+EPjoHSEz+zc040ElNqv90pCLvJz03BFEED8nnYhZNPjcUflnb7oxsJcfDzAZOEQ==","signatures":[{"sig":"MEYCIQCXGU0yJ/PFhgCPDZbWQB1SHXNst3PYTn417zeAuObQKwIhALGsG3plTCdFBwS1pkr8kifvqWqIJoWJE+/iX25emUJB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1595271},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"8084488f62d94fe51aae06d0b401742ffdce8aee","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.2_1779090071904_0.23787047051292176","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@076lik/git-panel","version":"2.2.3","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.3","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"f677801c3c9afcdc4aaa0c4a9e1f69a26b40e0c2","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.3.tgz","fileCount":18,"integrity":"sha512-yQ5T/AqASx+FvmzJE8f4rujNIPbjiKrqcd/P09vGO3H/4OKHlcqoN2+Amf73XQk+yV8o3TH+Y9mCfG/oUP47Rg==","signatures":[{"sig":"MEUCIE87kSDll+zxnhgMZMJg/xRKvSN81t7JNZF73feB/DFVAiEA/9g9UrLJ4L2EjjA55ZradqM2kDK3eOdOyeQ3fFEYEYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1595848},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"bddf9131ec170074e51c7657feadeb10ea202549","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.3_1779091119772_0.5573254344786227","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"@076lik/git-panel","version":"2.2.4","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.4","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"46b438bc84fe32cde79193011bb6f427b0411357","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.4.tgz","fileCount":18,"integrity":"sha512-XOCwgYstn5pFn/3kpZC4vQYVl4H49rZTE3fT62ZLFuJkyVVRnIBF/kpPd3BGvP1kQEJZs22U659j9B6tNlgL6w==","signatures":[{"sig":"MEUCIFVibLUDh7KyYMtFVdl7oJWQPpRE7YINrzU32w6BLDVNAiEAv1cr8674/uHWzqc/dnY6nH/1jykGmv/i9Wq0qqhBoFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1595864},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"1d43addab9e851788dfe81ba8f60bf3d1bc63981","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.4_1779091501866_0.6040481444513575","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"@076lik/git-panel","version":"2.2.5","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.5","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"de8f1d77e524b1309831854a5a6ec30acd3713c4","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.5.tgz","fileCount":18,"integrity":"sha512-sS0VsqWb7RVp69qQr7J7pcP6y+wmgvPDDm2XdH5QqDtjaKW6CDfhLRaL0AX6lSLwq0DDQUoAReqf6tme8yjrNg==","signatures":[{"sig":"MEUCIQDQeWi7y4vsg+RM6EYB3GTuzJab5/N2W6h1QAvywa6DMAIgBehdELqqh+86guTsdjBcs5zx5M0KZnawY7YX04tRdxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1596425},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"0a77962d1a451b7604524bbe695ec6a68c4471c2","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.5_1779092977455_0.17921475281302723","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"@076lik/git-panel","version":"2.2.6","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.6","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"690d8c13fbe416fb681b32c193009bfe07c280e1","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.6.tgz","fileCount":19,"integrity":"sha512-C/c4QAmgg/DIHWDk/LaMvwMgfhrZbXKTvfxOJDP8LWyimILIDXMCg++WUwb35NKSIFcblG4d1nvlStqp+CngKA==","signatures":[{"sig":"MEQCICt/LT2cBvCUxfaEW6HMSRtcvLUytHCsVey8gJX5RntQAiAJgZQXwYHxq6pS6wP/bf01P3mm+6T4WtKjogg0mSizhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2841813},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"84b0e7ef5f7866ea1d0d05afea48363233c21bfd","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.6_1779094657931_0.4854490607893658","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"@076lik/git-panel","version":"2.2.7","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.7","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"28b90b3f7db2aa62af2cb8f1edd9ca6ddde00b2e","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.7.tgz","fileCount":18,"integrity":"sha512-8enoVWphh8mDGvv5cCJrfokPy2sHftjFxdfFc0cKh1VjcN0I58jtQeUq7u9Kyv3gS2VMpX67u2g1QwTRR8qdtg==","signatures":[{"sig":"MEUCIE5BoYWJYpSj5LitwxNIN5DCW69oKaye/e5wWucnV2jCAiEArJXc8qk4T2/Y3quGMrshoF8jiZa/upGqw9K7Efa7rb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1597112},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"d1c8d9c5fe9ed82ce57e0fb47ffe1eb79d1c9e3b","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc && cp ci-runner.py dist/ci-runner.py","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.7_1780943209687_0.5921704561936738","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"@076lik/git-panel","version":"2.2.8","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.8","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"0f080235d45eaa2a34cc49f4017964659821c672","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.8.tgz","fileCount":18,"integrity":"sha512-ji8IniD6Klpth6PJaQlMEP5UAQJs397SZXJAkD1mdRj7Z42Bn2P+U1aBrF9s60rRjdgDZd0XIH4+ES3rkir5qg==","signatures":[{"sig":"MEYCIQDQ8Sk1lXXRgmusoD5o5/DH0IjHOV02NJYAd8rxBYZR4QIhAONMZvZDE2J8/42M3pDYgrIFVUaJBa6ale93aEfAOy9B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1597411},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"be1e2ebb9727cba702e4fb870da8c9af9d792d9c","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc && cp ci-runner.py dist/ci-runner.py","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.8_1780943860462_0.5645004468056185","host":"s3://npm-registry-packages-npm-production"}},"2.2.9":{"name":"@076lik/git-panel","version":"2.2.9","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@2.2.9","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"ec0e62c5aabcf1d29d340d7306e27cdd266a2f59","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-2.2.9.tgz","fileCount":18,"integrity":"sha512-4DE3e+NZMvdyx9ZsJX2yqfkJilyFk09+qGqMHM4fmtmCgqZYZVhFqJMfmhXBeHcNn9dev6KTYr5qMOBBR7HSDQ==","signatures":[{"sig":"MEUCIEZ8h5SpczK4TzN0alHSj1C9me83QVGMm82BE9j4lwKgAiEAwFKnVNLlHLdBDp6AKIVZbMqFKfL8/ZW+niv/DAIe6jQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1598787},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"f46d0d3fac599ed5421e6e519ee29ab9cf516cb5","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc && cp ci-runner.py dist/ci-runner.py","prepublishOnly":"npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_2.2.9_1780945537307_0.5307709083730048","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@076lik/git-panel","version":"3.0.0","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"author":{"name":"H076lik"},"license":"LGPL-3.0","_id":"@076lik/git-panel@3.0.0","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"homepage":"https://gitee.com/C076lik/git-panel#readme","bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"os":["linux","darwin"],"bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"dist":{"shasum":"f74bd7f61690f3bf38b50ad50dd39741689c5f2d","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-3.0.0.tgz","fileCount":37,"integrity":"sha512-jruqfAxShbmezBS5Qsmq18xlhdPPyEvZD482ROU85JaH+FftSyYNM163c/53a7jLBP7oIpm3EnU50sotZ7JTBQ==","signatures":[{"sig":"MEYCIQDSlGUx073Db0DhW5RZcJo6kz9y6WRApEpCX/lnbzT3wQIhAMy3nMtaiSt6V13IcR7MCUgMmmFoRMqDOOoSvUxll2YT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAWlEUxd//tzHYpi0vorhPvpHY3qvZ04fEl3oCOrYXPXAiAWVri05c4oOigDIqg6BCawPT+PAeBqI8tVe2/ZcOjjpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1824837},"main":"server/dist/server.js","engines":{"node":">=18.0.0"},"gitHead":"fda7e6a273bb75cfc5ef2a7d70dd366f4291e846","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc && cp ci-runner.py dist/ci-runner.py","clean:webdist":"node scripts/clean-webdist.js","prepublishOnly":"node scripts/clean-webdist.js && npm run build"},"_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/git-panel_3.0.0_1789525002440_0.022151516574479446","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"os":["linux","darwin"],"_id":"@076lik/git-panel@3.0.1","bin":{"git-panel":"bin/git-panel.js","git-panel-deploy":"bin/git-panel-deploy.js"},"cpu":["x64","arm64","loong64"],"bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"dist":{"shasum":"3572a9d88538db2bda88176468c71b9876c47e7a","tarball":"https://registry.npmjs.org/@076lik/git-panel/-/git-panel-3.0.1.tgz","fileCount":39,"integrity":"sha512-PqXN3HtpA6I9LP2evEdguE7GpDkY4UoS3Xu01jtxk9hJM0uP2ifQQouZ+GYFG6wZN9IzJAAFoTa+YXGn9WXDSg==","signatures":[{"sig":"MEQCICnO1klXWwk/PcmGvXpVbuUfKwfp3c464qd1TgPcmtbGAiARp/zEiTep1jbYLIrXXKCqOtfNNVqr+iAyHw/NgouF/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEs0rzVvY2GIjxj6JOs8W5Fl1kfcBW/SviaFe18uY8qsAiABt5LQ8uIKtCcA6+3fBKgg0FDijPrt75eo34yAEX2SCA=="}],"unpackedSize":1829909},"main":"server/dist/server.js","name":"@076lik/git-panel","author":{"name":"H076lik"},"engines":{"node":">=18.0.0"},"gitHead":"bf9414e7f8d1e9aca237faef96a695f87f54c92c","license":"LGPL-3.0","scripts":{"build":"npm run build:client && npm run build:server","start":"node server/dist/server.js","postinstall":"node bin/postinstall.js","build:client":"cd client && npm install && npm run build","build:server":"cd server && npm install && npx tsc && cp ci-runner.py dist/ci-runner.py","clean:webdist":"node scripts/clean-webdist.js","prepublishOnly":"node scripts/clean-webdist.js && npm run build"},"version":"3.0.1","_npmUser":{"name":"076lik","email":"m17859782086_1@163.com"},"homepage":"https://gitee.com/C076lik/git-panel#readme","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"_npmVersion":"11.11.0","description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","directories":{},"maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"_nodeVersion":"25.8.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","js-yaml":"^4.1.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/git-panel_3.0.1_1789526820692_0.9734669527328663"}}},"time":{"created":"2026-05-18T05:25:17.220Z","modified":"2026-09-16T02:47:00.986Z","2.2.0":"2026-05-18T05:25:17.474Z","2.2.1":"2026-05-18T05:40:38.994Z","2.2.2":"2026-05-18T07:41:12.079Z","2.2.3":"2026-05-18T07:58:39.936Z","2.2.4":"2026-05-18T08:05:02.111Z","2.2.5":"2026-05-18T08:29:37.642Z","2.2.6":"2026-05-18T08:57:38.093Z","2.2.7":"2026-06-08T18:26:49.856Z","2.2.8":"2026-06-08T18:37:40.644Z","2.2.9":"2026-06-08T19:05:37.533Z","3.0.0":"2026-09-16T02:16:42.571Z","3.0.1":"2026-09-16T02:47:00.847Z"},"bugs":{"url":"https://gitee.com/C076lik/git-panel/issues"},"author":{"name":"H076lik"},"license":"LGPL-3.0","homepage":"https://gitee.com/C076lik/git-panel#readme","keywords":["git","ci","cd","webhook","lan","self-hosted","repository"],"repository":{"url":"git+https://gitee.com/C076lik/git-panel.git","type":"git"},"description":"轻量级局域网 Git 仓库与 CI/CD 管理平台","maintainers":[{"name":"076lik","email":"m17859782086_1@163.com"}],"readme":"\n\n# Git Panel\n\n本地 Git 仓库与 CI 流水线管理平台，提供类 GitHub 的 Web 界面。\n\n## 功能特性\n\n- **Git Smart HTTP/SSH/Git daemon** 三重协议支持，局域网开放推送\n- **存储快照/恢复（三级降级）**：btrfs 原生只读子卷快照 → reflink 复制（XFS）→ 普通复制（ext4 等），秒级备份与回滚\n- **CI/CD 流水线**：推送自动触发构建，支持 GitHub Actions/GitLab CI 自动识别、多语言模板\n- **CD 持续部署**：构建成功后自动执行部署步骤，支持手动触发\n- **Webhook 通知**：构建/部署完成后向局域网设备/智能体发送 HTTP POST（支持事件筛选）\n- **构建摘要 API**：外部智能体可轮询 `GET /build-summary` 获取最新构建状态\n- **通知中心**：全局聚合所有 Webhook 投递记录，未读角标；支持按事件类型静音、桌面系统通知（KDE 等 Linux 桌面实测可用）\n- **Git LFS 服务端 Batch API**，大文件存储\n- **语言统计**：基于 `cloc` 的代码行统计，自动排除文档/配置/脚本\n- **分支与标签管理**：创建、删除、切换分支与标签\n- **分支对比**：任选两个分支/标签查看文件级差异（状态、增删统计、按需展开单文件 patch）\n- **提交 diff 查看器**：点击提交查看该次改动的文件列表与逐文件差异\n- **构建产物清理**：按保留策略清理旧 Release（支持预览），开发版始终保留\n- **文件树搜索**：实时过滤文件列表\n- **CI 模板**：Python/UV、C/C++、Go、Rust、Java、TypeScript、Lua 多语言自动检测\n- **多文件预览**：JSON 树、CSV 表格、Diff/Patch 着色、Log 级别高亮、PDF/图片/视频/音频、Markdown、归档文件列表\n- **ANSI 颜色转换与日志折叠**：CI 日志按步骤折叠，ANSI 转义码自动渲染为 HTML 颜色\n- **统一设置界面**：CI/CD、Webhook、远程同步集中配置，支持自定义起始版本号\n- **全局存储路径配置**：支持外部硬盘/USB 等任意路径，Web 界面一键修改\n- **多平台适配**：Linux/macOS/Windows 自动检测，路径/用户名/系统工具跨平台兼容\n- **Vue 3 SPA 前端**，GitHub Dark Dimmed 主题\n- **Nginx 反向代理**，关闭缓冲支持大推送\n\n## 这工具适合谁？\n\n| ✅ 适合 | ❌ 不适合 |\n|--------|----------|\n| 3-5 人小团队，**不想买 GitHub Pro / GitLab 企业版** | 你需要多租户、RBAC 权限管理（请用 GitLab） |\n| 你在**局域网/内网**开发，没有公网 IP 和域名 | 你需要 GitHub Actions 的云端并行构建矩阵 |\n| 你的构建产物很大，想**存到外部硬盘/USB** | 你需要 Kubernetes + Docker 的容器化 CI |\n| 你想**推送代码后自动构建、自动发版**，但不想写 YAML | 你需要复杂的流水线编排（如 Jenkins Pipeline） |\n| 你的服务器是**龙芯/ARM 等特殊架构**，主流 CI 不支持 | 你需要 SaaS 托管（如 GitHub Actions、Travis CI） |\n| 你想**秒级备份仓库**（btrfs 原生快照 / reflink），硬盘坏了不怕 | 你已经有完善的 DevOps 基础设施 |\n\n一句话：**当你想在自己的局域网里搭一个\"够用\"的 GitHub，零认证、零数据库、插上硬盘就能跑的时候。**\n\n---\n\n## 项目结构\n\n```\ngit-panel/\n├── client/          # Vue 3 + TypeScript 前端\n│   ├── src/\n│   │   ├── components/    # Vue 组件\n│   │   ├── types.ts       # 共享类型定义\n│   │   ├── App.vue\n│   │   └── main.ts\n│   ├── index.html\n│   ├── vite.config.ts\n│   ├── tsconfig.json\n│   └── package.json\n├── server/          # Express + TypeScript 后端\n│   ├── server.ts    # 主入口\n│   ├── routes/      # 路由目录\n│   ├── tsconfig.json\n│   └── package.json\n├── web-dist/        # 构建产物（HTML + assets）\n├── nginx-full.conf  # Nginx 完整配置\n├── deploy.sh        # 一键部署脚本（生产环境）\n└── README.md\n```\n\n## 快速开始\n\n### 方式一：npm 全局安装（推荐）\n\n```bash\nnpm install -g @076lik/git-panel\n\n# 启动服务（普通用户）\ngit-panel\n\n# 自定义端口或仓库路径\ngit-panel --port=8080 --repo-root=/data/git\n```\n\n**系统部署（一次性，需要 sudo）：**\n\n```bash\nsudo git-panel-deploy\n```\n\n`git-panel-deploy` 会自动完成：环境预检 → 安装依赖 → 编译前后端 → 生成 nginx 配置 → 创建 systemd 服务 → 配置防火墙 → 启动服务。\n\n### 方式二：源码一键部署\n\n```bash\ncd /home/lik/git-panel\nsudo bash deploy.sh\n```\n\n`deploy.sh` 会自动完成：环境预检 → 安装依赖 → 编译前后端 → 生成 nginx 配置 → 创建 systemd 服务 → 配置防火墙 → 启动服务。\n\n**环境变量覆盖（可选）：**\n\n```bash\nsudo USER=lik REPO_DIR=/home/lik/git PORT=3456 bash deploy.sh\n```\n\n### 方式三：手动开发模式\n\n如需本地开发调试：\n\n```bash\n# 后端（ts-node 热重载）\ncd server && npm install && npm run dev\n\n# 前端（Vite 热重载）\ncd client && npm install && npm run dev\n```\n\n### 仓库存储路径\n\n默认存储在 `~/git`，支持通过前端「系统配置」面板修改，保存后点击「重启服务」即可生效（无需手动操作命令行）。\n\n### Nginx 与防火墙\n\n`deploy.sh` 已自动配置。如需手动：\n\n```bash\n# Nginx\nsudo nginx -c /home/lik/git-panel/nginx-full.conf\n\n# 防火墙（firewalld 示例）\nsudo firewall-cmd --add-port=80/tcp --permanent\nsudo firewall-cmd --add-port=9418/tcp --permanent\nsudo firewall-cmd --reload\n```\n\n### 防火墙配置（如需手动）\n\n某些发行版（如 AOSC OS）默认会拒绝 1-1024 端口的入站连接。\n\n**图形化方式（AOSC OS）：**\n\n打开 **系统设置 → WiFi 和互联网 → 网络设置 → 防火墙设置** → 在列表中 **勾选 `http`** → 点击 **确定** → 点击 **应用**。\n\n**命令行方式（firewalld）：**\n\n```bash\n# 仅允许局域网（推荐）\nsudo firewall-cmd --permanent --add-rich-rule='rule family=\"ipv4\" source address=\"192.168.3.0/24\" service name=\"http\" accept'\nsudo firewall-cmd --reload\n\n# 全局开放（不推荐暴露在公网）\nsudo firewall-cmd --add-service=http --permanent\nsudo firewall-cmd --reload\n```\n\n## 连接方式\n\n| 协议 | 地址 | 说明 |\n|------|------|------|\n| Web 面板 | `http://192.168.3.130/` | Nginx 反向代理，标准 80 端口 |\n| Git (只读) | `git://192.168.3.130/repo.git` | git daemon，端口 9418 |\n| HTTP (推送) | `http://192.168.3.130/api/git/repo.git` | Nginx → Node.js 3456 |\n| SSH | `lik@192.168.3.130:/run/media/lik/git/repo.git` | 标准 22 端口 |\n\n## 技术栈\n\n- **后端**: Node.js 20, Express, TypeScript, `git-http-backend` CGI 代理\n- **前端**: Vue 3, TypeScript, Vite, highlight.js, marked\n- **基础设施**: Nginx, btrfs/XFS（快照后端自动探测）, Git LFS\n- **测试**: Node 内置断言 + 真实 git 仓库集成测试（无第三方测试框架依赖）\n- **工具链**: `cloc`（语言统计）\n\n## 语言统计过滤规则\n\n语言统计基于 `cloc` 计算代码行数，**自动排除**以下非代码类别：\n\n| 类型 | 被排除的语言 |\n|------|-------------|\n| 文档 | Markdown、reStructuredText、TeX、Text |\n| 配置/数据 | JSON、YAML、XML、TOML、INI、CSV |\n| 样式 | HTML、CSS、SCSS、Less、Sass |\n| 构建/脚本 | Dockerfile、Containerfile、Makefile、make、CMake、Gradle、Shell、Bash、PowerShell、Batch |\n| 其他 | Log、Source Map、SVG |\n\n如果排除后没有剩余语言，则自动回退显示全部结果（避免空列表）。\n\n## 推送大仓库优化\n\n```bash\ngit config --global pack.windowMemory 512m\ngit config --global pack.threads 4\ngit config --global http.postBuffer 2097152000\n```\n\n## 测试\n\n后端核心逻辑已抽成无副作用模块，并有回归测试覆盖：\n\n```bash\ncd server && npm test        # 10 个套件，119 个用例\n```\n\n| 套件 | 覆盖内容 |\n|------|---------|\n| `post-receive-hook.test.ts` | 钩子从 stdin 解析分支、HEAD 自动校正、删除/标签推送不触发构建 |\n| `version.test.ts` | 版本号解析（源码布局 / npm 安装布局 / 兜底） |\n| `storage-backend.test.ts` | 快照三级降级链的判定与命令分派、路径穿越防护、转换失败回滚 |\n| `ci-liveness.test.ts` | CI 孤儿状态判定（三重存活校验、pid 复用防护） |\n| `diff-engine.test.ts` | ref 注入防护、numstat/name-status 解析、改名与二进制边界 |\n| `notif-read.test.ts` | 通知未读水位线语义与边界 |\n| `notif-prefs.test.ts` | 按事件类型静音、桌面通知三重过滤、通知文案 |\n| `info-page-icons.test.ts` | 落地页内联图标与 `client/src/icons/index.ts` 一致性 |\n| `api-help-coverage.test.ts` | 所有 Express 路由都已登记进 `/api/help` |\n| `ci-runner-paths.test.ts` | `server.ts` 与 `ci-runner.py` 的路径优先级一致（环境变量 > 全局配置） |\n\n> 测试由 `npm test` **自动发现** `dist/tests/*.test.js` —— 新增套件无需改脚本，\n> 避免手工清单漏跑而静默失去保护（`api-help-coverage` 就曾被漏掉）。\n>\n> 测试**不能继承调用方的 git 上下文**（CI 的构建目录本身是裸仓库，会导出 `GIT_DIR`），\n> 统一通过 `server/tests/helpers.ts` 的 `gitEnv()` 隔离。验证时可用\n> `GIT_DIR=<裸仓库> npm test` 复现 CI 条件。\n\n## 作者声明\n\n**作者**: H076lik\n\n本项目由 H076lik 独立构思、设计并主导开发。所有功能均根据实际局域网 DevOps 需求设计，技术栈（Vue 3 + Express + btrfs/XFS 快照后端 + Python CI Runner）由作者自主决定。\n\n开发过程中使用了 AI 智能体（如 Crush、Claude Code 等）作为代码生成与调试的辅助工具。AI 智能体仅作为开发工具使用，类似于 IDE、编译器等辅助软件，不构成共同创作。所有代码的架构决策、功能设计、逻辑审查、测试验证以及最终知识产权均归属于 H076lik。\n\n---\n\n## 赞助名单\n\n> 如果您觉得本项目对您有帮助，欢迎赞助支持开发。\n> 联系方式与赞助方式待补充...\n\n| 赞助者 | 金额 / 方式 | 日期 | 留言 |\n|--------|------------|------|------|\n| 待填写 | — | — | — |\n\n---\n\n## 许可证\n\n本项目采用 **GNU Lesser General Public License v3.0 (LGPL-3.0)** 开源许可。\n\n- **核心源码**（`client/src/`、`server/`、配置文件及部署脚本）均已在文件头部添加 LGPL-3.0 标准声明\n- 允许商用、修改与再分发，但修改后的库文件需以相同许可证开源\n- larger work（调用本平台的应用程序）可独立使用不同许可证，无需强制开源\n- 完整许可证文本见仓库根目录 [`LICENSE`](./LICENSE) 文件\n\n**法律说明**：本项目为独立实现的 Git 仓库与 CI/CD 管理平台。功能接口与 DevOps 流程参考了开源社区（包括 GitHub、GitLab）的成熟实践，但全部代码由 H076lik 独立编写。\n\nCopyright (C) 2025-2026 H076lik\n\n## CI/CD 完整指南\n\nGit Panel 内置完整的持续集成/持续部署流水线，支持自动构建、部署和外部通知。\n\n### CI 流水线（自动构建）\n\n推送代码后自动触发：\n1. 检出代码到 `deploy/{repo}`\n2. 执行配置的构建步骤（如 `npm run build`、`cargo build`、`go test`）\n3. 支持自动检测项目类型（Rust/Go/TypeScript/Python/C/C++/Java/Lua）\n4. 自动识别 `.github/workflows/*.yml` 和 `.gitlab-ci.yml`\n5. **CI 配置工作流化**：手动配置的构建步骤保存为 `.github/workflows/git-panel-ci.yml` 并自动 `git commit`，配置与代码一起版本控制\n6. **自动发布起始版本号**：Dev Release 支持设置起始版本号（如 `2.0.0`），自动递增 `v2.0.1` → `v2.0.2`\n\n### CD 持续部署\n\n构建成功后自动执行部署步骤：\n- 在 CI 配置中勾选「构建成功后自动部署」\n- 添加部署命令（如 `cp target/release/app /opt/bin/`）\n- 支持手动触发 `POST /api/repos/{name}/deploy`\n\n### Webhook 通知\n\n构建/部署完成后向局域网内其他设备/智能体发送 HTTP POST 通知：\n\n```bash\n# 配置 Webhook（前端 CI/CD → 配置 Webhook）\n# 或使用 API\nPOST /api/repos/{name}/webhook\n{\n  \"enabled\": true,\n  \"url\": \"http://192.168.3.xxx:8080/webhook\",\n  \"events\": [\"build.failed\", \"build.success\", \"deploy.failed\", \"deploy.success\"]\n}\n```\n\n推送内容示例：\n```json\n{\n  \"event\": \"build.failed\",\n  \"repo\": \"YouLiLong\",\n  \"branch\": \"master\",\n  \"commit\": \"c993fe94...\",\n  \"commitMsg\": \"refactor(dap): ...\",\n  \"runId\": \"1778663640\",\n  \"status\": \"failed\",\n  \"steps\": [{\"name\": \"Build release\", \"status\": \"failed\"}],\n  \"timestamp\": \"2026-05-13T17:34:00\",\n  \"server\": \"git-panel\"\n}\n```\n\n### 构建摘要 API（外部智能体查询）\n\n```bash\nGET /api/repos/{name}/build-summary\n```\n\n返回示例：\n```json\n{\n  \"repo\": \"YouLiLong\",\n  \"ci\": {\n    \"status\": \"success\",\n    \"runId\": \"1778665915\",\n    \"branch\": \"master\",\n    \"commit\": \"13aa0970...\",\n    \"duration\": 8,\n    \"steps\": [{\"name\": \"Build Client\", \"status\": \"success\"}],\n    \"deployStatus\": \"success\"\n  },\n  \"deploy\": {\n    \"status\": \"success\",\n    \"runId\": \"1778665915\"\n  },\n  \"lastUpdated\": \"2026-05-13T17:52:03Z\"\n}\n```\n\n### CI 日志折叠与 ANSI 颜色\n\n- 构建日志按步骤自动折叠（▶/▼ 切换）\n- ANSI 颜色转义码自动转换为 HTML 颜色（红/绿/黄等）\n- 实时轮询更新（3秒间隔）\n\n### Python 项目 UV 支持\n\n检测到 `uv.lock` 或 `pyproject.toml` 中包含 `tool.uv` 时自动使用 `uv sync`：\n```json\n{\"steps\": [\n  {\"name\": \"UV Sync\", \"command\": \"uv sync || uv pip install -e . || true\"},\n  {\"name\": \"Test\", \"command\": \"uv run pytest || true\"}\n]}\n```","readmeFilename":"README.md"}