@autodevjapan/godd-mcp-alpha 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/godd.cjs +1 -1
- package/package.json +1 -1
package/dist/godd.cjs
CHANGED
|
@@ -49,7 +49,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
49
49
|
`);if(t===-1)return null;let n=this._buffer.toString("utf8",0,t).replace(/\r$/,"");return this._buffer=this._buffer.subarray(t+1),VO(n)}clear(){this._buffer=void 0}};function VO(e){return Z_.parse(JSON.parse(e))}function Dx(e){return JSON.stringify(e)+`
|
|
50
50
|
`}var El=class{constructor(t=oh.default.stdin,n=oh.default.stdout){this._stdin=t,this._stdout=n,this._readBuffer=new jl,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{this.onerror?.(o)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let t=this._readBuffer.readMessage();if(t===null)break;this.onmessage?.(t)}catch(t){this.onerror?.(t)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(t){return new Promise(n=>{let o=Dx(t);this._stdout.write(o)?n():this._stdout.once("drain",n)})}};var wa=process.env.GODD_BRAND_PREFIX??"godd",de={displayName:"GoDD MCP \u03B1",cli:wa,mcpKey:wa,configFile:`config.${wa}`,licensePrefix:wa.toUpperCase(),toolPrefix:`${wa}_`};var Ol=require("node:fs"),Ux=require("node:path");var ih=["en","ja","ru"],JO=te.object({browser_automation:te.string().optional(),e2e_testing:te.string().optional(),unit_testing:te.string().optional(),linting:te.string().optional(),formatting:te.string().optional(),type_checking:te.string().optional(),coverage:te.string().optional(),documentation:te.string().optional(),secret_scanning:te.string().optional(),security_analysis:te.string().optional(),unused_code:te.string().optional(),dependency_analysis:te.string().optional()}),Zx=te.object({display_language:te.string().default("en"),main_language:te.string().default("en"),sub_languages:te.array(te.string()).default([]),programming_languages:te.array(te.string()).default([]),frontend:te.array(te.string()).default([]),backend:te.array(te.string()).default([]),database:te.array(te.string()).default([]),orm:te.array(te.string()).default([]),infra:te.array(te.string()).default([]),other:te.array(te.string()).default([]),tools:JO.default({})});function Ax(e=process.cwd()){let t=(0,Ux.resolve)(e,de.configFile);if(!(0,Ol.existsSync)(t))return null;try{let n=(0,Ol.readFileSync)(t,"utf-8"),o=BO(n);return KO(o),GO(o),Zx.parse(o)}catch(n){return console.error(`[${de.displayName}] Failed to parse ${de.configFile}:`,n instanceof Error?n.message:n),null}}function KO(e){if("language"in e&&!("display_language"in e)){let t=e.language;e.display_language=t,e.main_language=t,delete e.language}}function GO(e){if("e2e_tool"in e){let t=typeof e.tools=="object"&&!Array.isArray(e.tools)?e.tools:{};t.e2e_testing=e.e2e_tool,e.tools=t,delete e.e2e_tool}Array.isArray(e.tools)&&e.tools.length===0&&(e.tools={})}function BO(e){let t={},n="",o=e.split(`
|
|
51
51
|
`);for(let r of o){let i=r.trim();if(!i||i.startsWith("#"))continue;if(r.length-r.trimStart().length>=2&&n&&i.includes(":")&&!i.startsWith("- ")){let s=i.indexOf(":"),c=i.slice(0,s).trim(),u=i.slice(s+1).trim();if(c&&u){let l=t[n];l&&typeof l=="object"&&!Array.isArray(l)?l[c]=u:t[n]={[c]:u}}continue}if(i.startsWith("- ")){if(n){let s=t[n];Array.isArray(s)&&s.push(i.slice(2).trim())}}else if(i.includes(":")){let s=i.indexOf(":"),c=i.slice(0,s).trim(),u=i.slice(s+1).trim();u===""||u==="[]"?(t[c]=[],n=c):u.startsWith("[")&&u.endsWith("]")?(t[c]=u.slice(1,-1).split(",").map(l=>l.trim()).filter(Boolean),n=c):(t[c]=u,n=c)}}return t}var ah=new Set(["typescript","javascript","python","java","csharp","cpp","c","go","rust","php","swift","kotlin","ruby","dart","r","scala","objective-c","sql","html-css","bash","elixir","haskell","perl","lua","julia","clojure","fsharp","groovy","visual-basic","powershell","erlang","ocaml","zig","nim","crystal","solidity","fortran","cobol","assembly","d","ada","v","pascal","prolog"]),sh=new Set(["react","nextjs","vue","nuxt","svelte","angular","flutter","blazor","solid","astro","remix","qwik","ember","htmx","alpine"]),ch=new Set(["express","nestjs","hono","fastify","fastapi","django","flask","gin","echo","fiber","chi","spring-boot","quarkus","micronaut","ktor","laravel","symfony","slim","codeigniter","cakephp","rails","sinatra","hanami","actix-web","axum","rocket","phoenix","aspnet","vapor","play","akka-http","servant","yesod","mojolicious","dancer","ring","pedestal","dart-frog"]),uh=new Set(["postgresql","mysql","mongodb","redis","sqlite","dynamodb","cassandra","neo4j","elasticsearch","supabase","firebase","cockroachdb"]),lh=new Set(["prisma","drizzle","typeorm","sequelize","sqlalchemy","tortoise-orm","eloquent","doctrine","activerecord","hibernate","mybatis","entity-framework","gorm","ent","diesel","sea-orm","ecto","exposed","peewee","django-orm"]),dh=new Set(["docker","terraform","vercel","aws","gcp","github-actions","azure","cloudflare","fly-io","render","heroku","kubernetes","ansible","pulumi","netlify"]);function WO(e,t){let n=e.length,o=t.length,r=Array.from({length:n+1},()=>Array(o+1).fill(0));for(let i=0;i<=n;i++)r[i][0]=i;for(let i=0;i<=o;i++)r[0][i]=i;for(let i=1;i<=n;i++)for(let a=1;a<=o;a++){let s=e[i-1]===t[a-1]?0:1;r[i][a]=Math.min(r[i-1][a]+1,r[i][a-1]+1,r[i-1][a-1]+s)}return r[n][o]}function HO(e,t,n=2){let o=null,r=n+1;for(let i of t){if(Math.abs(i.length-e.length)>n)continue;let a=WO(e.toLowerCase(),i.toLowerCase());a<r&&(r=a,o=i)}return o}var XO=[{field:"programming_languages",known:ah},{field:"frontend",known:sh},{field:"backend",known:ch},{field:"database",known:uh},{field:"orm",known:lh},{field:"infra",known:dh}];function Mx(e){let t=[];for(let{field:n,known:o}of XO){let r=e[n];if(Array.isArray(r))for(let i of r)typeof i=="string"&&(o.has(i)||t.push({field:n,value:i,suggestion:HO(i,o)}))}return t}var YO="https://www.getgodd.dev/contact";function ph(e){let t=new Map;for(let o of e){let r=t.get(o.field)??[];r.push(o),t.set(o.field,r)}let n=["\u26A0 config.godd \u306B\u8A8D\u8B58\u3067\u304D\u306A\u3044\u5024\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002","","\u554F\u984C\u306E\u3042\u308B\u5024:"];for(let[o,r]of t){n.push(` ${o}:`);for(let i of r)i.suggestion?n.push(` - "${i.value}" \u2192 \u3082\u3057\u304B\u3057\u3066 "${i.suggestion}" \u3067\u3059\u304B\uFF1F`):n.push(` - "${i.value}" \u2192 \u73FE\u5728\u672A\u5BFE\u5FDC\u3067\u3059\u3002\u5BFE\u5FDC\u3092\u3054\u5E0C\u671B\u306E\u5834\u5408\u306F ${YO} \u304B\u3089\u3054\u9023\u7D61\u304F\u3060\u3055\u3044\u3002`)}return n.push(""),n.push("\u4FEE\u6B63\u65B9\u6CD5:"),n.push(" 1. config.godd \u3092\u76F4\u63A5\u7DE8\u96C6\u3057\u3066\u6B63\u3057\u3044\u5024\u306B\u4FEE\u6B63\u3059\u308B"),n.push(' 2. \u307E\u305F\u306F "godd init --force" \u3067\u518D\u751F\u6210\u3059\u308B'),n.join(`
|
|
52
|
-
`)}var Tr="0.
|
|
52
|
+
`)}var Tr="0.14.0";var Lx={dev:{slugs:["common","dev","check","docs","impact","test","deploy","adr","release"]},ship:{slugs:["common","commit","push","pr","check"]},review:{slugs:["common","review","check"]}};function fh(e){return e in Lx}function mh(e){return Lx[e]?.slugs}var QO={dev:[{name:"request",description:"\u4F9D\u983C\u5185\u5BB9",required:!0},{name:"done_when",description:"\u5B8C\u4E86\u6761\u4EF6",required:!1}],docs:[{name:"target",description:"\u5BFE\u8C61\u30D5\u30A1\u30A4\u30EB/\u6A5F\u80FD",required:!1}],ship:[{name:"title",description:"PR \u30BF\u30A4\u30C8\u30EB",required:!1}],review:[{name:"target",description:"\u5BFE\u8C61\u30D5\u30A1\u30A4\u30EB/PR\uFF08\u4F8B: PR URL, PR\u756A\u53F7, \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF09",required:!1},{name:"action",description:"\u30EC\u30D3\u30E5\u30FC\u5F8C\u306E\u30A2\u30AF\u30B7\u30E7\u30F3\uFF08approve / request-changes / comment\uFF09",required:!1}],test:[{name:"target",description:"\u30C6\u30B9\u30C8\u5BFE\u8C61",required:!1}],impact:[{name:"target",description:"\u5206\u6790\u5BFE\u8C61",required:!1}],commit:[{name:"message",description:"\u30B3\u30DF\u30C3\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8",required:!1}],pr:[{name:"title",description:"PR \u30BF\u30A4\u30C8\u30EB",required:!1}],deploy:[{name:"target",description:"\u30C7\u30D7\u30ED\u30A4\u5148",required:!1}],adr:[{name:"title",description:"\u5224\u65AD\u306E\u30BF\u30A4\u30C8\u30EB",required:!1}],github:[{name:"request",description:"\u8A2D\u5B9A\u5185\u5BB9",required:!1}]};function gh(){let e=de.toolPrefix;return[{name:`${e}dev`,description:"\u958B\u767A\uFF08\u8A08\u753B\u30FB\u5B9F\u88C5\u30FB\u54C1\u8CEA\u30FB\u30C6\u30B9\u30C8\u30FB\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30FB\u30C7\u30D7\u30ED\u30A4\u30FBADR\u30FB\u30EA\u30EA\u30FC\u30B9\u3092\u72B6\u6CC1\u306B\u5FDC\u3058\u3066\u5B9F\u884C\uFF09"},{name:`${e}docs`,description:"\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u751F\u6210/\u66F4\u65B0"},{name:`${e}ship`,description:"\u63D0\u51FA\uFF08\u30B3\u30DF\u30C3\u30C8 \u2192 \u54C1\u8CEA\u30C1\u30A7\u30C3\u30AF \u2192 \u30D7\u30C3\u30B7\u30E5 \u2192 PR \u4F5C\u6210\uFF09"},{name:`${e}setup`,description:"\u74B0\u5883\u69CB\u7BC9\uFF08\u8A00\u8A9E/FW/DB/\u30A4\u30F3\u30D5\u30E9\u306E\u81EA\u52D5\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\uFF09"},{name:`${e}review`,description:"\u30EC\u30D3\u30E5\u30FC\uFF08CTO \u30EC\u30D9\u30EB\u306E\u30EC\u30D3\u30E5\u30FC + \u54C1\u8CEA\u30B2\u30FC\u30C8\uFF09"},{name:`${e}test`,description:"\u30C6\u30B9\u30C8\u5B9F\u884C/\u4F5C\u6210"},{name:`${e}impact`,description:"\u5F71\u97FF\u5206\u6790"},{name:`${e}commit`,description:"\u30B3\u30DF\u30C3\u30C8"},{name:`${e}push`,description:"\u30D7\u30C3\u30B7\u30E5"},{name:`${e}pr`,description:"PR \u4F5C\u6210"},{name:`${e}deploy`,description:"\u30C7\u30D7\u30ED\u30A4"},{name:`${e}adr`,description:"ADR \u4F5C\u6210"},{name:`${e}release`,description:"\u30EA\u30EA\u30FC\u30B9\u30CE\u30FC\u30C8\u751F\u6210"},{name:`${e}github`,description:"GitHub \u8A2D\u5B9A"}]}function qx(){let e=de.toolPrefix;return gh().map(t=>{let n=t.name.replace(e,""),o=QO[n]??[];return{name:t.name,description:t.description,inputSchema:{type:"object",properties:Object.fromEntries(o.map(r=>[r.name,{type:"string",description:r.description}])),required:o.filter(r=>r.required).map(r=>r.name)}}})}var Be=require("node:fs"),hh=require("node:os"),ut=require("node:path");function Nl(e){try{return(0,Be.realpathSync)(e)}catch{return e}}var eN="@autodevjapan/godd-mcp-alpha";function tN(){let e=(0,ut.join)(Nl(process.execPath),".."),t=(0,ut.join)(e,"node_modules","npm","bin","npx-cli.js");return(0,Be.existsSync)(t)?t:null}function rN(){if(typeof globalThis.__pkg<"u"||process.pkg)return{command:process.execPath,args:["serve"]};let e=Nl(process.execPath),t=tN();if(t)return{command:e,args:[t,"-y",`${eN}@latest`,"serve"]};let n=process.argv[1];return n&&(0,Be.existsSync)(n)?{command:e,args:[Nl(n),"serve"]}:{command:e,args:[n??"godd.cjs","serve"]}}function Fx(e){if((0,Be.existsSync)(e))try{let t=(0,Be.readFileSync)(e,"utf-8");return{mcpServers:JSON.parse(t).mcpServers??{}}}catch{console.error(` [WARN] ${e} \u304C\u58CA\u308C\u3066\u3044\u308B\u305F\u3081\u65B0\u898F\u4F5C\u6210\u3057\u307E\u3059`)}return{mcpServers:{}}}function Vx(e){let t=(0,ut.join)((0,hh.homedir)(),".cursor"),n=(0,ut.join)(t,"mcp.json");(0,Be.existsSync)(t)||(0,Be.mkdirSync)(t,{recursive:!0});let o=Fx(n),r=de.mcpKey,{command:i,args:a}=rN(),s=o.mcpServers[r],c={};e?c.GODD_LICENSE_KEY=e:s?.env?.GODD_LICENSE_KEY&&(c.GODD_LICENSE_KEY=s.env.GODD_LICENSE_KEY);let u=(0,ut.dirname)(Nl(process.execPath));if(process.platform==="win32"){let g=process.env.SystemRoot??"C:\\Windows";c.PATH=[u,(0,ut.join)(g,"system32"),g,(0,ut.join)(g,"System32","Wbem")].join(ut.delimiter)}else c.PATH=[u,"/usr/local/bin","/usr/bin","/bin"].join(ut.delimiter);let l={command:i,args:a,...Object.keys(c).length>0?{env:c}:{}},d=!s,p=d||JSON.stringify(s)!==JSON.stringify(l);return p&&(o.mcpServers[r]=l,(0,Be.writeFileSync)(n,JSON.stringify(o,null,2)+`
|
|
53
53
|
`,"utf-8")),{mcpJsonPath:n,status:d?"created":p?"updated":"unchanged",serverKey:r}}function Jx(){let e=(0,ut.join)((0,hh.homedir)(),".cursor","mcp.json");if(!(0,Be.existsSync)(e))return{removed:!1,mcpJsonPath:e};let t=Fx(e),n=de.mcpKey;return t.mcpServers[n]?(delete t.mcpServers[n],(0,Be.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
54
54
|
`,"utf-8"),{removed:!0,mcpJsonPath:e}):{removed:!1,mcpJsonPath:e}}var Ze=require("node:fs"),ye=require("node:path"),Xx=require("node:readline"),Yx=require("node:child_process");var nN={selectDisplayLanguage:"Select display language:",selectMainLanguage:"Select the main language for your project:",selectSubLanguages:"Select sub-languages used in your team:",selectSubLanguagesHint:"(comma-separated numbers, or press Enter to skip)",skipSubLanguages:"No sub-languages selected.",scanningProject:"Scanning project...",detectedStack:"Detected stack:",confirmStack:"Is this correct?",manualStackEntry:"Please select your tech stack manually.",selectProgrammingLanguages:"Programming languages:",selectFrontend:"Frontend frameworks:",selectBackend:"Backend frameworks:",selectDatabase:"Databases:",selectOrm:"ORM:",selectInfra:"Infrastructure:",toolRecommendationsTitle:"Recommended tools for your stack:",toolInstallMode:"How would you like to install?",toolInstallDefault:"Default (install all)",toolInstallCustom:"Custom (choose individually)",toolInstallSkip:"Skip (install later)",toolInstallPrompt:"Install?",toolInstalling:"Installing",toolInstallSuccess:"Installed successfully.",toolInstallFailed:"Installation failed. You can install it later via setup prompt.",toolUniversalTag:"all projects",toolCategories:{browser_automation:"Browser Automation",e2e_testing:"E2E Testing",unit_testing:"Unit Testing",linting:"Linting",formatting:"Formatting",type_checking:"Type Checking",coverage:"Coverage",documentation:"Documentation",secret_scanning:"Secret Scanning",security_analysis:"Security Analysis",unused_code:"Unused Code Detection",dependency_analysis:"Dependency Analysis"},configCreated:"Generated",configExists:"already exists",configOverwritten:"Overwritten",useForceFlag:"Use --force to overwrite.",languages:"Languages",frontend:"Frontend",backend:"Backend",database:"Database",orm:"ORM",infra:"Infra",pressEnterToClose:"Press Enter to close...",unknownCommand:"Unknown command",usage:"Usage:",installSuccess:"Registered with Cursor!",installUpdated:"Configuration updated",installUnchanged:"Already up to date",licenseNotSet:"License key is not set. Set GODD_LICENSE_KEY environment variable or run: godd install --license-key=YOUR_KEY",restartCursor:"Restart Cursor to activate the MCP server.",installFailed:"Installation failed:",uninstallTitle:"Uninstall",uninstallSuccess:"Removed from Cursor",uninstallNotFound:"Not found (already removed)",uninstallFailed:"Uninstall failed:",initTitle:"Project initialization",yes:"Yes",no:"No",none:"None",invalidChoice:"Invalid choice. Please try again.",enterNumbers:"Enter numbers"},oN={selectDisplayLanguage:"\u8868\u793A\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",selectMainLanguage:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30A4\u30F3\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",selectSubLanguages:"\u30C1\u30FC\u30E0\u3067\u4F7F\u7528\u3059\u308B\u30B5\u30D6\u8A00\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",selectSubLanguagesHint:"(\u30AB\u30F3\u30DE\u533A\u5207\u308A\u306E\u756A\u53F7\u3001\u307E\u305F\u306FEnter\u3067\u30B9\u30AD\u30C3\u30D7)",skipSubLanguages:"\u30B5\u30D6\u8A00\u8A9E\u306F\u9078\u629E\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002",scanningProject:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30B9\u30AD\u30E3\u30F3\u4E2D...",detectedStack:"\u691C\u51FA\u3055\u308C\u305F\u30B9\u30BF\u30C3\u30AF:",confirmStack:"\u3053\u306E\u5185\u5BB9\u3067\u6B63\u3057\u3044\u3067\u3059\u304B\uFF1F",manualStackEntry:"\u6280\u8853\u30B9\u30BF\u30C3\u30AF\u3092\u624B\u52D5\u3067\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",selectProgrammingLanguages:"\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E:",selectFrontend:"\u30D5\u30ED\u30F3\u30C8\u30A8\u30F3\u30C9\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF:",selectBackend:"\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF:",selectDatabase:"\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9:",selectOrm:"ORM:",selectInfra:"\u30A4\u30F3\u30D5\u30E9:",toolRecommendationsTitle:"\u30B9\u30BF\u30C3\u30AF\u306B\u63A8\u5968\u3055\u308C\u308B\u30C4\u30FC\u30EB:",toolInstallMode:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",toolInstallDefault:"\u30C7\u30D5\u30A9\u30EB\u30C8\uFF08\u3059\u3079\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\uFF09",toolInstallCustom:"\u30AB\u30B9\u30BF\u30E0\uFF08\u500B\u5225\u306B\u9078\u629E\uFF09",toolInstallSkip:"\u30B9\u30AD\u30C3\u30D7\uFF08\u5F8C\u3067\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\uFF09",toolInstallPrompt:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B\uFF1F",toolInstalling:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D",toolInstallSuccess:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002",toolInstallFailed:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002setup \u30D7\u30ED\u30F3\u30D7\u30C8\u3067\u5F8C\u304B\u3089\u5BFE\u5FDC\u3067\u304D\u307E\u3059\u3002",toolUniversalTag:"\u5168\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5171\u901A",toolCategories:{browser_automation:"\u30D6\u30E9\u30A6\u30B6\u81EA\u52D5\u5316",e2e_testing:"E2E \u30C6\u30B9\u30C8",unit_testing:"\u30E6\u30CB\u30C3\u30C8\u30C6\u30B9\u30C8",linting:"\u30EA\u30F3\u30BF\u30FC",formatting:"\u30D5\u30A9\u30FC\u30DE\u30C3\u30BF\u30FC",type_checking:"\u578B\u30C1\u30A7\u30C3\u30AF",coverage:"\u30AB\u30D0\u30EC\u30C3\u30B8",documentation:"\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u751F\u6210",secret_scanning:"\u30B7\u30FC\u30AF\u30EC\u30C3\u30C8\u30B9\u30AD\u30E3\u30F3",security_analysis:"\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u5206\u6790",unused_code:"\u672A\u4F7F\u7528\u30B3\u30FC\u30C9\u691C\u51FA",dependency_analysis:"\u4F9D\u5B58\u5206\u6790"},configCreated:"\u3092\u751F\u6210\u3057\u307E\u3057\u305F",configExists:"\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059",configOverwritten:"\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3057\u305F",useForceFlag:"\u4E0A\u66F8\u304D\u3059\u308B\u5834\u5408\u306F --force \u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",languages:"\u8A00\u8A9E",frontend:"\u30D5\u30ED\u30F3\u30C8\u30A8\u30F3\u30C9",backend:"\u30D0\u30C3\u30AF\u30A8\u30F3\u30C9",database:"\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9",orm:"ORM",infra:"\u30A4\u30F3\u30D5\u30E9",pressEnterToClose:"Enter \u30AD\u30FC\u3092\u62BC\u3059\u3068\u9589\u3058\u307E\u3059...",unknownCommand:"\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9",usage:"\u4F7F\u3044\u65B9:",installSuccess:"Cursor \u306B\u767B\u9332\u3057\u307E\u3057\u305F\uFF01",installUpdated:"\u8A2D\u5B9A\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",installUnchanged:"\u65E2\u306B\u6700\u65B0\u306E\u8A2D\u5B9A\u3067\u3059",licenseNotSet:"\u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u304C\u672A\u8A2D\u5B9A\u3067\u3059\u3002\u74B0\u5883\u5909\u6570 GODD_LICENSE_KEY \u3092\u8A2D\u5B9A\u3059\u308B\u304B\u3001godd install --license-key=YOUR_KEY \u3067\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002",restartCursor:"Cursor \u3092\u518D\u8D77\u52D5\u3059\u308B\u3068 MCP \u30B5\u30FC\u30D0\u30FC\u304C\u6709\u52B9\u306B\u306A\u308A\u307E\u3059\u3002",installFailed:"\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F:",uninstallTitle:"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",uninstallSuccess:"Cursor \u304B\u3089\u524A\u9664\u3057\u307E\u3057\u305F",uninstallNotFound:"\u767B\u9332\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u65E2\u306B\u524A\u9664\u6E08\u307F\uFF09",uninstallFailed:"\u30A2\u30F3\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u306B\u5931\u6557\u3057\u307E\u3057\u305F:",initTitle:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u521D\u671F\u5316",yes:"\u306F\u3044",no:"\u3044\u3044\u3048",none:"\u306A\u3057",invalidChoice:"\u7121\u52B9\u306A\u9078\u629E\u3067\u3059\u3002\u3082\u3046\u4E00\u5EA6\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",enterNumbers:"\u756A\u53F7\u3092\u5165\u529B"},iN={selectDisplayLanguage:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u044F\u0437\u044B\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F:",selectMainLanguage:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u044F\u0437\u044B\u043A \u043F\u0440\u043E\u0435\u043A\u0442\u0430:",selectSubLanguages:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u044F\u0437\u044B\u043A\u0438 \u043A\u043E\u043C\u0430\u043D\u0434\u044B:",selectSubLanguagesHint:"(\u043D\u043E\u043C\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043F\u044F\u0442\u0443\u044E \u0438\u043B\u0438 Enter \u0434\u043B\u044F \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430)",skipSubLanguages:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u044F\u0437\u044B\u043A\u0438 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u044B.",scanningProject:"\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u0440\u043E\u0435\u043A\u0442\u0430...",detectedStack:"\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0439 \u0441\u0442\u0435\u043A:",confirmStack:"\u0412\u0441\u0451 \u0432\u0435\u0440\u043D\u043E?",manualStackEntry:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0441\u0442\u0435\u043A \u0432\u0440\u0443\u0447\u043D\u0443\u044E.",selectProgrammingLanguages:"\u042F\u0437\u044B\u043A\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F:",selectFrontend:"\u0424\u0440\u043E\u043D\u0442\u0435\u043D\u0434-\u0444\u0440\u0435\u0439\u043C\u0432\u043E\u0440\u043A\u0438:",selectBackend:"\u0411\u044D\u043A\u0435\u043D\u0434-\u0444\u0440\u0435\u0439\u043C\u0432\u043E\u0440\u043A\u0438:",selectDatabase:"\u0411\u0430\u0437\u044B \u0434\u0430\u043D\u043D\u044B\u0445:",selectOrm:"ORM:",selectInfra:"\u0418\u043D\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430:",toolRecommendationsTitle:"\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u043C\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u0441\u0442\u0435\u043A\u0430:",toolInstallMode:"\u041A\u0430\u043A \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C?",toolInstallDefault:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435)",toolInstallCustom:"\u0412\u044B\u0431\u043E\u0440\u043E\u0447\u043D\u043E (\u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u043E \u043E\u0434\u043D\u043E\u043C\u0443)",toolInstallSkip:"\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C (\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043F\u043E\u0437\u0436\u0435)",toolInstallPrompt:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C?",toolInstalling:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430",toolInstallSuccess:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0443\u0441\u043F\u0435\u0448\u043D\u043E.",toolInstallFailed:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C. \u041C\u043E\u0436\u043D\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043F\u043E\u0437\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 setup.",toolUniversalTag:"\u0432\u0441\u0435 \u043F\u0440\u043E\u0435\u043A\u0442\u044B",toolCategories:{browser_automation:"\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",e2e_testing:"E2E \u0442\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",unit_testing:"\u042E\u043D\u0438\u0442-\u0442\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",linting:"\u041B\u0438\u043D\u0442\u0438\u043D\u0433",formatting:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",type_checking:"\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0442\u0438\u043F\u043E\u0432",coverage:"\u041F\u043E\u043A\u0440\u044B\u0442\u0438\u0435 \u043A\u043E\u0434\u0430",documentation:"\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F",secret_scanning:"\u0421\u043A\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u0435\u043A\u0440\u0435\u0442\u043E\u0432",security_analysis:"\u0410\u043D\u0430\u043B\u0438\u0437 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438",unused_code:"\u041E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u0438\u0435 \u043D\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E \u043A\u043E\u0434\u0430",dependency_analysis:"\u0410\u043D\u0430\u043B\u0438\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0435\u0439"},configCreated:"\u0421\u043E\u0437\u0434\u0430\u043D",configExists:"\u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442",configOverwritten:"\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D",useForceFlag:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 --force \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0438.",languages:"\u042F\u0437\u044B\u043A\u0438",frontend:"\u0424\u0440\u043E\u043D\u0442\u0435\u043D\u0434",backend:"\u0411\u044D\u043A\u0435\u043D\u0434",database:"\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u043D\u044B\u0445",orm:"ORM",infra:"\u0418\u043D\u0444\u0440\u0430",pressEnterToClose:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 Enter \u0434\u043B\u044F \u0432\u044B\u0445\u043E\u0434\u0430...",unknownCommand:"\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430",usage:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435:",installSuccess:"\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u0432 Cursor!",installUpdated:"\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430",installUnchanged:"\u0423\u0436\u0435 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u043E",licenseNotSet:"\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u043E\u043D\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u043D\u0435 \u0437\u0430\u0434\u0430\u043D. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 GODD_LICENSE_KEY \u0438\u043B\u0438 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435: godd install --license-key=YOUR_KEY",restartCursor:"\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Cursor \u0434\u043B\u044F \u0430\u043A\u0442\u0438\u0432\u0430\u0446\u0438\u0438 MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430.",installFailed:"\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438:",uninstallTitle:"\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435",uninstallSuccess:"\u0423\u0434\u0430\u043B\u0435\u043D\u043E \u0438\u0437 Cursor",uninstallNotFound:"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E (\u0443\u0436\u0435 \u0443\u0434\u0430\u043B\u0435\u043D\u043E)",uninstallFailed:"\u041E\u0448\u0438\u0431\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F:",initTitle:"\u0418\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430",yes:"\u0414\u0430",no:"\u041D\u0435\u0442",none:"\u041D\u0435\u0442",invalidChoice:"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437.",enterNumbers:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440\u0430"},Kx={en:nN,ja:oN,ru:iN};function on(e){return Kx[e]??Kx.en}var vh={en:"English",ja:"\u65E5\u672C\u8A9E",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"};var z=e=>({win32:e,darwin:e,linux:e}),_=(e,...t)=>t.some(n=>e.programming_languages.includes(n)),aN=[{category:"browser_automation",tool:"browser-use",installCmd:z("pip install browser-use"),universal:!0,condition:()=>!0},{category:"secret_scanning",tool:"gitleaks",installCmd:{win32:"winget install Gitleaks.Gitleaks",darwin:"brew install gitleaks",linux:"go install github.com/gitleaks/gitleaks/v8@latest"},universal:!0,condition:()=>!0},{category:"e2e_testing",tool:"playwright",installCmd:z("npm i -D @playwright/test && npx playwright install"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"unit_testing",tool:"vitest",installCmd:z("npm i -D vitest"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"linting",tool:"biome",installCmd:z("npm i -D @biomejs/biome"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"formatting",tool:"biome",installCmd:z("npm i -D @biomejs/biome"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"type_checking",tool:"typescript",installCmd:z("npm i -D typescript"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"coverage",tool:"c8",installCmd:z("npm i -D c8"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"unused_code",tool:"knip",installCmd:z("npm i -D knip"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"dependency_analysis",tool:"dependency-cruiser",installCmd:z("npm i -D dependency-cruiser"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"documentation",tool:"typedoc",installCmd:z("npm i -D typedoc"),universal:!1,condition:e=>_(e,"typescript","javascript")},{category:"e2e_testing",tool:"pytest",installCmd:z("pip install pytest httpx pytest-asyncio"),universal:!1,condition:e=>_(e,"python")},{category:"unit_testing",tool:"pytest",installCmd:z("pip install pytest"),universal:!1,condition:e=>_(e,"python")},{category:"linting",tool:"ruff",installCmd:z("pip install ruff"),universal:!1,condition:e=>_(e,"python")},{category:"formatting",tool:"ruff",installCmd:z("pip install ruff"),universal:!1,condition:e=>_(e,"python")},{category:"type_checking",tool:"pyright",installCmd:z("pip install pyright"),universal:!1,condition:e=>_(e,"python")},{category:"coverage",tool:"pytest-cov",installCmd:z("pip install pytest-cov"),universal:!1,condition:e=>_(e,"python")},{category:"unused_code",tool:"vulture",installCmd:z("pip install vulture"),universal:!1,condition:e=>_(e,"python")},{category:"dependency_analysis",tool:"pipdeptree",installCmd:z("pip install pipdeptree"),universal:!1,condition:e=>_(e,"python")},{category:"documentation",tool:"mkdocs",installCmd:z("pip install mkdocs mkdocs-material"),universal:!1,condition:e=>_(e,"python")},{category:"security_analysis",tool:"bandit",installCmd:z("pip install bandit"),universal:!1,condition:e=>_(e,"python")},{category:"e2e_testing",tool:"testify",installCmd:z("go get github.com/stretchr/testify"),universal:!1,condition:e=>_(e,"go")},{category:"linting",tool:"golangci-lint",installCmd:{win32:"go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest",darwin:"brew install golangci-lint",linux:"go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"},universal:!1,condition:e=>_(e,"go")},{category:"unused_code",tool:"deadcode",installCmd:z("go install golang.org/x/tools/cmd/deadcode@latest"),universal:!1,condition:e=>_(e,"go")},{category:"documentation",tool:"godoc",installCmd:z("go install golang.org/x/tools/cmd/godoc@latest"),universal:!1,condition:e=>_(e,"go")},{category:"security_analysis",tool:"gosec",installCmd:z("go install github.com/securego/gosec/v2/cmd/gosec@latest"),universal:!1,condition:e=>_(e,"go")},{category:"unit_testing",tool:"junit5",installCmd:z("echo JUnit 5 \u2014 add to pom.xml or build.gradle"),universal:!1,condition:e=>_(e,"java")&&!_(e,"kotlin")},{category:"linting",tool:"checkstyle",installCmd:z("echo Checkstyle \u2014 add Gradle/Maven plugin"),universal:!1,condition:e=>_(e,"java")&&!_(e,"kotlin")},{category:"formatting",tool:"google-java-format",installCmd:z("echo google-java-format \u2014 add to build config"),universal:!1,condition:e=>_(e,"java")&&!_(e,"kotlin")},{category:"coverage",tool:"jacoco",installCmd:z("echo JaCoCo \u2014 add Gradle/Maven plugin"),universal:!1,condition:e=>_(e,"java")},{category:"security_analysis",tool:"spotbugs",installCmd:z("echo SpotBugs \u2014 add Gradle/Maven plugin"),universal:!1,condition:e=>_(e,"java")},{category:"unit_testing",tool:"junit5",installCmd:z("echo JUnit 5 + MockK \u2014 add to build.gradle.kts"),universal:!1,condition:e=>_(e,"kotlin")},{category:"linting",tool:"detekt",installCmd:z("echo detekt \u2014 add Gradle plugin"),universal:!1,condition:e=>_(e,"kotlin")},{category:"formatting",tool:"ktlint",installCmd:z("echo ktlint \u2014 add Gradle plugin"),universal:!1,condition:e=>_(e,"kotlin")},{category:"coverage",tool:"kover",installCmd:z("echo Kover \u2014 add Gradle plugin"),universal:!1,condition:e=>_(e,"kotlin")},{category:"documentation",tool:"dokka",installCmd:z("echo Dokka \u2014 add Gradle plugin"),universal:!1,condition:e=>_(e,"kotlin")},{category:"unit_testing",tool:"xunit",installCmd:z("dotnet add package xunit xunit.runner.visualstudio"),universal:!1,condition:e=>_(e,"csharp")},{category:"formatting",tool:"dotnet-format",installCmd:z("echo dotnet format \u2014 built-in (.NET 6+)"),universal:!1,condition:e=>_(e,"csharp")},{category:"coverage",tool:"coverlet",installCmd:z("dotnet add package coverlet.collector"),universal:!1,condition:e=>_(e,"csharp")},{category:"documentation",tool:"docfx",installCmd:z("dotnet tool install -g docfx"),universal:!1,condition:e=>_(e,"csharp")},{category:"unit_testing",tool:"googletest",installCmd:z("echo GoogleTest \u2014 add via CMake FetchContent"),universal:!1,condition:e=>_(e,"cpp","c")},{category:"linting",tool:"clang-tidy",installCmd:{win32:"choco install llvm",darwin:"brew install llvm",linux:"sudo apt-get install -y clang-tidy"},universal:!1,condition:e=>_(e,"cpp","c")},{category:"formatting",tool:"clang-format",installCmd:{win32:"choco install llvm",darwin:"brew install clang-format",linux:"sudo apt-get install -y clang-format"},universal:!1,condition:e=>_(e,"cpp","c")},{category:"coverage",tool:"lcov",installCmd:{win32:"choco install lcov",darwin:"brew install lcov",linux:"sudo apt-get install -y lcov"},universal:!1,condition:e=>_(e,"cpp","c")},{category:"documentation",tool:"doxygen",installCmd:{win32:"choco install doxygen.install",darwin:"brew install doxygen",linux:"sudo apt-get install -y doxygen"},universal:!1,condition:e=>_(e,"cpp","c")},{category:"security_analysis",tool:"cppcheck",installCmd:{win32:"choco install cppcheck",darwin:"brew install cppcheck",linux:"sudo apt-get install -y cppcheck"},universal:!1,condition:e=>_(e,"cpp","c")},{category:"unit_testing",tool:"phpunit",installCmd:z("composer require --dev phpunit/phpunit"),universal:!1,condition:e=>_(e,"php")},{category:"linting",tool:"phpstan",installCmd:z("composer require --dev phpstan/phpstan"),universal:!1,condition:e=>_(e,"php")},{category:"formatting",tool:"php-cs-fixer",installCmd:z("composer require --dev friendsofphp/php-cs-fixer"),universal:!1,condition:e=>_(e,"php")},{category:"documentation",tool:"phpdoc",installCmd:z("composer require --dev phpdocumentor/phpdocumentor"),universal:!1,condition:e=>_(e,"php")},{category:"security_analysis",tool:"psalm",installCmd:z("composer require --dev vimeo/psalm"),universal:!1,condition:e=>_(e,"php")},{category:"unit_testing",tool:"rspec",installCmd:z("gem install rspec && rspec --init"),universal:!1,condition:e=>_(e,"ruby")},{category:"linting",tool:"rubocop",installCmd:z("gem install rubocop"),universal:!1,condition:e=>_(e,"ruby")},{category:"formatting",tool:"rubocop",installCmd:z("gem install rubocop"),universal:!1,condition:e=>_(e,"ruby")},{category:"coverage",tool:"simplecov",installCmd:z("gem install simplecov"),universal:!1,condition:e=>_(e,"ruby")},{category:"documentation",tool:"yard",installCmd:z("gem install yard"),universal:!1,condition:e=>_(e,"ruby")},{category:"security_analysis",tool:"brakeman",installCmd:z("gem install brakeman"),universal:!1,condition:e=>_(e,"ruby")},{category:"linting",tool:"swiftlint",installCmd:{win32:"echo SwiftLint \u2014 not available on Windows",darwin:"brew install swiftlint",linux:"echo SwiftLint \u2014 install from GitHub releases"},universal:!1,condition:e=>_(e,"swift")},{category:"formatting",tool:"swiftformat",installCmd:{win32:"echo SwiftFormat \u2014 not available on Windows",darwin:"brew install swiftformat",linux:"echo SwiftFormat \u2014 install from GitHub releases"},universal:!1,condition:e=>_(e,"swift")},{category:"linting",tool:"clippy",installCmd:z("rustup component add clippy"),universal:!1,condition:e=>_(e,"rust")},{category:"formatting",tool:"rustfmt",installCmd:z("rustup component add rustfmt"),universal:!1,condition:e=>_(e,"rust")},{category:"coverage",tool:"tarpaulin",installCmd:z("cargo install cargo-tarpaulin"),universal:!1,condition:e=>_(e,"rust")},{category:"security_analysis",tool:"cargo-audit",installCmd:z("cargo install cargo-audit"),universal:!1,condition:e=>_(e,"rust")},{category:"documentation",tool:"dartdoc",installCmd:z("dart pub global activate dartdoc"),universal:!1,condition:e=>_(e,"dart")},{category:"linting",tool:"credo",installCmd:z('echo Credo \u2014 add {:credo, "~> 1.7"} to mix.exs'),universal:!1,condition:e=>_(e,"elixir")},{category:"type_checking",tool:"dialyxir",installCmd:z('echo Dialyxir \u2014 add {:dialyxir, "~> 1.4"} to mix.exs'),universal:!1,condition:e=>_(e,"elixir")},{category:"coverage",tool:"excoveralls",installCmd:z('echo ExCoveralls \u2014 add {:excoveralls, "~> 0.18"} to mix.exs'),universal:!1,condition:e=>_(e,"elixir")},{category:"documentation",tool:"ex-doc",installCmd:z('echo ExDoc \u2014 add {:ex_doc, "~> 0.34"} to mix.exs'),universal:!1,condition:e=>_(e,"elixir")},{category:"unit_testing",tool:"scalatest",installCmd:z("echo ScalaTest \u2014 add to build.sbt"),universal:!1,condition:e=>_(e,"scala")},{category:"linting",tool:"scalafix",installCmd:z("echo Scalafix \u2014 add sbt plugin"),universal:!1,condition:e=>_(e,"scala")},{category:"formatting",tool:"scalafmt",installCmd:z("echo Scalafmt \u2014 add sbt plugin"),universal:!1,condition:e=>_(e,"scala")},{category:"coverage",tool:"scoverage",installCmd:z("echo Scoverage \u2014 add sbt plugin"),universal:!1,condition:e=>_(e,"scala")},{category:"unit_testing",tool:"testthat",installCmd:z(`Rscript -e 'install.packages("testthat")'`),universal:!1,condition:e=>_(e,"r")},{category:"linting",tool:"lintr",installCmd:z(`Rscript -e 'install.packages("lintr")'`),universal:!1,condition:e=>_(e,"r")},{category:"formatting",tool:"styler",installCmd:z(`Rscript -e 'install.packages("styler")'`),universal:!1,condition:e=>_(e,"r")},{category:"coverage",tool:"covr",installCmd:z(`Rscript -e 'install.packages("covr")'`),universal:!1,condition:e=>_(e,"r")},{category:"documentation",tool:"roxygen2",installCmd:z(`Rscript -e 'install.packages("roxygen2")'`),universal:!1,condition:e=>_(e,"r")},{category:"unit_testing",tool:"hspec",installCmd:z("cabal install hspec"),universal:!1,condition:e=>_(e,"haskell")},{category:"linting",tool:"hlint",installCmd:z("cabal install hlint"),universal:!1,condition:e=>_(e,"haskell")},{category:"formatting",tool:"ormolu",installCmd:z("cabal install ormolu"),universal:!1,condition:e=>_(e,"haskell")},{category:"linting",tool:"perlcritic",installCmd:z("cpanm Perl::Critic"),universal:!1,condition:e=>_(e,"perl")},{category:"formatting",tool:"perltidy",installCmd:z("cpanm Perl::Tidy"),universal:!1,condition:e=>_(e,"perl")},{category:"linting",tool:"clj-kondo",installCmd:{win32:"echo clj-kondo \u2014 download from GitHub releases",darwin:"brew install borkdude/brew/clj-kondo",linux:"echo clj-kondo \u2014 download from GitHub releases"},universal:!1,condition:e=>_(e,"clojure")},{category:"formatting",tool:"cljfmt",installCmd:z("echo cljfmt \u2014 add to deps.edn"),universal:!1,condition:e=>_(e,"clojure")},{category:"formatting",tool:"juliaformatter",installCmd:z(`julia -e 'using Pkg; Pkg.add("JuliaFormatter")'`),universal:!1,condition:e=>_(e,"julia")},{category:"documentation",tool:"documenter",installCmd:z(`julia -e 'using Pkg; Pkg.add("Documenter")'`),universal:!1,condition:e=>_(e,"julia")},{category:"unit_testing",tool:"busted",installCmd:z("luarocks install busted"),universal:!1,condition:e=>_(e,"lua")},{category:"linting",tool:"luacheck",installCmd:z("luarocks install luacheck"),universal:!1,condition:e=>_(e,"lua")},{category:"formatting",tool:"stylua",installCmd:{win32:"cargo install stylua",darwin:"brew install stylua",linux:"cargo install stylua"},universal:!1,condition:e=>_(e,"lua")},{category:"unit_testing",tool:"forge-test",installCmd:{win32:"echo Foundry \u2014 install from https://getfoundry.sh",darwin:"curl -L https://foundry.paradigm.xyz | bash && foundryup",linux:"curl -L https://foundry.paradigm.xyz | bash && foundryup"},universal:!1,condition:e=>_(e,"solidity")},{category:"linting",tool:"solhint",installCmd:z("npm i -g solhint"),universal:!1,condition:e=>_(e,"solidity")},{category:"formatting",tool:"prettier-solidity",installCmd:z("npm i -D prettier prettier-plugin-solidity"),universal:!1,condition:e=>_(e,"solidity")},{category:"security_analysis",tool:"slither",installCmd:z("pip install slither-analyzer"),universal:!1,condition:e=>_(e,"solidity")},{category:"unit_testing",tool:"xunit",installCmd:z("dotnet add package xunit xunit.runner.visualstudio"),universal:!1,condition:e=>_(e,"fsharp")},{category:"formatting",tool:"fantomas",installCmd:z("dotnet tool install -g fantomas"),universal:!1,condition:e=>_(e,"fsharp")},{category:"unit_testing",tool:"alcotest",installCmd:z("opam install alcotest"),universal:!1,condition:e=>_(e,"ocaml")},{category:"formatting",tool:"ocamlformat",installCmd:z("opam install ocamlformat"),universal:!1,condition:e=>_(e,"ocaml")},{category:"linting",tool:"elvis",installCmd:z("echo elvis \u2014 add as rebar3 plugin"),universal:!1,condition:e=>_(e,"erlang")},{category:"linting",tool:"ameba",installCmd:z("echo Ameba \u2014 add to shard.yml"),universal:!1,condition:e=>_(e,"crystal")},{category:"linting",tool:"codenarc",installCmd:z("echo CodeNarc \u2014 add Gradle plugin"),universal:!1,condition:e=>_(e,"groovy")},{category:"linting",tool:"oclint",installCmd:{win32:"echo OCLint \u2014 not available on Windows",darwin:"brew install oclint",linux:"echo OCLint \u2014 install from GitHub releases"},universal:!1,condition:e=>_(e,"objective-c")},{category:"formatting",tool:"clang-format",installCmd:{win32:"choco install llvm",darwin:"brew install clang-format",linux:"sudo apt-get install -y clang-format"},universal:!1,condition:e=>_(e,"objective-c")},{category:"unit_testing",tool:"mstest",installCmd:z("dotnet add package MSTest.TestFramework MSTest.TestAdapter"),universal:!1,condition:e=>_(e,"visual-basic")},{category:"unit_testing",tool:"pester",installCmd:z("Install-Module -Name Pester -Force -SkipPublisherCheck"),universal:!1,condition:e=>_(e,"powershell")},{category:"linting",tool:"psscriptanalyzer",installCmd:z("Install-Module -Name PSScriptAnalyzer -Force"),universal:!1,condition:e=>_(e,"powershell")}];function Gx(e){let t=new Set,n=[];for(let o of aN)t.has(o.category)||o.condition(e)&&(n.push(o),t.add(o.category));return n}function sN(){return(0,Xx.createInterface)({input:process.stdin,output:process.stdout})}function $h(e,t){return new Promise(n=>{e.question(t,o=>n(o.trim()))})}async function yh(e,t,n){console.log(`
|
|
55
55
|
${t}`);for(let o=0;o<n.length;o++)console.log(` ${o+1}. ${n[o].label}`);for(;;){let o=await $h(e," > "),r=parseInt(o,10)-1;if(r>=0&&r<n.length)return n[r].value;console.log(" Invalid choice. Enter a number.")}}async function an(e,t,n,o){console.log(`
|