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,554 @@
|
|
|
1
|
+
# Octocode Research Skill - Architecture Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `octocode-research` skill is an HTTP API server that provides code research capabilities. By default it runs on `localhost:1987` and exposes REST endpoints that wrap the `octocode-mcp` tool functions. The host and port can be overridden via the `OCTOCODE_RESEARCH_HOST` and `OCTOCODE_RESEARCH_PORT` environment variables.
|
|
6
|
+
|
|
7
|
+
**Key Design**: All tools are executed via a unified `POST /tools/call/:toolName` endpoint, NOT individual GET routes.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
13
|
+
│ HTTP Client (curl, fetch) │
|
|
14
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
15
|
+
│
|
|
16
|
+
▼
|
|
17
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
18
|
+
│ Express Server (port 1987) │
|
|
19
|
+
│ ┌─────────────────────────────────────────────────────────────┐ │
|
|
20
|
+
│ │ Middleware Layer │ │
|
|
21
|
+
│ │ • requestLogger - logs all tool calls │ │
|
|
22
|
+
│ │ • express.json - parses JSON body │ │
|
|
23
|
+
│ │ • readiness - server readiness check │ │
|
|
24
|
+
│ │ • errorHandler - standardizes error responses │ │
|
|
25
|
+
│ └─────────────────────────────────────────────────────────────┘ │
|
|
26
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
27
|
+
│
|
|
28
|
+
▼
|
|
29
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
30
|
+
│ Route Handlers │
|
|
31
|
+
│ • /tools/* - Tool discovery and execution (MAIN API) │
|
|
32
|
+
│ • /prompts/* - Prompt discovery │
|
|
33
|
+
│ • /health - Health check endpoint │
|
|
34
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
35
|
+
│
|
|
36
|
+
▼
|
|
37
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
38
|
+
│ octocode-mcp Package │
|
|
39
|
+
│ ┌─────────────────────────────────────────────────────────────┐ │
|
|
40
|
+
│ │ Tool Execution Functions │ │
|
|
41
|
+
│ │ • executeRipgrepSearch (local code search) │ │
|
|
42
|
+
│ │ • executeFetchContent (local file read) │ │
|
|
43
|
+
│ │ • executeViewStructure (directory tree) │ │
|
|
44
|
+
│ │ • executeFindFiles (file metadata search) │ │
|
|
45
|
+
│ │ • executeGotoDefinition (LSP definition) │ │
|
|
46
|
+
│ │ • executeFindReferences (LSP references) │ │
|
|
47
|
+
│ │ • executeCallHierarchy (LSP call hierarchy) │ │
|
|
48
|
+
│ │ • searchMultipleGitHubCode (GitHub code search) │ │
|
|
49
|
+
│ │ • fetchMultipleGitHubFileContents (GitHub file read) │ │
|
|
50
|
+
│ │ • exploreMultipleRepositoryStructures (GitHub repo tree) │ │
|
|
51
|
+
│ │ • searchMultipleGitHubRepos (GitHub repo search) │ │
|
|
52
|
+
│ │ • searchMultipleGitHubPullRequests (GitHub PR search) │ │
|
|
53
|
+
│ │ • searchPackages (npm/PyPI search) │ │
|
|
54
|
+
│ └─────────────────────────────────────────────────────────────┘ │
|
|
55
|
+
│ ┌─────────────────────────────────────────────────────────────┐ │
|
|
56
|
+
│ │ Bulk Operation Processing │ │
|
|
57
|
+
│ │ • executeBulkOperation - processes query arrays │ │
|
|
58
|
+
│ │ • Error isolation per query │ │
|
|
59
|
+
│ │ • Concurrent execution with limits │ │
|
|
60
|
+
│ └─────────────────────────────────────────────────────────────┘ │
|
|
61
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
62
|
+
│
|
|
63
|
+
▼
|
|
64
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
65
|
+
│ External Systems │
|
|
66
|
+
│ • Local filesystem (ripgrep, grep, fs) │
|
|
67
|
+
│ • GitHub API (via Octokit) │
|
|
68
|
+
│ • NPM Registry API │
|
|
69
|
+
│ • PyPI API │
|
|
70
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Directory Structure
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
octocode-research/
|
|
77
|
+
├── src/
|
|
78
|
+
│ ├── server.ts # Express server setup, route mounting
|
|
79
|
+
│ ├── index.ts # Re-exports from octocode-mcp
|
|
80
|
+
│ ├── mcpCache.ts # MCP content caching
|
|
81
|
+
│ ├── routes/
|
|
82
|
+
│ │ ├── tools.ts # /tools/* - MAIN API (list, info, call, system)
|
|
83
|
+
│ │ ├── prompts.ts # /prompts/list, /prompts/info
|
|
84
|
+
│ │ ├── local.ts # Handler logic (used by tools.ts TOOL_REGISTRY)
|
|
85
|
+
│ │ ├── lsp.ts # Handler logic (used by tools.ts TOOL_REGISTRY)
|
|
86
|
+
│ │ ├── github.ts # Handler logic (used by tools.ts TOOL_REGISTRY)
|
|
87
|
+
│ │ └── package.ts # Handler logic (used by tools.ts TOOL_REGISTRY)
|
|
88
|
+
│ ├── middleware/
|
|
89
|
+
│ │ ├── queryParser.ts # Query validation with Zod
|
|
90
|
+
│ │ ├── errorHandler.ts # Error response formatting
|
|
91
|
+
│ │ ├── logger.ts # Request/response logging
|
|
92
|
+
│ │ └── readiness.ts # Server readiness check
|
|
93
|
+
│ ├── validation/
|
|
94
|
+
│ │ ├── schemas.ts # Zod schemas for all endpoints
|
|
95
|
+
│ │ ├── httpPreprocess.ts # Query string conversion (string→number/boolean/array)
|
|
96
|
+
│ │ └── index.ts # Schema exports
|
|
97
|
+
│ ├── utils/
|
|
98
|
+
│ │ ├── circuitBreaker.ts # Circuit breaker pattern (3 states)
|
|
99
|
+
│ │ ├── colors.ts # Console output coloring
|
|
100
|
+
│ │ ├── logger.ts # File-based logging to ~/.octocode/logs/
|
|
101
|
+
│ │ ├── resilience.ts # Combined circuit breaker + retry wrappers
|
|
102
|
+
│ │ ├── responseBuilder.ts # Research-specific response formatting
|
|
103
|
+
│ │ ├── responseFactory.ts # Safe data extraction utilities
|
|
104
|
+
│ │ ├── responseParser.ts # MCP response parsing, hints extraction
|
|
105
|
+
│ │ ├── retry.ts # Retry with exponential backoff
|
|
106
|
+
│ │ └── routeFactory.ts # createRouteHandler() factory pattern
|
|
107
|
+
│ ├── types/
|
|
108
|
+
│ ├── express.d.ts # Express type extensions
|
|
109
|
+
│ ├── toolTypes.ts # Tool type definitions
|
|
110
|
+
│ ├── mcp.ts # MCP type definitions
|
|
111
|
+
│ ├── responses.ts # Response type definitions
|
|
112
|
+
│ └── guards.ts # Type guard utilities
|
|
113
|
+
│ └── __tests__/
|
|
114
|
+
│ ├── integration/ # Integration tests
|
|
115
|
+
│ └── unit/ # Unit tests
|
|
116
|
+
├── scripts/ # Bundled JavaScript (tsdown)
|
|
117
|
+
├── docs/ # Architecture documentation
|
|
118
|
+
├── references/ # Quick reference guides
|
|
119
|
+
├── SKILL.md # Skill manifest & usage guide
|
|
120
|
+
└── package.json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Data Flow
|
|
124
|
+
|
|
125
|
+
### 1. Request Processing
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
HTTP Request: POST /tools/call/localSearchCode
|
|
129
|
+
Body: { "queries": [{ "pattern": "foo", "path": "/src", ... }] }
|
|
130
|
+
│
|
|
131
|
+
▼
|
|
132
|
+
┌─────────────────────────────────────────────┐
|
|
133
|
+
│ requestLogger middleware │
|
|
134
|
+
│ - Logs: tool, route, method, params │
|
|
135
|
+
│ - Writes to ~/.octocode/logs/tools.log │
|
|
136
|
+
└─────────────────────────────────────────────┘
|
|
137
|
+
│
|
|
138
|
+
▼
|
|
139
|
+
┌─────────────────────────────────────────────┐
|
|
140
|
+
│ Route Handler (routes/tools.ts) │
|
|
141
|
+
│ POST /tools/call/:toolName │
|
|
142
|
+
│ │
|
|
143
|
+
│ 1. Lookup tool in TOOL_REGISTRY │
|
|
144
|
+
│ 2. Validate queries array (1-3 items) │
|
|
145
|
+
│ 3. Get resilience wrapper for category │
|
|
146
|
+
│ 4. Execute: resilience(() => toolFn(params))│
|
|
147
|
+
│ 5. Parse response with parseToolResponse() │
|
|
148
|
+
│ 6. Return { tool, success, data, hints } │
|
|
149
|
+
└─────────────────────────────────────────────┘
|
|
150
|
+
│
|
|
151
|
+
▼
|
|
152
|
+
┌─────────────────────────────────────────────┐
|
|
153
|
+
│ octocode-mcp Tool Function │
|
|
154
|
+
│ 1. executeBulkOperation(queries, processor) │
|
|
155
|
+
│ 2. processor(query) for each query │
|
|
156
|
+
│ 3. Aggregate results with status tracking │
|
|
157
|
+
│ 4. Return CallToolResult │
|
|
158
|
+
└─────────────────────────────────────────────┘
|
|
159
|
+
│
|
|
160
|
+
▼
|
|
161
|
+
HTTP Response (JSON)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 2. Tool Registry
|
|
165
|
+
|
|
166
|
+
The `routes/tools.ts` file contains a `TOOL_REGISTRY` that maps tool names to their functions and resilience wrappers:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
const TOOL_REGISTRY: Record<string, ToolEntry> = {
|
|
170
|
+
// GitHub tools
|
|
171
|
+
githubSearchCode: { fn: githubSearchCode, resilience: withGitHubResilience, category: 'github' },
|
|
172
|
+
githubGetFileContent: { fn: githubGetFileContent, resilience: withGitHubResilience, category: 'github' },
|
|
173
|
+
// ... more github tools
|
|
174
|
+
|
|
175
|
+
// Local tools
|
|
176
|
+
localSearchCode: { fn: localSearchCode, resilience: withLocalResilience, category: 'local' },
|
|
177
|
+
localGetFileContent: { fn: localGetFileContent, resilience: withLocalResilience, category: 'local' },
|
|
178
|
+
// ... more local tools
|
|
179
|
+
|
|
180
|
+
// LSP tools
|
|
181
|
+
lspGotoDefinition: { fn: lspGotoDefinition, resilience: withLspResilience, category: 'lsp' },
|
|
182
|
+
lspFindReferences: { fn: lspFindReferences, resilience: withLspResilience, category: 'lsp' },
|
|
183
|
+
lspCallHierarchy: { fn: lspCallHierarchy, resilience: withLspResilience, category: 'lsp' },
|
|
184
|
+
|
|
185
|
+
// Package tools
|
|
186
|
+
packageSearch: { fn: packageSearch, resilience: withPackageResilience, category: 'package' },
|
|
187
|
+
};
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 3. Response Format
|
|
191
|
+
|
|
192
|
+
Tool execution returns a simplified response:
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
{
|
|
196
|
+
tool: "localSearchCode",
|
|
197
|
+
success: true,
|
|
198
|
+
data: { /* parsed tool response data */ },
|
|
199
|
+
hints: ["Use lineHint for LSP tools", ...],
|
|
200
|
+
research: {
|
|
201
|
+
mainResearchGoal: "...",
|
|
202
|
+
researchGoal: "...",
|
|
203
|
+
reasoning: "..."
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 4. Route Factory Pattern (for legacy route handlers)
|
|
209
|
+
|
|
210
|
+
The individual route files (`local.ts`, `lsp.ts`, etc.) use `createRouteHandler()` from `src/utils/routeFactory.ts`:
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
createRouteHandler({
|
|
214
|
+
schema: zodSchema, // Zod validation schema
|
|
215
|
+
toParams: (query) => ({ queries }), // Transform to MCP format
|
|
216
|
+
toolFn: localSearchCode, // Tool function from index.ts
|
|
217
|
+
toolName: 'localSearchCode', // For logging/resilience
|
|
218
|
+
resilience: withLocalResilience, // Circuit breaker + retry
|
|
219
|
+
transform: (parsed, queries) => { // Response transformation
|
|
220
|
+
return ResearchResponse.searchResults({ ... });
|
|
221
|
+
},
|
|
222
|
+
})
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
> **Note**: These route handlers are NOT mounted in production. They're used for tests and as reference implementations.
|
|
226
|
+
|
|
227
|
+
## Endpoint Reference
|
|
228
|
+
|
|
229
|
+
### Meta Tools (MAIN API)
|
|
230
|
+
|
|
231
|
+
| Endpoint | Method | Description |
|
|
232
|
+
|----------|--------|-------------|
|
|
233
|
+
| `/health` | GET | Server health, memory, circuit states |
|
|
234
|
+
| `/tools/list` | GET | List all available tools (concise) |
|
|
235
|
+
| `/tools/info/:toolName` | GET | Get tool schema and hints |
|
|
236
|
+
| `/tools/call/:toolName` | **POST** | **Execute any tool** |
|
|
237
|
+
| `/tools/system` | GET | Get system prompt |
|
|
238
|
+
| `/tools/metadata` | GET | Get raw metadata (advanced) |
|
|
239
|
+
| `/prompts/list` | GET | List available prompts |
|
|
240
|
+
| `/prompts/info/:promptName` | GET | Get prompt details |
|
|
241
|
+
|
|
242
|
+
### Tool Execution
|
|
243
|
+
|
|
244
|
+
**All tools are executed via POST /tools/call/:toolName**
|
|
245
|
+
|
|
246
|
+
| Tool Name | Category | Description |
|
|
247
|
+
|-----------|----------|-------------|
|
|
248
|
+
| `localSearchCode` | Local | Search code with ripgrep |
|
|
249
|
+
| `localGetFileContent` | Local | Read local file content |
|
|
250
|
+
| `localViewStructure` | Local | View directory tree |
|
|
251
|
+
| `localFindFiles` | Local | Find files by metadata |
|
|
252
|
+
| `lspGotoDefinition` | LSP | Go to symbol definition |
|
|
253
|
+
| `lspFindReferences` | LSP | Find all references |
|
|
254
|
+
| `lspCallHierarchy` | LSP | Call hierarchy |
|
|
255
|
+
| `githubSearchCode` | GitHub | Search code |
|
|
256
|
+
| `githubGetFileContent` | GitHub | Read file |
|
|
257
|
+
| `githubViewRepoStructure` | GitHub | Repo tree |
|
|
258
|
+
| `githubSearchRepositories` | GitHub | Search repos |
|
|
259
|
+
| `githubSearchPullRequests` | GitHub | Search PRs |
|
|
260
|
+
| `packageSearch` | Package | Search npm/PyPI |
|
|
261
|
+
|
|
262
|
+
## Research Context Parameters
|
|
263
|
+
|
|
264
|
+
All tools accept these parameters for context tracking:
|
|
265
|
+
|
|
266
|
+
| Parameter | Purpose |
|
|
267
|
+
|-----------|---------|
|
|
268
|
+
| `mainResearchGoal` | Overall research objective (constant across session) |
|
|
269
|
+
| `researchGoal` | This specific query's goal |
|
|
270
|
+
| `reasoning` | Why this approach/query helps |
|
|
271
|
+
|
|
272
|
+
## Resilience Features
|
|
273
|
+
|
|
274
|
+
### 1. Combined Resilience Layer (`src/utils/resilience.ts`)
|
|
275
|
+
|
|
276
|
+
Four pre-configured resilience wrappers combine circuit breaker + retry:
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
// Usage in TOOL_REGISTRY:
|
|
280
|
+
withGitHubResilience(operation, toolName) // GitHub API calls
|
|
281
|
+
withLspResilience(operation, toolName) // Language server protocol
|
|
282
|
+
withLocalResilience(operation, toolName) // Local filesystem ops
|
|
283
|
+
withPackageResilience(operation, toolName) // npm/PyPI queries
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 2. Retry Logic (`src/utils/retry.ts`)
|
|
287
|
+
|
|
288
|
+
Exponential backoff per service category:
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
const RETRY_CONFIGS = {
|
|
292
|
+
lsp: {
|
|
293
|
+
maxAttempts: 3,
|
|
294
|
+
initialDelayMs: 500,
|
|
295
|
+
maxDelayMs: 5000,
|
|
296
|
+
backoffMultiplier: 2,
|
|
297
|
+
retryOn: (err) => isLspNotReady(err) || isTimeout(err) || isConnectionRefused(err)
|
|
298
|
+
},
|
|
299
|
+
github: {
|
|
300
|
+
maxAttempts: 3,
|
|
301
|
+
initialDelayMs: 1000,
|
|
302
|
+
maxDelayMs: 30000,
|
|
303
|
+
backoffMultiplier: 3,
|
|
304
|
+
retryOn: (err) => isRateLimited(err) || isServerError(err) || isTimeout(err)
|
|
305
|
+
},
|
|
306
|
+
package: {
|
|
307
|
+
maxAttempts: 3,
|
|
308
|
+
initialDelayMs: 1000,
|
|
309
|
+
maxDelayMs: 15000,
|
|
310
|
+
backoffMultiplier: 2,
|
|
311
|
+
retryOn: (err) => isRateLimited(err) || isServerError(err) || isTimeout(err)
|
|
312
|
+
},
|
|
313
|
+
local: {
|
|
314
|
+
maxAttempts: 2,
|
|
315
|
+
initialDelayMs: 100,
|
|
316
|
+
maxDelayMs: 1000,
|
|
317
|
+
backoffMultiplier: 2,
|
|
318
|
+
retryOn: (err) => isFileBusy(err) || isTimeout(err)
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### 3. Circuit Breaker (`src/utils/circuitBreaker.ts`)
|
|
324
|
+
|
|
325
|
+
Prevents cascading failures with three states:
|
|
326
|
+
|
|
327
|
+
| State | Behavior |
|
|
328
|
+
|-------|----------|
|
|
329
|
+
| **Closed** | Normal operation - requests pass through, failures tracked |
|
|
330
|
+
| **Open** | Service unavailable - immediately reject/fallback |
|
|
331
|
+
| **Half-Open** | After reset timeout, allows probe request to test recovery |
|
|
332
|
+
|
|
333
|
+
**Default Configuration:**
|
|
334
|
+
- `failureThreshold`: 3 failures before opening
|
|
335
|
+
- `successThreshold`: 2 successes to close from half-open
|
|
336
|
+
- `resetTimeoutMs`: 30000ms (30 seconds)
|
|
337
|
+
|
|
338
|
+
**Per-Service Overrides:**
|
|
339
|
+
```typescript
|
|
340
|
+
// LSP - shorter timeout for local service
|
|
341
|
+
configureCircuit('lsp', {
|
|
342
|
+
failureThreshold: 3,
|
|
343
|
+
successThreshold: 1,
|
|
344
|
+
resetTimeoutMs: 10000, // 10s
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// GitHub - longer timeout for rate limits
|
|
348
|
+
configureCircuit('github', {
|
|
349
|
+
failureThreshold: 2,
|
|
350
|
+
successThreshold: 1,
|
|
351
|
+
resetTimeoutMs: 60000, // 60s
|
|
352
|
+
});
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
**Key Functions:**
|
|
356
|
+
- `withCircuitBreaker(name, operation, fallback?)` - Execute with protection
|
|
357
|
+
- `getCircuitState(name)` - Monitor circuit health
|
|
358
|
+
- `configureCircuit(name, config)` - Customize thresholds
|
|
359
|
+
- `resetCircuit(name)` - Manual reset
|
|
360
|
+
- `getAllCircuitStates()` - Health dashboard (used in /health endpoint)
|
|
361
|
+
|
|
362
|
+
### 4. Rate Limit Handling
|
|
363
|
+
|
|
364
|
+
GitHub API rate limits are tracked from response headers:
|
|
365
|
+
- Warns when approaching limits
|
|
366
|
+
- Provides reset time hints
|
|
367
|
+
- Suggests alternative tools when limited
|
|
368
|
+
|
|
369
|
+
### 5. Readiness Check (`src/middleware/readiness.ts`)
|
|
370
|
+
|
|
371
|
+
Ensures the MCP server is initialized before handling requests. Returns `503 SERVER_INITIALIZING` if the server hasn't completed startup.
|
|
372
|
+
|
|
373
|
+
### 6. Idle Auto-Restart (`src/server.ts`)
|
|
374
|
+
|
|
375
|
+
The server automatically restarts after 1 hour of inactivity to free resources and reset state.
|
|
376
|
+
|
|
377
|
+
**Configuration:**
|
|
378
|
+
```typescript
|
|
379
|
+
const MAX_IDLE_TIME_MS = 3600000; // 1 hour
|
|
380
|
+
const IDLE_CHECK_INTERVAL_MS = 300000; // Check every 5 minutes
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Flow:**
|
|
384
|
+
```
|
|
385
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
386
|
+
│ Server Lifecycle │
|
|
387
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
388
|
+
│ │
|
|
389
|
+
│ START │
|
|
390
|
+
│ │ │
|
|
391
|
+
│ ▼ │
|
|
392
|
+
│ ┌──────────────────┐ │
|
|
393
|
+
│ │ Server Running │◄──────────────────────────────────┐ │
|
|
394
|
+
│ └────────┬─────────┘ │ │
|
|
395
|
+
│ │ │ │
|
|
396
|
+
│ │ Every 5 minutes │ │
|
|
397
|
+
│ ▼ │ │
|
|
398
|
+
│ ┌──────────────────┐ idle < 60m ┌───────────┐│ │
|
|
399
|
+
│ │ checkIdleRestart │ ─────────────────► │ Continue ││ │
|
|
400
|
+
│ └────────┬─────────┘ └───────────┘│ │
|
|
401
|
+
│ │ │ │
|
|
402
|
+
│ │ idle > 60m │ │
|
|
403
|
+
│ ▼ │ │
|
|
404
|
+
│ ┌──────────────────┐ │ │
|
|
405
|
+
│ │ gracefulShutdown │ │ │
|
|
406
|
+
│ │ (IDLE_TIMEOUT) │ │ │
|
|
407
|
+
│ └────────┬─────────┘ │ │
|
|
408
|
+
│ │ │ │
|
|
409
|
+
│ ▼ │ │
|
|
410
|
+
│ ┌──────────────────┐ │ │
|
|
411
|
+
│ │ stopIdleCheck │ │ │
|
|
412
|
+
│ │ stopCircuitClean │ │ │
|
|
413
|
+
│ │ clearCircuits │ │ │
|
|
414
|
+
│ │ closeHTTPServer │ │ │
|
|
415
|
+
│ └────────┬─────────┘ │ │
|
|
416
|
+
│ │ │ │
|
|
417
|
+
│ ▼ │ │
|
|
418
|
+
│ ┌──────────────────┐ Orchestrator/PM2 │ │
|
|
419
|
+
│ │ process.exit(0) │ ─────────────────────────────────►│ │
|
|
420
|
+
│ └──────────────────┘ restarts server │ │
|
|
421
|
+
│ │
|
|
422
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Key Functions:**
|
|
426
|
+
| Function | Purpose |
|
|
427
|
+
|----------|---------|
|
|
428
|
+
| `checkIdleRestart()` | Periodic check (every 5m) - triggers restart if idle > 1h |
|
|
429
|
+
| `startIdleCheck()` | Starts the interval after server initialization |
|
|
430
|
+
| `stopIdleCheck()` | Stops interval during graceful shutdown |
|
|
431
|
+
| `gracefulShutdown(signal)` | Handles SIGTERM, SIGINT, IDLE_TIMEOUT |
|
|
432
|
+
|
|
433
|
+
**Request Handling:**
|
|
434
|
+
- Every incoming request resets `lastRequestTime` via middleware
|
|
435
|
+
- This includes `/health` checks - prevents false idle detection
|
|
436
|
+
|
|
437
|
+
**Health Endpoint Response:**
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"status": "ok",
|
|
441
|
+
"idleTimeMs": 0,
|
|
442
|
+
"maxIdleTimeMs": 3600000,
|
|
443
|
+
"idleCheckIntervalMs": 300000,
|
|
444
|
+
...
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Logs:**
|
|
449
|
+
```
|
|
450
|
+
⏰ Idle check enabled: restart after 60m of inactivity
|
|
451
|
+
⏰ Idle time: 35m / 60m (at 50% threshold)
|
|
452
|
+
⚠️ Server idle for 61m (>60m). Initiating automatic restart...
|
|
453
|
+
🔄 Performing automatic idle restart...
|
|
454
|
+
🛑 Received IDLE_TIMEOUT. Starting graceful shutdown...
|
|
455
|
+
✅ Idle check interval stopped
|
|
456
|
+
✅ Circuit cleanup interval stopped
|
|
457
|
+
✅ Circuit breakers cleared
|
|
458
|
+
✅ HTTP server closed
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
**Why Auto-Restart?**
|
|
462
|
+
1. **Memory cleanup** - Releases accumulated heap allocations
|
|
463
|
+
2. **Circuit reset** - Clears any open circuit breakers
|
|
464
|
+
3. **State refresh** - Reinitializes MCP content and providers
|
|
465
|
+
4. **Resource hygiene** - Closes any lingering file handles or connections
|
|
466
|
+
|
|
467
|
+
## Logging
|
|
468
|
+
|
|
469
|
+
Logs are written to `~/.octocode/logs/`:
|
|
470
|
+
|
|
471
|
+
| File | Contents |
|
|
472
|
+
|------|----------|
|
|
473
|
+
| `tools.log` | All tool calls with params, duration, success status |
|
|
474
|
+
| `errors.log` | Validation errors, server errors with details |
|
|
475
|
+
|
|
476
|
+
**Log format:**
|
|
477
|
+
```json
|
|
478
|
+
{
|
|
479
|
+
"tool": "localSearchCode",
|
|
480
|
+
"route": "/tools/call/localSearchCode",
|
|
481
|
+
"method": "POST",
|
|
482
|
+
"params": { "pattern": "function", "path": "/src" },
|
|
483
|
+
"duration": 245,
|
|
484
|
+
"success": true
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
## Notes
|
|
489
|
+
|
|
490
|
+
### GitHub Authentication
|
|
491
|
+
|
|
492
|
+
The server uses `initializeProviders()` from octocode-mcp to set up GitHub token resolution. Token is retrieved from:
|
|
493
|
+
1. Environment variables (`GH_TOKEN`, `GITHUB_TOKEN`)
|
|
494
|
+
2. GitHub CLI (`gh auth token`)
|
|
495
|
+
3. Octocode secure storage
|
|
496
|
+
|
|
497
|
+
If no token is available, GitHub API calls will be rate-limited and may fail.
|
|
498
|
+
|
|
499
|
+
### Response Parsing
|
|
500
|
+
|
|
501
|
+
The `responseParser.ts` module handles MCP tool responses with two strategies:
|
|
502
|
+
1. **Preferred:** Use `structuredContent` directly when available
|
|
503
|
+
2. **Fallback:** Parse YAML from `content[0].text` for legacy responses
|
|
504
|
+
|
|
505
|
+
This ensures compatibility with both structured and text-based tool outputs.
|
|
506
|
+
|
|
507
|
+
## Development
|
|
508
|
+
|
|
509
|
+
### Build
|
|
510
|
+
```bash
|
|
511
|
+
npm run build # TypeScript compilation with tsdown
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
### Start Server
|
|
515
|
+
```bash
|
|
516
|
+
npm run server:start # Start detached server
|
|
517
|
+
npm run server:stop # Stop server
|
|
518
|
+
npm run server:status # Check status
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### Test Endpoints
|
|
522
|
+
```bash
|
|
523
|
+
# Health check
|
|
524
|
+
curl http://localhost:1987/health
|
|
525
|
+
|
|
526
|
+
# List tools
|
|
527
|
+
curl http://localhost:1987/tools/list
|
|
528
|
+
|
|
529
|
+
# Get tool schema
|
|
530
|
+
curl http://localhost:1987/tools/info/localSearchCode
|
|
531
|
+
|
|
532
|
+
# Execute tool
|
|
533
|
+
curl -X POST http://localhost:1987/tools/call/localSearchCode \
|
|
534
|
+
-H "Content-Type: application/json" \
|
|
535
|
+
-d '{"queries": [{"mainResearchGoal": "Test", "researchGoal": "Search", "reasoning": "Testing", "pattern": "export", "path": "/src"}]}'
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
## Integration with AI Agents
|
|
539
|
+
|
|
540
|
+
The skill is invoked via the Skill tool:
|
|
541
|
+
```
|
|
542
|
+
/octocode-research
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
Or through Task agent for complex research:
|
|
546
|
+
```typescript
|
|
547
|
+
Task(subagent_type="Explore", prompt="Research how auth works")
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
The SKILL.md file contains the full prompt and workflow guidance for AI agent integration.
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
*Last validated: 2026-01-19*
|