{"_id":"@gulibs/safe-coder","_rev":"30-a384b4f46e977d41acf7ae5bae66b7d0","name":"@gulibs/safe-coder","dist-tags":{"latest":"0.0.30"},"versions":{"0.0.1":{"name":"@gulibs/safe-coder","version":"0.0.1","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.1","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"461d3450bf9c03e92326f1b46bcabd3dcad5f7ce","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.1.tgz","fileCount":79,"integrity":"sha512-T3SRAmILdyp9gYxMAfaI1JinofaCJIi6A+X6mE0AoYyfrftGkkzqMRrUAz3ZD8fTESWr/cx+lduHnM0dgoCOdQ==","signatures":[{"sig":"MEYCIQDi2C1iYIJVwHKFrWNW1VCW9eQhWcFSgkkichmybLP9HwIhAMiOJ4KO1XIE2gQKZyX5jffUCkHSYjKhKNxUZULNIqrI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101364},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","postinstall":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","eslint":"^8.57.1","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.1_1764046300999_0.08620881238074496","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@gulibs/safe-coder","version":"0.0.2","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.2","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"e15a54bb3a87f353814871620aa41053278e4dd2","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.2.tgz","fileCount":80,"integrity":"sha512-tXwVh0zHBq5xJfi/Bj8S8WITZfEE2Mg/5MO8UFv0TnRLp0PETN2gX+9efY71FBnnRj4c8z+/JasZf8B3JI1GFg==","signatures":[{"sig":"MEUCIALYKRE7/d8Q0Nhzx2+yl6kWT4dZ+A2JIAgSdg/tfIUkAiEA60E1IZ+kQLa9RrVvwFd9LpHeIir5vgj2KqVHjaVdoAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103068},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","eslint":"^8.57.1","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.2_1764046996249_0.3351751403740104","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@gulibs/safe-coder","version":"0.0.3","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.3","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"eb00ad9db8f7220816b3eaf9f3d3cc1fac3dbcaf","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.3.tgz","fileCount":80,"integrity":"sha512-Wjo1cih68A44sF8J4z+o6AnO3rzyrez6J+qax45VSGLcgwK3vUeEX3vcPU0IMwAWqWM/F8H/jj27rbusBRQunQ==","signatures":[{"sig":"MEYCIQDZmXZMeBfU/wmzWd0+hLWc8kXU5FpnKfn4EwzVzcA3gAIhAM8Gr3i7BMtJLarDOK4ZxCfBl3G8GIwHy8hfvKQceowR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103559},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.3_1764047251124_0.27736536964694114","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@gulibs/safe-coder","version":"0.0.4","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.4","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"06bfaa6e080fe9cfb739683ebc1a28b30d3831f5","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.4.tgz","fileCount":83,"integrity":"sha512-/ME052Z4PKeoZjyNA+y9nvhDkrsb6hhKBHT1eljzseAGRm63yAKbseSxhSdlLvFG2e5YxMrv48A1UHiIlPvJ4A==","signatures":[{"sig":"MEUCIQDkfj8nmw7vv6i53erK/CT5yhdKf3RxPKkcLrD2XneI7AIgTNyEygg5mPQH60rW85k0PYJ61F142wcKZ0U6m3r8m+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104804},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":"./dist/index.js"},"scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.4_1764047510299_0.19372220069233514","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@gulibs/safe-coder","version":"0.0.5","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.5","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"24c74197e0bb0e3058d6c397af9c45d5509c3cf9","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.5.tgz","fileCount":83,"integrity":"sha512-QhmUuUqdZN52PjPWQYglWNQ04ftzaOScvXJX7Po2j4+8EBRstzrUCKBx5H7WUjv5/GN1II04doEuaP3dFciJSA==","signatures":[{"sig":"MEUCIQDCOBJMr7K/G1/iKGzCBDHXkZg0ThNxQReS55FAq3kRkwIgUfJclTBgb+FTNmxTdtotbpreO/7NnrRd5P4PLP+YqR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104757},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.5_1764048671208_0.08646843803621818","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@gulibs/safe-coder","version":"0.0.6","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.6","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"90da29796ae2de46323d4596e23301b7df7a1794","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.6.tgz","fileCount":115,"integrity":"sha512-izXq2GKnpNRb8nMH9n8e0sV7la1YU2BG3pZ4xaKYBTfcILdNuhLpQjjsDV8cEFDCpagyAP/bqy05fq0eb+dseg==","signatures":[{"sig":"MEYCIQDxo8xXrR+xAebCkN1ITMQMYDKri9ocqS6i1ANotVfWaAIhAIlZHGZqN/IQaG53M7XzSqSHUWW3uvtm+X9l5P/66CzH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251372},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.6_1764053561584_0.44589951325351174","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@gulibs/safe-coder","version":"0.0.7","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.7","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"b59b6baafb40e6dc1afd893b6b2094a0e6f89d44","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.7.tgz","fileCount":115,"integrity":"sha512-eE97SkDHaoVA6Y8xRqADYfxtBe1Z7Ygs324WJ5Q+oPZvnhhL9aDMXEZq4jI6QZBjIU65WDkI1v5hj+SryDCyVQ==","signatures":[{"sig":"MEQCIFW76xPq6Hims5gSJxEwdv7wzHwqVdp3cCWEMxeGSG8zAiAwHFIwoBogSWXtmCH0oxZT22uiDHCd0jl4rWl4gcBTrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251541},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.7_1764152788847_0.047863964864938824","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@gulibs/safe-coder","version":"0.0.8","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.8","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"10c5a1cde3684550dc8c7e78457e8983fc4a378f","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.8.tgz","fileCount":115,"integrity":"sha512-6UdNZYUKzcEIC7CTwYRnz/mbsEUt0PyGorx7YzG66Z0uM4E4s2JuG5dnBIJpN71ZC5ZzraLKsqWqwS1gk83Uvw==","signatures":[{"sig":"MEYCIQCvMLupZX9ih/jQjnU8UJNWd/I7T6FgTJGSn7h+/MKVcgIhAJ6arax+jETaHYMzqlRYbPmDZhth4Td77bi7y0koy1Uo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252888},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.8_1764178482577_0.48778411122192944","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@gulibs/safe-coder","version":"0.0.9","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.9","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"869a7336c03c896291d05c2e3a7ec2e900621d4f","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.9.tgz","fileCount":115,"integrity":"sha512-zlBZdMgJVcexRAY0883ZzeNkB6vbooYeYsQVAa5RZGnfnGzOZWFTjdjwNIyCd1keXbmL/11fNUuxacgfANxKYg==","signatures":[{"sig":"MEUCIFXWwg6GP6TMothmbOf2c/eHwOsHXIR8qORP1+I54mQkAiEA6oDQBZKkQiM3DulBANzaSA7vgE85nwHlgoJkT/G83DQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253266},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.9_1764336523693_0.8344161305426567","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@gulibs/safe-coder","version":"0.0.10","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.10","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"afe81bc0e21a8c30c725bfaa95be4429e5302d0d","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.10.tgz","fileCount":115,"integrity":"sha512-yedzzgv7ae4hh8ZMzvbFAar/1chLrriC8fWTIgDB0IrhKAEkwZv752SSo5NmvAOPcOPP6danzozhi55V1wvsHA==","signatures":[{"sig":"MEQCIFbHUBOHoZEbuZvFBmQAODrpU03ZhivLzkQcBR2RWQPiAiAbN6uRJc2qSYc1ZqON8GLPM8YqSUbfEE0GYr3kDjQZVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253471},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.10_1764337583349_0.7447928737127207","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@gulibs/safe-coder","version":"0.0.11","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.11","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"9de8799b559a1c637f2de4a77ff09551e45ac4b0","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.11.tgz","fileCount":115,"integrity":"sha512-DcUn2GkCLEIWKFWtkkTenyEbjBw6FYF+cKifYnGfORVbY8i7c1hVIJUCJ1kFZzBwAVt4eNJyh4xoTz5vWKRkjw==","signatures":[{"sig":"MEUCIQDK6v4/gEWT7tEdCAyUD/OdvGXa77RzC2jkCc67UnASXAIgdaQmduPHhQ6pVtnpTYVY5JKfUvxmaALvRWu4Zbt2PvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253471},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.11_1764337850749_0.27729401210033533","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@gulibs/safe-coder","version":"0.0.12","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.12","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"17d4fd956ee0c5f25e67b4afb08db9f09b06bf27","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.12.tgz","fileCount":119,"integrity":"sha512-LtbZuyYgR0hlK6sRki40LVLznkNTkH0n6FvY0z11xZTaotao6azsNJ1bsk+5zLCtOsLb/ZMV/8Z2+Ds2UNYCSQ==","signatures":[{"sig":"MEUCIDSeFOE5dEsAoG6JOAviAewBopHBbbsPg27wRVfDqEsOAiEAt72Lm3ex/WOQldSqmWqhghJKhELLajIMw0DuLORL3NA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281888},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.12_1766319145904_0.10682083051715474","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@gulibs/safe-coder","version":"0.0.13","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.13","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"9bef6367545cc6028594633fbdcacaee5048b137","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.13.tgz","fileCount":127,"integrity":"sha512-f3rexTStuMKTU7AYJKmOw0PV2W0A9m6IBI5d5TyMUeWjKHN4WPcj04AL5ji8LPLUYWmnAqR5EKfNNqhtz+G3Kg==","signatures":[{"sig":"MEQCIF6TuE6PyLZ7sV08rfWTR/pLqk1gS2cpQWbmnHFpHBb+AiArNNaNFO7paICkPxA72+fLFgJaLSkfKgkPqi5EAvlZ1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":325146},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.13_1767842443599_0.4672433863898089","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@gulibs/safe-coder","version":"0.0.14","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.14","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"da518d1f0c75e6447bd322653e5bc9a2f83224e7","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.14.tgz","fileCount":127,"integrity":"sha512-eV4kBHikvwK3Es6nj8FXyhYHBSfEa11AyjjOdRw0FRKaicNnqDgFb616gEStqRatl3qJPwocGyb1PK6TtdtOIA==","signatures":[{"sig":"MEQCIFeegOmQpDnKrV+RsmDweGXXS0vzL3Cx7RzMD/9a/Co3AiBD9YGCjAs55bsMNUqfLbB1saSITmMpDK9I3jdPl1ewOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342263},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.14_1767845292764_0.7255127133707513","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@gulibs/safe-coder","version":"0.0.15","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.15","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"f42c128e64d660585326b295efe73d5a9e15213d","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.15.tgz","fileCount":127,"integrity":"sha512-6267jOJygeDu+GRL5LwR60HJTHCsACSigYayh1GZVPDuTy+W30X1rqddVZUHKNK//v7PdZrqXHsa77rlVKU1Ug==","signatures":[{"sig":"MEQCIH7/ZXHWflyh2O6LoZRWHMUVUsSh6mpkOdhGOM+7Rjf2AiAJp0JNrECecwOQkMRtpJuDz59Ox6FqBBMm5/MyW0AQpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346940},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.15_1767847572412_0.41999560074815556","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@gulibs/safe-coder","version":"0.0.16","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.16","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"a34986eb1e51782fcaed2afbddf3b098ab4b2a62","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.16.tgz","fileCount":127,"integrity":"sha512-/OPp7PNZGYO1f3vqxAP5/GvYmvxtdBnGX5KrTWFheKz4wATidHZC15aPfS76lN3l2Jhbwh4kBkVcZgracDAAEQ==","signatures":[{"sig":"MEUCIFUev88aIxxggK/jmYyTHn4zC8fWoC4AUQl3JBlg80GSAiEAknPkrY0V109KA0+MkIB5J0dvK5Xbv4pKkUlf2gktdV4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364516},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.16_1767850816059_0.23391794986956338","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@gulibs/safe-coder","version":"0.0.17","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.17","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"7431de3519e2bf84ad4eabfd0a088275aaf61c38","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.17.tgz","fileCount":127,"integrity":"sha512-40Mpb1pEy1/hN1rVgInYceTelu0oI2eMUKFpYTs/nlOoA/d4Z/IF0vNqwMXTK6eKjDFYwI133rtE4peod9G+ow==","signatures":[{"sig":"MEQCICVd/O75/kAAyvjIiI3cCoFQlcxwi2oxdOzJPvb7Tt0dAiA6UxRLU5IVhViEHOGqvr6VBir7I6syeJgcmdQEM0oBEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":365586},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.17_1767851539445_0.7540387170922016","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@gulibs/safe-coder","version":"0.0.18","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.18","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"80280b40a5b6cdd64cbeef46a536a769a8d03e08","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.18.tgz","fileCount":127,"integrity":"sha512-4RH91vClWkh6mSFJgDqebiLuSkAH9W/I16XV40UulPjgj8VlMAbpTEQC4EKKjetXTHH14QWAwCgzwi3GbvsHsA==","signatures":[{"sig":"MEUCIQDEcW0kKW7BLVHli+eH1E2cqMhHqDiIOPlWuJBZMSy4iAIgOT1Ph0bSpgBNO8sMFdK7Ubj1aI49idPc+h5y03oDpgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377419},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.18_1767854597529_0.9258238226064306","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@gulibs/safe-coder","version":"0.0.19","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.19","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"d4ac09177e7a8daef772ce00d38e5ed63b28fd0f","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.19.tgz","fileCount":131,"integrity":"sha512-wcWUYVEAIwSBt9N9pmI6Yhzr9EKo4xNRNVxNuydXcz+sKd35/FPG4HwkipuSUXv1yNjuqdsOj1WXtMQnaIQPaQ==","signatures":[{"sig":"MEUCIQDz7uTjVYHc+c8pRQsKW02xFZGJgNpf6CXCRfE6i+sgMQIgBasVGkuPMIkkk4wvOzXatU9giJtOYxBr7927O6LCXtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405776},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.19_1767859920204_0.8776962583624264","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"@gulibs/safe-coder","version":"0.0.20","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.20","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"71d0c86f604d9d454ed819e369a05fca06dd9911","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.20.tgz","fileCount":131,"integrity":"sha512-Ay9GvBFcJa8VDYCgoKN7In+eUY8u3ewCk7AHrLjUwX7TR02aVMOO7xeDL4IwtOx4n/775tdreIMUUlZVHGYCOg==","signatures":[{"sig":"MEUCIQCM8iUTB91gpdu+xdc3gInEDBR3txsijQyLOZY73k8v/wIgRT2oAJqH2mZJCVcEo6Px6zsFJVcdAFsRMQNLyZPTk24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":406912},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.20_1767860789856_0.005210677333364888","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@gulibs/safe-coder","version":"0.0.21","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.21","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"62c6c1c4d8f6c05c2a0f2d3b2f4026d38839f17e","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.21.tgz","fileCount":131,"integrity":"sha512-tITzy6NeeTo8dgaUsbiNBeT+WV4FrsZwPlFILbuSbKLJi/gJX0llyToCgQK1HfZ8xWbcce848fGDhUsaWP807w==","signatures":[{"sig":"MEYCIQCOZb9dwdK0teKU8nscSrHFk+l88XfnfeIRuGRgx2Ip+AIhAKAfTD0735gBbhXO9AeHPImgi4ejgOtw4kbIPuL+luHy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":410262},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.21_1767861440368_0.836101245277798","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@gulibs/safe-coder","version":"0.0.22","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.22","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"199ff8902894204efd2e19416d335947a119be19","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.22.tgz","fileCount":131,"integrity":"sha512-HNC/4u+VSgh+yLXs2VwAWztfoGwWJtzb6CyCbyoYXEgf7bLX3mDdEPRLHC00LyFGchlfQxUcfYv11EXgUjvLsw==","signatures":[{"sig":"MEUCIQDcmap/n4Uuft9AJcmZO35uz7Fcy9u44MQbkpqS1uY6wwIgMXGBldaCNPu1HQ8LWo/IEmV74mUNgLUOcDLXZO9e3RQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421153},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.22_1767865418586_0.39723528153470666","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"@gulibs/safe-coder","version":"0.0.23","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.23","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"1285ed73344715350c9cdc20d1d53c9cfa0c5ee5","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.23.tgz","fileCount":131,"integrity":"sha512-boyUYFAxAB9JBO0daIgOd78zZw0oyfYw0uBg8AvtrdjyFBx8xRAk8HXHK+/YIsrGTcyrUf7yapBZji9Zd82XfA==","signatures":[{"sig":"MEUCIQCr8VfSrpkyw5eyhcYQqQzQIu/n24Aluw7PLxFaWbbMKQIge75HU34kzkgZ3yEfNHgFWJ6twNDH9/ws6pNwixnc8M8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448542},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.23_1767866496842_0.9438208211564891","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"@gulibs/safe-coder","version":"0.0.24","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.24","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"46fddfb7cdf3d64d9863d28d196c92792ea79840","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.24.tgz","fileCount":131,"integrity":"sha512-7nVZ1oWlCXBPzgAUS0PA+wL1DypTdlu99HvA6ByAZfo58f1EfEPjnRQDzmNfsqJhhGKl+SooAPThEm5T81YGqw==","signatures":[{"sig":"MEUCID1MJWl+enrDlJk/VP8JPpNZaXGg1YYMhHgcZDQtFUT2AiEA45xInm3rr7SS+JUhvMpU5z9Cp5QHDy/KFXd1jt6tlvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488470},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.24_1767904165048_0.5837662310535907","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@gulibs/safe-coder","version":"0.0.25","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.25","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"4e28388c8b28437eb122d0c66dace3b42527c656","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.25.tgz","fileCount":151,"integrity":"sha512-QBtOaeOSKWHbMvbm6SgJYoqgaaXZUQmpvRjp11M5HkO2l4xzjufT11CqVDA9gaDfoeP2cfiCbHYpTMArS0Wsqg==","signatures":[{"sig":"MEYCIQDHFj3l4ZVRE5FRQaqYLqMRIkiFC6jwv5UM2/04CStpdgIhAO0U+rV5APPqSHdg2xQrLWcTXV5xt5+uXRPvSBfSKEBi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572287},"main":"dist/index.js","type":"module","_from":"file:gulibs-safe-coder-0.0.25.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_resolved":"/private/var/folders/1z/r4qk37js14l4vbr0ndr_zbvm0000gn/T/42fa113bfdefd20fa7d0c10ca91cb84c/gulibs-safe-coder-0.0.25.tgz","_integrity":"sha512-QBtOaeOSKWHbMvbm6SgJYoqgaaXZUQmpvRjp11M5HkO2l4xzjufT11CqVDA9gaDfoeP2cfiCbHYpTMArS0Wsqg==","_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.25_1768398342345_0.22745401714469082","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"@gulibs/safe-coder","version":"0.0.26","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.26","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder-mcp":"dist/index.js"},"dist":{"shasum":"bf4c8dadbe4bbd17dbd2e928c200c8be912899de","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.26.tgz","fileCount":155,"integrity":"sha512-UJXdlJdbLUvk5RG8Nf877L04mDzx2lNxezAfmw8CG+qgqRMSd97oMwrCM66mrfFN/fBRe1wjd3PKQygdvQF7FQ==","signatures":[{"sig":"MEUCIQDxAxCehrixSgbB/Ody5J2jd3PnivGBqurKQStJLs5NFwIgPY2OoAM4f+AY6p1VvBoRMOBSkfhchz14WCXLGIWBtOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":612090},"main":"dist/index.js","type":"module","_from":"file:gulibs-safe-coder-0.0.26.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_resolved":"/private/var/folders/1z/r4qk37js14l4vbr0ndr_zbvm0000gn/T/bfce684c34490f6255cb841d455eb822/gulibs-safe-coder-0.0.26.tgz","_integrity":"sha512-UJXdlJdbLUvk5RG8Nf877L04mDzx2lNxezAfmw8CG+qgqRMSd97oMwrCM66mrfFN/fBRe1wjd3PKQygdvQF7FQ==","_npmVersion":"11.5.2","description":"MCP service for documentation fetching, error detection, and code validation","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","axios":"^1.13.2","eslint":"^8.57.1","cheerio":"^1.0.0","puppeteer-core":"^21.11.0","chrome-launcher":"^1.1.2","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6","eslint-plugin-react":"^7.37.5","eslint-plugin-security":"^3.0.1","@modelcontextprotocol/sdk":"^1.22.0","@typescript-eslint/typescript-estree":"^8.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/eslint":"^9.6.1","@typescript-eslint/parser":"^6.21.0","@typescript-eslint/eslint-plugin":"^6.21.0"},"optionalDependencies":{"puppeteer":"^21.11.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.26_1768401659964_0.8528892130094674","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"name":"@gulibs/safe-coder","version":"0.0.27","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.27","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder":"dist/index.js"},"dist":{"shasum":"aaaec5ec257c6382aa49f88229b27f1af911f6af","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.27.tgz","fileCount":47,"integrity":"sha512-RGUUtsS4RG9w4exO/9nm1jRSQq0voZvVZ59rHFFAvWCHJKwC0p6JWEb1bRPD9yuSqeF6HejedMtg3rrrwLa4Zg==","signatures":[{"sig":"MEUCIQCq0ANszgcgPa5KWJVKg/ttrVEJEHyqhoKYp0UdFQY4pgIgT5bFrSfFTHyH3q1AhFzApfOwf9YPcFlkleogJai0UvA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141535},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","which":"^4.0.0","@modelcontextprotocol/sdk":"^1.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/which":"^3.0.0"},"peerDependencies":{"@gulibs/safe-coder-cli":"^0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.27_1768466374330_0.5996410271342956","host":"s3://npm-registry-packages-npm-production"}},"0.0.28":{"name":"@gulibs/safe-coder","version":"0.0.28","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.28","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder":"dist/index.js"},"dist":{"shasum":"ae67c85fcf0283e98953af669e90006ee6d6309a","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.28.tgz","fileCount":47,"integrity":"sha512-GhMuB+bfWhKB0QEf42DAp1uhlnHTIJxO5r/s4lTJ96JYOdDLK5hsk552UoIjEBYp64FO5rpuHThrGnmVlIkz2g==","signatures":[{"sig":"MEYCIQCgU02p7Uemq/oU6ySj4jdqSFXL9/I5Iht4TQXi8Z2Q3AIhAKmBVOgFHO+2GGA/27cqj8l3gkxWXVCbntSesujearbn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144067},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","which":"^4.0.0","@modelcontextprotocol/sdk":"^1.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/which":"^3.0.0"},"peerDependencies":{"@gulibs/safe-coder-cli":"^0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.28_1768473314157_0.01592561233208656","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"@gulibs/safe-coder","version":"0.0.29","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","_id":"@gulibs/safe-coder@0.0.29","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"bin":{"safe-coder":"dist/index.js"},"dist":{"shasum":"f1cd3dc9eac405f3d3ea1d5ef7d6879155a629ab","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.29.tgz","fileCount":51,"integrity":"sha512-p9NeLszoIM2Qj4SWaFOgBd+dUzJISeWKpCATJJiU+tairInz88zlfegQjZMvdl5ltskqWjYWsvf4dLhhkSEuEA==","signatures":[{"sig":"MEUCIBRIOcOFB3e0UGUOv4Z56x9d1G34jpr0+htWDvHoJtM5AiEA3jrqqZVNgv2eEcep4+ToiRYmvlIR8+9kPqeEDc84gn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152474},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","start":"node dist/index.js","test:watch":"vitest --watch","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"11.5.2","description":"MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling","directories":{},"_nodeVersion":"23.11.1","dependencies":{"zod":"^3.25.76","which":"^4.0.0","@modelcontextprotocol/sdk":"^1.22.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^1.0.0","typescript":"^5.9.3","@types/node":"^20.0.0","@types/which":"^3.0.0"},"peerDependencies":{"@gulibs/safe-coder-cli":"^0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/safe-coder_0.0.29_1768477661273_0.8699518493533909","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"@gulibs/safe-coder","version":"0.0.30","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"description":"MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling","main":"dist/index.js","type":"module","scripts":{"build":"tsc","dev":"tsx src/index.ts","start":"node dist/index.js","test":"vitest","test:watch":"vitest --watch","lint":"eslint src --ext .ts","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"bin":{"safe-coder":"dist/index.js"},"keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"author":"","license":"MIT","peerDependencies":{"@gulibs/safe-coder-cli":"^0.0.1"},"dependencies":{"@modelcontextprotocol/sdk":"^1.22.0","which":"^4.0.0","zod":"^3.25.76"},"devDependencies":{"@types/node":"^20.0.0","@types/which":"^3.0.0","tsx":"^4.0.0","typescript":"^5.9.3","vitest":"^1.0.0"},"_id":"@gulibs/safe-coder@0.0.30","types":"./dist/index.d.ts","_nodeVersion":"23.11.1","_npmVersion":"11.5.2","dist":{"integrity":"sha512-eYY2MHwWV3IWKvRTBx5G6v+RMwUKNtLz488wIU+ERL4ZeWH46ooq+4HItoNtIkgeyi6uatyjtGX3y/ljsRxuZg==","shasum":"38b52a7993b364b9060994871bef0c089cfdabe3","tarball":"https://registry.npmjs.org/@gulibs/safe-coder/-/safe-coder-0.0.30.tgz","fileCount":51,"unpackedSize":153381,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE8WMClSE/syAA0/fLHRhf3vUhg7tW6UVK7vCAwdag0ZAiEA5klkksRTdwWH12ES0l+Fl2NEvFNLbOB8DfGr/7UpG0Q="}]},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"directories":{},"maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/safe-coder_0.0.30_1768484633320_0.07324429879134664"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-25T04:51:40.870Z","modified":"2026-01-15T13:43:53.596Z","0.0.1":"2025-11-25T04:51:41.198Z","0.0.2":"2025-11-25T05:03:16.440Z","0.0.3":"2025-11-25T05:07:31.343Z","0.0.4":"2025-11-25T05:11:50.498Z","0.0.5":"2025-11-25T05:31:11.425Z","0.0.6":"2025-11-25T06:52:41.763Z","0.0.7":"2025-11-26T10:26:29.064Z","0.0.8":"2025-11-26T17:34:42.826Z","0.0.9":"2025-11-28T13:28:43.898Z","0.0.10":"2025-11-28T13:46:23.538Z","0.0.11":"2025-11-28T13:50:50.965Z","0.0.12":"2025-12-21T12:12:26.063Z","0.0.13":"2026-01-08T03:20:43.758Z","0.0.14":"2026-01-08T04:08:12.981Z","0.0.15":"2026-01-08T04:46:12.579Z","0.0.16":"2026-01-08T05:40:16.206Z","0.0.17":"2026-01-08T05:52:19.609Z","0.0.18":"2026-01-08T06:43:17.674Z","0.0.19":"2026-01-08T08:12:00.363Z","0.0.20":"2026-01-08T08:26:30.050Z","0.0.21":"2026-01-08T08:37:20.555Z","0.0.22":"2026-01-08T09:43:38.798Z","0.0.23":"2026-01-08T10:01:36.991Z","0.0.24":"2026-01-08T20:29:25.198Z","0.0.25":"2026-01-14T13:45:42.496Z","0.0.26":"2026-01-14T14:41:00.140Z","0.0.27":"2026-01-15T08:39:34.467Z","0.0.28":"2026-01-15T10:35:14.305Z","0.0.29":"2026-01-15T11:47:41.412Z","0.0.30":"2026-01-15T13:43:53.466Z"},"license":"MIT","keywords":["mcp","model-context-protocol","documentation","error-detection","code-validation"],"description":"MCP Server for documentation crawling orchestration - calls safe-coder-cli for actual crawling","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"readme":"# Safe Coder MCP Server\n\n> **Version:** 0.0.27  \n> **Status:** Development Preview  \n> **Architecture:** MCP Server (orchestration layer)\n\nMCP Server for documentation crawling orchestration. Coordinates with `@gulibs/safe-coder-cli` to crawl documentation websites, process content, and provide structured guidance for creating Cursor AI SKILL files.\n\n## ⚠️ Current Version Status\n\n**Version 0.0.27 - Development Preview:**\n- ✅ Architecture refactored: Clean separation between MCP Server and CLI\n- ✅ Core functionality: Crawling orchestration, content processing, SKILL guidance\n- ✅ **NEW: `save_skill` tool** - Automatic SKILL file creation with complete directory structure\n- ⚠️ **Not published to npm** - requires manual installation from source\n\n## What This Package Does\n\n**Safe Coder MCP Server is an orchestration layer** that:\n\n1. ✅ **Checks dependencies** - Verifies `safe-coder-cli` is installed\n2. ✅ **Spawns CLI process** - Executes crawling via child process\n3. ✅ **Parses CLI output** - Reads JSON from stdout, progress from stderr\n4. ✅ **Processes content** - Extracts key points, code patterns, topics\n5. ✅ **Generates guidance** - Creates structured SKILL generation recommendations\n6. ✅ **Manages cache** - Stores results for 7 days in `~/.safe-coder/cache/`\n7. ✅ **Saves SKILL files** - Creates complete directory structure (SKILL.md + references/)\n8. ✅ **Exposes MCP tools** - Provides 4 tools to Cursor AI\n\n**This package does NOT:**\n- ❌ Perform web crawling (delegated to CLI)\n- ❌ Run browser automation (CLI responsibility)\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  Cursor / Claude Desktop (MCP Client)                      │\n│  • Calls MCP tools                                         │\n│  • Receives data + guidance                                │\n│  • Creates SKILL.md based on guidance                      │\n└────────────────┬────────────────────────────────────────────┘\n                 │ MCP Protocol (JSON-RPC over stdio)\n┌────────────────▼────────────────────────────────────────────┐\n│  @gulibs/safe-coder (MCP Server) - THIS PACKAGE            │\n│  ┌──────────────────────────────────────────────────────┐  │\n│  │ 1. Dependency Check (which safe-coder-cli)           │  │\n│  │ 2. CLI Executor (spawn child process)                │  │\n│  │ 3. Parse JSON Output (stdout → data)                 │  │\n│  │ 4. Content Processor (extract key info)              │  │\n│  │ 5. Guide Generator (create SKILL guidance)           │  │\n│  │ 6. Cache Manager (store/retrieve results)            │  │\n│  └──────────────────────────────────────────────────────┘  │\n│                                                             │\n│  Tools: crawl_documentation, save_skill,                   │\n│         list_cached_documentation, clear_cache            │\n└────────────────┬────────────────────────────────────────────┘\n                 │ spawn('safe-coder-cli', ['crawl', url, ...])\n                 │ stdin: commands, stdout: JSON, stderr: progress\n┌────────────────▼────────────────────────────────────────────┐\n│  @gulibs/safe-coder-cli (Standalone CLI Tool)              │\n│  • HTTP + Browser-based web crawling                       │\n│  • Content extraction and markup conversion                │\n│  • JSON output to stdout (results)                         │\n│  • JSON output to stderr (progress messages)               │\n└────────────────┬────────────────────────────────────────────┘\n                 │ HTTP requests / Puppeteer / Playwright\n┌────────────────▼────────────────────────────────────────────┐\n│  Documentation Website (e.g., react.dev, vuejs.org)        │\n└─────────────────────────────────────────────────────────────┘\n```\n\n## Installation\n\n### Step 1: Prerequisites\n\n**Node.js 18+**\n```bash\nnode --version  # Must be v18.0.0 or higher\n```\n\n### Step 2: Install CLI Tool (Required)\n\n⚠️ **The MCP server requires `@gulibs/safe-coder-cli` to be globally installed.**\n\n**Option A: From npm (after publication)**\n```bash\nnpm install -g @gulibs/safe-coder-cli\n```\n\n**Option B: From source (current development setup)**\n```bash\n# Clone and build CLI\ncd /path/to/safe-coder-cli\nnpm install\nnpm run build\nnpm link  # Makes 'safe-coder-cli' available globally\n\n# Verify\nsafe-coder-cli --version\n# Output: 0.0.1\n```\n\n### Step 3: Install MCP Server\n\n⚠️ **Not yet published to npm - use local installation:**\n\n**Development Installation:**\n```bash\ncd /path/to/safe-coder\nnpm install\nnpm run build\n\n# Optional: Link for global access\nnpm link\n```\n\n### Step 4: Configure Cursor\n\n**Edit Cursor MCP configuration:**\n\nFile location: `~/Library/Application Support/Cursor/User/globalStorage/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"safe-coder\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/safe-coder/dist/index.js\"]\n    }\n  }\n}\n```\n\n**Replace `/absolute/path/to/safe-coder`** with actual path, e.g.:\n```json\n{\n  \"mcpServers\": {\n    \"safe-coder\": {\n      \"command\": \"node\",\n      \"args\": [\"/Users/yourname/projects/mcp/safe-coder/dist/index.js\"]\n    }\n  }\n}\n```\n\n**Future (after npm publication):**\n```json\n{\n  \"mcpServers\": {\n    \"safe-coder\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@gulibs/safe-coder@latest\"]\n    }\n  }\n}\n```\n\n### Step 5: Restart Cursor\n\nRestart Cursor to load the MCP server.\n\n## Usage: SKILL File Generation Workflow\n\n### ⚠️ Important: How SKILL Files Are Created\n\n**The MCP server does NOT create `SKILL.md` files directly.** Here's the actual workflow:\n\n#### What the MCP Server Returns\n\n1. **Crawled content** - Full text from all pages\n2. **Processed data** - Key points, code patterns, categories, topics\n3. **SKILL generation guide** - Structured recommendations for SKILL.md\n4. **Quality assessment** - Scores for content quality, completeness\n\n#### Where SKILL Files Are Saved\n\n**You must explicitly tell Cursor AI where to save the file:**\n\n```\nUser: \"Crawl React docs and create a SKILL file\"\n      ↓\nCursor AI: [Calls crawl_documentation, receives data + guidance]\n      ↓\nUser: \"Save it to ~/.claude/skills/react-docs/SKILL.md\"\n      ↓\nCursor AI: [Creates file at specified location]\n```\n\n**Recommended location pattern:**\n```\n~/.claude/skills/\n├── react-docs/SKILL.md          # React documentation\n├── vue-guide/SKILL.md           # Vue.js guide\n├── typescript-handbook/SKILL.md # TypeScript handbook\n└── [tech-name]/SKILL.md         # Generic pattern\n```\n\n**Naming conventions:**\n- Directory: `[technology-name]` (lowercase, hyphens)\n- File: Always `SKILL.md` (Cursor convention)\n- Examples: `react-docs`, `vue-guide`, `next-js-docs`\n\n### Complete Example Workflow\n\n**1. Request crawl:**\n```\nUser: \"Crawl the React documentation at https://react.dev and create a SKILL file\"\n```\n\n**2. Cursor AI calls MCP tool:**\n```typescript\ncrawl_documentation({\n  url: \"https://react.dev\",\n  maxPages: 200,  // Default\n  depth: 3        // Default\n})\n```\n\n**3. MCP Server process:**\n```\n[Dependency Check] ✓ safe-coder-cli found at /usr/local/bin/safe-coder-cli\n[Spawning CLI] safe-coder-cli crawl https://react.dev --output-format json ...\n[Progress] Crawling... 10/50 pages\n[Progress] Crawling... 25/50 pages\n[Progress] Crawling... 50/50 pages complete\n[Processing] Analyzing content...\n[Processing] Generating SKILL guidance...\n[Cache] Saving to ~/.safe-coder/cache/aHR0cHM6Ly9yZWFjdC5kZXY=.json\n[Complete] Ready to return\n```\n\n**4. MCP returns to Cursor:**\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"source\": {\n      \"url\": \"https://react.dev\",\n      \"crawledAt\": \"2026-01-15T14:30:00Z\",\n      \"pageCount\": 50,\n      \"depth\": 3\n    },\n    \"pages\": [\n      {\n        \"url\": \"https://react.dev/learn\",\n        \"title\": \"Quick Start\",\n        \"content\": \"Welcome to React...\",\n        \"keyPoints\": [\n          \"React is a JavaScript library\",\n          \"Components are building blocks\",\n          \"...more...\"\n        ],\n        \"codePatterns\": [\n          {\n            \"language\": \"jsx\",\n            \"pattern\": \"function Component() { return <div>...</div> }\",\n            \"description\": \"Functional component syntax\"\n          }\n        ],\n        \"wordCount\": 1500,\n        \"codeBlocks\": 12\n      }\n      // ... 49 more pages\n    ],\n    \"analysis\": {\n      \"mainTopics\": [\"Components\", \"Hooks\", \"State\", \"Props\", \"Effects\"],\n      \"difficulty\": \"intermediate\",\n      \"technicalDensity\": 0.65\n    }\n  },\n  \"skillGenerationGuide\": {\n    \"suggestedStructure\": [\n      \"Overview\",\n      \"Quick Start\", \n      \"Core Concepts\",\n      \"Hooks Reference\",\n      \"Best Practices\",\n      \"Common Patterns\",\n      \"Troubleshooting\"\n    ],\n    \"keyTopics\": [\n      \"JSX Syntax\",\n      \"Components (Functional & Class)\",\n      \"Props and State\",\n      \"Hooks (useState, useEffect, useContext, etc.)\",\n      \"Event Handling\",\n      \"Conditional Rendering\",\n      \"Lists and Keys\"\n    ],\n    \"recommendedSections\": {\n      \"overview\": \"React is a JavaScript library for building user interfaces...\",\n      \"quickStart\": [\n        \"Install: npx create-react-app my-app\",\n        \"Create first component\",\n        \"Understand JSX\"\n      ],\n      \"coreFeatures\": [\n        \"Component-based architecture\",\n        \"Virtual DOM\",\n        \"One-way data flow\",\n        \"Declarative UI\"\n      ],\n      \"bestPractices\": [\n        \"Use functional components with Hooks\",\n        \"Keep components small and focused\",\n        \"Lift state up when needed\"\n      ]\n    },\n    \"tips\": [\n      \"Focus on the Hooks API (modern approach)\",\n      \"Include examples for common Hooks\",\n      \"Explain component lifecycle clearly\",\n      \"Cover both client and server rendering\"\n    ],\n    \"quality\": {\n      \"contentQuality\": 90,\n      \"codeExamples\": 85,\n      \"completeness\": 88,\n      \"overall\": 87\n    }\n  },\n  \"fromCache\": false,\n  \"message\": \"Successfully crawled 50 pages. Quality score: 87/100\"\n}\n```\n\n**5. Tell Cursor where to save:**\n```\nUser: \"Save this as a SKILL file at ~/.claude/skills/react-docs/SKILL.md\"\n```\n\n**6. Cursor AI generates and saves:**\n- Uses `data.pages` for content\n- Uses `skillGenerationGuide` for structure\n- Creates formatted `SKILL.md`\n- Saves to specified location\n\n## MCP Tools Reference\n\n### Tool 1: `crawl_documentation` \n\n(**Recommended Workflow**: Use with `save_skill` for complete automation)\n\nCrawl documentation website and return processed data with SKILL generation guidance.\n\n**Parameters:**\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `url` | `string` | ✅ Yes | - | Documentation URL to crawl |\n| `maxPages` | `number` | No | `200` | Maximum pages to crawl |\n| `depth` | `number` | No | `3` | Maximum crawl depth |\n| `workers` | `number` | No | `1` | Number of parallel workers |\n| `useBrowser` | `boolean` | No | `false` | Force browser automation |\n| `browser` | `'puppeteer'` \\| `'playwright'` | No | `'puppeteer'` | Browser type |\n| `spaStrategy` | `'smart'` \\| `'auto'` \\| `'manual'` | No | `'smart'` | SPA detection |\n| `useCache` | `boolean` | No | `true` | Use cached results |\n| `forceRefresh` | `boolean` | No | `false` | Bypass cache |\n\n**⚠️ Parameters NOT Currently Exposed (CLI supports, MCP doesn't):**\n- `strategy` (bfs/dfs) - Crawl strategy\n- `checkpoint`, `resume` - Checkpoint/resume functionality\n- `rateLimit`, `maxRetries`, `retryDelay` - Rate limiting and retry control\n- `includePaths`, `excludePaths` - URL path filtering\n- `skipLlmsTxt` - llms.txt detection control\n\n**Returns:**\n```typescript\n{\n  success: boolean;\n  data: {\n    source: { url, crawledAt, pageCount, depth };\n    pages: Array<{\n      url, title, content, keyPoints, codePatterns,\n      category, wordCount, codeBlocks, headings\n    }>;\n    metadata: { technology, version, documentType, categories };\n    statistics: { totalPages, maxDepthReached, errors, linkDiscovery };\n    analysis: {\n      totalWords, totalCodeBlocks, categories,\n      mainTopics, technicalDensity, difficulty\n    };\n  };\n  skillGenerationGuide: {\n    suggestedStructure: string[];\n    keyTopics: string[];\n    recommendedSections: {\n      overview, quickStart, coreFeatures, bestPractices, troubleshooting\n    };\n    tips: string[];\n    quality: { contentQuality, codeExamples, completeness, overall };\n  };\n  fromCache: boolean;\n  cacheAge?: string;  // If from cache\n  message: string;\n}\n```\n\n**Example Cursor prompts:**\n\n```bash\n# Basic usage\n\"Crawl https://react.dev and create a SKILL\"\n\n# Limit pages\n\"Crawl Vue.js docs but only 50 pages\"\n\n# Force refresh\n\"Re-crawl React docs, ignore cache\"\n\n# Use browser for SPA\n\"Crawl https://app.example.com with Playwright\"\n```\n\n### Tool 2: `list_cached_documentation`\n\nList all cached documentation crawl results with metadata.\n\n**Parameters:** None\n\n**Returns:**\n```typescript\n{\n  success: boolean;\n  entries: Array<{\n    url: string;\n    technology?: string;\n    pageCount: number;\n    cachedAt: string;  // ISO timestamp\n    age: string;       // Human-readable, e.g., \"2 hours ago\"\n    size: string;      // Human-readable, e.g., \"2.5 MB\"\n  }>;\n  statistics: {\n    totalEntries: number;\n    totalSize: number;  // Bytes\n    oldestEntry?: Date;\n    newestEntry?: Date;\n  };\n  message: string;\n}\n```\n\n**Example Cursor prompts:**\n```bash\n\"Show me all cached documentation\"\n\"List cached docs\"\n\"What's in the cache?\"\n```\n\n### Tool 3: `save_skill` ⭐ NEW\n\n**Save complete SKILL directory structure to filesystem.**\n\nCreates a properly formatted Cursor Agent Skill with:\n- `SKILL.md` - Main skill file with metadata\n- `references/` - Reference documentation organized by category\n- Standard directory structure compatible with Cursor\n\n**Parameters:**\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `skillName` | `string` | ✅ Yes | - | Name for skill directory (e.g., \"react-docs\") |\n| `skillContent` | `string` | ✅ Yes | - | Content for SKILL.md file |\n| `referenceFiles` | `Record<string, string>` | No | `{}` | Map of category → markdown content |\n| `baseDirectory` | `string` | No | `~/.claude/skills` | Base directory for skills |\n| `overwrite` | `boolean` | No | `false` | Overwrite existing skill |\n\n**Returns:**\n```typescript\n{\n  success: boolean;\n  skillDirectory: string;            // Absolute path to skill directory\n  filesCreated: {\n    skillMd: string;                 // Path to SKILL.md\n    references: string[];            // Paths to reference files\n  };\n  message: string;\n}\n```\n\n**Directory Structure Created:**\n```\n~/.claude/skills/\n└── [skillName]/\n    ├── SKILL.md                     # Main skill file\n    └── references/                  # Reference documentation\n        ├── api.md                   # API category\n        ├── guides.md                # Guides category\n        ├── getting_started.md       # Getting started\n        └── ...                      # Other categories\n```\n\n**Example Cursor Prompts:**\n\n```bash\n# After crawling, extract and save skill data\n\"Use the crawled React data to create a complete SKILL:\n - skillName: 'react-docs'\n - skillContent: [generated from guidance]\n - referenceFiles: [organized by category]\"\n\n# Save with custom location\n\"Save the Vue skill to ~/my-skills/\"\n\n# Overwrite existing\n\"Update the react-docs skill with new content\"\n```\n\n**Automated Workflow Example:**\n\n```\nUser: \"Crawl React docs and save as a complete SKILL\"\n\nStep 1: Cursor calls crawl_documentation\nStep 2: Receives data with pages organized by category\nStep 3: Cursor calls save_skill with:\n  {\n    skillName: \"react-docs\",\n    skillContent: \"[Generated SKILL.md from guidance]\",\n    referenceFiles: {\n      \"api\": \"[API pages content]\",\n      \"guides\": \"[Guide pages content]\",\n      \"getting_started\": \"[Getting started content]\"\n    }\n  }\nStep 4: Tool creates complete directory structure\nStep 5: Returns paths to all created files\n```\n\n### Tool 4: `clear_cache`\n\nClear cached documentation results by pattern, all entries, or expired only.\n\n**Parameters:**\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `urlPattern` | `string` | No | - | URL pattern to match (substring) |\n| `clearAll` | `boolean` | No | `false` | Clear all cached entries |\n\n**Behavior:**\n- If `clearAll: true` → Delete all cached entries\n- If `urlPattern` provided → Delete entries matching pattern\n- If neither → Delete only expired entries (>7 days old)\n\n**Returns:**\n```typescript\n{\n  success: boolean;\n  deletedCount: number;\n  message: string;\n}\n```\n\n**Example Cursor prompts:**\n```bash\n# Clear all\n\"Clear all cached documentation\"\n\n# Clear by pattern\n\"Clear cache for react.dev\"\n\"Delete cached Vue docs\"\n\n# Clear expired only\n\"Clear old cached docs\"\n```\n\n## Internal Workflow\n\n### 1. Dependency Check\n\n```typescript\nconst checker = new DependencyChecker();\nconst check = await checker.checkCLIInstalled();\n\nif (!check.installed) {\n  throw new Error(`\n⚠️  safe-coder-cli is not installed.\n\nPlease install globally:\n  npm install -g @gulibs/safe-coder-cli\n\nOr from source:\n  cd /path/to/safe-coder-cli\n  npm install && npm run build && npm link\n\nThen verify:\n  safe-coder-cli --version\n  `);\n}\n```\n\n### 2. CLI Execution\n\n```typescript\nconst executor = new CLIExecutor(checker);\nconst result = await executor.executeCrawl({\n  url: 'https://react.dev',\n  maxPages: 200,\n  maxDepth: 3,\n  // ... other params\n}, (progress) => {\n  console.error(`[Progress] ${progress.message}`);\n});\n```\n\n**Under the hood:**\n```bash\nspawn('safe-coder-cli', [\n  'crawl', \n  'https://react.dev',\n  '--output-format', 'json',\n  '--max-pages', '200',\n  '--depth', '3'\n])\n\n# stdout → JSON result\n# stderr → Progress messages\n```\n\n### 3. Content Processing\n\n```typescript\nconst processor = new ContentProcessor();\nconst processed = await processor.process(rawResult);\n\n// Extracts:\n// - Key points from each page\n// - Code patterns and examples\n// - Content categories\n// - Technical density\n// - Difficulty level\n```\n\n### 4. SKILL Guidance Generation\n\n```typescript\nconst guideGenerator = new GuideGenerator();\nconst guide = guideGenerator.generate(processed);\n\n// Creates:\n// - Suggested SKILL structure\n// - Key topics to cover\n// - Recommended sections\n// - Writing tips\n// - Quality assessment\n```\n\n### 5. Caching\n\n```typescript\nconst cache = new CacheManager();\n\n// Save (7-day TTL)\nawait cache.set(url, processed, guide);\n\n// Retrieve\nconst cached = await cache.get(url);\nif (cached && !forceRefresh) {\n  return cached;\n}\n```\n\n**Cache location:** `~/.safe-coder/cache/`  \n**Cache format:** JSON files with base64-encoded URL as filename  \n**TTL:** 7 days (default)\n\n## Error Handling\n\n### CLI Not Installed\n\n```\nError: safe-coder-cli is not installed\n\nPlease install:\n  npm install -g @gulibs/safe-coder-cli\n\nCurrent PATH checked:\n  /usr/local/bin\n  /usr/bin\n  /bin\n  ...\n```\n\n### CLI Execution Failed\n\n```\nError: CLI process exited with code 1\n\nstderr output:\n  [Error] Failed to crawl: Network timeout\n  [Error] URL: https://example.com\n\nPossible solutions:\n  - Check network connectivity\n  - Try with --use-browser flag\n  - Increase timeout with --rate-limit\n```\n\n### Cache Errors\n\n```\nWarning: Failed to cache results\nError: EACCES: permission denied, mkdir '~/.safe-coder/cache'\n\nContinuing without cache...\n```\n\nCache errors are non-fatal - the operation continues without caching.\n\n## Configuration\n\n### Cache Settings\n\nModify cache behavior by editing `src/cache/cache-manager.ts`:\n\n```typescript\nconst cache = new CacheManager(\n  '/custom/cache/path',  // Default: ~/.safe-coder/cache\n  14                      // TTL in days (default: 7)\n);\n```\n\n### CLI Arguments Mapping\n\n| MCP Parameter | CLI Argument |\n|---------------|--------------|\n| `url` | `<url>` (positional) |\n| `maxPages` | `--max-pages <number>` |\n| `depth` | `--max-depth <number>` |\n| `workers` | `--workers <number>` |\n| `useBrowser` | (implicitly sets `--spa-strategy auto`) |\n| `browser` | `--browser <type>` |\n| `spaStrategy` | `--spa-strategy <type>` |\n| - | `--output-format json` (forced) |\n\n## Troubleshooting\n\n### MCP Server Not Appearing in Cursor\n\n1. **Check configuration file exists:**\n   ```bash\n   cat ~/Library/Application\\ Support/Cursor/User/globalStorage/mcp.json\n   ```\n\n2. **Verify JSON syntax is valid**\n\n3. **Check absolute path is correct:**\n   ```bash\n   node /absolute/path/to/safe-coder/dist/index.js\n   # Should not error\n   ```\n\n4. **Restart Cursor completely**\n\n### \"CLI Not Found\" Error\n\n```bash\n# Check if CLI is in PATH\nwhich safe-coder-cli\n\n# If not found, reinstall\ncd /path/to/safe-coder-cli\nnpm link\n\n# Verify\nsafe-coder-cli --version\n```\n\n### Slow Crawling\n\n- Reduce `maxPages` (e.g., 50 instead of 200)\n- Decrease `depth` (e.g., 2 instead of 3)\n- Increase `workers` (e.g., 3 for parallel crawling) - *requires CLI support*\n\n### Cache Not Working\n\n```bash\n# Check cache directory\nls -la ~/.safe-coder/cache/\n\n# Permissions issue?\nchmod 755 ~/.safe-coder/cache/\n\n# Clear and rebuild\nrm -rf ~/.safe-coder/cache/\n# Cache will recreate on next crawl\n```\n\n## Development\n\n### Project Structure\n\n```\nsafe-coder/\n├── src/\n│   ├── index.ts                     # Entry point\n│   ├── server/\n│   │   └── safe-coder-mcp.ts        # MCP server class\n│   ├── executor/\n│   │   ├── dependency-checker.ts    # Check CLI installation\n│   │   └── cli-executor.ts          # Spawn CLI process\n│   ├── processor/\n│   │   ├── content-processor.ts     # Analyze content\n│   │   └── guide-generator.ts       # Generate SKILL guidance\n│   ├── cache/\n│   │   └── cache-manager.ts         # Cache management\n│   └── tools/\n│       ├── crawl-documentation.ts   # Main MCP tool\n│       ├── cache-tools.ts           # Cache MCP tools\n│       └── index.ts                 # Tool exports\n├── dist/                            # Compiled output\n├── tsconfig.json\n├── package.json\n└── README.md\n```\n\n### Build and Test\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Watch mode\nnpm run build -- --watch\n\n# Test locally\nnode dist/index.js\n\n# Test with MCP Inspector (if available)\nnpx @modelcontextprotocol/inspector node dist/index.js\n```\n\n### Running with Debug Output\n\n```typescript\n// In src/index.ts\nconsole.error('[Debug] MCP Server starting...');\nconsole.error('[Debug] Available tools:', server.listTools());\n```\n\nMCP uses stdio, so:\n- `stdout` → MCP protocol messages (JSON-RPC)\n- `stderr` → Debug/log output (visible in Cursor logs)\n\n## Roadmap / Future Enhancements\n\n### Planned Features\n\n1. **Expose More CLI Parameters**\n   - [ ] `strategy` (bfs/dfs)\n   - [ ] `checkpoint`, `resume`\n   - [ ] `rateLimit`, `maxRetries`\n   - [ ] `includePaths`, `excludePaths`\n\n2. **Direct File Creation Tool**\n   - [ ] `save_skill` tool to create SKILL.md directly\n   - [ ] Automatic filename generation\n   - [ ] Default location management\n\n3. **Enhanced Processing**\n   - [ ] Semantic analysis of content\n   - [ ] Automatic category detection\n   - [ ] Code example quality scoring\n   - [ ] Cross-reference detection\n\n4. **Better Caching**\n   - [ ] Configurable TTL per URL\n   - [ ] Cache compression\n   - [ ] Partial cache updates\n   - [ ] Cache analytics\n\n## Contributing\n\nThis package is part of the Safe Coder project. Contributions welcome!\n\n### Development Workflow\n\n1. Fork and clone both `safe-coder` and `safe-coder-cli`\n2. Make changes\n3. Build and test locally\n4. Submit pull request\n\n### Testing\n\n```bash\n# Unit tests (when implemented)\nnpm test\n\n# Integration test\n# 1. Build both packages\ncd safe-coder-cli && npm run build && npm link\ncd ../safe-coder && npm run build && npm link\n\n# 2. Configure in Cursor\n# 3. Test end-to-end\n```\n\n## License\n\nMIT\n\n## Related Projects\n\n- **@gulibs/safe-coder-cli** - Standalone documentation crawler\n- **Cursor** - AI-powered code editor\n- **Model Context Protocol (MCP)** - Protocol for AI tool integration\n\n## Support\n\nIssues: https://github.com/gulibs/safe-coder/issues  \nDiscord: [Link TBD]\n\n---\n\n**Safe Coder** - Bringing documentation intelligence to your AI coding assistant.\n","readmeFilename":"README.md"}