This is page 3 of 4. Use http://codebase.md/hongsw/claude-agents-power-mcp-server?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 -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pair-Role MCP Server - Smart Role Assignment for Development Teams</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> .gradient-bg { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .role-card { transition: all 0.3s ease; } .role-card:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0,0,0,0.2); } .category-badge { transition: all 0.2s ease; } .category-badge:hover { transform: scale(1.05); } .feature-icon { transition: all 0.3s ease; } .feature-icon:hover { transform: rotate(10deg) scale(1.1); } .code-block { background-color: #1e1e1e; color: #d4d4d4; border-radius: 8px; padding: 16px; font-family: 'Consolas', 'Monaco', monospace; overflow-x: auto; } .tab-content { display: none; } .tab-content.active { display: block; } .hero-animation { animation: float 6s ease-in-out infinite; } @keyframes float { 0% { transform: translatey(0px); } 50% { transform: translatey(-20px); } 100% { transform: translatey(0px); } } </style> </head> <body class="bg-gray-50"> <!-- Navigation --> <nav class="bg-white shadow-lg sticky top-0 z-50"> <div class="container mx-auto px-6 py-4"> <div class="flex items-center justify-between"> <div class="flex items-center"> <i class="fas fa-users-cog text-3xl text-purple-600 mr-3"></i> <h1 class="text-2xl font-bold text-gray-800">Pair-Role MCP Server</h1> </div> <div class="flex space-x-6"> <a href="#features" class="text-gray-700 hover:text-purple-600 transition">Features</a> <a href="#roles" class="text-gray-700 hover:text-purple-600 transition">Roles</a> <a href="#usage" class="text-gray-700 hover:text-purple-600 transition">Usage</a> <a href="#installation" class="text-gray-700 hover:text-purple-600 transition">Installation</a> <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="text-gray-700 hover:text-purple-600 transition"> <i class="fab fa-github text-2xl"></i> </a> </div> </div> </div> </nav> <!-- Hero Section --> <section class="gradient-bg text-white py-20"> <div class="container mx-auto px-6"> <div class="flex flex-col md:flex-row items-center"> <div class="md:w-1/2 mb-10 md:mb-0"> <h2 class="text-4xl md:text-5xl font-bold mb-6"> 🎯 Smart Role Assignment for Development Teams </h2> <p class="text-xl mb-8 text-purple-100"> An intelligent MCP server that analyzes your project and recommends the perfect team composition from 100+ professional roles across all company departments. </p> <div class="flex space-x-4"> <a href="#installation" class="bg-white text-purple-700 px-8 py-3 rounded-lg font-bold hover:bg-purple-100 transition"> Get Started </a> <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"> View on GitHub </a> </div> </div> <div class="md:w-1/2 flex justify-center"> <div class="hero-animation"> <div class="bg-white bg-opacity-20 backdrop-blur-lg rounded-lg p-8 shadow-2xl"> <div class="text-center mb-4"> <i class="fas fa-project-diagram text-6xl mb-4"></i> <h3 class="text-2xl font-bold">AI-Powered Team Builder</h3> </div> <div class="space-y-2"> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-check-circle mr-2"></i> Analyze Project </div> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-users mr-2"></i> Recommend Roles </div> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-download mr-2"></i> Install Agents </div> </div> </div> </div> </div> </div> </div> </section> <!-- Stats Section --> <section class="py-12 bg-white"> <div class="container mx-auto px-6"> <div class="grid grid-cols-2 md:grid-cols-4 gap-6 text-center"> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">100+</div> <div class="text-gray-600 mt-2">Professional Roles</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">8</div> <div class="text-gray-600 mt-2">Departments</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">2</div> <div class="text-gray-600 mt-2">Languages</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">∞</div> <div class="text-gray-600 mt-2">Team Combinations</div> </div> </div> </div> </section> <!-- Features Section --> <section id="features" class="py-20 bg-gray-50"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 🌟 Key Features </h2> <div class="grid md:grid-cols-3 gap-8"> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-search text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">Intelligent Project Analysis</h3> <p class="text-gray-600"> Automatically detects project type, frameworks, and complexity to provide smart role recommendations based on your tech stack. </p> </div> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-users text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">100+ Professional Roles</h3> <p class="text-gray-600"> Comprehensive coverage across Technology, Data, Product, Marketing, Operations, Finance, HR, and Executive roles. </p> </div> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-globe text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">Multi-Language Support</h3> <p class="text-gray-600"> Available in English and Korean, supporting global standards and local business contexts. </p> </div> </div> </div> </section> <!-- Roles Section --> <section id="roles" class="py-20 bg-white"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 📋 Available Roles by Department </h2> <!-- Department Tabs --> <div class="flex flex-wrap justify-center mb-8 gap-2"> <button onclick="showDepartment('tech')" class="category-badge bg-purple-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🔧 Technology (20) </button> <button onclick="showDepartment('data')" class="category-badge bg-blue-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 📊 Data & Analytics (15) </button> <button onclick="showDepartment('product')" class="category-badge bg-pink-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🎨 Product & Design (10) </button> <button onclick="showDepartment('marketing')" class="category-badge bg-green-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 📈 Marketing & Sales (10) </button> <button onclick="showDepartment('operations')" class="category-badge bg-yellow-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> ⚙️ Operations (15) </button> <button onclick="showDepartment('finance')" class="category-badge bg-red-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 💰 Finance (10) </button> <button onclick="showDepartment('hr')" class="category-badge bg-indigo-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 👥 HR (10) </button> <button onclick="showDepartment('executive')" class="category-badge bg-gray-800 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🏢 Executive (10) </button> </div> <!-- Department Content --> <div id="tech" class="tab-content active"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Software Engineer</h4> <p class="text-gray-600 text-sm mb-3">Full-stack development, system design</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Frontend Developer</h4> <p class="text-gray-600 text-sm mb-3">React, Vue, Angular, UI/UX</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Backend Developer</h4> <p class="text-gray-600 text-sm mb-3">APIs, databases, server architecture</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> </div> </div> <!-- More roles... --> </div> <p class="text-center mt-6 text-gray-600"> + 17 more technology roles including DevOps, Security, Cloud, Mobile, QA, and more! </p> </div> <div id="data" class="tab-content"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Data Scientist</h4> <p class="text-gray-600 text-sm mb-3">ML modeling, statistical analysis</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Data Analyst</h4> <p class="text-gray-600 text-sm mb-3">Business insights, reporting</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Business Intelligence Analyst</h4> <p class="text-gray-600 text-sm mb-3">Dashboards, BI tools</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> </div> <p class="text-center mt-6 text-gray-600"> + 12 more data & analytics roles including Analytics Engineer, Marketing Analyst, and more! </p> </div> <div id="product" class="tab-content"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Product Manager</h4> <p class="text-gray-600 text-sm mb-3">Product strategy, roadmap</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">UX Designer</h4> <p class="text-gray-600 text-sm mb-3">User research, wireframes</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">UI Designer</h4> <p class="text-gray-600 text-sm mb-3">Visual design, prototypes</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> </div> <p class="text-center mt-6 text-gray-600"> + 7 more product & design roles including Product Designer, UX Researcher, and more! </p> </div> <!-- Other department tabs... --> </div> </section> <!-- Usage Examples Section --> <section id="usage" class="py-20 bg-gray-50"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 🎯 Usage Examples </h2> <div class="grid md:grid-cols-3 gap-8"> <!-- Startup Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">🚀</div> <h3 class="text-xl font-bold mb-4">Startup MVP Development</h3> <div class="code-block mb-4"> <pre><code># Analyze project mcp__pair-role__analyze-project # Install startup team mcp__pair-role__install-agents [ "product-manager", "frontend-developer", "backend-developer", "growth-marketing-manager" ]</code></pre> </div> <p class="text-gray-600">Perfect for building your minimum viable product with a lean team.</p> </div> <!-- Enterprise Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">🏢</div> <h3 class="text-xl font-bold mb-4">Enterprise Application</h3> <div class="code-block mb-4"> <pre><code># Get enterprise recommendations mcp__pair-role__recommend-by-keywords [ "enterprise", "security", "scalability", "compliance" ] # Install enterprise team mcp__pair-role__install-agents [ "solution-architect", "security-engineer", "devops-engineer", "compliance-manager" ]</code></pre> </div> <p class="text-gray-600">Build secure, scalable enterprise solutions with the right expertise.</p> </div> <!-- Data Platform Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">📊</div> <h3 class="text-xl font-bold mb-4">Data Platform</h3> <div class="code-block mb-4"> <pre><code># Search data roles mcp__pair-role__search-agents \ "data analytics machine learning" # Install data team mcp__pair-role__install-agents [ "data-scientist", "data-engineer", "machine-learning-engineer", "analytics-engineer" ]</code></pre> </div> <p class="text-gray-600">Create powerful data platforms with specialized data professionals.</p> </div> </div> </div> </section> <!-- Installation Section --> <section id="installation" class="py-20 bg-white"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> ⚡ Quick Installation </h2> <div class="max-w-3xl mx-auto"> <div class="mb-8"> <h3 class="text-xl font-bold mb-4">1. Clone and Build</h3> <div class="code-block"> <pre><code>git clone https://github.com/hongsw/claude-agents-power-mcp-server.git cd claude-agents-power-mcp-server npm install npm run build</code></pre> </div> </div> <div class="mb-8"> <h3 class="text-xl font-bold mb-4">2. Configure MCP</h3> <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> <div class="code-block"> <pre><code>{ "mcpServers": { "pair-role": { "command": "node", "args": ["/path/to/claude-agents-power-mcp-server/dist/index.js"], "cwd": "/path/to/your/project", "env": {} } } }</code></pre> </div> </div> <div> <h3 class="text-xl font-bold mb-4">3. Start Using</h3> <p class="text-gray-600 mb-4">Restart Claude Code and start building your perfect team!</p> <div class="code-block"> <pre><code># Analyze your project mcp__pair-role__analyze-project # Get recommendations mcp__pair-role__recommend-by-keywords ["your", "tech", "stack"] # Install agents mcp__pair-role__install-agents ["selected", "roles"]</code></pre> </div> </div> </div> </div> </section> <!-- CTA Section --> <section class="gradient-bg text-white py-20"> <div class="container mx-auto px-6 text-center"> <h2 class="text-3xl font-bold mb-6"> Ready to Build Your Perfect Team? </h2> <p class="text-xl mb-8 text-purple-100"> Start using Pair-Role MCP Server today and revolutionize how you build development teams. </p> <div class="flex justify-center space-x-4"> <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"> <i class="fab fa-github mr-2"></i> View on GitHub </a> <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"> <i class="fas fa-comment mr-2"></i> Get Support </a> </div> </div> </section> <!-- Footer --> <footer class="bg-gray-800 text-white py-8"> <div class="container mx-auto px-6 text-center"> <p class="mb-4"> Made with ❤️ for the Claude Code community </p> <div class="flex justify-center space-x-6"> <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="hover:text-purple-400 transition"> <i class="fab fa-github text-2xl"></i> </a> <a href="https://miri.dev" class="hover:text-purple-400 transition"> <i class="fas fa-globe text-2xl"></i> </a> <a href="https://discord.gg/claudecode" class="hover:text-purple-400 transition"> <i class="fab fa-discord text-2xl"></i> </a> </div> <p class="mt-4 text-gray-400"> © 2024 Pair-Role MCP Server. MIT License. </p> </div> </footer> <script> function showDepartment(dept) { // Hide all tabs const tabs = document.querySelectorAll('.tab-content'); tabs.forEach(tab => tab.classList.remove('active')); // Show selected tab document.getElementById(dept).classList.add('active'); // Update button styles const buttons = document.querySelectorAll('.category-badge'); buttons.forEach(button => { button.style.opacity = '0.7'; }); event.target.style.opacity = '1'; } // Smooth scrolling for navigation links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); </script> </body> </html> ``` -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pair-Role MCP Server - Smart Role Assignment for Development Teams</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> .gradient-bg { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .role-card { transition: all 0.3s ease; } .role-card:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0,0,0,0.2); } .category-badge { transition: all 0.2s ease; } .category-badge:hover { transform: scale(1.05); } .feature-icon { transition: all 0.3s ease; } .feature-icon:hover { transform: rotate(10deg) scale(1.1); } .code-block { background-color: #1e1e1e; color: #d4d4d4; border-radius: 8px; padding: 16px; font-family: 'Consolas', 'Monaco', monospace; overflow-x: auto; } .tab-content { display: none; } .tab-content.active { display: block; } .hero-animation { animation: float 6s ease-in-out infinite; } @keyframes float { 0% { transform: translatey(0px); } 50% { transform: translatey(-20px); } 100% { transform: translatey(0px); } } </style> </head> <body class="bg-gray-50"> <!-- Navigation --> <nav class="bg-white shadow-lg sticky top-0 z-50"> <div class="container mx-auto px-6 py-4"> <div class="flex items-center justify-between"> <div class="flex items-center"> <i class="fas fa-users-cog text-3xl text-purple-600 mr-3"></i> <h1 class="text-2xl font-bold text-gray-800">Pair-Role MCP Server</h1> </div> <div class="flex space-x-6"> <a href="#features" class="text-gray-700 hover:text-purple-600 transition">Features</a> <a href="#roles" class="text-gray-700 hover:text-purple-600 transition">Roles</a> <a href="#usage" class="text-gray-700 hover:text-purple-600 transition">Usage</a> <a href="#installation" class="text-gray-700 hover:text-purple-600 transition">Installation</a> <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="text-gray-700 hover:text-purple-600 transition"> <i class="fab fa-github text-2xl"></i> </a> </div> </div> </div> </nav> <!-- Hero Section --> <section class="gradient-bg text-white py-20"> <div class="container mx-auto px-6"> <div class="flex flex-col md:flex-row items-center"> <div class="md:w-1/2 mb-10 md:mb-0"> <h2 class="text-4xl md:text-5xl font-bold mb-6"> 🎯 Smart Role Assignment for Development Teams </h2> <p class="text-xl mb-8 text-purple-100"> An intelligent MCP server that analyzes your project and recommends the perfect team composition from 100+ professional roles across all company departments. </p> <div class="flex space-x-4"> <a href="#installation" class="bg-white text-purple-700 px-8 py-3 rounded-lg font-bold hover:bg-purple-100 transition"> Get Started </a> <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"> View on GitHub </a> </div> </div> <div class="md:w-1/2 flex justify-center"> <div class="hero-animation"> <div class="bg-white bg-opacity-20 backdrop-blur-lg rounded-lg p-8 shadow-2xl"> <div class="text-center mb-4"> <i class="fas fa-project-diagram text-6xl mb-4"></i> <h3 class="text-2xl font-bold">AI-Powered Team Builder</h3> </div> <div class="space-y-2"> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-check-circle mr-2"></i> Analyze Project </div> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-users mr-2"></i> Recommend Roles </div> <div class="bg-white bg-opacity-20 rounded px-4 py-2"> <i class="fas fa-download mr-2"></i> Install Agents </div> </div> </div> </div> </div> </div> </div> </section> <!-- Stats Section --> <section class="py-12 bg-white"> <div class="container mx-auto px-6"> <div class="grid grid-cols-2 md:grid-cols-4 gap-6 text-center"> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">100+</div> <div class="text-gray-600 mt-2">Professional Roles</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">8</div> <div class="text-gray-600 mt-2">Departments</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">2</div> <div class="text-gray-600 mt-2">Languages</div> </div> <div class="p-6"> <div class="text-4xl font-bold text-purple-600">∞</div> <div class="text-gray-600 mt-2">Team Combinations</div> </div> </div> </div> </section> <!-- Features Section --> <section id="features" class="py-20 bg-gray-50"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 🌟 Key Features </h2> <div class="grid md:grid-cols-3 gap-8"> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-search text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">Intelligent Project Analysis</h3> <p class="text-gray-600"> Automatically detects project type, frameworks, and complexity to provide smart role recommendations based on your tech stack. </p> </div> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-users text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">100+ Professional Roles</h3> <p class="text-gray-600"> Comprehensive coverage across Technology, Data, Product, Marketing, Operations, Finance, HR, and Executive roles. </p> </div> <div class="bg-white rounded-lg shadow-lg p-8 text-center role-card"> <div class="feature-icon inline-block mb-4"> <i class="fas fa-globe text-5xl text-purple-600"></i> </div> <h3 class="text-xl font-bold mb-4">Multi-Language Support</h3> <p class="text-gray-600"> Available in English and Korean, supporting global standards and local business contexts. </p> </div> </div> </div> </section> <!-- Roles Section --> <section id="roles" class="py-20 bg-white"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 📋 Available Roles by Department </h2> <!-- Department Tabs --> <div class="flex flex-wrap justify-center mb-8 gap-2"> <button onclick="showDepartment('tech')" class="category-badge bg-purple-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🔧 Technology (20) </button> <button onclick="showDepartment('data')" class="category-badge bg-blue-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 📊 Data & Analytics (15) </button> <button onclick="showDepartment('product')" class="category-badge bg-pink-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🎨 Product & Design (10) </button> <button onclick="showDepartment('marketing')" class="category-badge bg-green-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 📈 Marketing & Sales (10) </button> <button onclick="showDepartment('operations')" class="category-badge bg-yellow-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> ⚙️ Operations (15) </button> <button onclick="showDepartment('finance')" class="category-badge bg-red-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 💰 Finance (10) </button> <button onclick="showDepartment('hr')" class="category-badge bg-indigo-600 text-white px-4 py-2 rounded-full text-sm font-semibold"> 👥 HR (10) </button> <button onclick="showDepartment('executive')" class="category-badge bg-gray-800 text-white px-4 py-2 rounded-full text-sm font-semibold"> 🏢 Executive (10) </button> </div> <!-- Department Content --> <div id="tech" class="tab-content active"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Software Engineer</h4> <p class="text-gray-600 text-sm mb-3">Full-stack development, system design</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Frontend Developer</h4> <p class="text-gray-600 text-sm mb-3">React, Vue, Angular, UI/UX</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Backend Developer</h4> <p class="text-gray-600 text-sm mb-3">APIs, databases, server architecture</p> <div class="flex flex-wrap gap-2"> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-purple-100 text-purple-800 px-2 py-1 rounded text-xs">Edit</span> </div> </div> <!-- More roles... --> </div> <p class="text-center mt-6 text-gray-600"> + 17 more technology roles including DevOps, Security, Cloud, Mobile, QA, and more! </p> </div> <div id="data" class="tab-content"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Data Scientist</h4> <p class="text-gray-600 text-sm mb-3">ML modeling, statistical analysis</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Data Analyst</h4> <p class="text-gray-600 text-sm mb-3">Business insights, reporting</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Business Intelligence Analyst</h4> <p class="text-gray-600 text-sm mb-3">Dashboards, BI tools</p> <div class="flex flex-wrap gap-2"> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Write</span> <span class="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">Bash</span> </div> </div> </div> <p class="text-center mt-6 text-gray-600"> + 12 more data & analytics roles including Analytics Engineer, Marketing Analyst, and more! </p> </div> <div id="product" class="tab-content"> <div class="grid md:grid-cols-3 gap-6"> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">Product Manager</h4> <p class="text-gray-600 text-sm mb-3">Product strategy, roadmap</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">UX Designer</h4> <p class="text-gray-600 text-sm mb-3">User research, wireframes</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> <div class="role-card bg-gray-50 p-6 rounded-lg"> <h4 class="font-bold text-lg mb-2">UI Designer</h4> <p class="text-gray-600 text-sm mb-3">Visual design, prototypes</p> <div class="flex flex-wrap gap-2"> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Read</span> <span class="bg-pink-100 text-pink-800 px-2 py-1 rounded text-xs">Write</span> </div> </div> </div> <p class="text-center mt-6 text-gray-600"> + 7 more product & design roles including Product Designer, UX Researcher, and more! </p> </div> <!-- Other department tabs... --> </div> </section> <!-- Usage Examples Section --> <section id="usage" class="py-20 bg-gray-50"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> 🎯 Usage Examples </h2> <div class="grid md:grid-cols-3 gap-8"> <!-- Startup Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">🚀</div> <h3 class="text-xl font-bold mb-4">Startup MVP Development</h3> <div class="code-block mb-4"> <pre><code># Analyze project mcp__pair-role__analyze-project # Install startup team mcp__pair-role__install-agents [ "product-manager", "frontend-developer", "backend-developer", "growth-marketing-manager" ]</code></pre> </div> <p class="text-gray-600">Perfect for building your minimum viable product with a lean team.</p> </div> <!-- Enterprise Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">🏢</div> <h3 class="text-xl font-bold mb-4">Enterprise Application</h3> <div class="code-block mb-4"> <pre><code># Get enterprise recommendations mcp__pair-role__recommend-by-keywords [ "enterprise", "security", "scalability", "compliance" ] # Install enterprise team mcp__pair-role__install-agents [ "solution-architect", "security-engineer", "devops-engineer", "compliance-manager" ]</code></pre> </div> <p class="text-gray-600">Build secure, scalable enterprise solutions with the right expertise.</p> </div> <!-- Data Platform Example --> <div class="bg-white rounded-lg shadow-lg p-8"> <div class="text-2xl mb-4">📊</div> <h3 class="text-xl font-bold mb-4">Data Platform</h3> <div class="code-block mb-4"> <pre><code># Search data roles mcp__pair-role__search-agents \ "data analytics machine learning" # Install data team mcp__pair-role__install-agents [ "data-scientist", "data-engineer", "machine-learning-engineer", "analytics-engineer" ]</code></pre> </div> <p class="text-gray-600">Create powerful data platforms with specialized data professionals.</p> </div> </div> </div> </section> <!-- Installation Section --> <section id="installation" class="py-20 bg-white"> <div class="container mx-auto px-6"> <h2 class="text-3xl font-bold text-center text-gray-800 mb-16"> ⚡ Quick Installation </h2> <div class="max-w-3xl mx-auto"> <div class="mb-8"> <h3 class="text-xl font-bold mb-4">1. Clone and Build</h3> <div class="code-block"> <pre><code>git clone https://github.com/hongsw/claude-agents-power-mcp-server.git cd claude-agents-power-mcp-server npm install npm run build</code></pre> </div> </div> <div class="mb-8"> <h3 class="text-xl font-bold mb-4">2. Configure MCP</h3> <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> <div class="code-block"> <pre><code>{ "mcpServers": { "pair-role": { "command": "node", "args": ["/path/to/claude-agents-power-mcp-server/dist/index.js"], "cwd": "/path/to/your/project", "env": {} } } }</code></pre> </div> </div> <div> <h3 class="text-xl font-bold mb-4">3. Start Using</h3> <p class="text-gray-600 mb-4">Restart Claude Code and start building your perfect team!</p> <div class="code-block"> <pre><code># Analyze your project mcp__pair-role__analyze-project # Get recommendations mcp__pair-role__recommend-by-keywords ["your", "tech", "stack"] # Install agents mcp__pair-role__install-agents ["selected", "roles"]</code></pre> </div> </div> </div> </div> </section> <!-- CTA Section --> <section class="gradient-bg text-white py-20"> <div class="container mx-auto px-6 text-center"> <h2 class="text-3xl font-bold mb-6"> Ready to Build Your Perfect Team? </h2> <p class="text-xl mb-8 text-purple-100"> Start using Pair-Role MCP Server today and revolutionize how you build development teams. </p> <div class="flex justify-center space-x-4"> <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"> <i class="fab fa-github mr-2"></i> View on GitHub </a> <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"> <i class="fas fa-comment mr-2"></i> Get Support </a> </div> </div> </section> <!-- Footer --> <footer class="bg-gray-800 text-white py-8"> <div class="container mx-auto px-6 text-center"> <p class="mb-4"> Made with ❤️ for the Claude Code community </p> <div class="flex justify-center space-x-6"> <a href="https://github.com/hongsw/claude-agents-power-mcp-server" class="hover:text-purple-400 transition"> <i class="fab fa-github text-2xl"></i> </a> <a href="https://miri.dev" class="hover:text-purple-400 transition"> <i class="fas fa-globe text-2xl"></i> </a> <a href="https://discord.gg/claudecode" class="hover:text-purple-400 transition"> <i class="fab fa-discord text-2xl"></i> </a> </div> <p class="mt-4 text-gray-400"> © 2024 Pair-Role MCP Server. MIT License. </p> </div> </footer> <script> function showDepartment(dept) { // Hide all tabs const tabs = document.querySelectorAll('.tab-content'); tabs.forEach(tab => tab.classList.remove('active')); // Show selected tab document.getElementById(dept).classList.add('active'); // Update button styles const buttons = document.querySelectorAll('.category-badge'); buttons.forEach(button => { button.style.opacity = '0.7'; }); event.target.style.opacity = '1'; } // Smooth scrolling for navigation links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); </script> </body> </html> ``` -------------------------------------------------------------------------------- /src/aiAnalysisService.ts: -------------------------------------------------------------------------------- ```typescript import fs from 'fs'; import path from 'path'; import { glob } from 'glob'; export interface AIProjectAnalysis { projectType: string; technologies: string[]; frameworks: string[]; complexity: number; phase: string; teamSize: number; description?: string; goals?: string[]; requirements?: string[]; architecturalPatterns?: string[]; developmentPractices?: string[]; qualityIndicators?: { hasTests: boolean; hasDocumentation: boolean; hasCI: boolean; hasLinting: boolean; codeComplexity: 'low' | 'medium' | 'high'; }; } export interface AIAgentRecommendation { name: string; description: string; relevanceScore: number; reasoning: string; tools: string[]; category: string; priority: 'essential' | 'recommended' | 'optional'; color?: string; // HEX color code for agent visualization specificTasks?: string[]; integrationPoints?: string[]; } /** * AI-Powered Project Analysis Service * Uses intelligent analysis instead of static rules to understand projects */ export class AIAnalysisService { /** * Perform comprehensive AI analysis of a project */ async analyzeProject(claudeMdPath: string, projectRoot?: string): Promise<AIProjectAnalysis> { const projectPath = projectRoot || path.dirname(claudeMdPath); // Gather comprehensive project context const context = await this.gatherProjectContext(claudeMdPath, projectPath); // Perform AI analysis const analysis = await this.performAIAnalysis(context); return analysis; } /** * Generate agent recommendations based on AI analysis */ async generateRecommendations(analysis: AIProjectAnalysis): Promise<AIAgentRecommendation[]> { // Use AI to generate intelligent recommendations return this.performAIRecommendation(analysis); } /** * Gather comprehensive project context for AI analysis */ private async gatherProjectContext(claudeMdPath: string, projectPath: string): Promise<{ claudeMdContent?: string; fileStructure: string[]; packageInfo?: any; configFiles: string[]; codeMetrics: { totalFiles: number; codeFiles: number; testFiles: number; docFiles: number; languages: string[]; }; dependencies?: any; gitInfo?: { hasGit: boolean; recentCommits?: string[]; branches?: string[]; }; }> { const context: any = { fileStructure: [], configFiles: [], codeMetrics: { totalFiles: 0, codeFiles: 0, testFiles: 0, docFiles: 0, languages: [] } }; // Read CLAUDE.md if exists try { if (fs.existsSync(claudeMdPath)) { context.claudeMdContent = fs.readFileSync(claudeMdPath, 'utf8'); } } catch (error) { // Continue without CLAUDE.md } try { // Get file structure (limited depth to avoid performance issues) const files = await glob('**/*', { cwd: projectPath, ignore: ['node_modules/**', 'dist/**', 'build/**', '.git/**', 'venv/**', '__pycache__/**'], nodir: true, maxDepth: 4 }); context.fileStructure = files.slice(0, 100); // Limit for performance context.codeMetrics.totalFiles = files.length; // Analyze file types const codeExtensions = ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.go', '.rs', '.php', '.rb', '.cs', '.cpp', '.c', '.h']; const testExtensions = ['.test.', '.spec.', '_test.', '_spec.']; const docExtensions = ['.md', '.rst', '.txt', '.doc']; files.forEach(file => { const ext = path.extname(file); const basename = path.basename(file); if (codeExtensions.includes(ext)) { context.codeMetrics.codeFiles++; const lang = this.getLanguageFromExtension(ext); if (lang && !context.codeMetrics.languages.includes(lang)) { context.codeMetrics.languages.push(lang); } } if (testExtensions.some(testExt => basename.includes(testExt))) { context.codeMetrics.testFiles++; } if (docExtensions.includes(ext)) { context.codeMetrics.docFiles++; } }); // Identify config files const configPatterns = [ 'package.json', 'package-lock.json', 'yarn.lock', 'requirements.txt', 'pyproject.toml', 'setup.py', 'Cargo.toml', 'go.mod', 'pom.xml', 'build.gradle', 'Dockerfile', 'docker-compose.yml', '.gitignore', '.eslintrc*', '.prettierrc*', 'tsconfig.json', 'webpack.config.js', 'vite.config.*', 'tailwind.config.js', 'next.config.js', 'nuxt.config.js' ]; context.configFiles = files.filter(file => configPatterns.some(pattern => pattern.includes('*') ? file.includes(pattern.replace('*', '')) : path.basename(file) === pattern ) ); // Read package.json for detailed dependency analysis const packageJsonPath = path.join(projectPath, 'package.json'); if (fs.existsSync(packageJsonPath)) { try { context.packageInfo = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); context.dependencies = { ...context.packageInfo.dependencies, ...context.packageInfo.devDependencies }; } catch (e) { // Continue without package.json parsing } } // Check for git repository const gitPath = path.join(projectPath, '.git'); context.gitInfo = { hasGit: fs.existsSync(gitPath) }; } catch (error) { console.warn('Error gathering project context:', error); } return context; } /** * Perform AI-powered analysis of the project context */ private async performAIAnalysis(context: any): Promise<AIProjectAnalysis> { // This is where we would integrate with Claude API or use AI reasoning // For now, implementing intelligent rule-based analysis that mimics AI decision making const analysis: AIProjectAnalysis = { projectType: 'unknown', technologies: [], frameworks: [], complexity: 5, phase: 'development', teamSize: 5, description: '', goals: [], requirements: [], architecturalPatterns: [], developmentPractices: [], qualityIndicators: { hasTests: context.codeMetrics.testFiles > 0, hasDocumentation: context.codeMetrics.docFiles > 5, hasCI: context.configFiles.some((file: string) => file.includes('.github/workflows') || file.includes('.gitlab-ci')), hasLinting: context.configFiles.some((file: string) => file.includes('eslint') || file.includes('prettier')), codeComplexity: context.codeMetrics.totalFiles > 100 ? 'high' : context.codeMetrics.totalFiles > 30 ? 'medium' : 'low' } }; // Extract information from CLAUDE.md with intelligent parsing if (context.claudeMdContent) { analysis.description = this.extractProjectDescription(context.claudeMdContent); analysis.goals = this.extractProjectGoals(context.claudeMdContent); analysis.requirements = this.extractProjectRequirements(context.claudeMdContent); } // Intelligent project type detection analysis.projectType = this.determineProjectType(context); // Technology and framework detection with context awareness analysis.technologies = this.detectTechnologies(context); analysis.frameworks = this.detectFrameworks(context); // Complexity assessment using multiple factors analysis.complexity = this.calculateComplexity(context, analysis); // Development phase detection analysis.phase = this.determineDevelopmentPhase(context, analysis); // Optimal team size recommendation analysis.teamSize = this.recommendTeamSize(analysis); // Architectural patterns detection analysis.architecturalPatterns = this.detectArchitecturalPatterns(context); // Development practices assessment analysis.developmentPractices = this.assessDevelopmentPractices(context); return analysis; } /** * Generate intelligent agent recommendations based on analysis */ private async performAIRecommendation(analysis: AIProjectAnalysis): Promise<AIAgentRecommendation[]> { const recommendations: AIAgentRecommendation[] = []; // Intelligent recommendation rules based on comprehensive analysis const recommendationRules = this.createIntelligentRecommendationRules(); for (const rule of recommendationRules) { const relevance = rule.evaluate(analysis); if (relevance.isRelevant) { recommendations.push({ name: rule.agentName, description: rule.description, relevanceScore: relevance.score, reasoning: relevance.reasoning, tools: rule.tools, category: rule.category, priority: relevance.priority, color: this.getAgentColor(rule.agentName, rule.category), specificTasks: relevance.specificTasks, integrationPoints: relevance.integrationPoints }); } } // Sort by relevance score and apply intelligent filtering return recommendations .sort((a, b) => b.relevanceScore - a.relevanceScore) .slice(0, analysis.teamSize + 2); // Recommend slightly more than team size } /** * Create intelligent recommendation rules */ private createIntelligentRecommendationRules() { return [ // Frontend Development Rules { agentName: 'frontend-developer', description: 'UI/UX implementation specialist with modern web technologies expertise', category: 'development', tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash'], evaluate: (analysis: AIProjectAnalysis) => { const hasFrontend = analysis.frameworks.some(f => ['React', 'Vue', 'Angular', 'Svelte'].includes(f)) || analysis.technologies.includes('JavaScript') || analysis.projectType.includes('web'); if (!hasFrontend) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 90; let reasoning = 'Essential for frontend development with '; const tasks = ['Implement user interfaces', 'Optimize performance', 'Ensure accessibility']; const integrationPoints = ['Backend APIs', 'Design system', 'Testing framework']; if (analysis.frameworks.length > 0) { score += 5; reasoning += analysis.frameworks.join(', '); } else { reasoning += 'modern web technologies'; } if (analysis.qualityIndicators?.hasTests) { tasks.push('Write frontend tests'); score += 3; } return { isRelevant: true, score, reasoning, priority: 'essential' as const, specificTasks: tasks, integrationPoints }; } }, // Backend Development Rules { agentName: 'backend-engineer', description: 'Server-side development and API specialist', category: 'development', tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash'], evaluate: (analysis: AIProjectAnalysis) => { const hasBackend = analysis.technologies.includes('Node.js') || analysis.technologies.includes('Python') || analysis.technologies.includes('Java') || analysis.projectType.includes('api') || analysis.projectType.includes('server'); if (!hasBackend) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 95; let reasoning = 'Critical for backend development and API design'; const tasks = ['Design APIs', 'Implement business logic', 'Database integration']; const integrationPoints = ['Frontend applications', 'Database systems', 'External services']; if (analysis.complexity > 7) { score += 3; tasks.push('Optimize performance'); reasoning += ' with complex system requirements'; } if (analysis.qualityIndicators?.hasTests) { tasks.push('API testing and validation'); } return { isRelevant: true, score, reasoning, priority: 'essential' as const, specificTasks: tasks, integrationPoints }; } }, // Full-Stack Development Rules { agentName: 'full-stack-developer', description: 'End-to-end development specialist', category: 'development', tools: ['Read', 'Write', 'Edit', 'MultiEdit', 'Bash', 'WebSearch'], evaluate: (analysis: AIProjectAnalysis) => { const hasBothEnds = analysis.frameworks.length > 0 && (analysis.technologies.includes('Node.js') || analysis.technologies.includes('Python')); if (!hasBothEnds) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 88; const reasoning = 'Perfect for full-stack applications requiring end-to-end integration'; const tasks = ['Coordinate frontend-backend integration', 'Implement full features', 'System architecture']; const integrationPoints = ['Frontend frameworks', 'Backend services', 'Database layer']; if (analysis.teamSize <= 3) { score += 7; // More valuable for smaller teams } return { isRelevant: true, score, reasoning, priority: 'essential' as const, specificTasks: tasks, integrationPoints }; } }, // DevOps and Infrastructure Rules { agentName: 'devops-engineer', description: 'Infrastructure and deployment specialist', category: 'infrastructure', tools: ['Read', 'Write', 'Bash', 'Edit'], evaluate: (analysis: AIProjectAnalysis) => { const needsDevOps = analysis.complexity > 6 || analysis.technologies.includes('Docker') || analysis.qualityIndicators?.hasCI || analysis.phase === 'deployment'; if (!needsDevOps) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 82; let reasoning = 'Required for deployment and infrastructure management'; const tasks = ['Setup CI/CD pipelines', 'Configure deployment', 'Monitor systems']; const integrationPoints = ['Development workflow', 'Production environment', 'Monitoring tools']; if (analysis.technologies.includes('Docker')) { score += 8; reasoning += ' with containerization expertise'; } if (analysis.complexity > 8) { score += 5; tasks.push('Scale infrastructure'); } return { isRelevant: true, score, reasoning, priority: analysis.phase === 'deployment' ? 'essential' as const : 'recommended' as const, specificTasks: tasks, integrationPoints }; } }, // Quality Assurance Rules { agentName: 'qa-engineer', description: 'Quality assurance and testing specialist', category: 'quality', tools: ['Read', 'Write', 'Bash'], evaluate: (analysis: AIProjectAnalysis) => { const needsQA = analysis.complexity > 5 || analysis.projectType.includes('web') || !analysis.qualityIndicators?.hasTests; if (!needsQA) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 75; let reasoning = 'Important for quality assurance and testing strategy'; const tasks = ['Design test strategies', 'Implement automated testing', 'Quality validation']; const integrationPoints = ['Development workflow', 'CI/CD pipeline', 'User acceptance']; if (!analysis.qualityIndicators?.hasTests) { score += 10; reasoning += ' - no existing tests detected'; tasks.unshift('Establish testing framework'); } if (analysis.complexity > 8) { score += 5; tasks.push('Performance testing'); } return { isRelevant: true, score, reasoning, priority: 'recommended' as const, specificTasks: tasks, integrationPoints }; } }, // Security Engineering Rules { agentName: 'security-engineer', description: 'Security and compliance specialist', category: 'security', tools: ['Read', 'Bash', 'Edit'], evaluate: (analysis: AIProjectAnalysis) => { const needsSecurity = analysis.projectType.includes('web') || analysis.complexity > 7 || analysis.technologies.some(t => ['authentication', 'payment', 'data'].some(s => t.toLowerCase().includes(s))); if (!needsSecurity) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 78; let reasoning = 'Critical for security and compliance requirements'; const tasks = ['Security audits', 'Implement security measures', 'Compliance validation']; const integrationPoints = ['Authentication systems', 'Data protection', 'API security']; if (analysis.projectType.includes('web')) { score += 7; tasks.push('Web application security'); } if (analysis.complexity > 8) { score += 5; reasoning += ' for complex systems'; } return { isRelevant: true, score, reasoning, priority: 'recommended' as const, specificTasks: tasks, integrationPoints }; } }, // Technical Leadership Rules { agentName: 'tech-lead', description: 'Technical leadership and architecture specialist', category: 'management', tools: ['Read', 'Write'], evaluate: (analysis: AIProjectAnalysis) => { const needsLeadership = analysis.complexity > 7 || analysis.technologies.length > 4 || analysis.teamSize > 5; if (!needsLeadership) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 83; const reasoning = 'Essential for technical leadership and coordination in complex projects'; const tasks = ['Technical decision making', 'Team coordination', 'Architecture oversight']; const integrationPoints = ['Development team', 'Project stakeholders', 'Architecture decisions']; if (analysis.teamSize > 7) { score += 5; } return { isRelevant: true, score, reasoning, priority: 'recommended' as const, specificTasks: tasks, integrationPoints }; } }, // Documentation Specialist Rules { agentName: 'technical-writer', description: 'Documentation and content specialist', category: 'documentation', tools: ['Read', 'Write', 'Edit'], evaluate: (analysis: AIProjectAnalysis) => { const needsDocs = analysis.complexity > 6 || !analysis.qualityIndicators?.hasDocumentation || analysis.projectType.includes('api'); if (!needsDocs) return { isRelevant: false, score: 0, reasoning: '', priority: 'optional' as const }; let score = 65; let reasoning = 'Important for documentation and user guides'; const tasks = ['Create technical documentation', 'API documentation', 'User guides']; const integrationPoints = ['Development workflow', 'User experience', 'Knowledge management']; if (!analysis.qualityIndicators?.hasDocumentation) { score += 8; reasoning += ' - insufficient documentation detected'; } if (analysis.projectType.includes('api')) { score += 7; tasks.push('API documentation'); } return { isRelevant: true, score, reasoning, priority: 'optional' as const, specificTasks: tasks, integrationPoints }; } } ]; } // Helper methods for analysis private getLanguageFromExtension(ext: string): string | null { const langMap: Record<string, string> = { '.js': 'JavaScript', '.ts': 'TypeScript', '.jsx': 'React', '.tsx': 'React TypeScript', '.py': 'Python', '.java': 'Java', '.go': 'Go', '.rs': 'Rust', '.php': 'PHP', '.rb': 'Ruby', '.cs': 'C#', '.cpp': 'C++', '.c': 'C' }; return langMap[ext] || null; } private extractProjectDescription(content: string): string { // Extract description from CLAUDE.md const lines = content.split('\n'); for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); if (line.startsWith('# ') && line.length > 2) { return line.substring(2).trim(); } } return 'Project description not available'; } private extractProjectGoals(content: string): string[] { const goals: string[] = []; const lines = content.split('\n'); let inGoalsSection = false; for (const line of lines) { const trimmed = line.trim(); if (trimmed.toLowerCase().includes('goal') || trimmed.toLowerCase().includes('objective')) { inGoalsSection = true; continue; } if (inGoalsSection && trimmed.startsWith('- ')) { goals.push(trimmed.substring(2)); } else if (inGoalsSection && trimmed.startsWith('#')) { break; } } return goals; } private extractProjectRequirements(content: string): string[] { const requirements: string[] = []; const lines = content.split('\n'); let inReqSection = false; for (const line of lines) { const trimmed = line.trim(); if (trimmed.toLowerCase().includes('requirement') || trimmed.toLowerCase().includes('need')) { inReqSection = true; continue; } if (inReqSection && trimmed.startsWith('- ')) { requirements.push(trimmed.substring(2)); } else if (inReqSection && trimmed.startsWith('#')) { break; } } return requirements; } private determineProjectType(context: any): string { const files = context.fileStructure; const deps = context.dependencies || {}; // Web application detection if (files.some((f: string) => f.includes('index.html')) || Object.keys(deps).some(dep => ['react', 'vue', 'angular'].includes(dep))) { return 'web-application'; } // API detection if (files.some((f: string) => f.includes('api/') || f.includes('server.')) || Object.keys(deps).some(dep => ['express', 'fastapi', 'nest'].includes(dep))) { return 'api-service'; } // Mobile app detection if (files.some((f: string) => f.includes('pubspec.yaml') || f.includes('Info.plist')) || Object.keys(deps).some(dep => ['react-native', 'ionic', 'flutter'].includes(dep))) { return 'mobile-application'; } // CLI tool detection if (files.some((f: string) => f.includes('bin/') || f.includes('cli.')) || context.packageInfo?.bin) { return 'cli-tool'; } // Library detection if (context.packageInfo?.main && !context.packageInfo?.private) { return 'library'; } return 'application'; } private detectTechnologies(context: any): string[] { const technologies = new Set<string>(); const deps = context.dependencies || {}; const languages = context.codeMetrics.languages || []; // Add detected languages languages.forEach((lang: string) => technologies.add(lang)); // Database technologies if (Object.keys(deps).some(dep => dep.includes('postgres'))) technologies.add('PostgreSQL'); if (Object.keys(deps).some(dep => dep.includes('mongo'))) technologies.add('MongoDB'); if (Object.keys(deps).some(dep => dep.includes('redis'))) technologies.add('Redis'); if (Object.keys(deps).some(dep => dep.includes('mysql'))) technologies.add('MySQL'); // Cloud and infrastructure if (Object.keys(deps).some(dep => dep.includes('aws'))) technologies.add('AWS'); if (context.fileStructure.some((f: string) => f.includes('Dockerfile'))) technologies.add('Docker'); if (context.fileStructure.some((f: string) => f.includes('kubernetes'))) technologies.add('Kubernetes'); // Build tools and bundlers if (Object.keys(deps).some(dep => ['webpack', 'vite', 'rollup', 'parcel'].includes(dep))) { technologies.add('Build Tools'); } return Array.from(technologies); } private detectFrameworks(context: any): string[] { const frameworks = new Set<string>(); const deps = context.dependencies || {}; // Frontend frameworks if (Object.keys(deps).some(dep => dep.includes('react'))) frameworks.add('React'); if (Object.keys(deps).some(dep => dep.includes('vue'))) frameworks.add('Vue'); if (Object.keys(deps).some(dep => dep.includes('angular'))) frameworks.add('Angular'); if (Object.keys(deps).some(dep => dep.includes('svelte'))) frameworks.add('Svelte'); if (Object.keys(deps).some(dep => dep.includes('next'))) frameworks.add('Next.js'); if (Object.keys(deps).some(dep => dep.includes('nuxt'))) frameworks.add('Nuxt.js'); // Backend frameworks if (Object.keys(deps).some(dep => dep.includes('express'))) frameworks.add('Express'); if (Object.keys(deps).some(dep => dep.includes('nest'))) frameworks.add('NestJS'); if (Object.keys(deps).some(dep => dep.includes('koa'))) frameworks.add('Koa'); // Testing frameworks if (Object.keys(deps).some(dep => ['jest', 'mocha', 'chai', 'cypress'].includes(dep))) { frameworks.add('Testing Framework'); } return Array.from(frameworks); } private calculateComplexity(context: any, analysis: AIProjectAnalysis): number { let complexity = 5; // Base complexity // File count impact if (context.codeMetrics.totalFiles > 100) complexity += 2; if (context.codeMetrics.totalFiles > 50) complexity += 1; // Technology diversity complexity += Math.min(analysis.technologies.length * 0.5, 2); // Framework complexity if (analysis.frameworks.length > 2) complexity += 1; // Language diversity if (context.codeMetrics.languages.length > 2) complexity += 1; // Architecture indicators if (context.fileStructure.some((f: string) => f.includes('microservice'))) complexity += 2; if (context.fileStructure.some((f: string) => f.includes('api/') && f.includes('v1/'))) complexity += 1; // Quality indicators (well-structured projects are more complex to maintain) if (analysis.qualityIndicators?.hasTests) complexity += 0.5; if (analysis.qualityIndicators?.hasCI) complexity += 0.5; if (analysis.qualityIndicators?.hasLinting) complexity += 0.5; return Math.min(Math.round(complexity * 10) / 10, 10); } private determineDevelopmentPhase(context: any, analysis: AIProjectAnalysis): string { // Phase detection based on project indicators if (context.codeMetrics.totalFiles < 10) return 'planning'; if (!analysis.qualityIndicators?.hasTests && context.codeMetrics.codeFiles > 0) return 'development'; if (analysis.qualityIndicators?.hasTests && analysis.qualityIndicators?.hasCI) return 'testing'; if (context.fileStructure.some((f: string) => f.includes('docker') || f.includes('deploy'))) return 'deployment'; if (analysis.qualityIndicators?.hasDocumentation && analysis.qualityIndicators?.hasCI) return 'maintenance'; return 'development'; } private recommendTeamSize(analysis: AIProjectAnalysis): number { let teamSize = 3; // Base team size // Complexity impact if (analysis.complexity > 8) teamSize += 3; else if (analysis.complexity > 6) teamSize += 2; else if (analysis.complexity > 4) teamSize += 1; // Technology diversity impact if (analysis.technologies.length > 5) teamSize += 2; else if (analysis.technologies.length > 3) teamSize += 1; // Project type impact if (analysis.projectType.includes('enterprise')) teamSize += 2; if (analysis.projectType.includes('microservice')) teamSize += 1; return Math.min(teamSize, 12); // Cap at 12 for practical reasons } private detectArchitecturalPatterns(context: any): string[] { const patterns: string[] = []; const files = context.fileStructure; if (files.some((f: string) => f.includes('component') && f.includes('service'))) { patterns.push('Component-Service Architecture'); } if (files.some((f: string) => f.includes('api/v'))) { patterns.push('Versioned API'); } if (files.some((f: string) => f.includes('middleware'))) { patterns.push('Middleware Pattern'); } if (files.some((f: string) => f.includes('repository') || f.includes('dao'))) { patterns.push('Repository Pattern'); } if (files.some((f: string) => f.includes('model') && f.includes('view') && f.includes('controller'))) { patterns.push('MVC Architecture'); } return patterns; } private assessDevelopmentPractices(context: any): string[] { const practices: string[] = []; if (context.qualityIndicators?.hasTests) practices.push('Automated Testing'); if (context.qualityIndicators?.hasCI) practices.push('Continuous Integration'); if (context.qualityIndicators?.hasLinting) practices.push('Code Quality Tools'); if (context.qualityIndicators?.hasDocumentation) practices.push('Documentation'); if (context.gitInfo?.hasGit) practices.push('Version Control'); if (context.fileStructure.some((f: string) => f.includes('docker'))) practices.push('Containerization'); return practices; } /** * Get color code for agent based on name and category */ private getAgentColor(agentName: string, category: string): string { // Color palette based on agent types and categories const colorMap: Record<string, string> = { // Core Development (Blue shades) 'frontend-developer': '#3B82F6', 'backend-engineer': '#1E40AF', 'full-stack-developer': '#2563EB', 'mobile-developer': '#60A5FA', // Architecture & Design (Purple shades) 'system-architect': '#8B5CF6', 'solution-architect': '#7C3AED', 'technical-architect': '#9333EA', 'api-designer': '#A78BFA', // Data & AI (Green shades) 'data-scientist': '#10B981', 'ml-engineer': '#059669', 'data-engineer': '#34D399', 'ai-specialist': '#6EE7B7', // Security (Red shades) 'security-engineer': '#EF4444', 'security-architect': '#DC2626', 'compliance-auditor': '#F87171', 'vulnerability-scanner': '#FCA5A5', // DevOps & Infrastructure (Orange shades) 'devops-engineer': '#F97316', 'sre-engineer': '#EA580C', 'cloud-architect': '#FB923C', 'cicd-engineer': '#FDBA74', // Testing & QA (Yellow shades) 'qa-engineer': '#F59E0B', 'test-automation': '#D97706', 'performance-tester': '#FCD34D', 'security-tester': '#FDE68A', // Product & Business (Pink shades) 'product-manager': '#EC4899', 'business-analyst': '#DB2777', 'scrum-master': '#F472B6', 'project-manager': '#FBCFE8', // Documentation & Support (Teal shades) 'technical-writer': '#14B8A6', 'documentation-specialist': '#0D9488', 'api-documenter': '#5EEAD4', 'support-engineer': '#99F6E4', }; // Return specific color if mapped, otherwise generate based on category if (colorMap[agentName]) { return colorMap[agentName]; } // Default colors by category const categoryColors: Record<string, string> = { 'development': '#3B82F6', 'architecture': '#8B5CF6', 'data': '#10B981', 'security': '#EF4444', 'infrastructure': '#F97316', 'testing': '#F59E0B', 'management': '#EC4899', 'documentation': '#14B8A6', 'design': '#A78BFA', 'operations': '#F97316', }; // Return category color or default return categoryColors[category.toLowerCase()] || '#6B7280'; } } ```