octocode-cli 1.2.5 → 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 +86 -109
- package/out/octocode-cli.js +7027 -7014
- 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,182 @@
|
|
|
1
|
+
# Multi-Agent Parallelization & Swarm Strategy
|
|
2
|
+
|
|
3
|
+
## When to Parallelize
|
|
4
|
+
|
|
5
|
+
| PR Size | Files | Mode | Agent Strategy |
|
|
6
|
+
|---------|-------|------|----------------|
|
|
7
|
+
| Small | ≤5 | Quick | No agents — single-pass review |
|
|
8
|
+
| Medium | 6-15 | Full | 2 parallel agents (Flow + Domains) |
|
|
9
|
+
| Large | 16-30 | Full | 3 parallel agents (Flow + Security + Domains) |
|
|
10
|
+
| XL | 30+ | Full | 4 parallel agents (Flow + Security + Architecture + Domains) |
|
|
11
|
+
|
|
12
|
+
**IF** Quick mode → FORBIDDEN to spawn agents. Single-pass only.
|
|
13
|
+
**IF** Full mode AND >5 files → MUST use parallel agents for Phase 4 (Analysis).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Swarm Architecture
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
┌─────────────────────┐
|
|
21
|
+
│ ORCHESTRATOR (you) │
|
|
22
|
+
│ Phases 1-3, 5-6 │
|
|
23
|
+
└──────────┬──────────┘
|
|
24
|
+
│ Phase 4: Spawn agents
|
|
25
|
+
┌──────────┼──────────┐──────────┐
|
|
26
|
+
▼ ▼ ▼ ▼
|
|
27
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
28
|
+
│ Agent A │ │ Agent B │ │ Agent C │ │ Agent D │
|
|
29
|
+
│ Flow │ │ Security │ │ Arch + │ │ Guidelines│
|
|
30
|
+
│ Impact │ │ + Errors │ │ Quality │ │ + Dupes │
|
|
31
|
+
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘
|
|
32
|
+
│ │ │ │
|
|
33
|
+
└──────────┬──┴─────────────┴─────────────┘
|
|
34
|
+
▼
|
|
35
|
+
┌─────────────────────┐
|
|
36
|
+
│ ORCHESTRATOR │
|
|
37
|
+
│ Merge + Dedupe │
|
|
38
|
+
│ Phase 5-6 │
|
|
39
|
+
└─────────────────────┘
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**CRITICAL: All agent Task calls MUST be in a SINGLE message for true parallel execution.**
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Agent Definitions
|
|
47
|
+
|
|
48
|
+
### Agent A: Flow Impact Analyst
|
|
49
|
+
- **Scope**: Flow Impact domain + blast radius mapping
|
|
50
|
+
- **Tools**: `localSearchCode` → `lspCallHierarchy(incoming)` → `lspFindReferences` → `githubSearchCode`
|
|
51
|
+
- **Task**: For every modified function/method/type in the diff:
|
|
52
|
+
1. Call `localSearchCode` to get lineHint for each symbol
|
|
53
|
+
2. Call `lspCallHierarchy(incoming, depth=1)` to find all callers
|
|
54
|
+
3. Call `lspFindReferences` for changed types/interfaces
|
|
55
|
+
4. Document: symbol name, file:line, caller count, breaking change (yes/no)
|
|
56
|
+
- **Output**: List of `{ symbol, file:line, callers: [{file:line, impact}], breaking: bool }`
|
|
57
|
+
- **Prompt template**:
|
|
58
|
+
```
|
|
59
|
+
You are a Flow Impact Analyst. Review the following PR diff and trace ALL
|
|
60
|
+
modified functions/methods/types to find their callers and consumers.
|
|
61
|
+
|
|
62
|
+
PR diff: {diff_summary}
|
|
63
|
+
Modified symbols: {list_of_changed_functions_types}
|
|
64
|
+
Repo: {owner}/{repo}
|
|
65
|
+
|
|
66
|
+
For EACH modified symbol:
|
|
67
|
+
1. Use localSearchCode(pattern="symbolName") to get lineHint
|
|
68
|
+
2. Use lspCallHierarchy(symbolName, lineHint, direction="incoming") for functions
|
|
69
|
+
3. Use lspFindReferences(symbolName, lineHint) for types/interfaces
|
|
70
|
+
4. Document the blast radius
|
|
71
|
+
|
|
72
|
+
Return findings as structured list with file:line citations.
|
|
73
|
+
FORBIDDEN: Guessing lineHint. ALWAYS search first.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Agent B: Security & Error Handling Reviewer
|
|
77
|
+
- **Scope**: Security scan + Error Handling domain
|
|
78
|
+
- **Tools**: `localSearchCode` → `githubGetFileContent(matchString=...)` → `localGetFileContent`
|
|
79
|
+
- **Task**:
|
|
80
|
+
1. Scan changed files for: hardcoded secrets, SQL injection, XSS, data exposure, auth bypass
|
|
81
|
+
2. Check error handling: swallowed exceptions, missing context, unclear messages
|
|
82
|
+
3. Verify input validation on new endpoints/functions
|
|
83
|
+
4. Check for regulatory compliance patterns (GDPR, HIPAA)
|
|
84
|
+
- **Output**: List of `{ issue, file:line, severity, confidence, fix }`
|
|
85
|
+
- **Prompt template**:
|
|
86
|
+
```
|
|
87
|
+
You are a Security & Error Handling Reviewer. Scan the following PR diff
|
|
88
|
+
for security vulnerabilities and error handling issues.
|
|
89
|
+
|
|
90
|
+
PR diff: {diff_content}
|
|
91
|
+
Changed files: {file_list}
|
|
92
|
+
|
|
93
|
+
Security checks: injection, XSS, data exposure, auth bypass, hardcoded secrets
|
|
94
|
+
Error handling checks: swallowed exceptions, missing context, unclear messages
|
|
95
|
+
|
|
96
|
+
Use localSearchCode to find patterns, githubGetFileContent for context.
|
|
97
|
+
Return findings with file:line, severity, confidence, and fix.
|
|
98
|
+
ONLY flag issues in CHANGED code ('+' lines).
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Agent C: Architecture & Code Quality Reviewer
|
|
102
|
+
- **Scope**: Architecture domain + Code Quality domain + Performance domain
|
|
103
|
+
- **Tools**: `githubViewRepoStructure` → `localViewStructure` → `localSearchCode` → `githubGetFileContent`
|
|
104
|
+
- **Task**:
|
|
105
|
+
1. Check changed code against repo patterns and conventions
|
|
106
|
+
2. Detect: coupling, circular deps, wrong module placement, naming violations
|
|
107
|
+
3. Performance: O(n²), blocking ops, missing cache, unbatched operations
|
|
108
|
+
4. Check for TODO/FIXME in new code
|
|
109
|
+
- **Output**: List of `{ issue, domain, file:line, severity, confidence, fix }`
|
|
110
|
+
- **Prompt template**:
|
|
111
|
+
```
|
|
112
|
+
You are an Architecture & Code Quality Reviewer. Analyze the following PR diff
|
|
113
|
+
for architectural issues, code quality problems, and performance concerns.
|
|
114
|
+
|
|
115
|
+
PR diff: {diff_content}
|
|
116
|
+
Changed files: {file_list}
|
|
117
|
+
Repo structure: {structure_summary}
|
|
118
|
+
|
|
119
|
+
Check: pattern violations, coupling, naming, O(n²), blocking ops, magic numbers
|
|
120
|
+
Use githubViewRepoStructure to understand repo layout.
|
|
121
|
+
Use localSearchCode to find existing patterns for comparison.
|
|
122
|
+
Return findings with file:line, domain, severity, confidence, and fix.
|
|
123
|
+
ONLY flag issues in CHANGED code ('+' lines).
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Agent D: Guidelines & Duplicate Code Reviewer (only if guidelines loaded)
|
|
127
|
+
- **Scope**: Guidelines compliance + Duplicate Code domain
|
|
128
|
+
- **Tools**: `localSearchCode` → `githubSearchCode` → `localGetFileContent` → `githubGetFileContent`
|
|
129
|
+
- **Task**:
|
|
130
|
+
1. Check each changed file against loaded guidelines (from Phase 1)
|
|
131
|
+
2. Search for existing utilities/patterns that new code could reuse
|
|
132
|
+
3. Flag DRY violations across the codebase
|
|
133
|
+
- **Output**: List of `{ guideline_source, rule, status: PASS/VIOLATION, file:line }` + duplicate findings
|
|
134
|
+
- **Prompt template**:
|
|
135
|
+
```
|
|
136
|
+
You are a Guidelines & Duplicate Code Reviewer.
|
|
137
|
+
|
|
138
|
+
Guidelines context:
|
|
139
|
+
{guidelines_context_from_phase_1}
|
|
140
|
+
|
|
141
|
+
PR diff: {diff_content}
|
|
142
|
+
Changed files: {file_list}
|
|
143
|
+
|
|
144
|
+
Task 1: For each changed file, check compliance against every loaded guideline rule.
|
|
145
|
+
Task 2: Use localSearchCode/githubSearchCode to find existing utilities that new code duplicates.
|
|
146
|
+
Return: guidelines compliance table + duplicate code findings with file:line.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Scaling Rules
|
|
152
|
+
|
|
153
|
+
| Agents | Condition | Which Agents |
|
|
154
|
+
|--------|-----------|-------------|
|
|
155
|
+
| 0 | Quick mode OR ≤5 files | None — single-pass |
|
|
156
|
+
| 2 | 6-15 files, no guidelines | A (Flow) + C (Arch+Quality) |
|
|
157
|
+
| 3 | 16-30 files OR guidelines loaded | A (Flow) + B (Security) + C (Arch+Quality) |
|
|
158
|
+
| 3 | 6-15 files + guidelines loaded | A (Flow) + C (Arch+Quality) + D (Guidelines) |
|
|
159
|
+
| 4 | 30+ files + guidelines loaded | A + B + C + D (all agents) |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Merge Protocol (Phase 5 — Orchestrator)
|
|
164
|
+
|
|
165
|
+
After all agents return, the orchestrator MUST:
|
|
166
|
+
|
|
167
|
+
1. **Collect**: Gather all findings from all agents into a single list
|
|
168
|
+
2. **Dedupe**: Remove findings with the same root cause or same file:line
|
|
169
|
+
- **IF** two agents report the same issue → keep the one with higher confidence
|
|
170
|
+
- **IF** same file:line but different domains → merge into single finding, list both domains
|
|
171
|
+
3. **Cross-check**: Verify agent findings against existing PR comments (Phase 2)
|
|
172
|
+
4. **Prioritize**: Sort by severity (HIGH → MED → LOW), then by domain weight:
|
|
173
|
+
- Security > Bug > Flow Impact > Architecture > Performance > Quality > Duplicates
|
|
174
|
+
5. **Cap**: Select top ~5-7 most impactful findings
|
|
175
|
+
6. **Enrich**: For each finding, ensure file:line + confidence + code fix exists
|
|
176
|
+
|
|
177
|
+
**FORBIDDEN:**
|
|
178
|
+
- Spawning agents in Quick mode
|
|
179
|
+
- Spawning >4 agents (diminishing returns, context overhead)
|
|
180
|
+
- Agents modifying files or writing output directly
|
|
181
|
+
- Spawning agents sequentially (MUST be single-message parallel)
|
|
182
|
+
- Proceeding to Phase 6 before ALL agents have returned
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Review Guidelines
|
|
2
|
+
|
|
3
|
+
<confidence>
|
|
4
|
+
|
|
5
|
+
| Level | Certainty | Action |
|
|
6
|
+
|-------|-----------|--------|
|
|
7
|
+
| **HIGH** | Verified issue exists | MUST include |
|
|
8
|
+
| **MED** | Likely issue, missing context | MUST include with caveat |
|
|
9
|
+
| **LOW** | Uncertain | Investigate more OR skip |
|
|
10
|
+
|
|
11
|
+
**Note**: Confidence is NOT Severity. HIGH confidence typo = Low Priority. LOW confidence security flaw = flag but mark uncertain.
|
|
12
|
+
</confidence>
|
|
13
|
+
|
|
14
|
+
<review_mindset>
|
|
15
|
+
**Core Principle: Focus on CHANGED Code Only**
|
|
16
|
+
- **Added code**: Lines with '+' prefix
|
|
17
|
+
- **Modified code**: New implementation ('+') while considering removed context
|
|
18
|
+
- **Deleted code**: Only comment if removal creates new risks
|
|
19
|
+
|
|
20
|
+
**MUST include when**: HIGH/MED confidence + NEW code ('+' prefix) + real problem + actionable fix
|
|
21
|
+
**FORBIDDEN to suggest when**: LOW confidence, unchanged code, style-only, caught by linters/compilers, already commented by others
|
|
22
|
+
</review_mindset>
|
|
23
|
+
|
|
24
|
+
<structural_code_vision>
|
|
25
|
+
**Think Like a Parser**: Visualize AST (Entry → Functions → Imports/Calls). Trace `import {X} from 'Y'` → GO TO 'Y'. Follow flow: Entry → Propagation → Termination. Ignore noise.
|
|
26
|
+
</structural_code_vision>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Verification Checklist
|
|
2
|
+
|
|
3
|
+
<verification>
|
|
4
|
+
Before delivering review, ALL items MUST be checked:
|
|
5
|
+
|
|
6
|
+
**Target & Mode:**
|
|
7
|
+
- [ ] Review target determined (PR Mode or Local Mode)
|
|
8
|
+
- [ ] **Local Mode**: `ENABLE_LOCAL=true` verified (local tools responding)
|
|
9
|
+
|
|
10
|
+
**Phase Completion — PR Mode:**
|
|
11
|
+
- [ ] Phase 1: User asked for guidelines/context files
|
|
12
|
+
- [ ] Phase 2: PR metadata, diff, and comments fetched via Octocode MCP
|
|
13
|
+
- [ ] Phase 3: TL;DR summary presented, user checkpoint completed
|
|
14
|
+
- [ ] Phase 4: All search queries executed, flow impact analyzed (Full mode)
|
|
15
|
+
- [ ] Phase 5: Findings deduplicated, verified against guidelines
|
|
16
|
+
- [ ] Phase 6: Chat summary presented, user asked before doc creation
|
|
17
|
+
|
|
18
|
+
**Phase Completion — Local Mode:**
|
|
19
|
+
- [ ] Phase 1: User asked for guidelines/context files
|
|
20
|
+
- [ ] Phase 2: `git status` + `git diff` collected, changed files enumerated via local tools
|
|
21
|
+
- [ ] Phase 3: TL;DR summary (local template) presented, user checkpoint completed
|
|
22
|
+
- [ ] Phase 4: All search queries executed via `local*` + `lsp*` tools, flow impact analyzed (Full mode)
|
|
23
|
+
- [ ] Phase 5: Findings deduplicated, verified against guidelines
|
|
24
|
+
- [ ] Phase 6: Chat summary presented, user asked before doc creation
|
|
25
|
+
|
|
26
|
+
**Finding Quality:**
|
|
27
|
+
- [ ] All findings cite exact `file:line` locations
|
|
28
|
+
- [ ] Every finding has an actionable fix with code diff
|
|
29
|
+
- [ ] Confidence level (HIGH/MED) assigned to each finding
|
|
30
|
+
- [ ] Findings capped per Phase 5 limit
|
|
31
|
+
- [ ] No duplicates with existing PR comments (PR Mode only)
|
|
32
|
+
- [ ] Previous review comments verified for resolution (PR Mode only)
|
|
33
|
+
|
|
34
|
+
**Guidelines & Tools:**
|
|
35
|
+
- [ ] Guidelines loaded and applied throughout analysis (if provided)
|
|
36
|
+
- [ ] Guidelines Compliance section included in report (if guidelines loaded)
|
|
37
|
+
- [ ] All code research done via Octocode MCP tools (not shell commands for reading/searching)
|
|
38
|
+
- [ ] Flow impact analyzed for all modified functions (LSP tools in Local Mode)
|
|
39
|
+
- [ ] Security issues flagged prominently
|
|
40
|
+
</verification>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(./install.sh:*)",
|
|
5
|
+
"Bash(curl:*)",
|
|
6
|
+
"Bash(npm run build:*)",
|
|
7
|
+
"Bash(tree:*)",
|
|
8
|
+
"Bash(npm test:*)",
|
|
9
|
+
"Skill(octocode-research)",
|
|
10
|
+
"Bash(npm run server:*)",
|
|
11
|
+
"Bash(npm run server:start:*)",
|
|
12
|
+
"Bash(npm install)",
|
|
13
|
+
"Bash(grep:*)",
|
|
14
|
+
"Bash(npm run build:dev:*)",
|
|
15
|
+
"Bash(npm install:*)",
|
|
16
|
+
"Bash(./cli tools/info/githubViewRepoStructure:*)",
|
|
17
|
+
"Bash(./cli tools/info/githubSearchCode:*)",
|
|
18
|
+
"Bash(lsof:*)",
|
|
19
|
+
"Bash(xargs kill:*)",
|
|
20
|
+
"Bash(./cli health:*)",
|
|
21
|
+
"Bash(./cli system:*)",
|
|
22
|
+
"Bash(./cli prompts:*)",
|
|
23
|
+
"Bash(./cli localSearchCode:*)",
|
|
24
|
+
"Bash(./cli prompts/info/research:*)",
|
|
25
|
+
"mcp__octocode-local__localViewStructure",
|
|
26
|
+
"mcp__octocode-local__localSearchCode",
|
|
27
|
+
"mcp__octocode-local__lspFindReferences",
|
|
28
|
+
"mcp__octocode-local__localGetFileContent",
|
|
29
|
+
"Bash(npx tsc:*)",
|
|
30
|
+
"Bash(npm run lint:*)",
|
|
31
|
+
"Bash(npx tsdown)",
|
|
32
|
+
"Bash(xargs:*)",
|
|
33
|
+
"Bash(npm run server:stop:*)",
|
|
34
|
+
"Bash(yarn build)",
|
|
35
|
+
"Bash(yarn test:*)",
|
|
36
|
+
"Bash(yarn lint:fix:*)",
|
|
37
|
+
"mcp__octocode__packageSearch",
|
|
38
|
+
"Bash(npm run server-init:*)",
|
|
39
|
+
"mcp__octocode-local__localFindFiles",
|
|
40
|
+
"Bash(python3:*)",
|
|
41
|
+
"Bash(# Test: read a file with sensitive content curl -s -X POST http://localhost:1987/tools/call/localGetFileContent -H \"\"Content-Type: application/json\"\" -d ''{\"\"queries\"\":[{\"\"path\"\":\"\"/etc/hosts\"\",\"\"fullContent\"\":true}]}'' 2>&1 | python3 -m json.tool)",
|
|
42
|
+
"Bash(# Test: URL encoded path traversal curl -s -X POST http://localhost:1987/tools/call/localSearchCode -H \"\"Content-Type: application/json\"\" -d ''{\"\"queries\"\":[{\"\"pattern\"\":\"\"root\"\",\"\"path\"\":\"\"/etc\"\"}]}'' 2>&1 | python3 -m json.tool)",
|
|
43
|
+
"Bash(# Test: can we access user home directory files? \\(just check if /Users/guybary is allowed root\\) curl -s -X POST http://localhost:1987/tools/call/localSearchCode -H \"\"Content-Type: application/json\"\" -d ''{\"\"queries\"\":[{\"\"pattern\"\":\"\"password\"\",\"\"path\"\":\"\"/Users/guybary\"\",\"\"maxFiles\"\":1,\"\"filesOnly\"\":true}]}'' 2>&1 | python3 -m json.tool)"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Plan: Fix CODE_REVIEW_FINDINGS Issues
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Fix 9 verified issues from the code review findings in the `skills/octocode-research` package. Prioritized by security impact and type safety, with code quality improvements deferred to later phases.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Research Findings
|
|
10
|
+
|
|
11
|
+
See [research.md](./research.md) for detailed analysis.
|
|
12
|
+
|
|
13
|
+
**Key Patterns Discovered:**
|
|
14
|
+
- Server binding issue is a single-line fix
|
|
15
|
+
- Type safety issues require generic type parameters
|
|
16
|
+
- Fire-and-forget patterns are intentional but need error visibility
|
|
17
|
+
- File splitting is straightforward based on existing code structure
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Implementation Steps
|
|
22
|
+
|
|
23
|
+
### Phase 1: Security Fixes (HIGH Priority)
|
|
24
|
+
|
|
25
|
+
#### 1. [ ] Bind server to localhost only
|
|
26
|
+
**File:** `src/server.ts:118`
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// Before
|
|
30
|
+
const httpServer = app.listen(PORT);
|
|
31
|
+
|
|
32
|
+
// After
|
|
33
|
+
const httpServer = app.listen(PORT, '127.0.0.1');
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Validation:** Server should only be accessible from localhost.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
#### 2. [ ] Remove path from 404 error response
|
|
41
|
+
**File:** `src/server.ts:64-67`
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
// Before
|
|
45
|
+
res.status(404).json({
|
|
46
|
+
success: false,
|
|
47
|
+
error: {
|
|
48
|
+
message: `Route not found: ${req.method} ${req.path}`,
|
|
49
|
+
|
|
50
|
+
// After
|
|
51
|
+
res.status(404).json({
|
|
52
|
+
success: false,
|
|
53
|
+
error: {
|
|
54
|
+
message: 'Route not found',
|
|
55
|
+
code: 'NOT_FOUND'
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Validation:** 404 responses should not include request details.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
#### 3. [ ] Guard or remove debug logging
|
|
65
|
+
**File:** `src/middleware/queryParser.ts:57`
|
|
66
|
+
|
|
67
|
+
**Option A - Environment guard:**
|
|
68
|
+
```typescript
|
|
69
|
+
if (process.env.NODE_ENV === 'development') {
|
|
70
|
+
console.debug('[QueryParser] JSON parsing failed, trying single query mode', {
|
|
71
|
+
error: e instanceof Error ? e.message : String(e),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Option B - Remove entirely (recommended):**
|
|
77
|
+
```typescript
|
|
78
|
+
// Remove the console.debug block - the code handles the fallback silently
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Validation:** No user input logged in production.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
#### 4. [ ] Ensure stack traces not exposed to clients
|
|
86
|
+
**File:** `src/utils/logger.ts:210`
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
// Before
|
|
90
|
+
console.error(errorLog(`[ERROR] ${message}`), error || '');
|
|
91
|
+
|
|
92
|
+
// After - only log error message, not full stack in production
|
|
93
|
+
const errorDetail = process.env.NODE_ENV === 'development'
|
|
94
|
+
? error
|
|
95
|
+
: (error instanceof Error ? error.message : String(error));
|
|
96
|
+
console.error(errorLog(`[ERROR] ${message}`), errorDetail);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Validation:** Stack traces only in development mode.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### Phase 2: Type Safety Fixes (HIGH Priority)
|
|
104
|
+
|
|
105
|
+
#### 5. [ ] Add proper types to toQueryParams
|
|
106
|
+
**File:** `src/types/toolTypes.ts:14`
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// Before
|
|
110
|
+
export function toQueryParams(validated: any): any {
|
|
111
|
+
|
|
112
|
+
// After
|
|
113
|
+
export interface QueryParams {
|
|
114
|
+
[key: string]: unknown;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function toQueryParams<T extends Record<string, unknown>>(
|
|
118
|
+
validated: T
|
|
119
|
+
): QueryParams {
|
|
120
|
+
// Implementation - transform validated schema output to query params
|
|
121
|
+
const result: QueryParams = {};
|
|
122
|
+
for (const [key, value] of Object.entries(validated)) {
|
|
123
|
+
if (value !== undefined) {
|
|
124
|
+
result[key] = value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Validation:** TypeScript compilation with strict mode.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
#### 6. [ ] Add proper types to ToolFn
|
|
136
|
+
**File:** `src/routes/tools.ts:350`
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// Before
|
|
140
|
+
type ToolFn = (params: { queries: any[] }) => Promise<any>;
|
|
141
|
+
|
|
142
|
+
// After
|
|
143
|
+
import { ToolResponse } from '../types/responses';
|
|
144
|
+
|
|
145
|
+
interface ToolQuery {
|
|
146
|
+
mainResearchGoal?: string;
|
|
147
|
+
researchGoal?: string;
|
|
148
|
+
reasoning?: string;
|
|
149
|
+
[key: string]: unknown;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
type ToolFn<TQuery extends ToolQuery = ToolQuery> = (
|
|
153
|
+
params: { queries: TQuery[] }
|
|
154
|
+
) => Promise<ToolResponse>;
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Note:** This may require updating tool handler type casts. Consider using generics for specific tools.
|
|
158
|
+
|
|
159
|
+
**Validation:** TypeScript compilation, all tool registrations compile.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### Phase 3: Code Quality (MEDIUM Priority)
|
|
164
|
+
|
|
165
|
+
#### 7. [ ] Export isNonEmptyString guard
|
|
166
|
+
**File:** `src/types/guards.ts:11`
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// Before
|
|
170
|
+
function isNonEmptyString(value: unknown): value is string {
|
|
171
|
+
|
|
172
|
+
// After
|
|
173
|
+
export function isNonEmptyString(value: unknown): value is string {
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Alternative:** If intentionally private, add comment:
|
|
177
|
+
```typescript
|
|
178
|
+
/** @internal Used only by isStringArray */
|
|
179
|
+
function isNonEmptyString(value: unknown): value is string {
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Validation:** If exported, verify no naming conflicts.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
#### 8. [ ] Create bounded error queue for fire-and-forget
|
|
187
|
+
**File:** Create `src/utils/errorQueue.ts`
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
/**
|
|
191
|
+
* Bounded queue for fire-and-forget operation errors.
|
|
192
|
+
* Provides visibility into async errors without blocking main flow.
|
|
193
|
+
*/
|
|
194
|
+
class ErrorQueue {
|
|
195
|
+
private errors: Array<{ timestamp: Date; error: Error; context?: string }> = [];
|
|
196
|
+
private readonly maxSize: number;
|
|
197
|
+
|
|
198
|
+
constructor(maxSize = 100) {
|
|
199
|
+
this.maxSize = maxSize;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
push(error: unknown, context?: string): void {
|
|
203
|
+
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
204
|
+
|
|
205
|
+
this.errors.push({
|
|
206
|
+
timestamp: new Date(),
|
|
207
|
+
error: normalizedError,
|
|
208
|
+
context
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
// Bounded: remove oldest when full
|
|
212
|
+
if (this.errors.length > this.maxSize) {
|
|
213
|
+
this.errors.shift();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
getRecent(count = 10): Array<{ timestamp: Date; error: Error; context?: string }> {
|
|
218
|
+
return this.errors.slice(-count);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
clear(): void {
|
|
222
|
+
this.errors = [];
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
get size(): number {
|
|
226
|
+
return this.errors.length;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export const errorQueue = new ErrorQueue();
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Update fire-and-forget locations:**
|
|
234
|
+
```typescript
|
|
235
|
+
// Before
|
|
236
|
+
logSessionError(toolName, errorCode).catch(() => {});
|
|
237
|
+
|
|
238
|
+
// After
|
|
239
|
+
import { errorQueue } from '../utils/errorQueue';
|
|
240
|
+
logSessionError(toolName, errorCode).catch(err => errorQueue.push(err, 'logSessionError'));
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Files to update:**
|
|
244
|
+
- `src/middleware/errorHandler.ts:37`
|
|
245
|
+
- `src/routes/prompts.ts:110`
|
|
246
|
+
- `src/routes/tools.ts:522`
|
|
247
|
+
- `src/server.ts:136`
|
|
248
|
+
- `src/utils/circuitBreaker.ts:174, 186`
|
|
249
|
+
- `src/utils/logger.ts:127`
|
|
250
|
+
|
|
251
|
+
**Validation:** Error queue populated on failures, main flow not blocked.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
### Phase 4: Refactoring (LOW Priority - Future)
|
|
256
|
+
|
|
257
|
+
#### 9. [ ] Split tools.ts into smaller modules
|
|
258
|
+
**Current:** `src/routes/tools.ts` (555 lines)
|
|
259
|
+
|
|
260
|
+
**Proposed structure:**
|
|
261
|
+
```
|
|
262
|
+
src/routes/tools/
|
|
263
|
+
index.ts - Route definitions, exports
|
|
264
|
+
handlers.ts - Tool execution logic
|
|
265
|
+
registry.ts - Tool registration and lookup
|
|
266
|
+
types.ts - ToolFn and related types
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Approach:**
|
|
270
|
+
1. Create `src/routes/tools/` directory
|
|
271
|
+
2. Extract `ToolFn` type and registry to `registry.ts`
|
|
272
|
+
3. Extract handler logic to `handlers.ts`
|
|
273
|
+
4. Keep route definitions in `index.ts`
|
|
274
|
+
5. Update imports in dependent files
|
|
275
|
+
|
|
276
|
+
**Validation:** All existing tests pass, no functional changes.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Risk Areas
|
|
281
|
+
|
|
282
|
+
| Risk | Mitigation |
|
|
283
|
+
|------|------------|
|
|
284
|
+
| Type changes break existing code | Incremental changes with compilation checks |
|
|
285
|
+
| Localhost binding breaks remote testing | Document `--host` flag for remote access if needed |
|
|
286
|
+
| Error queue memory growth | Bounded queue with max 100 entries |
|
|
287
|
+
| File splitting breaks imports | Update all import paths, run full test suite |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Validation Checklist
|
|
292
|
+
|
|
293
|
+
- [ ] `npm run build` passes
|
|
294
|
+
- [ ] `npm run lint` passes
|
|
295
|
+
- [ ] `npm test` passes
|
|
296
|
+
- [ ] Server only accessible from localhost
|
|
297
|
+
- [ ] 404 responses don't include paths
|
|
298
|
+
- [ ] No TypeScript `any` in modified files
|
|
299
|
+
- [ ] Fire-and-forget errors captured in queue
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Implementation Order
|
|
304
|
+
|
|
305
|
+
1. **Phase 1** - Security fixes (steps 1-4) - Do first, low risk
|
|
306
|
+
2. **Phase 2** - Type safety (steps 5-6) - May require iteration
|
|
307
|
+
3. **Phase 3** - Code quality (steps 7-8) - Independent of above
|
|
308
|
+
4. **Phase 4** - Refactoring (step 9) - Defer until after validation
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
Created by Octocode MCP https://octocode.ai
|