octocode-cli 1.2.8 → 1.2.10
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/README.md +45 -38
- package/out/octocode-cli.js +73 -11763
- package/package.json +35 -36
- package/skills/README.md +42 -114
- package/skills/{octocode-code-engineer → octocode-engineer}/.claude/settings.local.json +2 -1
- package/skills/octocode-engineer/README.md +99 -0
- package/skills/octocode-engineer/SKILL.md +413 -0
- package/skills/octocode-engineer/build.mjs +29 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/eslint.config.mjs +3 -13
- package/skills/{octocode-code-engineer → octocode-engineer}/package.json +28 -27
- package/skills/octocode-engineer/references/ast-reference.md +166 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/references/cli-reference.md +80 -6
- package/skills/octocode-engineer/references/externals.md +86 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/references/output-files.md +46 -6
- package/skills/octocode-engineer/references/quality-indicators.md +202 -0
- package/skills/octocode-engineer/references/tool-workflows.md +298 -0
- package/skills/octocode-engineer/references/validation-playbooks.md +99 -0
- package/skills/octocode-engineer/scripts/ast/search.js +45 -0
- package/skills/octocode-engineer/scripts/ast/tree-search.js +27 -0
- package/skills/octocode-engineer/scripts/index.js +173 -0
- package/skills/octocode-engineer/scripts/run.js +179 -0
- package/skills/octocode-engineer/src/analysis/dependencies.ts +378 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.test.ts +57 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.ts +43 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.test.ts +113 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.ts +64 -1
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.test.ts +118 -2
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.ts +65 -3
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.test.ts +281 -1
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.ts +173 -3
- package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.test.ts +73 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.ts +62 -4
- package/skills/octocode-engineer/src/detector-gating.test.ts +59 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/code-quality.ts +342 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.ts +8 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/index.test.ts +565 -11
- package/skills/octocode-engineer/src/index.ts +468 -0
- package/skills/octocode-engineer/src/pipeline/affected.test.ts +147 -0
- package/skills/octocode-engineer/src/pipeline/affected.ts +68 -0
- package/skills/octocode-engineer/src/pipeline/baseline.test.ts +276 -0
- package/skills/octocode-engineer/src/pipeline/baseline.ts +76 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.test.ts +300 -53
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.ts +180 -36
- package/skills/octocode-engineer/src/pipeline/config-loader.test.ts +264 -0
- package/skills/octocode-engineer/src/pipeline/config-loader.ts +109 -0
- package/skills/octocode-engineer/src/pipeline/create-options.ts +55 -0
- package/skills/octocode-engineer/src/pipeline/health-score.test.ts +65 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.ts +130 -17
- package/skills/octocode-engineer/src/pipeline/progress.ts +51 -0
- package/skills/octocode-engineer/src/pipeline/reporters.test.ts +155 -0
- package/skills/octocode-engineer/src/pipeline/reporters.ts +64 -0
- package/skills/octocode-engineer/src/reporting/graph-features.test.ts +279 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/output-contract.test.ts +6 -0
- package/skills/octocode-engineer/src/reporting/summary-md.test.ts +1066 -0
- package/skills/octocode-engineer/src/reporting/summary-md.ts +1604 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/writer.ts +136 -13
- package/skills/octocode-engineer/src/run.ts +78 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/sanity.test.ts +1 -1
- package/skills/octocode-engineer/src/types/analysis.ts +25 -0
- package/skills/octocode-engineer/src/types/collectors.ts +134 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/types/constants.ts +75 -41
- package/skills/octocode-engineer/src/types/core.ts +203 -0
- package/skills/octocode-engineer/src/types/dependency.ts +215 -0
- package/skills/octocode-engineer/src/types/file-entry.ts +108 -0
- package/skills/octocode-engineer/src/types/findings.ts +105 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/types/index.ts +60 -30
- package/skills/octocode-engineer/src/types/tree-sitter.ts +38 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/tsconfig.json +1 -0
- package/skills/octocode-research/.octocode/scan/.cache/analysis-cache.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/architecture.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/ast-trees.txt +5566 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/code-quality.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/dead-code.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/file-inventory.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/findings.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/graph.md +189 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/security.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.md +265 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/architecture.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt +5555 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/code-quality.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/dead-code.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/file-inventory.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/findings.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/graph.md +190 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/security.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.md +265 -0
- package/skills/octocode-research/CHANGELOG.md +60 -0
- package/skills/octocode-research/README.md +102 -388
- package/skills/octocode-research/SKILL.md +169 -498
- package/skills/octocode-research/package.json +19 -31
- package/skills/octocode-research/references/PARALLEL_AGENT_PROTOCOL.md +19 -0
- package/skills/octocode-research/references/SESSION_MANAGEMENT.md +38 -0
- package/skills/octocode-research/scripts/server-init.js +1 -1
- package/skills/octocode-research/scripts/server.d.ts +2 -1
- package/skills/octocode-research/scripts/server.js +329 -233
- package/skills/octocode-research/src/__tests__/integration/promptsRoutes.test.ts +180 -0
- package/skills/octocode-research/src/__tests__/integration/serverHttp.test.ts +221 -0
- package/skills/octocode-research/src/__tests__/integration/serverLifecycle.test.ts +194 -0
- package/skills/octocode-research/src/__tests__/integration/toolsRoutes.test.ts +501 -0
- package/skills/octocode-research/src/__tests__/unit/readiness.test.ts +61 -0
- package/skills/octocode-research/src/__tests__/unit/resilience.test.ts +192 -0
- package/skills/octocode-research/src/__tests__/unit/responseFactory.test.ts +172 -0
- package/skills/octocode-research/src/__tests__/unit/responseParser.test.ts +288 -0
- package/skills/octocode-research/src/__tests__/unit/schemas.test.ts +509 -0
- package/skills/octocode-research/src/index.ts +4 -124
- package/skills/octocode-research/src/middleware/queryParser.ts +0 -26
- package/skills/octocode-research/src/routes/lsp.ts +58 -59
- package/skills/octocode-research/src/routes/package.ts +35 -65
- package/skills/octocode-research/src/routes/prompts.ts +3 -3
- package/skills/octocode-research/src/routes/tools.ts +8 -20
- package/skills/octocode-research/src/server-init.ts +30 -237
- package/skills/octocode-research/src/server.ts +50 -23
- package/skills/octocode-research/src/types/errorGuards.ts +9 -80
- package/skills/octocode-research/src/types/guards.ts +0 -28
- package/skills/octocode-research/src/types/mcp.ts +11 -66
- package/skills/octocode-research/src/types/responses.ts +11 -129
- package/skills/octocode-research/src/utils/circuitBreaker.ts +0 -21
- package/skills/octocode-research/src/utils/logger.ts +1 -97
- package/skills/octocode-research/src/utils/resilience.ts +2 -12
- package/skills/octocode-research/src/utils/responseFactory.ts +0 -42
- package/skills/octocode-research/src/utils/responseParser.ts +3 -25
- package/skills/octocode-research/src/utils/retry.ts +0 -63
- package/skills/octocode-research/src/utils/routeFactory.ts +1 -1
- package/skills/octocode-research/src/validation/httpPreprocess.ts +0 -3
- package/skills/octocode-research/src/validation/index.ts +0 -1
- package/skills/octocode-research/src/validation/schemas.ts +0 -63
- package/skills/octocode-research/src/validation/toolCallSchema.ts +3 -3
- package/skills/octocode-research/tsdown.config.ts +4 -0
- package/skills/octocode-research/vitest.config.ts +3 -0
- package/skills/octocode-code-engineer/.plan/VALIDATED_PLAN.md +0 -223
- package/skills/octocode-code-engineer/README.md +0 -178
- package/skills/octocode-code-engineer/SKILL.md +0 -418
- package/skills/octocode-code-engineer/minify-scripts.mjs +0 -32
- package/skills/octocode-code-engineer/references/agent-ast-reading-rfc.md +0 -95
- package/skills/octocode-code-engineer/references/architecture-techniques.md +0 -121
- package/skills/octocode-code-engineer/references/ast-search.md +0 -210
- package/skills/octocode-code-engineer/references/ast-tree-search.md +0 -151
- package/skills/octocode-code-engineer/references/concepts.md +0 -107
- package/skills/octocode-code-engineer/references/finding-categories.md +0 -128
- package/skills/octocode-code-engineer/references/improvement-roadmap.md +0 -304
- package/skills/octocode-code-engineer/references/playbooks.md +0 -204
- package/skills/octocode-code-engineer/references/present-results.md +0 -136
- package/skills/octocode-code-engineer/references/tool-workflows.md +0 -566
- package/skills/octocode-code-engineer/references/validate-investigate.md +0 -225
- package/skills/octocode-code-engineer/scripts/analysis/dependencies.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/dependency-summary.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/discovery.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/graph-analytics.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/semantic.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/helpers.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/metrics.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/search.js +0 -2
- package/skills/octocode-code-engineer/scripts/ast/tree-search.js +0 -2
- package/skills/octocode-code-engineer/scripts/ast/tree-sitter.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/ts-analyzer.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/chains.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/effects.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/input-sources.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/performance.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/prototype-pollution.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/security.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/test-profile.js +0 -1
- package/skills/octocode-code-engineer/scripts/common/is-direct-run.js +0 -1
- package/skills/octocode-code-engineer/scripts/common/utils.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/code-quality.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/cohesion.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/coupling.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/cycle.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/dead-code.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/import-style.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/security.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/semantic.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/shared.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/test-quality.js +0 -1
- package/skills/octocode-code-engineer/scripts/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/cache.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/cli.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/main.js +0 -2
- package/skills/octocode-code-engineer/scripts/reporting/analysis.js +0 -1
- package/skills/octocode-code-engineer/scripts/reporting/summary-md.js +0 -1
- package/skills/octocode-code-engineer/scripts/reporting/writer.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/constants.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/interfaces.js +0 -1
- package/skills/octocode-code-engineer/src/analysis/dependencies.ts +0 -406
- package/skills/octocode-code-engineer/src/index.ts +0 -403
- package/skills/octocode-code-engineer/src/reporting/summary-md.test.ts +0 -421
- package/skills/octocode-code-engineer/src/reporting/summary-md.ts +0 -714
- package/skills/octocode-code-engineer/src/types/interfaces.ts +0 -682
- package/skills/octocode-research/src/types/toolTypes.ts +0 -33
- package/skills/octocode-research/src/utils/logEmoji.ts +0 -103
- /package/skills/{octocode-code-engineer → octocode-engineer}/.octocode/rfc/RFC-code-engineer-weakness-fixes.md +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/architecture.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-helpers.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-search.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/base.css +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/block-navigation.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cache.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cli.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/clover.xml +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-effects.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-input-sources.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-performance.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-prototype-pollution.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-security.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-test-profile.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/coverage-final.json +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependencies.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependency-summary.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/discovery.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/favicon.png +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/graph-analytics.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/metrics.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/pipeline.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.css +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-analysis.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-writer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/security-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sort-arrow-sprite.png +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sorter.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/summary-md.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/test-quality-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/tree-sitter-analyzer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ts-analyzer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/types.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/utils.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependencies.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/chains.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cohesion.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/coupling.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cycle.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/dead-code.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/import-style.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/semantic.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/shared.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/vitest.config.ts +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Code Quality Scan Report
|
|
2
|
+
|
|
3
|
+
**Generated**: 2026-03-22T10:40:13.784Z
|
|
4
|
+
**Root**: `/Users/guybary/Documents/octocode-mcp/skills/octocode-research`
|
|
5
|
+
|
|
6
|
+
## Scan Scope
|
|
7
|
+
|
|
8
|
+
| Metric | Count |
|
|
9
|
+
|--------|-------|
|
|
10
|
+
| Files analyzed | 36 |
|
|
11
|
+
| Functions | 286 |
|
|
12
|
+
| Flow nodes | 357 |
|
|
13
|
+
| Dependency files | 53 |
|
|
14
|
+
| Packages | 1 |
|
|
15
|
+
|
|
16
|
+
## Findings Overview
|
|
17
|
+
|
|
18
|
+
| Severity | Count |
|
|
19
|
+
|----------|-------|
|
|
20
|
+
| Critical | 7 |
|
|
21
|
+
| High | 126 |
|
|
22
|
+
| Medium | 90 |
|
|
23
|
+
| Low | 84 |
|
|
24
|
+
| **Total** | **307** |
|
|
25
|
+
|
|
26
|
+
> **Scoped scan**: Only showing findings for: `src`
|
|
27
|
+
|
|
28
|
+
> **Semantic analysis**: TypeChecker + LanguageService enabled (14 additional categories)
|
|
29
|
+
|
|
30
|
+
## Health Scores
|
|
31
|
+
|
|
32
|
+
| Pillar | Score | Grade |
|
|
33
|
+
|--------|-------|-------|
|
|
34
|
+
| **Overall** | **17/100** | **F** |
|
|
35
|
+
| Architecture | 38/100 | D |
|
|
36
|
+
| Code Quality | 68/100 | B |
|
|
37
|
+
| Dead Code & Hygiene | 29/100 | D |
|
|
38
|
+
| Security | 73/100 | B |
|
|
39
|
+
| Test Quality | 100/100 | A |
|
|
40
|
+
|
|
41
|
+
## Top Concern Tags
|
|
42
|
+
|
|
43
|
+
Searchable tags across all findings — use to filter `findings.json` with `jq`.
|
|
44
|
+
|
|
45
|
+
- `dead-code`: 195 findings
|
|
46
|
+
- `semantic`: 135 findings
|
|
47
|
+
- `refactoring`: 77 findings
|
|
48
|
+
- `module-surface`: 73 findings
|
|
49
|
+
- `architecture`: 70 findings
|
|
50
|
+
- `cleanup`: 59 findings
|
|
51
|
+
- `api-surface`: 58 findings
|
|
52
|
+
- `dependency`: 26 findings
|
|
53
|
+
- `security`: 22 findings
|
|
54
|
+
- `performance`: 20 findings
|
|
55
|
+
- `change-risk`: 17 findings
|
|
56
|
+
- `injection`: 15 findings
|
|
57
|
+
|
|
58
|
+
## Analysis Signals
|
|
59
|
+
|
|
60
|
+
- **Graph Signal**: src/utils/responseBuilder.ts concentrates dependency pressure (articulation point, 1 bridge edge(s), on critical path, high complexity risk (109)).
|
|
61
|
+
- **AST Signal**: src/server-init.ts performs import-time work that matches the reported side-effect risk.
|
|
62
|
+
- **Combined Interpretation**: Structural chokepoint and Hidden initialization logic both appear in this scan, so use a hybrid investigation instead of a single-lens conclusion.
|
|
63
|
+
- **Confidence**: medium
|
|
64
|
+
- **Recommended Validation**: navigate to the awaited call to check if parallelization is safe (tools: localSearchCode -> lspGotoDefinition)
|
|
65
|
+
|
|
66
|
+
**Investigation Prompts**
|
|
67
|
+
- Inspect src/utils/responseBuilder.ts first and validate the graph claim with localSearchCode plus LSP navigation.
|
|
68
|
+
- Use file-inventory.json for src/server-init.ts to explain why the code shape matches the finding.
|
|
69
|
+
- Use a hybrid investigation before proposing a refactor because the signals do not fully align yet.
|
|
70
|
+
- Cross-check the top hotspot src/utils/logger.ts with the strongest architecture finding before editing code.
|
|
71
|
+
|
|
72
|
+
## Architecture Health
|
|
73
|
+
|
|
74
|
+
> 67 findings (score: 38/100) — see [`architecture.json`](./architecture.json)
|
|
75
|
+
|
|
76
|
+
| Metric | Value |
|
|
77
|
+
|--------|-------|
|
|
78
|
+
| Modules | 53 |
|
|
79
|
+
| Import edges | 93 |
|
|
80
|
+
| Cycles | 0 |
|
|
81
|
+
| Critical paths | 12 |
|
|
82
|
+
| Root modules | 21 |
|
|
83
|
+
| Leaf modules | 22 |
|
|
84
|
+
| Test-only modules | 4 |
|
|
85
|
+
| Unresolved imports | 0 |
|
|
86
|
+
|
|
87
|
+
- `dependency-cycle`: 0
|
|
88
|
+
- `dependency-critical-path`: 7
|
|
89
|
+
- `dependency-test-only`: 4
|
|
90
|
+
- `architecture-sdp-violation`: 1
|
|
91
|
+
- `high-coupling`: 0
|
|
92
|
+
- `god-module-coupling`: 0
|
|
93
|
+
- `orphan-module`: 3
|
|
94
|
+
- `unreachable-module`: 12
|
|
95
|
+
- `layer-violation`: 0
|
|
96
|
+
- `low-cohesion`: 2
|
|
97
|
+
- `mega-folder`: 0
|
|
98
|
+
- `distance-from-main-sequence`: 7
|
|
99
|
+
- `feature-envy`: 3
|
|
100
|
+
- `untested-critical-code`: 10
|
|
101
|
+
- `over-abstraction`: 14
|
|
102
|
+
- `concrete-dependency`: 0
|
|
103
|
+
- `circular-type-dependency`: 0
|
|
104
|
+
- `shotgun-surgery`: 0
|
|
105
|
+
- `import-side-effect-risk`: 2
|
|
106
|
+
- `cycle-cluster`: 0
|
|
107
|
+
- `broker-module`: 0
|
|
108
|
+
- `bridge-module`: 0
|
|
109
|
+
- `package-boundary-chatter`: 0
|
|
110
|
+
- `startup-risk-hub`: 0
|
|
111
|
+
- `namespace-import`: 0
|
|
112
|
+
- `commonjs-in-esm`: 0
|
|
113
|
+
- `export-star-leak`: 2
|
|
114
|
+
- `mixed-module-format`: 0
|
|
115
|
+
|
|
116
|
+
## Change Risk Hotspots
|
|
117
|
+
|
|
118
|
+
Files most dangerous to change — high fan-in, complexity, or cycle membership.
|
|
119
|
+
|
|
120
|
+
| File | Risk | Fan-In | Fan-Out | Complexity | Exports | Cycle | Critical Path |
|
|
121
|
+
|------|------|--------|---------|------------|---------|-------|---------------|
|
|
122
|
+
| `src/utils/logger.ts` | 97 | 4 | 2 | 112 | 12 | - | Y |
|
|
123
|
+
| `src/utils/responseBuilder.ts` | 87 | 6 | 0 | 109 | 3 | - | Y |
|
|
124
|
+
| `src/validation/schemas.ts` | 84 | 2 | 1 | 37 | 39 | - | - |
|
|
125
|
+
| `src/utils/circuitBreaker.ts` | 75 | 4 | 3 | 70 | 11 | - | Y |
|
|
126
|
+
| `src/routes/tools.ts` | 58 | 1 | 8 | 79 | 1 | - | Y |
|
|
127
|
+
| `src/types/guards.ts` | 55 | 6 | 0 | 40 | 11 | - | - |
|
|
128
|
+
| `src/server.ts` | 54 | 0 | 11 | 71 | 2 | - | Y |
|
|
129
|
+
| `src/routes/lsp.ts` | 51 | 1 | 7 | 65 | 1 | - | Y |
|
|
130
|
+
| `src/utils/retry.ts` | 50 | 2 | 1 | 66 | 7 | - | - |
|
|
131
|
+
| `src/routes/github.ts` | 45 | 1 | 7 | 54 | 1 | - | Y |
|
|
132
|
+
| `src/types/errorGuards.ts` | 45 | 1 | 0 | 47 | 12 | - | - |
|
|
133
|
+
| `src/utils/resilience.ts` | 45 | 5 | 3 | 21 | 5 | - | Y |
|
|
134
|
+
| `src/utils/responseFactory.ts` | 44 | 4 | 2 | 38 | 8 | - | - |
|
|
135
|
+
| `src/routes/local.ts` | 41 | 1 | 7 | 46 | 1 | - | Y |
|
|
136
|
+
| `src/utils/responseParser.ts` | 41 | 3 | 0 | 43 | 7 | - | - |
|
|
137
|
+
|
|
138
|
+
## Code Quality
|
|
139
|
+
|
|
140
|
+
> 41 findings (score: 68/100) — see [`code-quality.json`](./code-quality.json)
|
|
141
|
+
|
|
142
|
+
- `duplicate-function-body`: 0
|
|
143
|
+
- `duplicate-flow-structure`: 0
|
|
144
|
+
- `function-optimization`: 0
|
|
145
|
+
- `cognitive-complexity`: 4
|
|
146
|
+
- `god-module`: 1
|
|
147
|
+
- `god-function`: 0
|
|
148
|
+
- `halstead-effort`: 0
|
|
149
|
+
- `low-maintainability`: 0
|
|
150
|
+
- `excessive-parameters`: 2
|
|
151
|
+
- `unsafe-any`: 0
|
|
152
|
+
- `empty-catch`: 3
|
|
153
|
+
- `switch-no-default`: 0
|
|
154
|
+
- `unused-parameter`: 0
|
|
155
|
+
- `deep-override-chain`: 0
|
|
156
|
+
- `interface-compliance`: 0
|
|
157
|
+
- `type-assertion-escape`: 2
|
|
158
|
+
- `promise-misuse`: 2
|
|
159
|
+
- `narrowable-type`: 4
|
|
160
|
+
- `missing-error-boundary`: 3
|
|
161
|
+
- `await-in-loop`: 4
|
|
162
|
+
- `sync-io`: 4
|
|
163
|
+
- `uncleared-timer`: 2
|
|
164
|
+
- `listener-leak-risk`: 6
|
|
165
|
+
- `unbounded-collection`: 0
|
|
166
|
+
- `similar-function-body`: 4
|
|
167
|
+
- `message-chain`: 0
|
|
168
|
+
|
|
169
|
+
## Dead Code & Hygiene
|
|
170
|
+
|
|
171
|
+
> 177 findings (score: 29/100) — see [`dead-code.json`](./dead-code.json)
|
|
172
|
+
|
|
173
|
+
- `dead-export`: 55
|
|
174
|
+
- `dead-re-export`: 1
|
|
175
|
+
- `re-export-duplication`: 1
|
|
176
|
+
- `re-export-shadowed`: 0
|
|
177
|
+
- `unused-npm-dependency`: 0
|
|
178
|
+
- `package-boundary-violation`: 0
|
|
179
|
+
- `barrel-explosion`: 0
|
|
180
|
+
- `unused-import`: 0
|
|
181
|
+
- `orphan-implementation`: 0
|
|
182
|
+
- `move-to-caller`: 73
|
|
183
|
+
- `semantic-dead-export`: 44
|
|
184
|
+
- `dead-file`: 3
|
|
185
|
+
|
|
186
|
+
## Security
|
|
187
|
+
|
|
188
|
+
> 22 findings (score: 73/100) — see [`security.json`](./security.json)
|
|
189
|
+
|
|
190
|
+
- `hardcoded-secret`: 1
|
|
191
|
+
- `eval-usage`: 0
|
|
192
|
+
- `unsafe-html`: 0
|
|
193
|
+
- `sql-injection-risk`: 2
|
|
194
|
+
- `unsafe-regex`: 0
|
|
195
|
+
- `prototype-pollution-risk`: 6
|
|
196
|
+
- `unvalidated-input-sink`: 7
|
|
197
|
+
- `input-passthrough-risk`: 6
|
|
198
|
+
- `path-traversal-risk`: 0
|
|
199
|
+
- `command-injection-risk`: 0
|
|
200
|
+
- `debug-log-leakage`: 0
|
|
201
|
+
- `sensitive-data-logging`: 0
|
|
202
|
+
|
|
203
|
+
## Test Quality
|
|
204
|
+
|
|
205
|
+
> 0 findings (score: 100/100) — no `test-quality.json` written for this scan
|
|
206
|
+
|
|
207
|
+
- `low-assertion-density`: 0
|
|
208
|
+
- `test-no-assertion`: 0
|
|
209
|
+
- `excessive-mocking`: 0
|
|
210
|
+
- `shared-mutable-state`: 0
|
|
211
|
+
- `missing-test-cleanup`: 0
|
|
212
|
+
- `focused-test`: 0
|
|
213
|
+
- `fake-timer-no-restore`: 0
|
|
214
|
+
- `missing-mock-restoration`: 0
|
|
215
|
+
|
|
216
|
+
> **Note**: Test Quality reflects analyzed test files only. 10 modules flagged as `untested-critical-code` (architecture pillar) have no test coverage — use `--include-tests` for test-quality analysis.
|
|
217
|
+
|
|
218
|
+
## Top Recommendations
|
|
219
|
+
|
|
220
|
+
- **[CRITICAL]** `src/server.ts` — Critical dependency chain risk: 6 files (2 entry points) *(dependency-critical-path)*
|
|
221
|
+
- **[CRITICAL]** `src/__tests__/integration/routes.test.ts` — Critical dependency chain risk: 6 files (2 entry points) *(dependency-critical-path)*
|
|
222
|
+
- **[HIGH]** `src/server-init.ts` — await inside loop — sequential async execution *(await-in-loop)*
|
|
223
|
+
- **[HIGH]** `src/server-init.ts` — await inside loop — sequential async execution *(await-in-loop)*
|
|
224
|
+
- **[HIGH]** `src/utils/responseParser.ts` — High cognitive complexity: parseToolResponse (29) *(cognitive-complexity)*
|
|
225
|
+
- **[HIGH]** `src/utils/responseParser.ts` — High cognitive complexity: parseToolResponseBulk (30) *(cognitive-complexity)*
|
|
226
|
+
- **[HIGH]** `src/types/errorGuards.ts` — Unused export: hasMessage *(dead-export)*
|
|
227
|
+
- **[HIGH]** `src/types/errorGuards.ts` — Unused export: hasHeaders *(dead-export)*
|
|
228
|
+
- **[HIGH]** `src/mcpCache.ts` — Distance from Main Sequence: src/mcpCache.ts (D=1.00) *(distance-from-main-sequence)*
|
|
229
|
+
- **[HIGH]** `src/types/guards.ts` — Distance from Main Sequence: src/types/guards.ts (D=1.00) *(distance-from-main-sequence)*
|
|
230
|
+
|
|
231
|
+
## AST Trees (`ast-trees.txt`)
|
|
232
|
+
|
|
233
|
+
Compact indented text format — each node is `Kind[startLine:endLine]`, nesting = indentation.
|
|
234
|
+
|
|
235
|
+
Run these commands from the skill directory. Current scan: `.octocode/scan/2026-03-22T10-40-10-469Z`.
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
SourceFile[1:152]
|
|
239
|
+
ImportDeclaration[1]
|
|
240
|
+
FunctionDeclaration[3:20]
|
|
241
|
+
Block[4:19]
|
|
242
|
+
IfStatement[5:12] ...
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Smart navigation:**
|
|
246
|
+
|
|
247
|
+
- Find functions: `node scripts/ast/tree-search.js -i "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt" -k function_declaration --limit 25`
|
|
248
|
+
- Find classes: `node scripts/ast/tree-search.js -i "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt" -k class_declaration --limit 25`
|
|
249
|
+
- Find control flow: `node scripts/ast/tree-search.js -i "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt" -p 'IfStatement|SwitchStatement|ForStatement|WhileStatement' --limit 25`
|
|
250
|
+
- Narrow to one file: `node scripts/ast/tree-search.js -i "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt" --file "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/src" -k function_declaration --limit 10`
|
|
251
|
+
- Raw text fallback: `rg 'FunctionDeclaration|IfStatement' "/Users/guybary/Documents/octocode-mcp/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt"`
|
|
252
|
+
|
|
253
|
+
## Output Files
|
|
254
|
+
|
|
255
|
+
| File | Size | Description |
|
|
256
|
+
|------|------|-------------|
|
|
257
|
+
| [`summary.json`](./summary.json) | 29.0 KB | Scan metadata, agent output, parse errors |
|
|
258
|
+
| [`architecture.json`](./architecture.json) | 134.4 KB | Dependency graph, cycles, critical paths, architecture findings |
|
|
259
|
+
| [`code-quality.json`](./code-quality.json) | 56.5 KB | Duplicate detection, complexity, god modules/functions |
|
|
260
|
+
| [`dead-code.json`](./dead-code.json) | 247.2 KB | Dead files/exports/re-exports, unused deps, boundary violations |
|
|
261
|
+
| [`file-inventory.json`](./file-inventory.json) | 400.4 KB | Per-file function/flow/dependency details |
|
|
262
|
+
| [`findings.json`](./findings.json) | 437.8 KB | All findings across all categories (master list) |
|
|
263
|
+
| [`security.json`](./security.json) | 42.6 KB | security |
|
|
264
|
+
| [`graph.md`](./graph.md) | 9.7 KB | Mermaid dependency graph |
|
|
265
|
+
| [`ast-trees.txt`](./ast-trees.txt) | 141.0 KB | AST tree snapshots (compact indented text — grep/regex friendly) |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Octocode Research — Changelog
|
|
2
|
+
|
|
3
|
+
## Detached Daemon Architecture
|
|
4
|
+
|
|
5
|
+
`server-init.ts` no longer keeps the server as a child process. The server is now spawned **detached** (`detached: true`, `child.unref()`) so no client owns it. Every `server-init` invocation exits after confirming health — whether it spawned the server or found it already running. The server self-manages its lifecycle via the existing 30-minute idle timeout and SIGTERM handling.
|
|
6
|
+
|
|
7
|
+
- **PID file**: `server.ts` writes `~/.octocode/research-server-{PORT}.pid` on startup, removes on shutdown
|
|
8
|
+
- **Multi-client safe**: multiple agents/IDEs share one server instance without ownership conflicts
|
|
9
|
+
- **`/health` endpoint**: now includes `pid` field and `processManager: 'self (detached daemon)'`
|
|
10
|
+
- **Tests**: lifecycle tests updated to verify detached behavior (init exits, server survives, PID file lifecycle)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
**36 files changed** | +1,456 −2,391 | Net: **−935 lines**
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Dead Code Removal
|
|
19
|
+
|
|
20
|
+
Deleted `src/types/toolTypes.ts`, `src/utils/logEmoji.ts`. Removed unused exports from 15 files (`errorGuards`, `guards`, `responses`, `mcp`, `circuitBreaker`, `logger`, `responseFactory`, `responseParser`, `retry`, `resilience`, `routeFactory`, `schemas`, `toolCallSchema`, `httpPreprocess`, `index`). Removed unused `queryParser` middleware.
|
|
21
|
+
|
|
22
|
+
## Bug Fixes
|
|
23
|
+
|
|
24
|
+
- **Port fallback**: `server.ts` now reads `OCTOCODE_PORT` like `server-init.ts`
|
|
25
|
+
- **Version mismatch**: routes hardcoded `2.0.0` while package.json said `2.2.0` — fixed via build-time `__PACKAGE_VERSION__` injection
|
|
26
|
+
- **Missing routes**: added `GET /tools/info` and `GET /tools/metadata` to 404 handler + startup log
|
|
27
|
+
- **PM2 cleanup**: replaced `processManager: 'pm2'`, removed `process.send('ready')`
|
|
28
|
+
- **Empty JSON Schemas**: `zod-to-json-schema` produced empty `{}` for Zod v4 schemas — replaced with `z.toJSONSchema()` (native Zod v4), removed `zod-to-json-schema` dependency. All 13 tool schemas now return full properties, types, and constraints.
|
|
29
|
+
|
|
30
|
+
## `bin` → Init Lifecycle
|
|
31
|
+
|
|
32
|
+
`"bin"` now points to `server-init.js` (was `server.js`). `npx octocode-research` gets health polling, parent-child lifecycle, and graceful shutdown. All PM2 scripts removed.
|
|
33
|
+
|
|
34
|
+
## Version — Single Source of Truth
|
|
35
|
+
|
|
36
|
+
`tsdown.config.ts` reads `package.json` at build time, injects `__PACKAGE_VERSION__`. Version bump = edit `package.json` only.
|
|
37
|
+
|
|
38
|
+
## `server-init.ts` Rewrite (288 → 55 lines)
|
|
39
|
+
|
|
40
|
+
PM2-based init replaced with standalone lifecycle: health-check → spawn child → exponential backoff poll → stay alive → signal forwarding.
|
|
41
|
+
|
|
42
|
+
## Route Refactors
|
|
43
|
+
|
|
44
|
+
Extracted helpers in `lsp.ts` and `package.ts` to reduce cognitive complexity.
|
|
45
|
+
|
|
46
|
+
## Documentation
|
|
47
|
+
|
|
48
|
+
- **SKILL.md** (→ 380 lines): all 11 routes, 503 warm-up note, env var table, parallel/session sections extracted to `references/`
|
|
49
|
+
- **README.md** (→ 209 lines): "Why a Server?" section, corrected examples with required `id` field, accurate per-circuit resilience table
|
|
50
|
+
- **package.json**: renamed `octocode-skill` → `octocode-research`, removed PM2 scripts, removed `zod-to-json-schema`
|
|
51
|
+
|
|
52
|
+
## New Files
|
|
53
|
+
|
|
54
|
+
- `references/SESSION_MANAGEMENT.md` — checkpoint/resume protocol
|
|
55
|
+
- `src/__tests__/integration/serverLifecycle.test.ts` — init/shutdown tests
|
|
56
|
+
- `src/__tests__/unit/schemas.test.ts` — Zod schema validation tests (509 lines)
|
|
57
|
+
|
|
58
|
+
## Verification
|
|
59
|
+
|
|
60
|
+
Build OK | Lint 0 errors | Tests 215/215
|