octocode-cli 1.2.6 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -63
- package/README.md +85 -142
- package/out/octocode-cli.js +7026 -6945
- package/package.json +8 -6
- package/skills/README.md +97 -120
- package/skills/octocode-code-engineer/.claude/settings.local.json +18 -0
- package/skills/octocode-code-engineer/.octocode/rfc/RFC-code-engineer-weakness-fixes.md +255 -0
- package/skills/octocode-code-engineer/.plan/VALIDATED_PLAN.md +223 -0
- package/skills/octocode-code-engineer/README.md +178 -0
- package/skills/octocode-code-engineer/SKILL.md +418 -0
- package/skills/octocode-code-engineer/coverage/architecture.ts.html +7828 -0
- package/skills/octocode-code-engineer/coverage/ast-helpers.ts.html +211 -0
- package/skills/octocode-code-engineer/coverage/ast-search.ts.html +1795 -0
- package/skills/octocode-code-engineer/coverage/base.css +224 -0
- package/skills/octocode-code-engineer/coverage/block-navigation.js +87 -0
- package/skills/octocode-code-engineer/coverage/cache.ts.html +376 -0
- package/skills/octocode-code-engineer/coverage/cli.ts.html +982 -0
- package/skills/octocode-code-engineer/coverage/clover.xml +3217 -0
- package/skills/octocode-code-engineer/coverage/collect-effects.ts.html +664 -0
- package/skills/octocode-code-engineer/coverage/collect-input-sources.ts.html +577 -0
- package/skills/octocode-code-engineer/coverage/collect-performance.ts.html +331 -0
- package/skills/octocode-code-engineer/coverage/collect-prototype-pollution.ts.html +421 -0
- package/skills/octocode-code-engineer/coverage/collect-security.ts.html +604 -0
- package/skills/octocode-code-engineer/coverage/collect-test-profile.ts.html +589 -0
- package/skills/octocode-code-engineer/coverage/coverage-final.json +30 -0
- package/skills/octocode-code-engineer/coverage/dependencies.ts.html +997 -0
- package/skills/octocode-code-engineer/coverage/dependency-summary.ts.html +688 -0
- package/skills/octocode-code-engineer/coverage/discovery.ts.html +322 -0
- package/skills/octocode-code-engineer/coverage/favicon.png +0 -0
- package/skills/octocode-code-engineer/coverage/graph-analytics.ts.html +1510 -0
- package/skills/octocode-code-engineer/coverage/index.html +536 -0
- package/skills/octocode-code-engineer/coverage/index.ts.html +826 -0
- package/skills/octocode-code-engineer/coverage/metrics.ts.html +553 -0
- package/skills/octocode-code-engineer/coverage/pipeline.ts.html +2044 -0
- package/skills/octocode-code-engineer/coverage/prettify.css +1 -0
- package/skills/octocode-code-engineer/coverage/prettify.js +2 -0
- package/skills/octocode-code-engineer/coverage/report-analysis.ts.html +1570 -0
- package/skills/octocode-code-engineer/coverage/report-writer.ts.html +1102 -0
- package/skills/octocode-code-engineer/coverage/security-detectors.ts.html +1747 -0
- package/skills/octocode-code-engineer/coverage/semantic-detectors.ts.html +2152 -0
- package/skills/octocode-code-engineer/coverage/semantic.ts.html +1897 -0
- package/skills/octocode-code-engineer/coverage/sort-arrow-sprite.png +0 -0
- package/skills/octocode-code-engineer/coverage/sorter.js +210 -0
- package/skills/octocode-code-engineer/coverage/summary-md.ts.html +1222 -0
- package/skills/octocode-code-engineer/coverage/test-quality-detectors.ts.html +1039 -0
- package/skills/octocode-code-engineer/coverage/tree-sitter-analyzer.ts.html +955 -0
- package/skills/octocode-code-engineer/coverage/ts-analyzer.ts.html +1213 -0
- package/skills/octocode-code-engineer/coverage/types.ts.html +2473 -0
- package/skills/octocode-code-engineer/coverage/utils.ts.html +820 -0
- package/skills/octocode-code-engineer/eslint.config.mjs +54 -0
- package/skills/octocode-code-engineer/minify-scripts.mjs +32 -0
- package/skills/octocode-code-engineer/package.json +54 -0
- package/skills/octocode-code-engineer/references/agent-ast-reading-rfc.md +95 -0
- package/skills/octocode-code-engineer/references/architecture-techniques.md +121 -0
- package/skills/octocode-code-engineer/references/ast-search.md +210 -0
- package/skills/octocode-code-engineer/references/ast-tree-search.md +151 -0
- package/skills/octocode-code-engineer/references/cli-reference.md +167 -0
- package/skills/octocode-code-engineer/references/concepts.md +107 -0
- package/skills/octocode-code-engineer/references/finding-categories.md +128 -0
- package/skills/octocode-code-engineer/references/improvement-roadmap.md +304 -0
- package/skills/octocode-code-engineer/references/output-files.md +144 -0
- package/skills/octocode-code-engineer/references/playbooks.md +204 -0
- package/skills/octocode-code-engineer/references/present-results.md +136 -0
- package/skills/octocode-code-engineer/references/tool-workflows.md +566 -0
- package/skills/octocode-code-engineer/references/validate-investigate.md +225 -0
- package/skills/octocode-code-engineer/scripts/analysis/dependencies.js +1 -0
- package/skills/octocode-code-engineer/scripts/analysis/dependency-summary.js +1 -0
- package/skills/octocode-code-engineer/scripts/analysis/discovery.js +1 -0
- package/skills/octocode-code-engineer/scripts/analysis/graph-analytics.js +1 -0
- package/skills/octocode-code-engineer/scripts/analysis/semantic.js +1 -0
- package/skills/octocode-code-engineer/scripts/ast/helpers.js +1 -0
- package/skills/octocode-code-engineer/scripts/ast/metrics.js +1 -0
- package/skills/octocode-code-engineer/scripts/ast/search.js +2 -0
- package/skills/octocode-code-engineer/scripts/ast/tree-search.js +2 -0
- package/skills/octocode-code-engineer/scripts/ast/tree-sitter.js +1 -0
- package/skills/octocode-code-engineer/scripts/ast/ts-analyzer.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/chains.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/effects.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/input-sources.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/performance.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/prototype-pollution.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/security.js +1 -0
- package/skills/octocode-code-engineer/scripts/collectors/test-profile.js +1 -0
- package/skills/octocode-code-engineer/scripts/common/is-direct-run.js +1 -0
- package/skills/octocode-code-engineer/scripts/common/utils.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/code-quality.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/cohesion.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/coupling.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/cycle.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/dead-code.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/import-style.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/index.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/security.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/semantic.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/shared.js +1 -0
- package/skills/octocode-code-engineer/scripts/detectors/test-quality.js +1 -0
- package/skills/octocode-code-engineer/scripts/index.js +1 -0
- package/skills/octocode-code-engineer/scripts/pipeline/cache.js +1 -0
- package/skills/octocode-code-engineer/scripts/pipeline/cli.js +1 -0
- package/skills/octocode-code-engineer/scripts/pipeline/main.js +2 -0
- package/skills/octocode-code-engineer/scripts/reporting/analysis.js +1 -0
- package/skills/octocode-code-engineer/scripts/reporting/summary-md.js +1 -0
- package/skills/octocode-code-engineer/scripts/reporting/writer.js +1 -0
- package/skills/octocode-code-engineer/scripts/types/constants.js +1 -0
- package/skills/octocode-code-engineer/scripts/types/index.js +1 -0
- package/skills/octocode-code-engineer/scripts/types/interfaces.js +1 -0
- package/skills/octocode-code-engineer/src/analysis/dependencies.test.ts +545 -0
- package/skills/octocode-code-engineer/src/analysis/dependencies.ts +406 -0
- package/skills/octocode-code-engineer/src/analysis/dependency-summary.test.ts +566 -0
- package/skills/octocode-code-engineer/src/analysis/dependency-summary.ts +257 -0
- package/skills/octocode-code-engineer/src/analysis/discovery.test.ts +420 -0
- package/skills/octocode-code-engineer/src/analysis/discovery.ts +87 -0
- package/skills/octocode-code-engineer/src/analysis/graph-analytics.test.ts +449 -0
- package/skills/octocode-code-engineer/src/analysis/graph-analytics.ts +534 -0
- package/skills/octocode-code-engineer/src/analysis/semantic.test.ts +1533 -0
- package/skills/octocode-code-engineer/src/analysis/semantic.ts +830 -0
- package/skills/octocode-code-engineer/src/ast/helpers.test.ts +185 -0
- package/skills/octocode-code-engineer/src/ast/helpers.ts +62 -0
- package/skills/octocode-code-engineer/src/ast/metrics.test.ts +304 -0
- package/skills/octocode-code-engineer/src/ast/metrics.ts +204 -0
- package/skills/octocode-code-engineer/src/ast/search.test.ts +647 -0
- package/skills/octocode-code-engineer/src/ast/search.ts +648 -0
- package/skills/octocode-code-engineer/src/ast/tree-search.test.ts +199 -0
- package/skills/octocode-code-engineer/src/ast/tree-search.ts +392 -0
- package/skills/octocode-code-engineer/src/ast/tree-sitter.test.ts +407 -0
- package/skills/octocode-code-engineer/src/ast/tree-sitter.ts +402 -0
- package/skills/octocode-code-engineer/src/ast/ts-analyzer.test.ts +1864 -0
- package/skills/octocode-code-engineer/src/ast/ts-analyzer.ts +509 -0
- package/skills/octocode-code-engineer/src/collectors/chains.ts +74 -0
- package/skills/octocode-code-engineer/src/collectors/effects.test.ts +490 -0
- package/skills/octocode-code-engineer/src/collectors/effects.ts +332 -0
- package/skills/octocode-code-engineer/src/collectors/input-sources.test.ts +144 -0
- package/skills/octocode-code-engineer/src/collectors/input-sources.ts +196 -0
- package/skills/octocode-code-engineer/src/collectors/performance.test.ts +82 -0
- package/skills/octocode-code-engineer/src/collectors/performance.ts +141 -0
- package/skills/octocode-code-engineer/src/collectors/prototype-pollution.test.ts +55 -0
- package/skills/octocode-code-engineer/src/collectors/prototype-pollution.ts +162 -0
- package/skills/octocode-code-engineer/src/collectors/security.test.ts +124 -0
- package/skills/octocode-code-engineer/src/collectors/security.ts +309 -0
- package/skills/octocode-code-engineer/src/collectors/test-profile.test.ts +97 -0
- package/skills/octocode-code-engineer/src/collectors/test-profile.ts +269 -0
- package/skills/octocode-code-engineer/src/common/is-direct-run.test.ts +32 -0
- package/skills/octocode-code-engineer/src/common/is-direct-run.ts +13 -0
- package/skills/octocode-code-engineer/src/common/utils.test.ts +463 -0
- package/skills/octocode-code-engineer/src/common/utils.ts +304 -0
- package/skills/octocode-code-engineer/src/detectors/code-quality.ts +966 -0
- package/skills/octocode-code-engineer/src/detectors/cohesion.ts +539 -0
- package/skills/octocode-code-engineer/src/detectors/coupling.ts +323 -0
- package/skills/octocode-code-engineer/src/detectors/cycle.ts +349 -0
- package/skills/octocode-code-engineer/src/detectors/dead-code.ts +320 -0
- package/skills/octocode-code-engineer/src/detectors/import-style.ts +376 -0
- package/skills/octocode-code-engineer/src/detectors/index.test.ts +3061 -0
- package/skills/octocode-code-engineer/src/detectors/index.ts +88 -0
- package/skills/octocode-code-engineer/src/detectors/security.test.ts +882 -0
- package/skills/octocode-code-engineer/src/detectors/security.ts +821 -0
- package/skills/octocode-code-engineer/src/detectors/semantic.ts +758 -0
- package/skills/octocode-code-engineer/src/detectors/shared.ts +49 -0
- package/skills/octocode-code-engineer/src/detectors/test-quality.test.ts +388 -0
- package/skills/octocode-code-engineer/src/detectors/test-quality.ts +367 -0
- package/skills/octocode-code-engineer/src/index.test.ts +4425 -0
- package/skills/octocode-code-engineer/src/index.ts +403 -0
- package/skills/octocode-code-engineer/src/pipeline/cache.test.ts +199 -0
- package/skills/octocode-code-engineer/src/pipeline/cache.ts +130 -0
- package/skills/octocode-code-engineer/src/pipeline/cli.test.ts +493 -0
- package/skills/octocode-code-engineer/src/pipeline/cli.ts +344 -0
- package/skills/octocode-code-engineer/src/pipeline/main.test.ts +174 -0
- package/skills/octocode-code-engineer/src/pipeline/main.ts +1074 -0
- package/skills/octocode-code-engineer/src/pipeline.test.ts +84 -0
- package/skills/octocode-code-engineer/src/reporting/analysis.test.ts +782 -0
- package/skills/octocode-code-engineer/src/reporting/analysis.ts +688 -0
- package/skills/octocode-code-engineer/src/reporting/output-contract.test.ts +463 -0
- package/skills/octocode-code-engineer/src/reporting/summary-md.test.ts +421 -0
- package/skills/octocode-code-engineer/src/reporting/summary-md.ts +714 -0
- package/skills/octocode-code-engineer/src/reporting/writer.ts +430 -0
- package/skills/octocode-code-engineer/src/sanity.test.ts +47 -0
- package/skills/octocode-code-engineer/src/types/constants.ts +248 -0
- package/skills/octocode-code-engineer/src/types/index.ts +80 -0
- package/skills/octocode-code-engineer/src/types/interfaces.ts +682 -0
- package/skills/octocode-code-engineer/tsconfig.json +17 -0
- package/skills/octocode-code-engineer/vitest.config.ts +8 -0
- package/skills/octocode-documentation-writer/README.md +113 -0
- package/skills/octocode-documentation-writer/SKILL.md +886 -0
- package/skills/octocode-documentation-writer/references/agent-discovery-analysis.md +453 -0
- package/skills/octocode-documentation-writer/references/agent-documentation-writer.md +255 -0
- package/skills/octocode-documentation-writer/references/agent-engineer-questions.md +247 -0
- package/skills/octocode-documentation-writer/references/agent-orchestrator.md +370 -0
- package/skills/octocode-documentation-writer/references/agent-qa-validator.md +227 -0
- package/skills/octocode-documentation-writer/references/agent-researcher.md +250 -0
- package/skills/octocode-documentation-writer/schemas/analysis-schema.json +886 -0
- package/skills/octocode-documentation-writer/schemas/discovery-tasks.json +96 -0
- package/skills/octocode-documentation-writer/schemas/documentation-structure.json +373 -0
- package/skills/octocode-documentation-writer/schemas/partial-discovery-schema.json +102 -0
- package/skills/octocode-documentation-writer/schemas/partial-research-schema.json +98 -0
- package/skills/octocode-documentation-writer/schemas/qa-results-schema.json +113 -0
- package/skills/octocode-documentation-writer/schemas/questions-schema.json +228 -0
- package/skills/octocode-documentation-writer/schemas/research-schema.json +104 -0
- package/skills/octocode-documentation-writer/schemas/state-schema.json +222 -0
- package/skills/octocode-documentation-writer/schemas/work-assignments-schema.json +74 -0
- package/skills/octocode-plan/SKILL.md +122 -116
- package/skills/octocode-prompt-optimizer/SKILL.md +617 -0
- package/skills/octocode-pull-request-reviewer/README.md +249 -0
- package/skills/octocode-pull-request-reviewer/SKILL.md +479 -0
- package/skills/octocode-pull-request-reviewer/references/dependency-check.md +74 -0
- package/skills/octocode-pull-request-reviewer/references/domain-reviewers.md +24 -0
- package/skills/octocode-pull-request-reviewer/references/execution-lifecycle.md +441 -0
- package/skills/octocode-pull-request-reviewer/references/flow-analysis-protocol.md +64 -0
- package/skills/octocode-pull-request-reviewer/references/output-template.md +174 -0
- package/skills/octocode-pull-request-reviewer/references/parallel-agent-protocol.md +182 -0
- package/skills/octocode-pull-request-reviewer/references/review-guidelines.md +26 -0
- package/skills/octocode-pull-request-reviewer/references/verification-checklist.md +40 -0
- package/skills/octocode-research/.claude/settings.local.json +46 -0
- package/skills/octocode-research/.octocode/plan/code-review-fixes/plan.md +312 -0
- package/skills/octocode-research/.octocode/plan/code-review-fixes/research.md +212 -0
- package/skills/octocode-research/.octocode/plans/NODE_SERVER_START_PLAN.md +755 -0
- package/skills/octocode-research/.octocode/research/code-review/research.md +371 -0
- package/skills/octocode-research/.octocode/review/IMPROVEMENTS.md +391 -0
- package/skills/octocode-research/.octocode/review/REVIEW_PLAN.md +289 -0
- package/skills/octocode-research/.octocode/review/REVIEW_REPORT.md +356 -0
- package/skills/octocode-research/AGENTS.md +349 -0
- package/skills/octocode-research/README.md +494 -0
- package/skills/octocode-research/SKILL.md +652 -274
- package/skills/octocode-research/docs/API_REFERENCE.md +562 -0
- package/skills/octocode-research/docs/ARCHITECTURE.md +554 -0
- package/skills/octocode-research/docs/FLOWS.md +577 -0
- package/skills/octocode-research/docs/OVERVIEW.md +564 -0
- package/skills/octocode-research/docs/SERVER_FLOWS.md +631 -0
- package/skills/octocode-research/ecosystem.config.cjs +88 -0
- package/skills/octocode-research/eslint.config.mjs +27 -0
- package/skills/octocode-research/package.json +84 -0
- package/skills/octocode-research/references/GUARDRAILS.md +40 -0
- package/skills/octocode-research/references/PARALLEL_AGENT_PROTOCOL.md +178 -0
- package/skills/octocode-research/references/roast-prompt.md +149 -0
- package/skills/octocode-research/scripts/server-init.d.ts +2 -0
- package/skills/octocode-research/scripts/server-init.js +2 -0
- package/skills/octocode-research/scripts/server.d.ts +8 -0
- package/skills/octocode-research/scripts/server.js +445 -0
- package/skills/octocode-research/src/__tests__/integration/circuitBreaker.test.ts +205 -0
- package/skills/octocode-research/src/__tests__/integration/routes.test.ts +374 -0
- package/skills/octocode-research/src/__tests__/unit/circuitBreaker.test.ts +245 -0
- package/skills/octocode-research/src/__tests__/unit/errorHandler.test.ts +183 -0
- package/skills/octocode-research/src/__tests__/unit/httpPreprocess.test.ts +157 -0
- package/skills/octocode-research/src/__tests__/unit/logger.test.ts +143 -0
- package/skills/octocode-research/src/__tests__/unit/queryParser.test.ts +130 -0
- package/skills/octocode-research/src/__tests__/unit/responseBuilder.test.ts +469 -0
- package/skills/octocode-research/src/__tests__/unit/retry.test.ts +205 -0
- package/skills/octocode-research/src/index.ts +186 -0
- package/skills/octocode-research/src/mcpCache.ts +49 -0
- package/skills/octocode-research/src/middleware/errorHandler.ts +65 -0
- package/skills/octocode-research/src/middleware/logger.ts +61 -0
- package/skills/octocode-research/src/middleware/queryParser.ts +115 -0
- package/skills/octocode-research/src/middleware/readiness.ts +17 -0
- package/skills/octocode-research/src/routes/github.ts +197 -0
- package/skills/octocode-research/src/routes/local.ts +175 -0
- package/skills/octocode-research/src/routes/lsp.ts +177 -0
- package/skills/octocode-research/src/routes/package.ts +127 -0
- package/skills/octocode-research/src/routes/prompts.ts +138 -0
- package/skills/octocode-research/src/routes/tools.ts +677 -0
- package/skills/octocode-research/src/server-init.ts +363 -0
- package/skills/octocode-research/src/server.ts +285 -0
- package/skills/octocode-research/src/types/errorGuards.ts +151 -0
- package/skills/octocode-research/src/types/express.d.ts +76 -0
- package/skills/octocode-research/src/types/guards.ts +98 -0
- package/skills/octocode-research/src/types/mcp.ts +119 -0
- package/skills/octocode-research/src/types/responses.ts +199 -0
- package/skills/octocode-research/src/types/toolTypes.ts +33 -0
- package/skills/octocode-research/src/utils/asyncTimeout.ts +116 -0
- package/skills/octocode-research/src/utils/circuitBreaker.ts +492 -0
- package/skills/octocode-research/src/utils/colors.ts +53 -0
- package/skills/octocode-research/src/utils/errorQueue.ts +71 -0
- package/skills/octocode-research/src/utils/logEmoji.ts +103 -0
- package/skills/octocode-research/src/utils/logger.ts +413 -0
- package/skills/octocode-research/src/utils/resilience.ts +169 -0
- package/skills/octocode-research/src/utils/responseBuilder.ts +495 -0
- package/skills/octocode-research/src/utils/responseFactory.ts +100 -0
- package/skills/octocode-research/src/utils/responseParser.ts +272 -0
- package/skills/octocode-research/src/utils/retry.ts +280 -0
- package/skills/octocode-research/src/utils/routeFactory.ts +117 -0
- package/skills/octocode-research/src/utils/url.ts +20 -0
- package/skills/octocode-research/src/validation/httpPreprocess.ts +155 -0
- package/skills/octocode-research/src/validation/index.ts +2 -0
- package/skills/octocode-research/src/validation/schemas.ts +578 -0
- package/skills/octocode-research/src/validation/toolCallSchema.ts +132 -0
- package/skills/octocode-research/tsconfig.json +21 -0
- package/skills/octocode-research/tsdown.config.ts +42 -0
- package/skills/octocode-research/vitest.config.ts +20 -0
- package/skills/octocode-researcher/SKILL.md +461 -0
- package/skills/octocode-researcher/references/fallbacks.md +120 -0
- package/skills/{octocode-local-search → octocode-researcher}/references/tool-reference.md +132 -49
- package/skills/{octocode-local-search → octocode-researcher}/references/workflow-patterns.md +204 -4
- package/skills/octocode-rfc-generator/SKILL.md +223 -0
- package/skills/octocode-rfc-generator/references/rfc-template.md +193 -0
- package/skills/octocode-roast/SKILL.md +63 -21
- package/skills/octocode-implement/SKILL.md +0 -293
- package/skills/octocode-implement/references/execution-phases.md +0 -317
- package/skills/octocode-implement/references/tool-reference.md +0 -403
- package/skills/octocode-implement/references/workflow-patterns.md +0 -385
- package/skills/octocode-local-search/SKILL.md +0 -449
- package/skills/octocode-pr-review/SKILL.md +0 -391
- package/skills/octocode-pr-review/references/domain-reviewers.md +0 -105
- package/skills/octocode-pr-review/references/execution-lifecycle.md +0 -116
- package/skills/octocode-pr-review/references/research-flows.md +0 -75
- package/skills/octocode-research/references/tool-reference.md +0 -304
- package/skills/octocode-research/references/workflow-patterns.md +0 -325
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# Code Review: octocode-research Skill
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-01-22
|
|
4
|
+
**Target:** `/Users/guybary/Documents/octocode-mcp/skills/octocode-research`
|
|
5
|
+
**Version:** 2.2.0
|
|
6
|
+
**Overall Rating:** ⭐⭐⭐⭐☆ (Good Quality)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Research Goal
|
|
11
|
+
|
|
12
|
+
Comprehensive code review of the octocode-research skill covering architecture, API routes, utilities, middleware, validation, types, and test coverage.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Answer (TL;DR)
|
|
17
|
+
|
|
18
|
+
The codebase demonstrates **mature engineering practices** with clean architecture, comprehensive type safety via Zod schemas, and thoughtful resilience patterns (circuit breaker, retry, timeout). Key strengths include race condition prevention in server initialization, strong path traversal security, and a well-designed route factory pattern.
|
|
19
|
+
|
|
20
|
+
**Primary concerns requiring attention:**
|
|
21
|
+
1. Missing jitter in retry backoff (thundering herd risk)
|
|
22
|
+
2. No rate limiting middleware
|
|
23
|
+
3. Test coverage gaps for security-critical code (`safePath`, `readiness.ts`)
|
|
24
|
+
4. Some `any` types in Express declarations weakening type safety
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Details
|
|
29
|
+
|
|
30
|
+
### Codebase Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
src/
|
|
34
|
+
├── index.ts # Entry point/exports
|
|
35
|
+
├── server.ts # Main HTTP server (~8.9KB)
|
|
36
|
+
├── server-init.ts # Initialization with locking (~10.2KB)
|
|
37
|
+
├── mcpCache.ts # MCP content caching
|
|
38
|
+
├── middleware/
|
|
39
|
+
│ ├── errorHandler.ts # Centralized error handling
|
|
40
|
+
│ ├── logger.ts # Request logging with correlation IDs
|
|
41
|
+
│ ├── queryParser.ts # Batch query parsing
|
|
42
|
+
│ └── readiness.ts # Initialization gate
|
|
43
|
+
├── routes/
|
|
44
|
+
│ ├── github.ts # GitHub API routes
|
|
45
|
+
│ ├── local.ts # Local file operations
|
|
46
|
+
│ ├── lsp.ts # LSP integration
|
|
47
|
+
│ ├── package.ts # Package search
|
|
48
|
+
│ ├── prompts.ts # Prompt management
|
|
49
|
+
│ └── tools.ts # Tool execution (~20.2KB, largest)
|
|
50
|
+
├── types/
|
|
51
|
+
│ ├── errorGuards.ts # Error type guards
|
|
52
|
+
│ ├── express.d.ts # Express type augmentation
|
|
53
|
+
│ ├── guards.ts # General type guards
|
|
54
|
+
│ ├── mcp.ts # MCP types
|
|
55
|
+
│ ├── responses.ts # Response types
|
|
56
|
+
│ └── toolTypes.ts # Tool parameter types
|
|
57
|
+
├── utils/
|
|
58
|
+
│ ├── circuitBreaker.ts # Circuit breaker pattern (~14.1KB)
|
|
59
|
+
│ ├── retry.ts # Retry with backoff
|
|
60
|
+
│ ├── resilience.ts # Resilience composition
|
|
61
|
+
│ ├── responseBuilder.ts # Response construction
|
|
62
|
+
│ ├── logger.ts # File logging with rotation
|
|
63
|
+
│ └── ... (8 more utilities)
|
|
64
|
+
└── validation/
|
|
65
|
+
├── schemas.ts # Zod validation schemas (~18.7KB)
|
|
66
|
+
├── toolCallSchema.ts # Tool call validation
|
|
67
|
+
└── httpPreprocess.ts # HTTP input preprocessing
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Stats:** 45 TypeScript files, 8 directories, ~260KB source code
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Code Flows
|
|
75
|
+
|
|
76
|
+
### Server Startup Flow
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
npm run server-init
|
|
80
|
+
│
|
|
81
|
+
▼
|
|
82
|
+
┌─────────────────────┐
|
|
83
|
+
│ server-init.ts │
|
|
84
|
+
│ - Acquire lock │
|
|
85
|
+
│ - Check health │
|
|
86
|
+
│ - Start if needed │
|
|
87
|
+
└─────────────────────┘
|
|
88
|
+
│
|
|
89
|
+
▼
|
|
90
|
+
┌─────────────────────┐
|
|
91
|
+
│ server.ts │
|
|
92
|
+
│ - Create Express │
|
|
93
|
+
│ - Mount routes │
|
|
94
|
+
│ - Initialize MCP │
|
|
95
|
+
│ - PM2 ready signal │
|
|
96
|
+
└─────────────────────┘
|
|
97
|
+
│
|
|
98
|
+
▼
|
|
99
|
+
┌─────────────────────┐
|
|
100
|
+
│ Idle monitoring │
|
|
101
|
+
│ - 30min timeout │
|
|
102
|
+
│ - Auto-restart │
|
|
103
|
+
└─────────────────────┘
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Request Flow
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
Request
|
|
110
|
+
│
|
|
111
|
+
▼
|
|
112
|
+
┌──────────────────┐
|
|
113
|
+
│ express.json() │
|
|
114
|
+
└──────────────────┘
|
|
115
|
+
│
|
|
116
|
+
▼
|
|
117
|
+
┌──────────────────┐
|
|
118
|
+
│ Activity tracker │
|
|
119
|
+
└──────────────────┘
|
|
120
|
+
│
|
|
121
|
+
▼
|
|
122
|
+
┌──────────────────┐
|
|
123
|
+
│ requestLogger │
|
|
124
|
+
│ (X-Request-ID) │
|
|
125
|
+
└──────────────────┘
|
|
126
|
+
│
|
|
127
|
+
▼
|
|
128
|
+
┌──────────────────┐
|
|
129
|
+
│ readinessCheck │
|
|
130
|
+
│ (503 if init) │
|
|
131
|
+
└──────────────────┘
|
|
132
|
+
│
|
|
133
|
+
▼
|
|
134
|
+
┌──────────────────┐
|
|
135
|
+
│ Route handler │
|
|
136
|
+
│ ┌──────────────┐ │
|
|
137
|
+
│ │ Validation │ │
|
|
138
|
+
│ │ (Zod schema) │ │
|
|
139
|
+
│ └──────────────┘ │
|
|
140
|
+
│ ┌──────────────┐ │
|
|
141
|
+
│ │ Resilience │ │
|
|
142
|
+
│ │ timeout → │ │
|
|
143
|
+
│ │ circuit → │ │
|
|
144
|
+
│ │ retry │ │
|
|
145
|
+
│ └──────────────┘ │
|
|
146
|
+
│ ┌──────────────┐ │
|
|
147
|
+
│ │ MCP Tool │ │
|
|
148
|
+
│ └──────────────┘ │
|
|
149
|
+
│ ┌──────────────┐ │
|
|
150
|
+
│ │ Response │ │
|
|
151
|
+
│ │ Builder │ │
|
|
152
|
+
│ └──────────────┘ │
|
|
153
|
+
└──────────────────┘
|
|
154
|
+
│
|
|
155
|
+
▼
|
|
156
|
+
┌──────────────────┐
|
|
157
|
+
│ errorHandler │
|
|
158
|
+
│ (if error) │
|
|
159
|
+
└──────────────────┘
|
|
160
|
+
│
|
|
161
|
+
▼
|
|
162
|
+
Response
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Resilience Layer
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
withGitHubResilience(operation)
|
|
169
|
+
│
|
|
170
|
+
▼
|
|
171
|
+
┌─────────────────────────┐
|
|
172
|
+
│ withTimeout (30s) │
|
|
173
|
+
│ ┌─────────────────────┐ │
|
|
174
|
+
│ │ withCircuitBreaker │ │
|
|
175
|
+
│ │ ┌─────────────────┐ │ │
|
|
176
|
+
│ │ │ withRetry │ │ │
|
|
177
|
+
│ │ │ (3 attempts, │ │ │
|
|
178
|
+
│ │ │ exp backoff) │ │ │
|
|
179
|
+
│ │ └─────────────────┘ │ │
|
|
180
|
+
│ └─────────────────────┘ │
|
|
181
|
+
└─────────────────────────┘
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Key Findings
|
|
187
|
+
|
|
188
|
+
### Strengths
|
|
189
|
+
|
|
190
|
+
#### 1. Race Condition Prevention (`server-init.ts:60-130`)
|
|
191
|
+
- File-based locking with PID tracking
|
|
192
|
+
- Stale lock detection (checks if PID process is alive)
|
|
193
|
+
- Atomic lock acquisition using `O_CREAT | O_EXCL` flags
|
|
194
|
+
- Exponential backoff in health polling
|
|
195
|
+
|
|
196
|
+
#### 2. Path Security (`httpPreprocess.ts:64-108`)
|
|
197
|
+
```typescript
|
|
198
|
+
export const safePath = z.string().refine((p) => {
|
|
199
|
+
if (p.includes('\0')) return false; // Null byte injection
|
|
200
|
+
const normalized = path.normalize(p);
|
|
201
|
+
if (normalized.includes('..')) return false; // Directory traversal
|
|
202
|
+
if (os.platform() !== 'win32' && p.includes('\\')) return false;
|
|
203
|
+
// URL-encoded traversal patterns checked
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
#### 3. Circuit Breaker Implementation (`circuitBreaker.ts`)
|
|
208
|
+
- Clean state machine (closed → open → half-open → closed)
|
|
209
|
+
- Memory leak prevention with `cleanupStaleCircuits()`, MAX_CIRCUITS=100
|
|
210
|
+
- Per-tool circuit isolation
|
|
211
|
+
- `CircuitOpenError` includes `retryAfterMs` for informed backoff
|
|
212
|
+
|
|
213
|
+
#### 4. Route Factory Pattern (`routeFactory.ts:21-45`)
|
|
214
|
+
```typescript
|
|
215
|
+
export function createRouteHandler<TQuery, TParams, TResponse>(
|
|
216
|
+
config: RouteConfig<TQuery, TParams, TResponse>
|
|
217
|
+
): RequestHandler {
|
|
218
|
+
// Consistent: validation → resilience → transform → response
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### 5. Comprehensive Type Guards (`types/guards.ts`, `types/errorGuards.ts`)
|
|
223
|
+
- Properly narrowing type guards using `is` return types
|
|
224
|
+
- Utility functions: `hasProperty`, `hasStringProperty`, `getErrorStatus`
|
|
225
|
+
|
|
226
|
+
### Issues
|
|
227
|
+
|
|
228
|
+
#### High Priority
|
|
229
|
+
|
|
230
|
+
| Issue | File:Line | Impact |
|
|
231
|
+
|-------|-----------|--------|
|
|
232
|
+
| Missing jitter in retry backoff | `retry.ts:129` | Thundering herd on rate limits |
|
|
233
|
+
| No rate limiting middleware | All routes | Abuse/DDoS vulnerability |
|
|
234
|
+
| Test setup doesn't match server | `routes.test.ts:78-81` | Tests may pass but miss real bugs |
|
|
235
|
+
| No tests for safePath validator | `httpPreprocess.ts` | Security code untested |
|
|
236
|
+
|
|
237
|
+
#### Medium Priority
|
|
238
|
+
|
|
239
|
+
| Issue | File:Line | Impact |
|
|
240
|
+
|-------|-----------|--------|
|
|
241
|
+
| `any` types in Express declarations | `express.d.ts:16,24,25,28,37` | Loses type safety |
|
|
242
|
+
| Pre-configured circuits can be deleted | `circuitBreaker.ts:415-419` | Circuits lose custom config |
|
|
243
|
+
| package.ts doesn't use factory | `package.ts:14-40` | Inconsistent error handling |
|
|
244
|
+
| GET routes lack MAX_QUERIES check | `queryParser.ts` | Resource exhaustion |
|
|
245
|
+
| No path length validation | `httpPreprocess.ts` | DoS via long paths |
|
|
246
|
+
| Initialization resolves early | `server.ts:225-248` | Callers may assume ready |
|
|
247
|
+
|
|
248
|
+
#### Low Priority
|
|
249
|
+
|
|
250
|
+
| Issue | File:Line | Impact |
|
|
251
|
+
|-------|-----------|--------|
|
|
252
|
+
| Hardcoded PORT, timeouts | `server.ts:16-18` | Inflexible deployment |
|
|
253
|
+
| Inconsistent logging (emojis) | `circuitBreaker.ts` | Log parsing issues |
|
|
254
|
+
| AbortController not passed through | `tools.ts` POST handler | Can't cancel mid-flight |
|
|
255
|
+
| Untyped catch blocks | Multiple files | Weaker type safety |
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Edge Cases / Caveats
|
|
260
|
+
|
|
261
|
+
### Known Limitations
|
|
262
|
+
|
|
263
|
+
1. **Comma in query values** - `toArray` preprocessor splits on comma without escaping, so values containing commas will be incorrectly split
|
|
264
|
+
|
|
265
|
+
2. **Float handling** - `toNumber` preprocessor only handles integers (`/^\d+$/`), floats passed as strings
|
|
266
|
+
|
|
267
|
+
3. **404 handler isolation** - 404 handler sends response directly without calling `next()`, so it bypasses errorHandler middleware
|
|
268
|
+
|
|
269
|
+
4. **Test environment drift** - Integration tests mount routes at `/` instead of `/tools`, may miss path-related bugs
|
|
270
|
+
|
|
271
|
+
### Security Considerations
|
|
272
|
+
|
|
273
|
+
| Area | Status | Notes |
|
|
274
|
+
|------|--------|-------|
|
|
275
|
+
| Path Traversal | ✅ Protected | Multiple attack vectors blocked |
|
|
276
|
+
| Input Validation | ✅ Comprehensive | Zod schemas on all inputs |
|
|
277
|
+
| Error Exposure | ⚠️ Partial | Validation details exposed to clients |
|
|
278
|
+
| Rate Limiting | ❌ Missing | Add express-rate-limit |
|
|
279
|
+
| DoS Prevention | ⚠️ Partial | No path length limit |
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Recommendations
|
|
284
|
+
|
|
285
|
+
### Immediate Actions
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// 1. Add jitter to retry.ts:129
|
|
289
|
+
const jitter = 0.5 + Math.random(); // 0.5 to 1.5
|
|
290
|
+
delay = Math.min(delay * config.backoffMultiplier * jitter, config.maxDelayMs);
|
|
291
|
+
|
|
292
|
+
// 2. Add rate limiting to server.ts
|
|
293
|
+
import rateLimit from 'express-rate-limit';
|
|
294
|
+
app.use(rateLimit({ windowMs: 60000, max: 100 }));
|
|
295
|
+
|
|
296
|
+
// 3. Add path length validation to httpPreprocess.ts
|
|
297
|
+
if (p.length > 4096) return false; // Before other checks
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Short-term
|
|
301
|
+
|
|
302
|
+
4. Add unit tests for `safePath` security validation
|
|
303
|
+
5. Add unit tests for `readiness.ts` middleware
|
|
304
|
+
6. Refactor `package.ts` to use `createRouteHandler`
|
|
305
|
+
7. Fix `routes.test.ts` to mount at `/tools` with full middleware
|
|
306
|
+
|
|
307
|
+
### Long-term
|
|
308
|
+
|
|
309
|
+
8. Replace `any` with `unknown` in Express type declarations
|
|
310
|
+
9. Extract configuration to environment variables
|
|
311
|
+
10. Consider OpenAPI spec generation from Zod schemas
|
|
312
|
+
11. Add structured JSON logging option for production
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Test Coverage Summary
|
|
317
|
+
|
|
318
|
+
| Component | Tested | Missing |
|
|
319
|
+
|-----------|--------|---------|
|
|
320
|
+
| Circuit breaker | ✅ Excellent | - |
|
|
321
|
+
| Retry logic | ✅ Excellent | - |
|
|
322
|
+
| Response builder | ✅ Excellent | - |
|
|
323
|
+
| Error handler | ✅ Good | Stack trace exposure |
|
|
324
|
+
| Logger | ⚠️ Partial | requestLogger middleware |
|
|
325
|
+
| Query parser | ⚠️ Partial | parseAndValidate function |
|
|
326
|
+
| Schemas | ⚠️ Partial | Transform functions |
|
|
327
|
+
| Readiness | ❌ None | Full middleware |
|
|
328
|
+
| safePath | ❌ None | Security validation |
|
|
329
|
+
| Routes integration | ⚠️ Fair | Config doesn't match server |
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## References
|
|
334
|
+
|
|
335
|
+
### Architecture & Entry Points
|
|
336
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/server.ts` - Main server
|
|
337
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/server-init.ts` - Initialization
|
|
338
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/index.ts` - Exports
|
|
339
|
+
|
|
340
|
+
### Routes
|
|
341
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/tools.ts` - Tool execution (largest)
|
|
342
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/github.ts` - GitHub API
|
|
343
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/local.ts` - Local files
|
|
344
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/lsp.ts` - LSP integration
|
|
345
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/package.ts` - Package search
|
|
346
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/routes/prompts.ts` - Prompts
|
|
347
|
+
|
|
348
|
+
### Utilities
|
|
349
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/utils/circuitBreaker.ts` - Circuit breaker
|
|
350
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/utils/retry.ts` - Retry logic
|
|
351
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/utils/resilience.ts` - Resilience composition
|
|
352
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/utils/responseBuilder.ts` - Response building
|
|
353
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/utils/logger.ts` - File logging
|
|
354
|
+
|
|
355
|
+
### Validation
|
|
356
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/validation/schemas.ts` - Zod schemas
|
|
357
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/validation/httpPreprocess.ts` - Security validation
|
|
358
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/validation/toolCallSchema.ts` - Tool call validation
|
|
359
|
+
|
|
360
|
+
### Types
|
|
361
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/types/express.d.ts` - Express augmentation
|
|
362
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/types/guards.ts` - Type guards
|
|
363
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/types/errorGuards.ts` - Error guards
|
|
364
|
+
|
|
365
|
+
### Tests
|
|
366
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/__tests__/unit/` - Unit tests
|
|
367
|
+
- `/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src/__tests__/integration/` - Integration tests
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
Created by Octocode Research Agent 🔍🐙
|