This is page 4 of 5. Use http://codebase.md/hongsw/claude-agents-power-mcp-server?lines=true&page={x} to view the full context. # Directory Structure ``` ├── .claude │ └── agents │ ├── devops-engineer.md │ ├── frontend-developer.md │ ├── qa-engineer.md │ ├── README.md │ ├── security-engineer.md │ └── tech-lead.md ├── .gitignore ├── agents │ ├── backend-engineer.md │ ├── data-scientist.md │ ├── devops-engineer.md │ ├── frontend-developer.md │ ├── full-stack-developer.md │ ├── mobile-developer.md │ ├── qa-engineer.md │ ├── README.md │ ├── security-engineer.md │ ├── tech-lead.md │ └── ui-designer.md ├── CHANGELOG.md ├── claude │ └── agents │ ├── company-roles.md │ ├── en │ │ ├── account-manager.md │ │ ├── accountant.md │ │ ├── accounting-manager.md │ │ ├── agile-coach.md │ │ ├── ai-researcher.md │ │ ├── backend-developer.md │ │ ├── backend-engineer.md │ │ ├── bi-developer.md │ │ ├── blockchain-developer.md │ │ ├── brand-manager.md │ │ ├── budget-analyst.md │ │ ├── business-analyst.md │ │ ├── business-developer.md │ │ ├── business-development-manager.md │ │ ├── business-intelligence-analyst.md │ │ ├── business-process-analyst.md │ │ ├── change-management-specialist.md │ │ ├── change-manager.md │ │ ├── chief-data-officer.md │ │ ├── chief-executive-officer.md │ │ ├── chief-financial-officer.md │ │ ├── chief-human-resources-officer.md │ │ ├── chief-information-officer.md │ │ ├── chief-marketing-officer.md │ │ ├── chief-operating-officer.md │ │ ├── chief-product-officer.md │ │ ├── chief-technology-officer.md │ │ ├── clinical-researcher.md │ │ ├── cloud-architect.md │ │ ├── communications-director.md │ │ ├── compensation-benefits-manager.md │ │ ├── compensation-benefits.md │ │ ├── compliance-manager.md │ │ ├── compliance-officer.md │ │ ├── content-creator.md │ │ ├── content-marketer.md │ │ ├── content-marketing-manager.md │ │ ├── contract-manager.md │ │ ├── controller.md │ │ ├── copywriter.md │ │ ├── corporate-trainer.md │ │ ├── creative-director.md │ │ ├── credit-analyst.md │ │ ├── curriculum-developer.md │ │ ├── customer-service-manager.md │ │ ├── customer-success-manager.md │ │ ├── data-analyst.md │ │ ├── data-engineer.md │ │ ├── data-scientist.md │ │ ├── database-administrator.md │ │ ├── design-lead.md │ │ ├── devops-engineer.md │ │ ├── digital-marketer.md │ │ ├── digital-marketing-specialist.md │ │ ├── diversity-inclusion-manager.md │ │ ├── diversity-inclusion.md │ │ ├── embedded-systems-engineer.md │ │ ├── environmental-engineer.md │ │ ├── event-manager.md │ │ ├── executive-assistant.md │ │ ├── facilities-manager.md │ │ ├── facility-manager.md │ │ ├── financial-analyst.md │ │ ├── financial-controller.md │ │ ├── frontend-developer.md │ │ ├── full-stack-developer.md │ │ ├── game-developer.md │ │ ├── graphic-designer.md │ │ ├── growth-hacker.md │ │ ├── growth-marketing-manager.md │ │ ├── health-informatics.md │ │ ├── healthcare-analyst.md │ │ ├── help-desk-specialist.md │ │ ├── hr-manager.md │ │ ├── implementation-consultant.md │ │ ├── innovation-manager.md │ │ ├── instructional-designer.md │ │ ├── interaction-designer.md │ │ ├── internal-auditor.md │ │ ├── investment-analyst.md │ │ ├── investor-relations-manager.md │ │ ├── investor-relations.md │ │ ├── it-administrator.md │ │ ├── learning-development-manager.md │ │ ├── learning-development.md │ │ ├── legal-counsel.md │ │ ├── machine-learning-engineer.md │ │ ├── marketing-analyst.md │ │ ├── marketing-manager.md │ │ ├── medical-writer.md │ │ ├── mobile-developer.md │ │ ├── motion-designer.md │ │ ├── network-engineer.md │ │ ├── office-manager.md │ │ ├── operations-manager.md │ │ ├── organizational-developer.md │ │ ├── organizational-development-manager.md │ │ ├── partnership-manager.md │ │ ├── patent-engineer.md │ │ ├── payroll-manager.md │ │ ├── pr-manager.md │ │ ├── pre-sales-consultant.md │ │ ├── privacy-officer.md │ │ ├── process-engineer.md │ │ ├── procurement-manager.md │ │ ├── procurement-specialist.md │ │ ├── product-designer.md │ │ ├── product-manager.md │ │ ├── product-owner.md │ │ ├── production-manager.md │ │ ├── program-manager.md │ │ ├── project-manager.md │ │ ├── public-relations-manager.md │ │ ├── qa-engineer.md │ │ ├── quality-assurance-manager.md │ │ ├── quality-engineer.md │ │ ├── r-and-d-engineer.md │ │ ├── real-estate-analyst.md │ │ ├── research-scientist.md │ │ ├── risk-manager.md │ │ ├── sales-engineer.md │ │ ├── sales-manager.md │ │ ├── scrum-master.md │ │ ├── security-engineer.md │ │ ├── seo-specialist.md │ │ ├── site-reliability-engineer.md │ │ ├── social-media-manager.md │ │ ├── software-engineer.md │ │ ├── solution-architect.md │ │ ├── strategy-consultant.md │ │ ├── supply-chain-manager.md │ │ ├── sustainability-manager.md │ │ ├── talent-acquisition-specialist.md │ │ ├── talent-acquisition.md │ │ ├── tax-manager.md │ │ ├── tech-lead.md │ │ ├── technical-pm.md │ │ ├── technical-support-engineer.md │ │ ├── technical-support.md │ │ ├── technical-writer.md │ │ ├── training-specialist.md │ │ ├── treasury-manager.md │ │ ├── ui-designer.md │ │ ├── ux-designer.md │ │ ├── ux-researcher.md │ │ └── video-producer.md │ ├── ja │ │ ├── backend-engineer.md │ │ ├── data-scientist.md │ │ ├── devops-engineer.md │ │ ├── frontend-developer.md │ │ └── product-manager.md │ ├── ko │ │ ├── account-manager.md │ │ ├── accountant.md │ │ ├── backend-developer.md │ │ ├── backend-engineer.md │ │ ├── bi-developer.md │ │ ├── blockchain-developer.md │ │ ├── brand-manager.md │ │ ├── budget-analyst.md │ │ ├── business-analyst.md │ │ ├── business-developer.md │ │ ├── change-manager.md │ │ ├── clinical-researcher.md │ │ ├── cloud-architect.md │ │ ├── communications-director.md │ │ ├── compensation-benefits.md │ │ ├── compliance-officer.md │ │ ├── content-creator.md │ │ ├── content-marketer.md │ │ ├── contract-manager.md │ │ ├── controller.md │ │ ├── copywriter.md │ │ ├── corporate-trainer.md │ │ ├── curriculum-developer.md │ │ ├── customer-success-manager.md │ │ ├── data-analyst.md │ │ ├── data-engineer.md │ │ ├── data-scientist.md │ │ ├── devops-engineer.md │ │ ├── digital-marketer.md │ │ ├── diversity-inclusion.md │ │ ├── environmental-engineer.md │ │ ├── event-manager.md │ │ ├── executive-assistant.md │ │ ├── facility-manager.md │ │ ├── financial-analyst.md │ │ ├── frontend-developer.md │ │ ├── full-stack-developer.md │ │ ├── graphic-designer.md │ │ ├── growth-hacker.md │ │ ├── health-informatics.md │ │ ├── healthcare-analyst.md │ │ ├── help-desk-specialist.md │ │ ├── hr-manager.md │ │ ├── innovation-manager.md │ │ ├── instructional-designer.md │ │ ├── internal-auditor.md │ │ ├── investor-relations.md │ │ ├── it-administrator.md │ │ ├── learning-development.md │ │ ├── legal-counsel.md │ │ ├── machine-learning-engineer.md │ │ ├── marketing-analyst.md │ │ ├── medical-writer.md │ │ ├── mobile-developer.md │ │ ├── motion-designer.md │ │ ├── operations-manager.md │ │ ├── organizational-developer.md │ │ ├── patent-engineer.md │ │ ├── pr-manager.md │ │ ├── privacy-officer.md │ │ ├── process-engineer.md │ │ ├── procurement-specialist.md │ │ ├── product-designer.md │ │ ├── product-manager.md │ │ ├── product-owner.md │ │ ├── production-manager.md │ │ ├── project-manager.md │ │ ├── qa-engineer.md │ │ ├── quality-engineer.md │ │ ├── r-and-d-engineer.md │ │ ├── real-estate-analyst.md │ │ ├── research-scientist.md │ │ ├── risk-manager.md │ │ ├── sales-manager.md │ │ ├── scrum-master.md │ │ ├── security-engineer.md │ │ ├── social-media-manager.md │ │ ├── software-engineer.md │ │ ├── strategy-consultant.md │ │ ├── supply-chain-manager.md │ │ ├── sustainability-manager.md │ │ ├── talent-acquisition.md │ │ ├── technical-pm.md │ │ ├── technical-support.md │ │ ├── treasury-manager.md │ │ ├── ui-designer.md │ │ └── ux-designer.md │ └── zh │ ├── backend-engineer.md │ ├── data-scientist.md │ ├── devops-engineer.md │ ├── frontend-developer.md │ ├── product-manager.md │ ├── project-manager.md │ ├── qa-engineer.md │ └── security-engineer.md ├── claude-slash-commands │ ├── agent-download.md │ ├── agents-load.md │ ├── agents-search.md │ ├── agents-suggest.md │ ├── agents-version.md │ └── splash.md ├── CLAUDE.md ├── dist │ ├── agentManager.d.ts │ ├── agentManager.d.ts.map │ ├── agentManager.js │ ├── agentManager.js.map │ ├── githubIntegration.d.ts │ ├── githubIntegration.d.ts.map │ ├── githubIntegration.js │ ├── githubIntegration.js.map │ ├── index.d.ts │ ├── index.d.ts.map │ ├── index.js │ ├── index.js.map │ ├── projectAnalyzer.d.ts │ ├── projectAnalyzer.d.ts.map │ ├── projectAnalyzer.js │ └── projectAnalyzer.js.map ├── docs │ ├── company_roles.md │ └── index.html ├── examples │ └── usage.md ├── EXAMPLES.md ├── FIXED.md ├── index.html ├── install-slash-commands.js ├── INSTALL.md ├── INSTALLATION.md ├── LICENSE ├── node_modules │ ├── .bin │ │ ├── esbuild │ │ ├── glob │ │ ├── js-yaml │ │ ├── node-which │ │ ├── tsc │ │ ├── tsserver │ │ └── tsx │ ├── .package-lock.json │ ├── @esbuild │ │ └── darwin-arm64 │ │ ├── bin │ │ │ └── esbuild │ │ ├── package.json │ │ └── README.md │ ├── @isaacs │ │ └── cliui │ │ ├── build │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ └── lib │ │ │ └── index.js │ │ ├── index.mjs │ │ ├── LICENSE.txt │ │ ├── package.json │ │ └── README.md │ ├── @modelcontextprotocol │ │ └── sdk │ │ ├── dist │ │ │ ├── cli.d.ts │ │ │ ├── cli.d.ts.map │ │ │ ├── cli.js │ │ │ ├── cli.js.map │ │ │ ├── client │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── index.test.d.ts │ │ │ │ ├── index.test.d.ts.map │ │ │ │ ├── index.test.js │ │ │ │ ├── index.test.js.map │ │ │ │ ├── sse.d.ts │ │ │ │ ├── sse.d.ts.map │ │ │ │ ├── sse.js │ │ │ │ ├── sse.js.map │ │ │ │ ├── stdio.d.ts │ │ │ │ ├── stdio.d.ts.map │ │ │ │ ├── stdio.js │ │ │ │ ├── stdio.js.map │ │ │ │ ├── stdio.test.d.ts │ │ │ │ ├── stdio.test.d.ts.map │ │ │ │ ├── stdio.test.js │ │ │ │ ├── stdio.test.js.map │ │ │ │ ├── websocket.d.ts │ │ │ │ ├── websocket.d.ts.map │ │ │ │ ├── websocket.js │ │ │ │ └── websocket.js.map │ │ │ ├── inMemory.d.ts │ │ │ ├── inMemory.d.ts.map │ │ │ ├── inMemory.js │ │ │ ├── inMemory.js.map │ │ │ ├── inMemory.test.d.ts │ │ │ ├── inMemory.test.d.ts.map │ │ │ ├── inMemory.test.js │ │ │ ├── inMemory.test.js.map │ │ │ ├── server │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── index.test.d.ts │ │ │ │ ├── index.test.d.ts.map │ │ │ │ ├── index.test.js │ │ │ │ ├── index.test.js.map │ │ │ │ ├── sse.d.ts │ │ │ │ ├── sse.d.ts.map │ │ │ │ ├── sse.js │ │ │ │ ├── sse.js.map │ │ │ │ ├── stdio.d.ts │ │ │ │ ├── stdio.d.ts.map │ │ │ │ ├── stdio.js │ │ │ │ ├── stdio.js.map │ │ │ │ ├── stdio.test.d.ts │ │ │ │ ├── stdio.test.d.ts.map │ │ │ │ ├── stdio.test.js │ │ │ │ └── stdio.test.js.map │ │ │ ├── shared │ │ │ │ ├── protocol.d.ts │ │ │ │ ├── protocol.d.ts.map │ │ │ │ ├── protocol.js │ │ │ │ ├── protocol.js.map │ │ │ │ ├── stdio.d.ts │ │ │ │ ├── stdio.d.ts.map │ │ │ │ ├── stdio.js │ │ │ │ ├── stdio.js.map │ │ │ │ ├── stdio.test.d.ts │ │ │ │ ├── stdio.test.d.ts.map │ │ │ │ ├── stdio.test.js │ │ │ │ ├── stdio.test.js.map │ │ │ │ ├── transport.d.ts │ │ │ │ ├── transport.d.ts.map │ │ │ │ ├── transport.js │ │ │ │ └── transport.js.map │ │ │ ├── types.d.ts │ │ │ ├── types.d.ts.map │ │ │ ├── types.js │ │ │ ├── types.js.map │ │ │ ├── utils.d.ts │ │ │ ├── utils.d.ts.map │ │ │ ├── utils.js │ │ │ ├── utils.js.map │ │ │ ├── utils.test.d.ts │ │ │ ├── utils.test.d.ts.map │ │ │ ├── utils.test.js │ │ │ └── utils.test.js.map │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── @pkgjs │ │ └── parseargs │ │ ├── .editorconfig │ │ ├── CHANGELOG.md │ │ ├── examples │ │ │ ├── is-default-value.js │ │ │ ├── limit-long-syntax.js │ │ │ ├── negate.js │ │ │ ├── no-repeated-options.js │ │ │ ├── ordered-options.mjs │ │ │ └── simple-hard-coded.js │ │ ├── index.js │ │ ├── internal │ │ │ ├── errors.js │ │ │ ├── primordials.js │ │ │ ├── util.js │ │ │ └── validators.js │ │ ├── LICENSE │ │ ├── package.json │ │ ├── README.md │ │ └── utils.js │ ├── @types │ │ ├── js-yaml │ │ │ ├── index.d.mts │ │ │ ├── index.d.ts │ │ │ ├── LICENSE │ │ │ ├── package.json │ │ │ └── README.md │ │ └── node │ │ ├── assert │ │ │ └── strict.d.ts │ │ ├── assert.d.ts │ │ ├── async_hooks.d.ts │ │ ├── buffer.buffer.d.ts │ │ ├── buffer.d.ts │ │ ├── child_process.d.ts │ │ ├── cluster.d.ts │ │ ├── compatibility │ │ │ ├── disposable.d.ts │ │ │ ├── index.d.ts │ │ │ ├── indexable.d.ts │ │ │ └── iterators.d.ts │ │ ├── console.d.ts │ │ ├── constants.d.ts │ │ ├── crypto.d.ts │ │ ├── dgram.d.ts │ │ ├── diagnostics_channel.d.ts │ │ ├── dns │ │ │ └── promises.d.ts │ │ ├── dns.d.ts │ │ ├── dom-events.d.ts │ │ ├── domain.d.ts │ │ ├── events.d.ts │ │ ├── fs │ │ │ └── promises.d.ts │ │ ├── fs.d.ts │ │ ├── globals.d.ts │ │ ├── globals.typedarray.d.ts │ │ ├── http.d.ts │ │ ├── http2.d.ts │ │ ├── https.d.ts │ │ ├── index.d.ts │ │ ├── inspector.d.ts │ │ ├── LICENSE │ │ ├── module.d.ts │ │ ├── net.d.ts │ │ ├── os.d.ts │ │ ├── package.json │ │ ├── path.d.ts │ │ ├── perf_hooks.d.ts │ │ ├── process.d.ts │ │ ├── punycode.d.ts │ │ ├── querystring.d.ts │ │ ├── readline │ │ │ └── promises.d.ts │ │ ├── readline.d.ts │ │ ├── README.md │ │ ├── repl.d.ts │ │ ├── sea.d.ts │ │ ├── stream │ │ │ ├── consumers.d.ts │ │ │ ├── promises.d.ts │ │ │ └── web.d.ts │ │ ├── stream.d.ts │ │ ├── string_decoder.d.ts │ │ ├── test.d.ts │ │ ├── timers │ │ │ └── promises.d.ts │ │ ├── timers.d.ts │ │ ├── tls.d.ts │ │ ├── trace_events.d.ts │ │ ├── ts5.6 │ │ │ ├── buffer.buffer.d.ts │ │ │ ├── globals.typedarray.d.ts │ │ │ └── index.d.ts │ │ ├── tty.d.ts │ │ ├── url.d.ts │ │ ├── util.d.ts │ │ ├── v8.d.ts │ │ ├── vm.d.ts │ │ ├── wasi.d.ts │ │ ├── worker_threads.d.ts │ │ └── zlib.d.ts │ ├── ansi-regex │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── ansi-styles │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── argparse │ │ ├── argparse.js │ │ ├── CHANGELOG.md │ │ ├── lib │ │ │ ├── sub.js │ │ │ └── textwrap.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── balanced-match │ │ ├── .github │ │ │ └── FUNDING.yml │ │ ├── index.js │ │ ├── LICENSE.md │ │ ├── package.json │ │ └── README.md │ ├── brace-expansion │ │ ├── .github │ │ │ └── FUNDING.yml │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── bytes │ │ ├── History.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── Readme.md │ ├── color-convert │ │ ├── CHANGELOG.md │ │ ├── conversions.js │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ ├── README.md │ │ └── route.js │ ├── color-name │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── commander │ │ ├── esm.mjs │ │ ├── index.js │ │ ├── lib │ │ │ ├── argument.js │ │ │ ├── command.js │ │ │ ├── error.js │ │ │ ├── help.js │ │ │ ├── option.js │ │ │ └── suggestSimilar.js │ │ ├── LICENSE │ │ ├── package-support.json │ │ ├── package.json │ │ ├── Readme.md │ │ └── typings │ │ ├── esm.d.mts │ │ └── index.d.ts │ ├── content-type │ │ ├── HISTORY.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── cross-spawn │ │ ├── index.js │ │ ├── lib │ │ │ ├── enoent.js │ │ │ ├── parse.js │ │ │ └── util │ │ │ ├── escape.js │ │ │ ├── readShebang.js │ │ │ └── resolveCommand.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── depd │ │ ├── History.md │ │ ├── index.js │ │ ├── lib │ │ │ └── browser │ │ │ └── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── Readme.md │ ├── eastasianwidth │ │ ├── eastasianwidth.js │ │ ├── package.json │ │ └── README.md │ ├── emoji-regex │ │ ├── es2015 │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── RGI_Emoji.d.ts │ │ │ ├── RGI_Emoji.js │ │ │ ├── text.d.ts │ │ │ └── text.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── LICENSE-MIT.txt │ │ ├── package.json │ │ ├── README.md │ │ ├── RGI_Emoji.d.ts │ │ ├── RGI_Emoji.js │ │ ├── text.d.ts │ │ └── text.js │ ├── esbuild │ │ ├── bin │ │ │ └── esbuild │ │ ├── install.js │ │ ├── lib │ │ │ ├── main.d.ts │ │ │ └── main.js │ │ ├── LICENSE.md │ │ ├── package.json │ │ └── README.md │ ├── foreground-child │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── all-signals.d.ts │ │ │ │ ├── all-signals.d.ts.map │ │ │ │ ├── all-signals.js │ │ │ │ ├── all-signals.js.map │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── package.json │ │ │ │ ├── proxy-signals.d.ts │ │ │ │ ├── proxy-signals.d.ts.map │ │ │ │ ├── proxy-signals.js │ │ │ │ ├── proxy-signals.js.map │ │ │ │ ├── watchdog.d.ts │ │ │ │ ├── watchdog.d.ts.map │ │ │ │ ├── watchdog.js │ │ │ │ └── watchdog.js.map │ │ │ └── esm │ │ │ ├── all-signals.d.ts │ │ │ ├── all-signals.d.ts.map │ │ │ ├── all-signals.js │ │ │ ├── all-signals.js.map │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── package.json │ │ │ ├── proxy-signals.d.ts │ │ │ ├── proxy-signals.d.ts.map │ │ │ ├── proxy-signals.js │ │ │ ├── proxy-signals.js.map │ │ │ ├── watchdog.d.ts │ │ │ ├── watchdog.d.ts.map │ │ │ ├── watchdog.js │ │ │ └── watchdog.js.map │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── get-tsconfig │ │ ├── dist │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.mts │ │ │ └── index.mjs │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── glob │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── glob.d.ts │ │ │ │ ├── glob.d.ts.map │ │ │ │ ├── glob.js │ │ │ │ ├── glob.js.map │ │ │ │ ├── has-magic.d.ts │ │ │ │ ├── has-magic.d.ts.map │ │ │ │ ├── has-magic.js │ │ │ │ ├── has-magic.js.map │ │ │ │ ├── ignore.d.ts │ │ │ │ ├── ignore.d.ts.map │ │ │ │ ├── ignore.js │ │ │ │ ├── ignore.js.map │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── package.json │ │ │ │ ├── pattern.d.ts │ │ │ │ ├── pattern.d.ts.map │ │ │ │ ├── pattern.js │ │ │ │ ├── pattern.js.map │ │ │ │ ├── processor.d.ts │ │ │ │ ├── processor.d.ts.map │ │ │ │ ├── processor.js │ │ │ │ ├── processor.js.map │ │ │ │ ├── walker.d.ts │ │ │ │ ├── walker.d.ts.map │ │ │ │ ├── walker.js │ │ │ │ └── walker.js.map │ │ │ └── esm │ │ │ ├── bin.d.mts │ │ │ ├── bin.d.mts.map │ │ │ ├── bin.mjs │ │ │ ├── bin.mjs.map │ │ │ ├── glob.d.ts │ │ │ ├── glob.d.ts.map │ │ │ ├── glob.js │ │ │ ├── glob.js.map │ │ │ ├── has-magic.d.ts │ │ │ ├── has-magic.d.ts.map │ │ │ ├── has-magic.js │ │ │ ├── has-magic.js.map │ │ │ ├── ignore.d.ts │ │ │ ├── ignore.d.ts.map │ │ │ ├── ignore.js │ │ │ ├── ignore.js.map │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── package.json │ │ │ ├── pattern.d.ts │ │ │ ├── pattern.d.ts.map │ │ │ ├── pattern.js │ │ │ ├── pattern.js.map │ │ │ ├── processor.d.ts │ │ │ ├── processor.d.ts.map │ │ │ ├── processor.js │ │ │ ├── processor.js.map │ │ │ ├── walker.d.ts │ │ │ ├── walker.d.ts.map │ │ │ ├── walker.js │ │ │ └── walker.js.map │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── http-errors │ │ ├── HISTORY.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── iconv-lite │ │ ├── .github │ │ │ └── dependabot.yml │ │ ├── .idea │ │ │ ├── codeStyles │ │ │ │ ├── codeStyleConfig.xml │ │ │ │ └── Project.xml │ │ │ ├── iconv-lite.iml │ │ │ ├── inspectionProfiles │ │ │ │ └── Project_Default.xml │ │ │ ├── modules.xml │ │ │ └── vcs.xml │ │ ├── Changelog.md │ │ ├── encodings │ │ │ ├── dbcs-codec.js │ │ │ ├── dbcs-data.js │ │ │ ├── index.js │ │ │ ├── internal.js │ │ │ ├── sbcs-codec.js │ │ │ ├── sbcs-data-generated.js │ │ │ ├── sbcs-data.js │ │ │ ├── tables │ │ │ │ ├── big5-added.json │ │ │ │ ├── cp936.json │ │ │ │ ├── cp949.json │ │ │ │ ├── cp950.json │ │ │ │ ├── eucjp.json │ │ │ │ ├── gb18030-ranges.json │ │ │ │ ├── gbk-added.json │ │ │ │ └── shiftjis.json │ │ │ ├── utf16.js │ │ │ ├── utf32.js │ │ │ └── utf7.js │ │ ├── lib │ │ │ ├── bom-handling.js │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── streams.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── inherits │ │ ├── inherits_browser.js │ │ ├── inherits.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── is-fullwidth-code-point │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── isexe │ │ ├── .npmignore │ │ ├── index.js │ │ ├── LICENSE │ │ ├── mode.js │ │ ├── package.json │ │ ├── README.md │ │ ├── test │ │ │ └── basic.js │ │ └── windows.js │ ├── jackspeak │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── package.json │ │ │ │ ├── parse-args-cjs.cjs.map │ │ │ │ ├── parse-args-cjs.d.cts.map │ │ │ │ ├── parse-args.d.ts │ │ │ │ └── parse-args.js │ │ │ └── esm │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── package.json │ │ │ ├── parse-args.d.ts │ │ │ ├── parse-args.d.ts.map │ │ │ ├── parse-args.js │ │ │ └── parse-args.js.map │ │ ├── LICENSE.md │ │ ├── package.json │ │ └── README.md │ ├── js-yaml │ │ ├── bin │ │ │ └── js-yaml.js │ │ ├── CHANGELOG.md │ │ ├── dist │ │ │ ├── js-yaml.js │ │ │ ├── js-yaml.min.js │ │ │ └── js-yaml.mjs │ │ ├── index.js │ │ ├── lib │ │ │ ├── common.js │ │ │ ├── dumper.js │ │ │ ├── exception.js │ │ │ ├── loader.js │ │ │ ├── schema │ │ │ │ ├── core.js │ │ │ │ ├── default.js │ │ │ │ ├── failsafe.js │ │ │ │ └── json.js │ │ │ ├── schema.js │ │ │ ├── snippet.js │ │ │ ├── type │ │ │ │ ├── binary.js │ │ │ │ ├── bool.js │ │ │ │ ├── float.js │ │ │ │ ├── int.js │ │ │ │ ├── map.js │ │ │ │ ├── merge.js │ │ │ │ ├── null.js │ │ │ │ ├── omap.js │ │ │ │ ├── pairs.js │ │ │ │ ├── seq.js │ │ │ │ ├── set.js │ │ │ │ ├── str.js │ │ │ │ └── timestamp.js │ │ │ └── type.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── lru-cache │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── index.min.js │ │ │ │ ├── index.min.js.map │ │ │ │ └── package.json │ │ │ └── esm │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── index.min.js │ │ │ ├── index.min.js.map │ │ │ └── package.json │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── minimatch │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── assert-valid-pattern.d.ts │ │ │ │ ├── assert-valid-pattern.d.ts.map │ │ │ │ ├── assert-valid-pattern.js │ │ │ │ ├── assert-valid-pattern.js.map │ │ │ │ ├── ast.d.ts │ │ │ │ ├── ast.d.ts.map │ │ │ │ ├── ast.js │ │ │ │ ├── ast.js.map │ │ │ │ ├── brace-expressions.d.ts │ │ │ │ ├── brace-expressions.d.ts.map │ │ │ │ ├── brace-expressions.js │ │ │ │ ├── brace-expressions.js.map │ │ │ │ ├── escape.d.ts │ │ │ │ ├── escape.d.ts.map │ │ │ │ ├── escape.js │ │ │ │ ├── escape.js.map │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── package.json │ │ │ │ ├── unescape.d.ts │ │ │ │ ├── unescape.d.ts.map │ │ │ │ ├── unescape.js │ │ │ │ └── unescape.js.map │ │ │ └── esm │ │ │ ├── assert-valid-pattern.d.ts │ │ │ ├── assert-valid-pattern.d.ts.map │ │ │ ├── assert-valid-pattern.js │ │ │ ├── assert-valid-pattern.js.map │ │ │ ├── ast.d.ts │ │ │ ├── ast.d.ts.map │ │ │ ├── ast.js │ │ │ ├── ast.js.map │ │ │ ├── brace-expressions.d.ts │ │ │ ├── brace-expressions.d.ts.map │ │ │ ├── brace-expressions.js │ │ │ ├── brace-expressions.js.map │ │ │ ├── escape.d.ts │ │ │ ├── escape.d.ts.map │ │ │ ├── escape.js │ │ │ ├── escape.js.map │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── package.json │ │ │ ├── unescape.d.ts │ │ │ ├── unescape.d.ts.map │ │ │ ├── unescape.js │ │ │ └── unescape.js.map │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── minipass │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ └── package.json │ │ │ └── esm │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ └── package.json │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── package-json-from-dist │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ └── package.json │ │ │ └── esm │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ └── package.json │ │ ├── LICENSE.md │ │ ├── package.json │ │ └── README.md │ ├── path-key │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── path-scurry │ │ ├── dist │ │ │ ├── commonjs │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ └── package.json │ │ │ └── esm │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ └── package.json │ │ ├── LICENSE.md │ │ ├── package.json │ │ └── README.md │ ├── raw-body │ │ ├── HISTORY.md │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ ├── README.md │ │ └── SECURITY.md │ ├── resolve-pkg-maps │ │ ├── dist │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.mts │ │ │ └── index.mjs │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── safer-buffer │ │ ├── dangerous.js │ │ ├── LICENSE │ │ ├── package.json │ │ ├── Porting-Buffer.md │ │ ├── Readme.md │ │ ├── safer.js │ │ └── tests.js │ ├── setprototypeof │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ ├── README.md │ │ └── test │ │ └── index.js │ ├── shebang-command │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── shebang-regex │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── signal-exit │ │ ├── dist │ │ │ ├── cjs │ │ │ │ ├── browser.d.ts │ │ │ │ ├── browser.d.ts.map │ │ │ │ ├── browser.js │ │ │ │ ├── browser.js.map │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.d.ts.map │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ ├── package.json │ │ │ │ ├── signals.d.ts │ │ │ │ ├── signals.d.ts.map │ │ │ │ ├── signals.js │ │ │ │ └── signals.js.map │ │ │ └── mjs │ │ │ ├── browser.d.ts │ │ │ ├── browser.d.ts.map │ │ │ ├── browser.js │ │ │ ├── browser.js.map │ │ │ ├── index.d.ts │ │ │ ├── index.d.ts.map │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── package.json │ │ │ ├── signals.d.ts │ │ │ ├── signals.d.ts.map │ │ │ ├── signals.js │ │ │ └── signals.js.map │ │ ├── LICENSE.txt │ │ ├── package.json │ │ └── README.md │ ├── statuses │ │ ├── codes.json │ │ ├── HISTORY.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── string-width │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── string-width-cjs │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ ├── ansi-regex │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── license │ │ │ │ ├── package.json │ │ │ │ └── readme.md │ │ │ ├── emoji-regex │ │ │ │ ├── es2015 │ │ │ │ │ ├── index.js │ │ │ │ │ └── text.js │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── LICENSE-MIT.txt │ │ │ │ ├── package.json │ │ │ │ ├── README.md │ │ │ │ └── text.js │ │ │ └── strip-ansi │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── license │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── package.json │ │ └── readme.md │ ├── strip-ansi │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── strip-ansi-cjs │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ └── ansi-regex │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── license │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── package.json │ │ └── readme.md │ ├── toidentifier │ │ ├── HISTORY.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── tsx │ │ ├── dist │ │ │ ├── cjs │ │ │ │ ├── api │ │ │ │ │ ├── index.cjs │ │ │ │ │ ├── index.d.cts │ │ │ │ │ ├── index.d.mts │ │ │ │ │ └── index.mjs │ │ │ │ ├── index.cjs │ │ │ │ └── index.mjs │ │ │ ├── cli.cjs │ │ │ ├── cli.mjs │ │ │ ├── client-BQVF1NaW.mjs │ │ │ ├── client-D6NvIMSC.cjs │ │ │ ├── esm │ │ │ │ ├── api │ │ │ │ │ ├── index.cjs │ │ │ │ │ ├── index.d.cts │ │ │ │ │ ├── index.d.mts │ │ │ │ │ └── index.mjs │ │ │ │ ├── index.cjs │ │ │ │ └── index.mjs │ │ │ ├── get-pipe-path-BHW2eJdv.mjs │ │ │ ├── get-pipe-path-BoR10qr8.cjs │ │ │ ├── index-7AaEi15b.mjs │ │ │ ├── index-BWFBUo6r.cjs │ │ │ ├── index-gbaejti9.mjs │ │ │ ├── index-gckBtVBf.cjs │ │ │ ├── lexer-DgIbo0BU.cjs │ │ │ ├── lexer-DQCqS3nf.mjs │ │ │ ├── loader.cjs │ │ │ ├── loader.mjs │ │ │ ├── node-features-_8ZFwP_x.mjs │ │ │ ├── node-features-roYmp9jK.cjs │ │ │ ├── package-BgRDTLo0.mjs │ │ │ ├── package-BTMRuUqB.cjs │ │ │ ├── patch-repl.cjs │ │ │ ├── patch-repl.mjs │ │ │ ├── preflight.cjs │ │ │ ├── preflight.mjs │ │ │ ├── register-2sWVXuRQ.cjs │ │ │ ├── register-B7jrtLTO.mjs │ │ │ ├── register-CFH5oNdT.mjs │ │ │ ├── register-D46fvsV_.cjs │ │ │ ├── repl.cjs │ │ │ ├── repl.mjs │ │ │ ├── require-D4F1Lv60.cjs │ │ │ ├── require-DQxpCAr4.mjs │ │ │ ├── suppress-warnings.cjs │ │ │ ├── suppress-warnings.mjs │ │ │ ├── temporary-directory-B83uKxJF.cjs │ │ │ ├── temporary-directory-CwHp0_NW.mjs │ │ │ └── types-Cxp8y2TL.d.ts │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── typescript │ │ ├── bin │ │ │ ├── tsc │ │ │ └── tsserver │ │ ├── lib │ │ │ ├── _tsc.js │ │ │ ├── _tsserver.js │ │ │ ├── _typingsInstaller.js │ │ │ ├── cs │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── de │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── es │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── fr │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── it │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── ja │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── ko │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── lib.d.ts │ │ │ ├── lib.decorators.d.ts │ │ │ ├── lib.decorators.legacy.d.ts │ │ │ ├── lib.dom.asynciterable.d.ts │ │ │ ├── lib.dom.d.ts │ │ │ ├── lib.dom.iterable.d.ts │ │ │ ├── lib.es2015.collection.d.ts │ │ │ ├── lib.es2015.core.d.ts │ │ │ ├── lib.es2015.d.ts │ │ │ ├── lib.es2015.generator.d.ts │ │ │ ├── lib.es2015.iterable.d.ts │ │ │ ├── lib.es2015.promise.d.ts │ │ │ ├── lib.es2015.proxy.d.ts │ │ │ ├── lib.es2015.reflect.d.ts │ │ │ ├── lib.es2015.symbol.d.ts │ │ │ ├── lib.es2015.symbol.wellknown.d.ts │ │ │ ├── lib.es2016.array.include.d.ts │ │ │ ├── lib.es2016.d.ts │ │ │ ├── lib.es2016.full.d.ts │ │ │ ├── lib.es2016.intl.d.ts │ │ │ ├── lib.es2017.arraybuffer.d.ts │ │ │ ├── lib.es2017.d.ts │ │ │ ├── lib.es2017.date.d.ts │ │ │ ├── lib.es2017.full.d.ts │ │ │ ├── lib.es2017.intl.d.ts │ │ │ ├── lib.es2017.object.d.ts │ │ │ ├── lib.es2017.sharedmemory.d.ts │ │ │ ├── lib.es2017.string.d.ts │ │ │ ├── lib.es2017.typedarrays.d.ts │ │ │ ├── lib.es2018.asyncgenerator.d.ts │ │ │ ├── lib.es2018.asynciterable.d.ts │ │ │ ├── lib.es2018.d.ts │ │ │ ├── lib.es2018.full.d.ts │ │ │ ├── lib.es2018.intl.d.ts │ │ │ ├── lib.es2018.promise.d.ts │ │ │ ├── lib.es2018.regexp.d.ts │ │ │ ├── lib.es2019.array.d.ts │ │ │ ├── lib.es2019.d.ts │ │ │ ├── lib.es2019.full.d.ts │ │ │ ├── lib.es2019.intl.d.ts │ │ │ ├── lib.es2019.object.d.ts │ │ │ ├── lib.es2019.string.d.ts │ │ │ ├── lib.es2019.symbol.d.ts │ │ │ ├── lib.es2020.bigint.d.ts │ │ │ ├── lib.es2020.d.ts │ │ │ ├── lib.es2020.date.d.ts │ │ │ ├── lib.es2020.full.d.ts │ │ │ ├── lib.es2020.intl.d.ts │ │ │ ├── lib.es2020.number.d.ts │ │ │ ├── lib.es2020.promise.d.ts │ │ │ ├── lib.es2020.sharedmemory.d.ts │ │ │ ├── lib.es2020.string.d.ts │ │ │ ├── lib.es2020.symbol.wellknown.d.ts │ │ │ ├── lib.es2021.d.ts │ │ │ ├── lib.es2021.full.d.ts │ │ │ ├── lib.es2021.intl.d.ts │ │ │ ├── lib.es2021.promise.d.ts │ │ │ ├── lib.es2021.string.d.ts │ │ │ ├── lib.es2021.weakref.d.ts │ │ │ ├── lib.es2022.array.d.ts │ │ │ ├── lib.es2022.d.ts │ │ │ ├── lib.es2022.error.d.ts │ │ │ ├── lib.es2022.full.d.ts │ │ │ ├── lib.es2022.intl.d.ts │ │ │ ├── lib.es2022.object.d.ts │ │ │ ├── lib.es2022.regexp.d.ts │ │ │ ├── lib.es2022.string.d.ts │ │ │ ├── lib.es2023.array.d.ts │ │ │ ├── lib.es2023.collection.d.ts │ │ │ ├── lib.es2023.d.ts │ │ │ ├── lib.es2023.full.d.ts │ │ │ ├── lib.es2023.intl.d.ts │ │ │ ├── lib.es2024.arraybuffer.d.ts │ │ │ ├── lib.es2024.collection.d.ts │ │ │ ├── lib.es2024.d.ts │ │ │ ├── lib.es2024.full.d.ts │ │ │ ├── lib.es2024.object.d.ts │ │ │ ├── lib.es2024.promise.d.ts │ │ │ ├── lib.es2024.regexp.d.ts │ │ │ ├── lib.es2024.sharedmemory.d.ts │ │ │ ├── lib.es2024.string.d.ts │ │ │ ├── lib.es5.d.ts │ │ │ ├── lib.es6.d.ts │ │ │ ├── lib.esnext.array.d.ts │ │ │ ├── lib.esnext.collection.d.ts │ │ │ ├── lib.esnext.d.ts │ │ │ ├── lib.esnext.decorators.d.ts │ │ │ ├── lib.esnext.disposable.d.ts │ │ │ ├── lib.esnext.float16.d.ts │ │ │ ├── lib.esnext.full.d.ts │ │ │ ├── lib.esnext.intl.d.ts │ │ │ ├── lib.esnext.iterator.d.ts │ │ │ ├── lib.esnext.promise.d.ts │ │ │ ├── lib.scripthost.d.ts │ │ │ ├── lib.webworker.asynciterable.d.ts │ │ │ ├── lib.webworker.d.ts │ │ │ ├── lib.webworker.importscripts.d.ts │ │ │ ├── lib.webworker.iterable.d.ts │ │ │ ├── pl │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── pt-br │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── ru │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── tr │ │ │ │ └── diagnosticMessages.generated.json │ │ │ ├── tsc.js │ │ │ ├── tsserver.js │ │ │ ├── tsserverlibrary.d.ts │ │ │ ├── tsserverlibrary.js │ │ │ ├── typescript.d.ts │ │ │ ├── typescript.js │ │ │ ├── typesMap.json │ │ │ ├── typingsInstaller.js │ │ │ ├── watchGuard.js │ │ │ ├── zh-cn │ │ │ │ └── diagnosticMessages.generated.json │ │ │ └── zh-tw │ │ │ └── diagnosticMessages.generated.json │ │ ├── LICENSE.txt │ │ ├── package.json │ │ ├── README.md │ │ ├── SECURITY.md │ │ └── ThirdPartyNoticeText.txt │ ├── undici-types │ │ ├── agent.d.ts │ │ ├── api.d.ts │ │ ├── balanced-pool.d.ts │ │ ├── cache.d.ts │ │ ├── client.d.ts │ │ ├── connector.d.ts │ │ ├── content-type.d.ts │ │ ├── cookies.d.ts │ │ ├── diagnostics-channel.d.ts │ │ ├── dispatcher.d.ts │ │ ├── env-http-proxy-agent.d.ts │ │ ├── errors.d.ts │ │ ├── eventsource.d.ts │ │ ├── fetch.d.ts │ │ ├── file.d.ts │ │ ├── filereader.d.ts │ │ ├── formdata.d.ts │ │ ├── global-dispatcher.d.ts │ │ ├── global-origin.d.ts │ │ ├── handlers.d.ts │ │ ├── header.d.ts │ │ ├── index.d.ts │ │ ├── interceptors.d.ts │ │ ├── LICENSE │ │ ├── mock-agent.d.ts │ │ ├── mock-client.d.ts │ │ ├── mock-errors.d.ts │ │ ├── mock-interceptor.d.ts │ │ ├── mock-pool.d.ts │ │ ├── package.json │ │ ├── patch.d.ts │ │ ├── pool-stats.d.ts │ │ ├── pool.d.ts │ │ ├── proxy-agent.d.ts │ │ ├── readable.d.ts │ │ ├── README.md │ │ ├── retry-agent.d.ts │ │ ├── retry-handler.d.ts │ │ ├── util.d.ts │ │ ├── webidl.d.ts │ │ └── websocket.d.ts │ ├── unpipe │ │ ├── HISTORY.md │ │ ├── index.js │ │ ├── LICENSE │ │ ├── package.json │ │ └── README.md │ ├── which │ │ ├── bin │ │ │ └── node-which │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── package.json │ │ ├── README.md │ │ └── which.js │ ├── wrap-ansi │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── license │ │ ├── package.json │ │ └── readme.md │ ├── wrap-ansi-cjs │ │ ├── index.js │ │ ├── license │ │ ├── node_modules │ │ │ ├── ansi-regex │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── license │ │ │ │ ├── package.json │ │ │ │ └── readme.md │ │ │ ├── ansi-styles │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── license │ │ │ │ ├── package.json │ │ │ │ └── readme.md │ │ │ ├── emoji-regex │ │ │ │ ├── es2015 │ │ │ │ │ ├── index.js │ │ │ │ │ └── text.js │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── LICENSE-MIT.txt │ │ │ │ ├── package.json │ │ │ │ ├── README.md │ │ │ │ └── text.js │ │ │ ├── string-width │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── license │ │ │ │ ├── package.json │ │ │ │ └── readme.md │ │ │ └── strip-ansi │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── license │ │ │ ├── package.json │ │ │ └── readme.md │ │ ├── package.json │ │ └── readme.md │ └── zod │ ├── index.cjs │ ├── index.d.cts │ ├── index.d.ts │ ├── index.js │ ├── LICENSE │ ├── package.json │ ├── README.md │ ├── src │ │ ├── index.ts │ │ ├── v3 │ │ │ ├── benchmarks │ │ │ │ ├── datetime.ts │ │ │ │ ├── discriminatedUnion.ts │ │ │ │ ├── index.ts │ │ │ │ ├── ipv4.ts │ │ │ │ ├── object.ts │ │ │ │ ├── primitives.ts │ │ │ │ ├── realworld.ts │ │ │ │ ├── string.ts │ │ │ │ └── union.ts │ │ │ ├── errors.ts │ │ │ ├── external.ts │ │ │ ├── helpers │ │ │ │ ├── enumUtil.ts │ │ │ │ ├── errorUtil.ts │ │ │ │ ├── parseUtil.ts │ │ │ │ ├── partialUtil.ts │ │ │ │ ├── typeAliases.ts │ │ │ │ └── util.ts │ │ │ ├── index.ts │ │ │ ├── locales │ │ │ │ └── en.ts │ │ │ ├── standard-schema.ts │ │ │ ├── tests │ │ │ │ ├── all-errors.test.ts │ │ │ │ ├── anyunknown.test.ts │ │ │ │ ├── array.test.ts │ │ │ │ ├── async-parsing.test.ts │ │ │ │ ├── async-refinements.test.ts │ │ │ │ ├── base.test.ts │ │ │ │ ├── bigint.test.ts │ │ │ │ ├── branded.test.ts │ │ │ │ ├── catch.test.ts │ │ │ │ ├── coerce.test.ts │ │ │ │ ├── complex.test.ts │ │ │ │ ├── custom.test.ts │ │ │ │ ├── date.test.ts │ │ │ │ ├── deepmasking.test.ts │ │ │ │ ├── default.test.ts │ │ │ │ ├── description.test.ts │ │ │ │ ├── discriminated-unions.test.ts │ │ │ │ ├── enum.test.ts │ │ │ │ ├── error.test.ts │ │ │ │ ├── firstparty.test.ts │ │ │ │ ├── firstpartyschematypes.test.ts │ │ │ │ ├── function.test.ts │ │ │ │ ├── generics.test.ts │ │ │ │ ├── instanceof.test.ts │ │ │ │ ├── intersection.test.ts │ │ │ │ ├── language-server.source.ts │ │ │ │ ├── language-server.test.ts │ │ │ │ ├── literal.test.ts │ │ │ │ ├── map.test.ts │ │ │ │ ├── masking.test.ts │ │ │ │ ├── mocker.test.ts │ │ │ │ ├── Mocker.ts │ │ │ │ ├── nan.test.ts │ │ │ │ ├── nativeEnum.test.ts │ │ │ │ ├── nullable.test.ts │ │ │ │ ├── number.test.ts │ │ │ │ ├── object-augmentation.test.ts │ │ │ │ ├── object-in-es5-env.test.ts │ │ │ │ ├── object.test.ts │ │ │ │ ├── optional.test.ts │ │ │ │ ├── parser.test.ts │ │ │ │ ├── parseUtil.test.ts │ │ │ │ ├── partials.test.ts │ │ │ │ ├── pickomit.test.ts │ │ │ │ ├── pipeline.test.ts │ │ │ │ ├── preprocess.test.ts │ │ │ │ ├── primitive.test.ts │ │ │ │ ├── promise.test.ts │ │ │ │ ├── readonly.test.ts │ │ │ │ ├── record.test.ts │ │ │ │ ├── recursive.test.ts │ │ │ │ ├── refine.test.ts │ │ │ │ ├── safeparse.test.ts │ │ │ │ ├── set.test.ts │ │ │ │ ├── standard-schema.test.ts │ │ │ │ ├── string.test.ts │ │ │ │ ├── transformer.test.ts │ │ │ │ ├── tuple.test.ts │ │ │ │ ├── unions.test.ts │ │ │ │ ├── validations.test.ts │ │ │ │ └── void.test.ts │ │ │ ├── types.ts │ │ │ └── ZodError.ts │ │ ├── v4 │ │ │ ├── classic │ │ │ │ ├── checks.ts │ │ │ │ ├── coerce.ts │ │ │ │ ├── compat.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── external.ts │ │ │ │ ├── index.ts │ │ │ │ ├── iso.ts │ │ │ │ ├── parse.ts │ │ │ │ ├── schemas.ts │ │ │ │ └── tests │ │ │ │ ├── anyunknown.test.ts │ │ │ │ ├── array.test.ts │ │ │ │ ├── assignability.test.ts │ │ │ │ ├── async-parsing.test.ts │ │ │ │ ├── async-refinements.test.ts │ │ │ │ ├── base.test.ts │ │ │ │ ├── bigint.test.ts │ │ │ │ ├── brand.test.ts │ │ │ │ ├── catch.test.ts │ │ │ │ ├── coalesce.test.ts │ │ │ │ ├── coerce.test.ts │ │ │ │ ├── continuability.test.ts │ │ │ │ ├── custom.test.ts │ │ │ │ ├── date.test.ts │ │ │ │ ├── datetime.test.ts │ │ │ │ ├── default.test.ts │ │ │ │ ├── description.test.ts │ │ │ │ ├── discriminated-unions.test.ts │ │ │ │ ├── enum.test.ts │ │ │ │ ├── error-utils.test.ts │ │ │ │ ├── error.test.ts │ │ │ │ ├── file.test.ts │ │ │ │ ├── firstparty.test.ts │ │ │ │ ├── function.test.ts │ │ │ │ ├── generics.test.ts │ │ │ │ ├── index.test.ts │ │ │ │ ├── instanceof.test.ts │ │ │ │ ├── intersection.test.ts │ │ │ │ ├── json.test.ts │ │ │ │ ├── lazy.test.ts │ │ │ │ ├── literal.test.ts │ │ │ │ ├── map.test.ts │ │ │ │ ├── nan.test.ts │ │ │ │ ├── nested-refine.test.ts │ │ │ │ ├── nonoptional.test.ts │ │ │ │ ├── nullable.test.ts │ │ │ │ ├── number.test.ts │ │ │ │ ├── object.test.ts │ │ │ │ ├── optional.test.ts │ │ │ │ ├── partial.test.ts │ │ │ │ ├── pickomit.test.ts │ │ │ │ ├── pipe.test.ts │ │ │ │ ├── prefault.test.ts │ │ │ │ ├── preprocess.test.ts │ │ │ │ ├── primitive.test.ts │ │ │ │ ├── promise.test.ts │ │ │ │ ├── prototypes.test.ts │ │ │ │ ├── readonly.test.ts │ │ │ │ ├── record.test.ts │ │ │ │ ├── recursive-types.test.ts │ │ │ │ ├── refine.test.ts │ │ │ │ ├── registries.test.ts │ │ │ │ ├── set.test.ts │ │ │ │ ├── standard-schema.test.ts │ │ │ │ ├── string-formats.test.ts │ │ │ │ ├── string.test.ts │ │ │ │ ├── stringbool.test.ts │ │ │ │ ├── template-literal.test.ts │ │ │ │ ├── to-json-schema.test.ts │ │ │ │ ├── transform.test.ts │ │ │ │ ├── tuple.test.ts │ │ │ │ ├── union.test.ts │ │ │ │ ├── validations.test.ts │ │ │ │ └── void.test.ts │ │ │ ├── core │ │ │ │ ├── api.ts │ │ │ │ ├── checks.ts │ │ │ │ ├── config.ts │ │ │ │ ├── core.ts │ │ │ │ ├── doc.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── function.ts │ │ │ │ ├── index.ts │ │ │ │ ├── json-schema.ts │ │ │ │ ├── parse.ts │ │ │ │ ├── regexes.ts │ │ │ │ ├── registries.ts │ │ │ │ ├── schemas.ts │ │ │ │ ├── standard-schema.ts │ │ │ │ ├── tests │ │ │ │ │ ├── index.test.ts │ │ │ │ │ └── locales │ │ │ │ │ ├── be.test.ts │ │ │ │ │ ├── en.test.ts │ │ │ │ │ ├── ru.test.ts │ │ │ │ │ └── tr.test.ts │ │ │ │ ├── to-json-schema.ts │ │ │ │ ├── util.ts │ │ │ │ ├── versions.ts │ │ │ │ └── zsf.ts │ │ │ ├── index.ts │ │ │ ├── locales │ │ │ │ ├── ar.ts │ │ │ │ ├── az.ts │ │ │ │ ├── be.ts │ │ │ │ ├── ca.ts │ │ │ │ ├── cs.ts │ │ │ │ ├── de.ts │ │ │ │ ├── en.ts │ │ │ │ ├── eo.ts │ │ │ │ ├── es.ts │ │ │ │ ├── fa.ts │ │ │ │ ├── fi.ts │ │ │ │ ├── fr-CA.ts │ │ │ │ ├── fr.ts │ │ │ │ ├── he.ts │ │ │ │ ├── hu.ts │ │ │ │ ├── id.ts │ │ │ │ ├── index.ts │ │ │ │ ├── it.ts │ │ │ │ ├── ja.ts │ │ │ │ ├── kh.ts │ │ │ │ ├── ko.ts │ │ │ │ ├── mk.ts │ │ │ │ ├── ms.ts │ │ │ │ ├── nl.ts │ │ │ │ ├── no.ts │ │ │ │ ├── ota.ts │ │ │ │ ├── pl.ts │ │ │ │ ├── ps.ts │ │ │ │ ├── pt.ts │ │ │ │ ├── ru.ts │ │ │ │ ├── sl.ts │ │ │ │ ├── sv.ts │ │ │ │ ├── ta.ts │ │ │ │ ├── th.ts │ │ │ │ ├── tr.ts │ │ │ │ ├── ua.ts │ │ │ │ ├── ur.ts │ │ │ │ ├── vi.ts │ │ │ │ ├── zh-CN.ts │ │ │ │ └── zh-TW.ts │ │ │ └── mini │ │ │ ├── checks.ts │ │ │ ├── coerce.ts │ │ │ ├── external.ts │ │ │ ├── index.ts │ │ │ ├── iso.ts │ │ │ ├── parse.ts │ │ │ ├── schemas.ts │ │ │ └── tests │ │ │ ├── assignability.test.ts │ │ │ ├── brand.test.ts │ │ │ ├── checks.test.ts │ │ │ ├── computed.test.ts │ │ │ ├── error.test.ts │ │ │ ├── functions.test.ts │ │ │ ├── index.test.ts │ │ │ ├── number.test.ts │ │ │ ├── object.test.ts │ │ │ ├── prototypes.test.ts │ │ │ ├── recursive-types.test.ts │ │ │ └── string.test.ts │ │ └── v4-mini │ │ └── index.ts │ ├── v3 │ │ ├── errors.cjs │ │ ├── errors.d.cts │ │ ├── errors.d.ts │ │ ├── errors.js │ │ ├── external.cjs │ │ ├── external.d.cts │ │ ├── external.d.ts │ │ ├── external.js │ │ ├── helpers │ │ │ ├── enumUtil.cjs │ │ │ ├── enumUtil.d.cts │ │ │ ├── enumUtil.d.ts │ │ │ ├── enumUtil.js │ │ │ ├── errorUtil.cjs │ │ │ ├── errorUtil.d.cts │ │ │ ├── errorUtil.d.ts │ │ │ ├── errorUtil.js │ │ │ ├── parseUtil.cjs │ │ │ ├── parseUtil.d.cts │ │ │ ├── parseUtil.d.ts │ │ │ ├── parseUtil.js │ │ │ ├── partialUtil.cjs │ │ │ ├── partialUtil.d.cts │ │ │ ├── partialUtil.d.ts │ │ │ ├── partialUtil.js │ │ │ ├── typeAliases.cjs │ │ │ ├── typeAliases.d.cts │ │ │ ├── typeAliases.d.ts │ │ │ ├── typeAliases.js │ │ │ ├── util.cjs │ │ │ ├── util.d.cts │ │ │ ├── util.d.ts │ │ │ └── util.js │ │ ├── index.cjs │ │ ├── index.d.cts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── locales │ │ │ ├── en.cjs │ │ │ ├── en.d.cts │ │ │ ├── en.d.ts │ │ │ └── en.js │ │ ├── standard-schema.cjs │ │ ├── standard-schema.d.cts │ │ ├── standard-schema.d.ts │ │ ├── standard-schema.js │ │ ├── types.cjs │ │ ├── types.d.cts │ │ ├── types.d.ts │ │ ├── types.js │ │ ├── ZodError.cjs │ │ ├── ZodError.d.cts │ │ ├── ZodError.d.ts │ │ └── ZodError.js │ ├── v4 │ │ ├── classic │ │ │ ├── checks.cjs │ │ │ ├── checks.d.cts │ │ │ ├── checks.d.ts │ │ │ ├── checks.js │ │ │ ├── coerce.cjs │ │ │ ├── coerce.d.cts │ │ │ ├── coerce.d.ts │ │ │ ├── coerce.js │ │ │ ├── compat.cjs │ │ │ ├── compat.d.cts │ │ │ ├── compat.d.ts │ │ │ ├── compat.js │ │ │ ├── errors.cjs │ │ │ ├── errors.d.cts │ │ │ ├── errors.d.ts │ │ │ ├── errors.js │ │ │ ├── external.cjs │ │ │ ├── external.d.cts │ │ │ ├── external.d.ts │ │ │ ├── external.js │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── iso.cjs │ │ │ ├── iso.d.cts │ │ │ ├── iso.d.ts │ │ │ ├── iso.js │ │ │ ├── parse.cjs │ │ │ ├── parse.d.cts │ │ │ ├── parse.d.ts │ │ │ ├── parse.js │ │ │ ├── schemas.cjs │ │ │ ├── schemas.d.cts │ │ │ ├── schemas.d.ts │ │ │ └── schemas.js │ │ ├── core │ │ │ ├── api.cjs │ │ │ ├── api.d.cts │ │ │ ├── api.d.ts │ │ │ ├── api.js │ │ │ ├── checks.cjs │ │ │ ├── checks.d.cts │ │ │ ├── checks.d.ts │ │ │ ├── checks.js │ │ │ ├── core.cjs │ │ │ ├── core.d.cts │ │ │ ├── core.d.ts │ │ │ ├── core.js │ │ │ ├── doc.cjs │ │ │ ├── doc.d.cts │ │ │ ├── doc.d.ts │ │ │ ├── doc.js │ │ │ ├── errors.cjs │ │ │ ├── errors.d.cts │ │ │ ├── errors.d.ts │ │ │ ├── errors.js │ │ │ ├── function.cjs │ │ │ ├── function.d.cts │ │ │ ├── function.d.ts │ │ │ ├── function.js │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── json-schema.cjs │ │ │ ├── json-schema.d.cts │ │ │ ├── json-schema.d.ts │ │ │ ├── json-schema.js │ │ │ ├── parse.cjs │ │ │ ├── parse.d.cts │ │ │ ├── parse.d.ts │ │ │ ├── parse.js │ │ │ ├── regexes.cjs │ │ │ ├── regexes.d.cts │ │ │ ├── regexes.d.ts │ │ │ ├── regexes.js │ │ │ ├── registries.cjs │ │ │ ├── registries.d.cts │ │ │ ├── registries.d.ts │ │ │ ├── registries.js │ │ │ ├── schemas.cjs │ │ │ ├── schemas.d.cts │ │ │ ├── schemas.d.ts │ │ │ ├── schemas.js │ │ │ ├── standard-schema.cjs │ │ │ ├── standard-schema.d.cts │ │ │ ├── standard-schema.d.ts │ │ │ ├── standard-schema.js │ │ │ ├── to-json-schema.cjs │ │ │ ├── to-json-schema.d.cts │ │ │ ├── to-json-schema.d.ts │ │ │ ├── to-json-schema.js │ │ │ ├── util.cjs │ │ │ ├── util.d.cts │ │ │ ├── util.d.ts │ │ │ ├── util.js │ │ │ ├── versions.cjs │ │ │ ├── versions.d.cts │ │ │ ├── versions.d.ts │ │ │ └── versions.js │ │ ├── index.cjs │ │ ├── index.d.cts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── locales │ │ │ ├── ar.cjs │ │ │ ├── ar.d.cts │ │ │ ├── ar.d.ts │ │ │ ├── ar.js │ │ │ ├── az.cjs │ │ │ ├── az.d.cts │ │ │ ├── az.d.ts │ │ │ ├── az.js │ │ │ ├── be.cjs │ │ │ ├── be.d.cts │ │ │ ├── be.d.ts │ │ │ ├── be.js │ │ │ ├── ca.cjs │ │ │ ├── ca.d.cts │ │ │ ├── ca.d.ts │ │ │ ├── ca.js │ │ │ ├── cs.cjs │ │ │ ├── cs.d.cts │ │ │ ├── cs.d.ts │ │ │ ├── cs.js │ │ │ ├── de.cjs │ │ │ ├── de.d.cts │ │ │ ├── de.d.ts │ │ │ ├── de.js │ │ │ ├── en.cjs │ │ │ ├── en.d.cts │ │ │ ├── en.d.ts │ │ │ ├── en.js │ │ │ ├── eo.cjs │ │ │ ├── eo.d.cts │ │ │ ├── eo.d.ts │ │ │ ├── eo.js │ │ │ ├── es.cjs │ │ │ ├── es.d.cts │ │ │ ├── es.d.ts │ │ │ ├── es.js │ │ │ ├── fa.cjs │ │ │ ├── fa.d.cts │ │ │ ├── fa.d.ts │ │ │ ├── fa.js │ │ │ ├── fi.cjs │ │ │ ├── fi.d.cts │ │ │ ├── fi.d.ts │ │ │ ├── fi.js │ │ │ ├── fr-CA.cjs │ │ │ ├── fr-CA.d.cts │ │ │ ├── fr-CA.d.ts │ │ │ ├── fr-CA.js │ │ │ ├── fr.cjs │ │ │ ├── fr.d.cts │ │ │ ├── fr.d.ts │ │ │ ├── fr.js │ │ │ ├── he.cjs │ │ │ ├── he.d.cts │ │ │ ├── he.d.ts │ │ │ ├── he.js │ │ │ ├── hu.cjs │ │ │ ├── hu.d.cts │ │ │ ├── hu.d.ts │ │ │ ├── hu.js │ │ │ ├── id.cjs │ │ │ ├── id.d.cts │ │ │ ├── id.d.ts │ │ │ ├── id.js │ │ │ ├── index.cjs │ │ │ ├── index.d.cts │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── it.cjs │ │ │ ├── it.d.cts │ │ │ ├── it.d.ts │ │ │ ├── it.js │ │ │ ├── ja.cjs │ │ │ ├── ja.d.cts │ │ │ ├── ja.d.ts │ │ │ ├── ja.js │ │ │ ├── kh.cjs │ │ │ ├── kh.d.cts │ │ │ ├── kh.d.ts │ │ │ ├── kh.js │ │ │ ├── ko.cjs │ │ │ ├── ko.d.cts │ │ │ ├── ko.d.ts │ │ │ ├── ko.js │ │ │ ├── mk.cjs │ │ │ ├── mk.d.cts │ │ │ ├── mk.d.ts │ │ │ ├── mk.js │ │ │ ├── ms.cjs │ │ │ ├── ms.d.cts │ │ │ ├── ms.d.ts │ │ │ ├── ms.js │ │ │ ├── nl.cjs │ │ │ ├── nl.d.cts │ │ │ ├── nl.d.ts │ │ │ ├── nl.js │ │ │ ├── no.cjs │ │ │ ├── no.d.cts │ │ │ ├── no.d.ts │ │ │ ├── no.js │ │ │ ├── ota.cjs │ │ │ ├── ota.d.cts │ │ │ ├── ota.d.ts │ │ │ ├── ota.js │ │ │ ├── pl.cjs │ │ │ ├── pl.d.cts │ │ │ ├── pl.d.ts │ │ │ ├── pl.js │ │ │ ├── ps.cjs │ │ │ ├── ps.d.cts │ │ │ ├── ps.d.ts │ │ │ ├── ps.js │ │ │ ├── pt.cjs │ │ │ ├── pt.d.cts │ │ │ ├── pt.d.ts │ │ │ ├── pt.js │ │ │ ├── ru.cjs │ │ │ ├── ru.d.cts │ │ │ ├── ru.d.ts │ │ │ ├── ru.js │ │ │ ├── sl.cjs │ │ │ ├── sl.d.cts │ │ │ ├── sl.d.ts │ │ │ ├── sl.js │ │ │ ├── sv.cjs │ │ │ ├── sv.d.cts │ │ │ ├── sv.d.ts │ │ │ ├── sv.js │ │ │ ├── ta.cjs │ │ │ ├── ta.d.cts │ │ │ ├── ta.d.ts │ │ │ ├── ta.js │ │ │ ├── th.cjs │ │ │ ├── th.d.cts │ │ │ ├── th.d.ts │ │ │ ├── th.js │ │ │ ├── tr.cjs │ │ │ ├── tr.d.cts │ │ │ ├── tr.d.ts │ │ │ ├── tr.js │ │ │ ├── ua.cjs │ │ │ ├── ua.d.cts │ │ │ ├── ua.d.ts │ │ │ ├── ua.js │ │ │ ├── ur.cjs │ │ │ ├── ur.d.cts │ │ │ ├── ur.d.ts │ │ │ ├── ur.js │ │ │ ├── vi.cjs │ │ │ ├── vi.d.cts │ │ │ ├── vi.d.ts │ │ │ ├── vi.js │ │ │ ├── zh-CN.cjs │ │ │ ├── zh-CN.d.cts │ │ │ ├── zh-CN.d.ts │ │ │ ├── zh-CN.js │ │ │ ├── zh-TW.cjs │ │ │ ├── zh-TW.d.cts │ │ │ ├── zh-TW.d.ts │ │ │ └── zh-TW.js │ │ └── mini │ │ ├── checks.cjs │ │ ├── checks.d.cts │ │ ├── checks.d.ts │ │ ├── checks.js │ │ ├── coerce.cjs │ │ ├── coerce.d.cts │ │ ├── coerce.d.ts │ │ ├── coerce.js │ │ ├── external.cjs │ │ ├── external.d.cts │ │ ├── external.d.ts │ │ ├── external.js │ │ ├── index.cjs │ │ ├── index.d.cts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── iso.cjs │ │ ├── iso.d.cts │ │ ├── iso.d.ts │ │ ├── iso.js │ │ ├── parse.cjs │ │ ├── parse.d.cts │ │ ├── parse.d.ts │ │ ├── parse.js │ │ ├── schemas.cjs │ │ ├── schemas.d.cts │ │ ├── schemas.d.ts │ │ └── schemas.js │ └── v4-mini │ ├── index.cjs │ ├── index.d.cts │ ├── index.d.ts │ └── index.js ├── package-lock.json ├── package.json ├── README.ko.md ├── README.kr.md ├── README.md ├── src │ ├── agentDownloader.ts │ ├── agentManager.ts │ ├── aiAnalysisService.ts │ ├── analytics.ts │ ├── githubIntegration.ts │ ├── index.ts │ ├── projectAnalyzer.ts │ └── splashCommand.ts ├── start.sh ├── test-CLAUDE.md ├── test-server.js ├── TROUBLESHOOTING.md ├── tsconfig.json └── USER_GUIDE.md ``` # Files -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- ```html 1 | <!DOCTYPE html> 2 | <html lang="en"> 3 | <head> 4 | <meta charset="UTF-8"> 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 | <title>Pair-Role MCP Server - Smart Role Assignment for Development Teams</title> 7 | <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet"> 8 | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> 9 | <style> 10 | .gradient-bg { 11 | background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 12 | } 13 | .role-card { 14 | transition: all 0.3s ease; 15 | } 16 | .role-card:hover { 17 | transform: translateY(-5px); 18 | box-shadow: 0 10px 30px rgba(0,0,0,0.2); 19 | } 20 | .category-badge { 21 | transition: all 0.2s ease; 22 | } 23 | .category-badge:hover { 24 | transform: scale(1.05); 25 | } 26 | .feature-icon { 27 | transition: all 0.3s ease; 28 | } 29 | .feature-icon:hover { 30 | transform: rotate(10deg) scale(1.1); 31 | } 32 | .code-block { 33 | background-color: #1e1e1e; 34 | color: #d4d4d4; 35 | border-radius: 8px; 36 | padding: 16px; 37 | font-family: 'Consolas', 'Monaco', monospace; 38 | overflow-x: auto; 39 | } 40 | .tab-content { 41 | display: none; 42 | } 43 | .tab-content.active { 44 | display: block; 45 | } 46 | .hero-animation { 47 | animation: float 6s ease-in-out infinite; 48 | } 49 | @keyframes float { 50 | 0% { transform: translatey(0px); } 51 | 50% { transform: translatey(-20px); } 52 | 100% { transform: translatey(0px); } 53 | } 54 | </style> 55 | </head> 56 | <body class="bg-gray-50"> 57 | <!-- Navigation --> 58 | <nav class="bg-white shadow-lg sticky top-0 z-50"> 59 | <div class="container mx-auto px-6 py-4"> 60 | <div class="flex items-center justify-between"> 61 | <div class="flex items-center"> 62 | <i class="fas fa-users-cog text-3xl text-purple-600 mr-3"></i> 63 | <h1 class="text-2xl font-bold text-gray-800">Pair-Role MCP Server</h1> 64 | </div> 65 | <div class="flex space-x-6"> 66 | <a href="#features" class="text-gray-700 hover:text-purple-600 transition">Features</a> 67 | <a href="#roles" class="text-gray-700 hover:text-purple-600 transition">Roles</a> 68 | <a href="#usage" class="text-gray-700 hover:text-purple-600 transition">Usage</a> 69 | <a href="#installation" class="text-gray-700 hover:text-purple-600 transition">Installation</a> 70 | <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="text-gray-700 hover:text-purple-600 transition"> 71 | <i class="fab fa-github text-2xl"></i> 72 | </a> 73 | </div> 74 | </div> 75 | </div> 76 | </nav> 77 | 78 | <!-- Hero Section --> 79 | <section class="gradient-bg text-white py-20"> 80 | <div class="container mx-auto px-6"> 81 | <div class="flex flex-col md:flex-row items-center"> 82 | <div class="md:w-1/2 mb-10 md:mb-0"> 83 | <h2 class="text-4xl md:text-5xl font-bold mb-6"> 84 | 🎯 Smart Role Assignment for Development Teams 85 | </h2> 86 | <p class="text-xl mb-8 text-purple-100"> 87 | An intelligent MCP server that analyzes your project and recommends the perfect team composition from 100+ professional roles across all company departments. 88 | </p> 89 | <div class="flex space-x-4"> 90 | <a href="#installation" class="bg-white text-purple-700 px-8 py-3 rounded-lg font-bold hover:bg-purple-100 transition"> 91 | Get Started 92 | </a> 93 | <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="border-2 border-white text-white px-8 py-3 rounded-lg font-bold hover:bg-white hover:text-purple-700 transition"> 94 | View on GitHub 95 | </a> 96 | </div> 97 | </div> 98 | <div class="md:w-1/2 flex justify-center"> 99 | <div class="hero-animation"> 100 | <div class="bg-white bg-opacity-20 backdrop-blur-lg rounded-lg p-8 shadow-2xl"> 101 | <div class="text-center mb-4"> 102 | <i class="fas fa-project-diagram text-6xl mb-4"></i> 103 | <h3 class="text-2xl font-bold">AI-Powered Team Builder</h3> 104 | </div> 105 | <div class="space-y-2"> 106 | <div class="bg-white bg-opacity-20 rounded px-4 py-2"> 107 | <i class="fas fa-check-circle mr-2"></i> Analyze Project 108 | </div> 109 | <div class="bg-white bg-opacity-20 rounded px-4 py-2"> 110 | <i class="fas fa-users mr-2"></i> Recommend Roles 111 | </div> 112 | <div class="bg-white bg-opacity-20 rounded px-4 py-2"> 113 | <i class="fas fa-download mr-2"></i> Install Agents 114 | </div> 115 | </div> 116 | </div> 117 | </div> 118 | </div> 119 | </div> 120 | </div> 121 | </section> 122 | 123 | <!-- Stats Section --> 124 | <section class="py-12 bg-white"> 125 | <div class="container mx-auto px-6"> 126 | <div class="grid grid-cols-2 md:grid-cols-4 gap-6 text-center"> 127 | <div class="p-6"> 128 | <div class="text-4xl font-bold text-purple-600">100+</div> 129 | <div class="text-gray-600 mt-2">Professional Roles</div> 130 | </div> 131 | <div class="p-6"> 132 | <div class="text-4xl font-bold text-purple-600">8</div> 133 | <div class="text-gray-600 mt-2">Departments</div> 134 | </div> 135 | <div class="p-6"> 136 | <div class="text-4xl font-bold text-purple-600">2</div> 137 | <div class="text-gray-600 mt-2">Languages</div> 138 | </div> 139 | <div class="p-6"> 140 | <div class="text-4xl font-bold text-purple-600">∞</div> 141 | <div class="text-gray-600 mt-2">Team Combinations</div> 142 | </div> 143 | </div> 144 | </div> 145 | </section> 146 | 147 | <!-- Features Section --> 148 | <section id="features" class="py-20 bg-gray-50"> 149 | <div class="container mx-auto px-6"> 150 | <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 151 | 🌟 Key Features 152 | </h2> 153 | <div class="grid md:grid-cols-3 gap-8"> 154 | <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> 155 | <div class="feature-icon inline-block mb-4"> 156 | <i class="fas fa-search text-5xl text-purple-600"></i> 157 | </div> 158 | <h3 class="text-xl font-bold mb-4">Intelligent Project Analysis</h3> 159 | <p class="text-gray-600"> 160 | Automatically detects project type, frameworks, and complexity to provide smart role recommendations based on your tech stack. 161 | </p> 162 | </div> 163 | <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> 164 | <div class="feature-icon inline-block mb-4"> 165 | <i class="fas fa-users text-5xl text-purple-600"></i> 166 | </div> 167 | <h3 class="text-xl font-bold mb-4">100+ Professional Roles</h3> 168 | <p class="text-gray-600"> 169 | Comprehensive coverage across Technology, Data, Product, Marketing, Operations, Finance, HR, and Executive roles. 170 | </p> 171 | </div> 172 | <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> 173 | <div class="feature-icon inline-block mb-4"> 174 | <i class="fas fa-globe text-5xl text-purple-600"></i> 175 | </div> 176 | <h3 class="text-xl font-bold mb-4">Multi-Language Support</h3> 177 | <p class="text-gray-600"> 178 | Available in English and Korean, supporting global standards and local business contexts. 179 | </p> 180 | </div> 181 | </div> 182 | </div> 183 | </section> 184 | 185 | <!-- Roles Section --> 186 | <section id="roles" class="py-20 bg-white"> 187 | <div class="container mx-auto px-6"> 188 | <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 189 | 📋 Available Roles by Department 190 | </h2> 191 | 192 | <!-- Department Tabs --> 193 | <div class="flex flex-wrap justify-center mb-8 gap-2"> 194 | <button onclick="showDepartment('tech')" class="category-badge bg-purple-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 195 | 🔧 Technology (20) 196 | </button> 197 | <button onclick="showDepartment('data')" class="category-badge bg-blue-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 198 | 📊 Data & Analytics (15) 199 | </button> 200 | <button onclick="showDepartment('product')" class="category-badge bg-pink-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 201 | 🎨 Product & Design (10) 202 | </button> 203 | <button onclick="showDepartment('marketing')" class="category-badge bg-green-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 204 | 📈 Marketing & Sales (10) 205 | </button> 206 | <button onclick="showDepartment('operations')" class="category-badge bg-yellow-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 207 | ⚙️ Operations (15) 208 | </button> 209 | <button onclick="showDepartment('finance')" class="category-badge bg-red-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 210 | 💰 Finance (10) 211 | </button> 212 | <button onclick="showDepartment('hr')" class="category-badge bg-indigo-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 213 | 👥 HR (10) 214 | </button> 215 | <button onclick="showDepartment('executive')" class="category-badge bg-gray-800 text-white px-4 py-2 rounded-full text-sm font-semibold"> 216 | 🏢 Executive (10) 217 | </button> 218 | </div> 219 | 220 | <!-- Department Content --> 221 | <div id="tech" class="tab-content active"> 222 | <div class="grid md:grid-cols-3 gap-6"> 223 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 224 | <h4 class="font-bold text-lg mb-2">Software Engineer</h4> 225 | <p class="text-gray-600 text-sm mb-3">Full-stack development, system design</p> 226 | <div class="flex flex-wrap gap-2"> 227 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> 228 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> 229 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> 230 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> 231 | </div> 232 | </div> 233 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 234 | <h4 class="font-bold text-lg mb-2">Frontend Developer</h4> 235 | <p class="text-gray-600 text-sm mb-3">React, Vue, Angular, UI/UX</p> 236 | <div class="flex flex-wrap gap-2"> 237 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> 238 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> 239 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> 240 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> 241 | </div> 242 | </div> 243 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 244 | <h4 class="font-bold text-lg mb-2">Backend Developer</h4> 245 | <p class="text-gray-600 text-sm mb-3">APIs, databases, server architecture</p> 246 | <div class="flex flex-wrap gap-2"> 247 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> 248 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> 249 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> 250 | <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> 251 | </div> 252 | </div> 253 | <!-- More roles... --> 254 | </div> 255 | <p class="text-center mt-6 text-gray-600"> 256 | + 17 more technology roles including DevOps, Security, Cloud, Mobile, QA, and more! 257 | </p> 258 | </div> 259 | 260 | <div id="data" class="tab-content"> 261 | <div class="grid md:grid-cols-3 gap-6"> 262 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 263 | <h4 class="font-bold text-lg mb-2">Data Scientist</h4> 264 | <p class="text-gray-600 text-sm mb-3">ML modeling, statistical analysis</p> 265 | <div class="flex flex-wrap gap-2"> 266 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> 267 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> 268 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> 269 | </div> 270 | </div> 271 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 272 | <h4 class="font-bold text-lg mb-2">Data Analyst</h4> 273 | <p class="text-gray-600 text-sm mb-3">Business insights, reporting</p> 274 | <div class="flex flex-wrap gap-2"> 275 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> 276 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> 277 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> 278 | </div> 279 | </div> 280 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 281 | <h4 class="font-bold text-lg mb-2">Business Intelligence Analyst</h4> 282 | <p class="text-gray-600 text-sm mb-3">Dashboards, BI tools</p> 283 | <div class="flex flex-wrap gap-2"> 284 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> 285 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> 286 | <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> 287 | </div> 288 | </div> 289 | </div> 290 | <p class="text-center mt-6 text-gray-600"> 291 | + 12 more data & analytics roles including Analytics Engineer, Marketing Analyst, and more! 292 | </p> 293 | </div> 294 | 295 | <div id="product" class="tab-content"> 296 | <div class="grid md:grid-cols-3 gap-6"> 297 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 298 | <h4 class="font-bold text-lg mb-2">Product Manager</h4> 299 | <p class="text-gray-600 text-sm mb-3">Product strategy, roadmap</p> 300 | <div class="flex flex-wrap gap-2"> 301 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> 302 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> 303 | </div> 304 | </div> 305 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 306 | <h4 class="font-bold text-lg mb-2">UX Designer</h4> 307 | <p class="text-gray-600 text-sm mb-3">User research, wireframes</p> 308 | <div class="flex flex-wrap gap-2"> 309 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> 310 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> 311 | </div> 312 | </div> 313 | <div class="role-card bg-gray-50 p-6 rounded-lg"> 314 | <h4 class="font-bold text-lg mb-2">UI Designer</h4> 315 | <p class="text-gray-600 text-sm mb-3">Visual design, prototypes</p> 316 | <div class="flex flex-wrap gap-2"> 317 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> 318 | <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> 319 | </div> 320 | </div> 321 | </div> 322 | <p class="text-center mt-6 text-gray-600"> 323 | + 7 more product & design roles including Product Designer, UX Researcher, and more! 324 | </p> 325 | </div> 326 | 327 | <!-- Other department tabs... --> 328 | </div> 329 | </section> 330 | 331 | <!-- Usage Examples Section --> 332 | <section id="usage" class="py-20 bg-gray-50"> 333 | <div class="container mx-auto px-6"> 334 | <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 335 | 🎯 Usage Examples 336 | </h2> 337 | 338 | <div class="grid md:grid-cols-3 gap-8"> 339 | <!-- Startup Example --> 340 | <div class="bg-white rounded-lg shadow-lg p-8"> 341 | <div class="text-2xl mb-4">🚀</div> 342 | <h3 class="text-xl font-bold mb-4">Startup MVP Development</h3> 343 | <div class="code-block mb-4"> 344 | <pre><code># Analyze project 345 | mcp__pair-role__analyze-project 346 | 347 | # Install startup team 348 | mcp__pair-role__install-agents [ 349 | "product-manager", 350 | "frontend-developer", 351 | "backend-developer", 352 | "growth-marketing-manager" 353 | ]</code></pre> 354 | </div> 355 | <p class="text-gray-600">Perfect for building your minimum viable product with a lean team.</p> 356 | </div> 357 | 358 | <!-- Enterprise Example --> 359 | <div class="bg-white rounded-lg shadow-lg p-8"> 360 | <div class="text-2xl mb-4">🏢</div> 361 | <h3 class="text-xl font-bold mb-4">Enterprise Application</h3> 362 | <div class="code-block mb-4"> 363 | <pre><code># Get enterprise recommendations 364 | mcp__pair-role__recommend-by-keywords [ 365 | "enterprise", "security", 366 | "scalability", "compliance" 367 | ] 368 | 369 | # Install enterprise team 370 | mcp__pair-role__install-agents [ 371 | "solution-architect", 372 | "security-engineer", 373 | "devops-engineer", 374 | "compliance-manager" 375 | ]</code></pre> 376 | </div> 377 | <p class="text-gray-600">Build secure, scalable enterprise solutions with the right expertise.</p> 378 | </div> 379 | 380 | <!-- Data Platform Example --> 381 | <div class="bg-white rounded-lg shadow-lg p-8"> 382 | <div class="text-2xl mb-4">📊</div> 383 | <h3 class="text-xl font-bold mb-4">Data Platform</h3> 384 | <div class="code-block mb-4"> 385 | <pre><code># Search data roles 386 | mcp__pair-role__search-agents \ 387 | "data analytics machine learning" 388 | 389 | # Install data team 390 | mcp__pair-role__install-agents [ 391 | "data-scientist", 392 | "data-engineer", 393 | "machine-learning-engineer", 394 | "analytics-engineer" 395 | ]</code></pre> 396 | </div> 397 | <p class="text-gray-600">Create powerful data platforms with specialized data professionals.</p> 398 | </div> 399 | </div> 400 | </div> 401 | </section> 402 | 403 | <!-- Installation Section --> 404 | <section id="installation" class="py-20 bg-white"> 405 | <div class="container mx-auto px-6"> 406 | <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 407 | ⚡ Quick Installation 408 | </h2> 409 | 410 | <div class="max-w-3xl mx-auto"> 411 | <div class="mb-8"> 412 | <h3 class="text-xl font-bold mb-4">1. Clone and Build</h3> 413 | <div class="code-block"> 414 | <pre><code>git clone https://github.com/hongsw/claude-agents-power-mcp-server.git 415 | cd claude-agents-power-mcp-server 416 | npm install 417 | npm run build</code></pre> 418 | </div> 419 | </div> 420 | 421 | <div class="mb-8"> 422 | <h3 class="text-xl font-bold mb-4">2. Configure MCP</h3> 423 | <p class="text-gray-600 mb-4">Add to your <code class="bg-gray-200 px-2 py-1 rounded">~/.config/claude/mcp_servers.json</code>:</p> 424 | <div class="code-block"> 425 | <pre><code>{ 426 | "mcpServers": { 427 | "pair-role": { 428 | "command": "node", 429 | "args": ["/path/to/claude-agents-power-mcp-server/dist/index.js"], 430 | "cwd": "/path/to/your/project", 431 | "env": {} 432 | } 433 | } 434 | }</code></pre> 435 | </div> 436 | </div> 437 | 438 | <div> 439 | <h3 class="text-xl font-bold mb-4">3. Start Using</h3> 440 | <p class="text-gray-600 mb-4">Restart Claude Code and start building your perfect team!</p> 441 | <div class="code-block"> 442 | <pre><code># Analyze your project 443 | mcp__pair-role__analyze-project 444 | 445 | # Get recommendations 446 | mcp__pair-role__recommend-by-keywords ["your", "tech", "stack"] 447 | 448 | # Install agents 449 | mcp__pair-role__install-agents ["selected", "roles"]</code></pre> 450 | </div> 451 | </div> 452 | </div> 453 | </div> 454 | </section> 455 | 456 | <!-- CTA Section --> 457 | <section class="gradient-bg text-white py-20"> 458 | <div class="container mx-auto px-6 text-center"> 459 | <h2 class="text-3xl font-bold mb-6"> 460 | Ready to Build Your Perfect Team? 461 | </h2> 462 | <p class="text-xl mb-8 text-purple-100"> 463 | Start using Pair-Role MCP Server today and revolutionize how you build development teams. 464 | </p> 465 | <div class="flex justify-center space-x-4"> 466 | <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="bg-white text-purple-700 px-8 py-3 rounded-lg font-bold hover:bg-purple-100 transition"> 467 | <i class="fab fa-github mr-2"></i> View on GitHub 468 | </a> 469 | <a href="https://github.com/hongsw/claude-agents-power-mcp-server/issues" class="border-2 border-white text-white px-8 py-3 rounded-lg font-bold hover:bg-white hover:text-purple-700 transition"> 470 | <i class="fas fa-comment mr-2"></i> Get Support 471 | </a> 472 | </div> 473 | </div> 474 | </section> 475 | 476 | <!-- Footer --> 477 | <footer class="bg-gray-800 text-white py-8"> 478 | <div class="container mx-auto px-6 text-center"> 479 | <p class="mb-4"> 480 | Made with ❤️ for the Claude Code community 481 | </p> 482 | <div class="flex justify-center space-x-6"> 483 | <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="hover:text-purple-400 transition"> 484 | <i class="fab fa-github text-2xl"></i> 485 | </a> 486 | <a href="https://miri.dev" class="hover:text-purple-400 transition"> 487 | <i class="fas fa-globe text-2xl"></i> 488 | </a> 489 | <a href="https://discord.gg/claudecode" class="hover:text-purple-400 transition"> 490 | <i class="fab fa-discord text-2xl"></i> 491 | </a> 492 | </div> 493 | <p class="mt-4 text-gray-400"> 494 | © 2024 Pair-Role MCP Server. MIT License. 495 | </p> 496 | </div> 497 | </footer> 498 | 499 | <script> 500 | function showDepartment(dept) { 501 | // Hide all tabs 502 | const tabs = document.querySelectorAll('.tab-content'); 503 | tabs.forEach(tab => tab.classList.remove('active')); 504 | 505 | // Show selected tab 506 | document.getElementById(dept).classList.add('active'); 507 | 508 | // Update button styles 509 | const buttons = document.querySelectorAll('.category-badge'); 510 | buttons.forEach(button => { 511 | button.style.opacity = '0.7'; 512 | }); 513 | event.target.style.opacity = '1'; 514 | } 515 | 516 | // Smooth scrolling for navigation links 517 | document.querySelectorAll('a[href^="#"]').forEach(anchor => { 518 | anchor.addEventListener('click', function (e) { 519 | e.preventDefault(); 520 | document.querySelector(this.getAttribute('href')).scrollIntoView({ 521 | behavior: 'smooth' 522 | }); 523 | }); 524 | }); 525 | </script> 526 | </body> 527 | </html> ``` -------------------------------------------------------------------------------- /src/aiAnalysisService.ts: -------------------------------------------------------------------------------- ```typescript 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import { glob } from 'glob'; 4 | 5 | export interface AIProjectAnalysis { 6 | projectType: string; 7 | technologies: string[]; 8 | frameworks: string[]; 9 | complexity: number; 10 | phase: string; 11 | teamSize: number; 12 | description?: string; 13 | goals?: string[]; 14 | requirements?: string[]; 15 | architecturalPatterns?: string[]; 16 | developmentPractices?: string[]; 17 | qualityIndicators?: { 18 | hasTests: boolean; 19 | hasDocumentation: boolean; 20 | hasCI: boolean; 21 | hasLinting: boolean; 22 | codeComplexity: 'low' | 'medium' | 'high'; 23 | }; 24 | } 25 | 26 | export interface AIAgentRecommendation { 27 | name: string; 28 | description: string; 29 | relevanceScore: number; 30 | reasoning: string; 31 | tools: string[]; 32 | category: string; 33 | priority: 'essential' | 'recommended' | 'optional'; 34 | color?: string; // HEX color code for agent visualization 35 | specificTasks?: string[]; 36 | integrationPoints?: string[]; 37 | } 38 | 39 | /** 40 | * AI-Powered Project Analysis Service 41 | * Uses intelligent analysis instead of static rules to understand projects 42 | */ 43 | export class AIAnalysisService { 44 | 45 | /** 46 | * Perform comprehensive AI analysis of a project 47 | */ 48 | async analyzeProject(claudeMdPath: string, projectRoot?: string): Promise<AIProjectAnalysis> { 49 | const projectPath = projectRoot || path.dirname(claudeMdPath); 50 | 51 | // Gather comprehensive project context 52 | const context = await this.gatherProjectContext(claudeMdPath, projectPath); 53 | 54 | // Perform AI analysis 55 | const analysis = await this.performAIAnalysis(context); 56 | 57 | return analysis; 58 | } 59 | 60 | /** 61 | * Generate agent recommendations based on AI analysis 62 | */ 63 | async generateRecommendations(analysis: AIProjectAnalysis): Promise<AIAgentRecommendation[]> { 64 | // Use AI to generate intelligent recommendations 65 | return this.performAIRecommendation(analysis); 66 | } 67 | 68 | /** 69 | * Gather comprehensive project context for AI analysis 70 | */ 71 | private async gatherProjectContext(claudeMdPath: string, projectPath: string): Promise<{ 72 | claudeMdContent?: string; 73 | fileStructure: string[]; 74 | packageInfo?: any; 75 | configFiles: string[]; 76 | codeMetrics: { 77 | totalFiles: number; 78 | codeFiles: number; 79 | testFiles: number; 80 | docFiles: number; 81 | languages: string[]; 82 | }; 83 | dependencies?: any; 84 | gitInfo?: { 85 | hasGit: boolean; 86 | recentCommits?: string[]; 87 | branches?: string[]; 88 | }; 89 | }> { 90 | const context: any = { 91 | fileStructure: [], 92 | configFiles: [], 93 | codeMetrics: { 94 | totalFiles: 0, 95 | codeFiles: 0, 96 | testFiles: 0, 97 | docFiles: 0, 98 | languages: [] 99 | } 100 | }; 101 | 102 | // Read CLAUDE.md if exists 103 | try { 104 | if (fs.existsSync(claudeMdPath)) { 105 | context.claudeMdContent = fs.readFileSync(claudeMdPath, 'utf8'); 106 | } 107 | } catch (error) { 108 | // Continue without CLAUDE.md 109 | } 110 | 111 | try { 112 | // Get file structure (limited depth to avoid performance issues) 113 | const files = await glob('**/*', { 114 | cwd: projectPath, 115 | ignore: ['node_modules/**', 'dist/**', 'build/**', '.git/**', 'venv/**', '__pycache__/**'], 116 | nodir: true, 117 | maxDepth: 4 118 | }); 119 | 120 | context.fileStructure = files.slice(0, 100); // Limit for performance 121 | context.codeMetrics.totalFiles = files.length; 122 | 123 | // Analyze file types 124 | const codeExtensions = ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.go', '.rs', '.php', '.rb', '.cs', '.cpp', '.c', '.h']; 125 | const testExtensions = ['.test.', '.spec.', '_test.', '_spec.']; 126 | const docExtensions = ['.md', '.rst', '.txt', '.doc']; 127 | 128 | files.forEach(file => { 129 | const ext = path.extname(file); 130 | const basename = path.basename(file); 131 | 132 | if (codeExtensions.includes(ext)) { 133 | context.codeMetrics.codeFiles++; 134 | const lang = this.getLanguageFromExtension(ext); 135 | if (lang && !context.codeMetrics.languages.includes(lang)) { 136 | context.codeMetrics.languages.push(lang); 137 | } 138 | } 139 | 140 | if (testExtensions.some(testExt => basename.includes(testExt))) { 141 | context.codeMetrics.testFiles++; 142 | } 143 | 144 | if (docExtensions.includes(ext)) { 145 | context.codeMetrics.docFiles++; 146 | } 147 | }); 148 | 149 | // Identify config files 150 | const configPatterns = [ 151 | 'package.json', 'package-lock.json', 'yarn.lock', 152 | 'requirements.txt', 'pyproject.toml', 'setup.py', 153 | 'Cargo.toml', 'go.mod', 'pom.xml', 'build.gradle', 154 | 'Dockerfile', 'docker-compose.yml', 155 | '.gitignore', '.eslintrc*', '.prettierrc*', 156 | 'tsconfig.json', 'webpack.config.js', 'vite.config.*', 157 | 'tailwind.config.js', 'next.config.js', 'nuxt.config.js' 158 | ]; 159 | 160 | context.configFiles = files.filter(file => 161 | configPatterns.some(pattern => 162 | pattern.includes('*') ? 163 | file.includes(pattern.replace('*', '')) : 164 | path.basename(file) === pattern 165 | ) 166 | ); 167 | 168 | // Read package.json for detailed dependency analysis 169 | const packageJsonPath = path.join(projectPath, 'package.json'); 170 | if (fs.existsSync(packageJsonPath)) { 171 | try { 172 | context.packageInfo = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); 173 | context.dependencies = { 174 | ...context.packageInfo.dependencies, 175 | ...context.packageInfo.devDependencies 176 | }; 177 | } catch (e) { 178 | // Continue without package.json parsing 179 | } 180 | } 181 | 182 | // Check for git repository 183 | const gitPath = path.join(projectPath, '.git'); 184 | context.gitInfo = { 185 | hasGit: fs.existsSync(gitPath) 186 | }; 187 | 188 | } catch (error) { 189 | console.warn('Error gathering project context:', error); 190 | } 191 | 192 | return context; 193 | } 194 | 195 | /** 196 | * Perform AI-powered analysis of the project context 197 | */ 198 | private async performAIAnalysis(context: any): Promise<AIProjectAnalysis> { 199 | // This is where we would integrate with Claude API or use AI reasoning 200 | // For now, implementing intelligent rule-based analysis that mimics AI decision making 201 | 202 | const analysis: AIProjectAnalysis = { 203 | projectType: 'unknown', 204 | technologies: [], 205 | frameworks: [], 206 | complexity: 5, 207 | phase: 'development', 208 | teamSize: 5, 209 | description: '', 210 | goals: [], 211 | requirements: [], 212 | architecturalPatterns: [], 213 | developmentPractices: [], 214 | qualityIndicators: { 215 | hasTests: context.codeMetrics.testFiles > 0, 216 | hasDocumentation: context.codeMetrics.docFiles > 5, 217 | hasCI: context.configFiles.some((file: string) => file.includes('.github/workflows') || file.includes('.gitlab-ci')), 218 | hasLinting: context.configFiles.some((file: string) => file.includes('eslint') || file.includes('prettier')), 219 | codeComplexity: context.codeMetrics.totalFiles > 100 ? 'high' : context.codeMetrics.totalFiles > 30 ? 'medium' : 'low' 220 | } 221 | }; 222 | 223 | // Extract information from CLAUDE.md with intelligent parsing 224 | if (context.claudeMdContent) { 225 | analysis.description = this.extractProjectDescription(context.claudeMdContent); 226 | analysis.goals = this.extractProjectGoals(context.claudeMdContent); 227 | analysis.requirements = this.extractProjectRequirements(context.claudeMdContent); 228 | } 229 | 230 | // Intelligent project type detection 231 | analysis.projectType = this.determineProjectType(context); 232 | 233 | // Technology and framework detection with context awareness 234 | analysis.technologies = this.detectTechnologies(context); 235 | analysis.frameworks = this.detectFrameworks(context); 236 | 237 | // Complexity assessment using multiple factors 238 | analysis.complexity = this.calculateComplexity(context, analysis); 239 | 240 | // Development phase detection 241 | analysis.phase = this.determineDevelopmentPhase(context, analysis); 242 | 243 | // Optimal team size recommendation 244 | analysis.teamSize = this.recommendTeamSize(analysis); 245 | 246 | // Architectural patterns detection 247 | analysis.architecturalPatterns = this.detectArchitecturalPatterns(context); 248 | 249 | // Development practices assessment 250 | analysis.developmentPractices = this.assessDevelopmentPractices(context); 251 | 252 | return analysis; 253 | } 254 | 255 | /** 256 | * Generate intelligent agent recommendations based on analysis 257 | */ 258 | private async performAIRecommendation(analysis: AIProjectAnalysis): Promise<AIAgentRecommendation[]> { 259 | const recommendations: AIAgentRecommendation[] = []; 260 | 261 | // Intelligent recommendation rules based on comprehensive analysis 262 | const recommendationRules = this.createIntelligentRecommendationRules(); 263 | 264 | for (const rule of recommendationRules) { 265 | const relevance = rule.evaluate(analysis); 266 | if (relevance.isRelevant) { 267 | recommendations.push({ 268 | name: rule.agentName, 269 | description: rule.description, 270 | relevanceScore: relevance.score, 271 | reasoning: relevance.reasoning, 272 | tools: rule.tools, 273 | category: rule.category, 274 | priority: relevance.priority, 275 | color: this.getAgentColor(rule.agentName, rule.category), 276 | specificTasks: relevance.specificTasks, 277 | integrationPoints: relevance.integrationPoints 278 | }); 279 | } 280 | } 281 | 282 | // Sort by relevance score and apply intelligent filtering 283 | return recommendations 284 | .sort((a, b) => b.relevanceScore - a.relevanceScore) 285 | .slice(0, analysis.teamSize + 2); // Recommend slightly more than team size 286 | } 287 | 288 | /** 289 | * Create intelligent recommendation rules 290 | */ 291 | private createIntelligentRecommendationRules() { 292 | return [ 293 | // Frontend Development Rules 294 | { 295 | agentName: 'frontend-developer', 296 | description: 'UI/UX implementation specialist with modern web technologies expertise', 297 | category: 'development', 298 | tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash'], 299 | evaluate: (analysis: AIProjectAnalysis) => { 300 | const hasFrontend = analysis.frameworks.some(f => ['React', 'Vue', 'Angular', 'Svelte'].includes(f)) || 301 | analysis.technologies.includes('JavaScript') || 302 | analysis.projectType.includes('web'); 303 | 304 | if (!hasFrontend) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 305 | 306 | let score = 90; 307 | let reasoning = 'Essential for frontend development with '; 308 | const tasks = ['Implement user interfaces', 'Optimize performance', 'Ensure accessibility']; 309 | const integrationPoints = ['Backend APIs', 'Design system', 'Testing framework']; 310 | 311 | if (analysis.frameworks.length > 0) { 312 | score += 5; 313 | reasoning += analysis.frameworks.join(', '); 314 | } else { 315 | reasoning += 'modern web technologies'; 316 | } 317 | 318 | if (analysis.qualityIndicators?.hasTests) { 319 | tasks.push('Write frontend tests'); 320 | score += 3; 321 | } 322 | 323 | return { 324 | isRelevant: true, 325 | score, 326 | reasoning, 327 | priority: 'essential' as const, 328 | specificTasks: tasks, 329 | integrationPoints 330 | }; 331 | } 332 | }, 333 | 334 | // Backend Development Rules 335 | { 336 | agentName: 'backend-engineer', 337 | description: 'Server-side development and API specialist', 338 | category: 'development', 339 | tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash'], 340 | evaluate: (analysis: AIProjectAnalysis) => { 341 | const hasBackend = analysis.technologies.includes('Node.js') || 342 | analysis.technologies.includes('Python') || 343 | analysis.technologies.includes('Java') || 344 | analysis.projectType.includes('api') || 345 | analysis.projectType.includes('server'); 346 | 347 | if (!hasBackend) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 348 | 349 | let score = 95; 350 | let reasoning = 'Critical for backend development and API design'; 351 | const tasks = ['Design APIs', 'Implement business logic', 'Database integration']; 352 | const integrationPoints = ['Frontend applications', 'Database systems', 'External services']; 353 | 354 | if (analysis.complexity > 7) { 355 | score += 3; 356 | tasks.push('Optimize performance'); 357 | reasoning += ' with complex system requirements'; 358 | } 359 | 360 | if (analysis.qualityIndicators?.hasTests) { 361 | tasks.push('API testing and validation'); 362 | } 363 | 364 | return { 365 | isRelevant: true, 366 | score, 367 | reasoning, 368 | priority: 'essential' as const, 369 | specificTasks: tasks, 370 | integrationPoints 371 | }; 372 | } 373 | }, 374 | 375 | // Full-Stack Development Rules 376 | { 377 | agentName: 'full-stack-developer', 378 | description: 'End-to-end development specialist', 379 | category: 'development', 380 | tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash', 'WebSearch'], 381 | evaluate: (analysis: AIProjectAnalysis) => { 382 | const hasBothEnds = analysis.frameworks.length > 0 && 383 | (analysis.technologies.includes('Node.js') || analysis.technologies.includes('Python')); 384 | 385 | if (!hasBothEnds) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 386 | 387 | let score = 88; 388 | const reasoning = 'Perfect for full-stack applications requiring end-to-end integration'; 389 | const tasks = ['Coordinate frontend-backend integration', 'Implement full features', 'System architecture']; 390 | const integrationPoints = ['Frontend frameworks', 'Backend services', 'Database layer']; 391 | 392 | if (analysis.teamSize <= 3) { 393 | score += 7; // More valuable for smaller teams 394 | } 395 | 396 | return { 397 | isRelevant: true, 398 | score, 399 | reasoning, 400 | priority: 'essential' as const, 401 | specificTasks: tasks, 402 | integrationPoints 403 | }; 404 | } 405 | }, 406 | 407 | // DevOps and Infrastructure Rules 408 | { 409 | agentName: 'devops-engineer', 410 | description: 'Infrastructure and deployment specialist', 411 | category: 'infrastructure', 412 | tools: ['Read', 'Write', 'Bash', 'Edit'], 413 | evaluate: (analysis: AIProjectAnalysis) => { 414 | const needsDevOps = analysis.complexity > 6 || 415 | analysis.technologies.includes('Docker') || 416 | analysis.qualityIndicators?.hasCI || 417 | analysis.phase === 'deployment'; 418 | 419 | if (!needsDevOps) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 420 | 421 | let score = 82; 422 | let reasoning = 'Required for deployment and infrastructure management'; 423 | const tasks = ['Setup CI/CD pipelines', 'Configure deployment', 'Monitor systems']; 424 | const integrationPoints = ['Development workflow', 'Production environment', 'Monitoring tools']; 425 | 426 | if (analysis.technologies.includes('Docker')) { 427 | score += 8; 428 | reasoning += ' with containerization expertise'; 429 | } 430 | 431 | if (analysis.complexity > 8) { 432 | score += 5; 433 | tasks.push('Scale infrastructure'); 434 | } 435 | 436 | return { 437 | isRelevant: true, 438 | score, 439 | reasoning, 440 | priority: analysis.phase === 'deployment' ? 'essential' as const : 'recommended' as const, 441 | specificTasks: tasks, 442 | integrationPoints 443 | }; 444 | } 445 | }, 446 | 447 | // Quality Assurance Rules 448 | { 449 | agentName: 'qa-engineer', 450 | description: 'Quality assurance and testing specialist', 451 | category: 'quality', 452 | tools: ['Read', 'Write', 'Bash'], 453 | evaluate: (analysis: AIProjectAnalysis) => { 454 | const needsQA = analysis.complexity > 5 || 455 | analysis.projectType.includes('web') || 456 | !analysis.qualityIndicators?.hasTests; 457 | 458 | if (!needsQA) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 459 | 460 | let score = 75; 461 | let reasoning = 'Important for quality assurance and testing strategy'; 462 | const tasks = ['Design test strategies', 'Implement automated testing', 'Quality validation']; 463 | const integrationPoints = ['Development workflow', 'CI/CD pipeline', 'User acceptance']; 464 | 465 | if (!analysis.qualityIndicators?.hasTests) { 466 | score += 10; 467 | reasoning += ' - no existing tests detected'; 468 | tasks.unshift('Establish testing framework'); 469 | } 470 | 471 | if (analysis.complexity > 8) { 472 | score += 5; 473 | tasks.push('Performance testing'); 474 | } 475 | 476 | return { 477 | isRelevant: true, 478 | score, 479 | reasoning, 480 | priority: 'recommended' as const, 481 | specificTasks: tasks, 482 | integrationPoints 483 | }; 484 | } 485 | }, 486 | 487 | // Security Engineering Rules 488 | { 489 | agentName: 'security-engineer', 490 | description: 'Security and compliance specialist', 491 | category: 'security', 492 | tools: ['Read', 'Bash', 'Edit'], 493 | evaluate: (analysis: AIProjectAnalysis) => { 494 | const needsSecurity = analysis.projectType.includes('web') || 495 | analysis.complexity > 7 || 496 | analysis.technologies.some(t => ['authentication', 'payment', 'data'].some(s => t.toLowerCase().includes(s))); 497 | 498 | if (!needsSecurity) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 499 | 500 | let score = 78; 501 | let reasoning = 'Critical for security and compliance requirements'; 502 | const tasks = ['Security audits', 'Implement security measures', 'Compliance validation']; 503 | const integrationPoints = ['Authentication systems', 'Data protection', 'API security']; 504 | 505 | if (analysis.projectType.includes('web')) { 506 | score += 7; 507 | tasks.push('Web application security'); 508 | } 509 | 510 | if (analysis.complexity > 8) { 511 | score += 5; 512 | reasoning += ' for complex systems'; 513 | } 514 | 515 | return { 516 | isRelevant: true, 517 | score, 518 | reasoning, 519 | priority: 'recommended' as const, 520 | specificTasks: tasks, 521 | integrationPoints 522 | }; 523 | } 524 | }, 525 | 526 | // Technical Leadership Rules 527 | { 528 | agentName: 'tech-lead', 529 | description: 'Technical leadership and architecture specialist', 530 | category: 'management', 531 | tools: ['Read', 'Write'], 532 | evaluate: (analysis: AIProjectAnalysis) => { 533 | const needsLeadership = analysis.complexity > 7 || 534 | analysis.technologies.length > 4 || 535 | analysis.teamSize > 5; 536 | 537 | if (!needsLeadership) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 538 | 539 | let score = 83; 540 | const reasoning = 'Essential for technical leadership and coordination in complex projects'; 541 | const tasks = ['Technical decision making', 'Team coordination', 'Architecture oversight']; 542 | const integrationPoints = ['Development team', 'Project stakeholders', 'Architecture decisions']; 543 | 544 | if (analysis.teamSize > 7) { 545 | score += 5; 546 | } 547 | 548 | return { 549 | isRelevant: true, 550 | score, 551 | reasoning, 552 | priority: 'recommended' as const, 553 | specificTasks: tasks, 554 | integrationPoints 555 | }; 556 | } 557 | }, 558 | 559 | // Documentation Specialist Rules 560 | { 561 | agentName: 'technical-writer', 562 | description: 'Documentation and content specialist', 563 | category: 'documentation', 564 | tools: ['Read', 'Write', 'Edit'], 565 | evaluate: (analysis: AIProjectAnalysis) => { 566 | const needsDocs = analysis.complexity > 6 || 567 | !analysis.qualityIndicators?.hasDocumentation || 568 | analysis.projectType.includes('api'); 569 | 570 | if (!needsDocs) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; 571 | 572 | let score = 65; 573 | let reasoning = 'Important for documentation and user guides'; 574 | const tasks = ['Create technical documentation', 'API documentation', 'User guides']; 575 | const integrationPoints = ['Development workflow', 'User experience', 'Knowledge management']; 576 | 577 | if (!analysis.qualityIndicators?.hasDocumentation) { 578 | score += 8; 579 | reasoning += ' - insufficient documentation detected'; 580 | } 581 | 582 | if (analysis.projectType.includes('api')) { 583 | score += 7; 584 | tasks.push('API documentation'); 585 | } 586 | 587 | return { 588 | isRelevant: true, 589 | score, 590 | reasoning, 591 | priority: 'optional' as const, 592 | specificTasks: tasks, 593 | integrationPoints 594 | }; 595 | } 596 | } 597 | ]; 598 | } 599 | 600 | // Helper methods for analysis 601 | 602 | private getLanguageFromExtension(ext: string): string | null { 603 | const langMap: Record<string, string> = { 604 | '.js': 'JavaScript', 605 | '.ts': 'TypeScript', 606 | '.jsx': 'React', 607 | '.tsx': 'React TypeScript', 608 | '.py': 'Python', 609 | '.java': 'Java', 610 | '.go': 'Go', 611 | '.rs': 'Rust', 612 | '.php': 'PHP', 613 | '.rb': 'Ruby', 614 | '.cs': 'C#', 615 | '.cpp': 'C++', 616 | '.c': 'C' 617 | }; 618 | return langMap[ext] || null; 619 | } 620 | 621 | private extractProjectDescription(content: string): string { 622 | // Extract description from CLAUDE.md 623 | const lines = content.split('\n'); 624 | for (let i = 0; i < lines.length; i++) { 625 | const line = lines[i].trim(); 626 | if (line.startsWith('# ') && line.length > 2) { 627 | return line.substring(2).trim(); 628 | } 629 | } 630 | return 'Project description not available'; 631 | } 632 | 633 | private extractProjectGoals(content: string): string[] { 634 | const goals: string[] = []; 635 | const lines = content.split('\n'); 636 | let inGoalsSection = false; 637 | 638 | for (const line of lines) { 639 | const trimmed = line.trim(); 640 | if (trimmed.toLowerCase().includes('goal') || trimmed.toLowerCase().includes('objective')) { 641 | inGoalsSection = true; 642 | continue; 643 | } 644 | if (inGoalsSection && trimmed.startsWith('- ')) { 645 | goals.push(trimmed.substring(2)); 646 | } else if (inGoalsSection && trimmed.startsWith('#')) { 647 | break; 648 | } 649 | } 650 | 651 | return goals; 652 | } 653 | 654 | private extractProjectRequirements(content: string): string[] { 655 | const requirements: string[] = []; 656 | const lines = content.split('\n'); 657 | let inReqSection = false; 658 | 659 | for (const line of lines) { 660 | const trimmed = line.trim(); 661 | if (trimmed.toLowerCase().includes('requirement') || trimmed.toLowerCase().includes('need')) { 662 | inReqSection = true; 663 | continue; 664 | } 665 | if (inReqSection && trimmed.startsWith('- ')) { 666 | requirements.push(trimmed.substring(2)); 667 | } else if (inReqSection && trimmed.startsWith('#')) { 668 | break; 669 | } 670 | } 671 | 672 | return requirements; 673 | } 674 | 675 | private determineProjectType(context: any): string { 676 | const files = context.fileStructure; 677 | const deps = context.dependencies || {}; 678 | 679 | // Web application detection 680 | if (files.some((f: string) => f.includes('index.html')) || 681 | Object.keys(deps).some(dep => ['react', 'vue', 'angular'].includes(dep))) { 682 | return 'web-application'; 683 | } 684 | 685 | // API detection 686 | if (files.some((f: string) => f.includes('api/') || f.includes('server.')) || 687 | Object.keys(deps).some(dep => ['express', 'fastapi', 'nest'].includes(dep))) { 688 | return 'api-service'; 689 | } 690 | 691 | // Mobile app detection 692 | if (files.some((f: string) => f.includes('pubspec.yaml') || f.includes('Info.plist')) || 693 | Object.keys(deps).some(dep => ['react-native', 'ionic', 'flutter'].includes(dep))) { 694 | return 'mobile-application'; 695 | } 696 | 697 | // CLI tool detection 698 | if (files.some((f: string) => f.includes('bin/') || f.includes('cli.')) || 699 | context.packageInfo?.bin) { 700 | return 'cli-tool'; 701 | } 702 | 703 | // Library detection 704 | if (context.packageInfo?.main && !context.packageInfo?.private) { 705 | return 'library'; 706 | } 707 | 708 | return 'application'; 709 | } 710 | 711 | private detectTechnologies(context: any): string[] { 712 | const technologies = new Set<string>(); 713 | const deps = context.dependencies || {}; 714 | const languages = context.codeMetrics.languages || []; 715 | 716 | // Add detected languages 717 | languages.forEach((lang: string) => technologies.add(lang)); 718 | 719 | // Database technologies 720 | if (Object.keys(deps).some(dep => dep.includes('postgres'))) technologies.add('PostgreSQL'); 721 | if (Object.keys(deps).some(dep => dep.includes('mongo'))) technologies.add('MongoDB'); 722 | if (Object.keys(deps).some(dep => dep.includes('redis'))) technologies.add('Redis'); 723 | if (Object.keys(deps).some(dep => dep.includes('mysql'))) technologies.add('MySQL'); 724 | 725 | // Cloud and infrastructure 726 | if (Object.keys(deps).some(dep => dep.includes('aws'))) technologies.add('AWS'); 727 | if (context.fileStructure.some((f: string) => f.includes('Dockerfile'))) technologies.add('Docker'); 728 | if (context.fileStructure.some((f: string) => f.includes('kubernetes'))) technologies.add('Kubernetes'); 729 | 730 | // Build tools and bundlers 731 | if (Object.keys(deps).some(dep => ['webpack', 'vite', 'rollup', 'parcel'].includes(dep))) { 732 | technologies.add('Build Tools'); 733 | } 734 | 735 | return Array.from(technologies); 736 | } 737 | 738 | private detectFrameworks(context: any): string[] { 739 | const frameworks = new Set<string>(); 740 | const deps = context.dependencies || {}; 741 | 742 | // Frontend frameworks 743 | if (Object.keys(deps).some(dep => dep.includes('react'))) frameworks.add('React'); 744 | if (Object.keys(deps).some(dep => dep.includes('vue'))) frameworks.add('Vue'); 745 | if (Object.keys(deps).some(dep => dep.includes('angular'))) frameworks.add('Angular'); 746 | if (Object.keys(deps).some(dep => dep.includes('svelte'))) frameworks.add('Svelte'); 747 | if (Object.keys(deps).some(dep => dep.includes('next'))) frameworks.add('Next.js'); 748 | if (Object.keys(deps).some(dep => dep.includes('nuxt'))) frameworks.add('Nuxt.js'); 749 | 750 | // Backend frameworks 751 | if (Object.keys(deps).some(dep => dep.includes('express'))) frameworks.add('Express'); 752 | if (Object.keys(deps).some(dep => dep.includes('nest'))) frameworks.add('NestJS'); 753 | if (Object.keys(deps).some(dep => dep.includes('koa'))) frameworks.add('Koa'); 754 | 755 | // Testing frameworks 756 | if (Object.keys(deps).some(dep => ['jest', 'mocha', 'chai', 'cypress'].includes(dep))) { 757 | frameworks.add('Testing Framework'); 758 | } 759 | 760 | return Array.from(frameworks); 761 | } 762 | 763 | private calculateComplexity(context: any, analysis: AIProjectAnalysis): number { 764 | let complexity = 5; // Base complexity 765 | 766 | // File count impact 767 | if (context.codeMetrics.totalFiles > 100) complexity += 2; 768 | if (context.codeMetrics.totalFiles > 50) complexity += 1; 769 | 770 | // Technology diversity 771 | complexity += Math.min(analysis.technologies.length * 0.5, 2); 772 | 773 | // Framework complexity 774 | if (analysis.frameworks.length > 2) complexity += 1; 775 | 776 | // Language diversity 777 | if (context.codeMetrics.languages.length > 2) complexity += 1; 778 | 779 | // Architecture indicators 780 | if (context.fileStructure.some((f: string) => f.includes('microservice'))) complexity += 2; 781 | if (context.fileStructure.some((f: string) => f.includes('api/') && f.includes('v1/'))) complexity += 1; 782 | 783 | // Quality indicators (well-structured projects are more complex to maintain) 784 | if (analysis.qualityIndicators?.hasTests) complexity += 0.5; 785 | if (analysis.qualityIndicators?.hasCI) complexity += 0.5; 786 | if (analysis.qualityIndicators?.hasLinting) complexity += 0.5; 787 | 788 | return Math.min(Math.round(complexity * 10) / 10, 10); 789 | } 790 | 791 | private determineDevelopmentPhase(context: any, analysis: AIProjectAnalysis): string { 792 | // Phase detection based on project indicators 793 | if (context.codeMetrics.totalFiles < 10) return 'planning'; 794 | if (!analysis.qualityIndicators?.hasTests && context.codeMetrics.codeFiles > 0) return 'development'; 795 | if (analysis.qualityIndicators?.hasTests && analysis.qualityIndicators?.hasCI) return 'testing'; 796 | if (context.fileStructure.some((f: string) => f.includes('docker') || f.includes('deploy'))) return 'deployment'; 797 | if (analysis.qualityIndicators?.hasDocumentation && analysis.qualityIndicators?.hasCI) return 'maintenance'; 798 | 799 | return 'development'; 800 | } 801 | 802 | private recommendTeamSize(analysis: AIProjectAnalysis): number { 803 | let teamSize = 3; // Base team size 804 | 805 | // Complexity impact 806 | if (analysis.complexity > 8) teamSize += 3; 807 | else if (analysis.complexity > 6) teamSize += 2; 808 | else if (analysis.complexity > 4) teamSize += 1; 809 | 810 | // Technology diversity impact 811 | if (analysis.technologies.length > 5) teamSize += 2; 812 | else if (analysis.technologies.length > 3) teamSize += 1; 813 | 814 | // Project type impact 815 | if (analysis.projectType.includes('enterprise')) teamSize += 2; 816 | if (analysis.projectType.includes('microservice')) teamSize += 1; 817 | 818 | return Math.min(teamSize, 12); // Cap at 12 for practical reasons 819 | } 820 | 821 | private detectArchitecturalPatterns(context: any): string[] { 822 | const patterns: string[] = []; 823 | const files = context.fileStructure; 824 | 825 | if (files.some((f: string) => f.includes('component') && f.includes('service'))) { 826 | patterns.push('Component-Service Architecture'); 827 | } 828 | if (files.some((f: string) => f.includes('api/v'))) { 829 | patterns.push('Versioned API'); 830 | } 831 | if (files.some((f: string) => f.includes('middleware'))) { 832 | patterns.push('Middleware Pattern'); 833 | } 834 | if (files.some((f: string) => f.includes('repository') || f.includes('dao'))) { 835 | patterns.push('Repository Pattern'); 836 | } 837 | if (files.some((f: string) => f.includes('model') && f.includes('view') && f.includes('controller'))) { 838 | patterns.push('MVC Architecture'); 839 | } 840 | 841 | return patterns; 842 | } 843 | 844 | private assessDevelopmentPractices(context: any): string[] { 845 | const practices: string[] = []; 846 | 847 | if (context.qualityIndicators?.hasTests) practices.push('Automated Testing'); 848 | if (context.qualityIndicators?.hasCI) practices.push('Continuous Integration'); 849 | if (context.qualityIndicators?.hasLinting) practices.push('Code Quality Tools'); 850 | if (context.qualityIndicators?.hasDocumentation) practices.push('Documentation'); 851 | if (context.gitInfo?.hasGit) practices.push('Version Control'); 852 | if (context.fileStructure.some((f: string) => f.includes('docker'))) practices.push('Containerization'); 853 | 854 | return practices; 855 | } 856 | 857 | /** 858 | * Get color code for agent based on name and category 859 | */ 860 | private getAgentColor(agentName: string, category: string): string { 861 | // Color palette based on agent types and categories 862 | const colorMap: Record<string, string> = { 863 | // Core Development (Blue shades) 864 | 'frontend-developer': '#3B82F6', 865 | 'backend-engineer': '#1E40AF', 866 | 'full-stack-developer': '#2563EB', 867 | 'mobile-developer': '#60A5FA', 868 | 869 | // Architecture & Design (Purple shades) 870 | 'system-architect': '#8B5CF6', 871 | 'solution-architect': '#7C3AED', 872 | 'technical-architect': '#9333EA', 873 | 'api-designer': '#A78BFA', 874 | 875 | // Data & AI (Green shades) 876 | 'data-scientist': '#10B981', 877 | 'ml-engineer': '#059669', 878 | 'data-engineer': '#34D399', 879 | 'ai-specialist': '#6EE7B7', 880 | 881 | // Security (Red shades) 882 | 'security-engineer': '#EF4444', 883 | 'security-architect': '#DC2626', 884 | 'compliance-auditor': '#F87171', 885 | 'vulnerability-scanner': '#FCA5A5', 886 | 887 | // DevOps & Infrastructure (Orange shades) 888 | 'devops-engineer': '#F97316', 889 | 'sre-engineer': '#EA580C', 890 | 'cloud-architect': '#FB923C', 891 | 'cicd-engineer': '#FDBA74', 892 | 893 | // Testing & QA (Yellow shades) 894 | 'qa-engineer': '#F59E0B', 895 | 'test-automation': '#D97706', 896 | 'performance-tester': '#FCD34D', 897 | 'security-tester': '#FDE68A', 898 | 899 | // Product & Business (Pink shades) 900 | 'product-manager': '#EC4899', 901 | 'business-analyst': '#DB2777', 902 | 'scrum-master': '#F472B6', 903 | 'project-manager': '#FBCFE8', 904 | 905 | // Documentation & Support (Teal shades) 906 | 'technical-writer': '#14B8A6', 907 | 'documentation-specialist': '#0D9488', 908 | 'api-documenter': '#5EEAD4', 909 | 'support-engineer': '#99F6E4', 910 | }; 911 | 912 | // Return specific color if mapped, otherwise generate based on category 913 | if (colorMap[agentName]) { 914 | return colorMap[agentName]; 915 | } 916 | 917 | // Default colors by category 918 | const categoryColors: Record<string, string> = { 919 | 'development': '#3B82F6', 920 | 'architecture': '#8B5CF6', 921 | 'data': '#10B981', 922 | 'security': '#EF4444', 923 | 'infrastructure': '#F97316', 924 | 'testing': '#F59E0B', 925 | 'management': '#EC4899', 926 | 'documentation': '#14B8A6', 927 | 'design': '#A78BFA', 928 | 'operations': '#F97316', 929 | }; 930 | 931 | // Return category color or default 932 | return categoryColors[category.toLowerCase()] || '#6B7280'; 933 | } 934 | } ```