claude-code-workflow 6.2.1 → 6.2.3
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/.claude/CLAUDE.md +10 -0
- package/.claude/agents/action-planning-agent.md +857 -0
- package/.claude/agents/cli-execution-agent.md +267 -0
- package/.claude/agents/cli-explore-agent.md +182 -0
- package/.claude/agents/cli-lite-planning-agent.md +446 -0
- package/.claude/agents/cli-planning-agent.md +558 -0
- package/.claude/agents/code-developer.md +311 -0
- package/.claude/agents/conceptual-planning-agent.md +308 -0
- package/.claude/agents/context-search-agent.md +581 -0
- package/.claude/agents/doc-generator.md +330 -0
- package/.claude/agents/memory-bridge.md +94 -0
- package/.claude/agents/test-context-search-agent.md +400 -0
- package/.claude/agents/test-fix-agent.md +344 -0
- package/.claude/agents/ui-design-agent.md +593 -0
- package/.claude/agents/universal-executor.md +131 -0
- package/.claude/commands/clean.md +516 -0
- package/.claude/commands/cli/cli-init.md +440 -0
- package/.claude/commands/enhance-prompt.md +93 -0
- package/.claude/commands/memory/code-map-memory.md +687 -0
- package/.claude/commands/memory/compact.md +383 -0
- package/.claude/commands/memory/docs-full-cli.md +471 -0
- package/.claude/commands/memory/docs-related-cli.md +386 -0
- package/.claude/commands/memory/docs.md +615 -0
- package/.claude/commands/memory/load-skill-memory.md +182 -0
- package/.claude/commands/memory/load.md +240 -0
- package/.claude/commands/memory/skill-memory.md +525 -0
- package/.claude/commands/memory/style-skill-memory.md +396 -0
- package/.claude/commands/memory/tech-research-rules.md +310 -0
- package/.claude/commands/memory/update-full.md +332 -0
- package/.claude/commands/memory/update-related.md +332 -0
- package/.claude/commands/memory/workflow-skill-memory.md +517 -0
- package/.claude/commands/task/breakdown.md +204 -0
- package/.claude/commands/task/create.md +152 -0
- package/.claude/commands/task/execute.md +270 -0
- package/.claude/commands/task/replan.md +437 -0
- package/.claude/commands/version.md +254 -0
- package/.claude/commands/workflow/action-plan-verify.md +447 -0
- package/.claude/commands/workflow/brainstorm/api-designer.md +587 -0
- package/.claude/commands/workflow/brainstorm/artifacts.md +453 -0
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -0
- package/.claude/commands/workflow/brainstorm/data-architect.md +220 -0
- package/.claude/commands/workflow/brainstorm/product-manager.md +200 -0
- package/.claude/commands/workflow/brainstorm/product-owner.md +200 -0
- package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -0
- package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
- package/.claude/commands/workflow/brainstorm/synthesis.md +398 -0
- package/.claude/commands/workflow/brainstorm/system-architect.md +389 -0
- package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -0
- package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -0
- package/.claude/commands/workflow/debug.md +321 -0
- package/.claude/commands/workflow/execute.md +475 -0
- package/.claude/commands/workflow/init.md +165 -0
- package/.claude/commands/workflow/lite-execute.md +792 -0
- package/.claude/commands/workflow/lite-fix.md +623 -0
- package/.claude/commands/workflow/lite-plan.md +610 -0
- package/.claude/commands/workflow/plan.md +551 -0
- package/.claude/commands/workflow/replan.md +515 -0
- package/.claude/commands/workflow/review-fix.md +606 -0
- package/.claude/commands/workflow/review-module-cycle.md +767 -0
- package/.claude/commands/workflow/review-session-cycle.md +778 -0
- package/.claude/commands/workflow/review.md +297 -0
- package/.claude/commands/workflow/session/complete.md +153 -0
- package/.claude/commands/workflow/session/list.md +96 -0
- package/.claude/commands/workflow/session/resume.md +61 -0
- package/.claude/commands/workflow/session/start.md +200 -0
- package/.claude/commands/workflow/tdd-plan.md +460 -0
- package/.claude/commands/workflow/tdd-verify.md +400 -0
- package/.claude/commands/workflow/test-cycle-execute.md +500 -0
- package/.claude/commands/workflow/test-fix-gen.md +699 -0
- package/.claude/commands/workflow/test-gen.md +529 -0
- package/.claude/commands/workflow/tools/conflict-resolution.md +766 -0
- package/.claude/commands/workflow/tools/context-gather.md +436 -0
- package/.claude/commands/workflow/tools/task-generate-agent.md +490 -0
- package/.claude/commands/workflow/tools/task-generate-tdd.md +526 -0
- package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
- package/.claude/commands/workflow/tools/test-concept-enhanced.md +164 -0
- package/.claude/commands/workflow/tools/test-context-gather.md +236 -0
- package/.claude/commands/workflow/tools/test-task-generate.md +257 -0
- package/.claude/commands/workflow/ui-design/animation-extract.md +1150 -0
- package/.claude/commands/workflow/ui-design/codify-style.md +652 -0
- package/.claude/commands/workflow/ui-design/design-sync.md +454 -0
- package/.claude/commands/workflow/ui-design/explore-auto.md +678 -0
- package/.claude/commands/workflow/ui-design/generate.md +504 -0
- package/.claude/commands/workflow/ui-design/imitate-auto.md +745 -0
- package/.claude/commands/workflow/ui-design/import-from-code.md +540 -0
- package/.claude/commands/workflow/ui-design/layout-extract.md +788 -0
- package/.claude/commands/workflow/ui-design/reference-page-generator.md +356 -0
- package/.claude/commands/workflow/ui-design/style-extract.md +773 -0
- package/.claude/skills/command-guide/SKILL.md +388 -0
- package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +592 -0
- package/.claude/skills/command-guide/guides/cli-tools-guide.md +410 -0
- package/.claude/skills/command-guide/guides/examples.md +537 -0
- package/.claude/skills/command-guide/guides/getting-started.md +242 -0
- package/.claude/skills/command-guide/guides/implementation-details.md +1010 -0
- package/.claude/skills/command-guide/guides/index-structure.md +326 -0
- package/.claude/skills/command-guide/guides/troubleshooting.md +92 -0
- package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +316 -0
- package/.claude/skills/command-guide/guides/workflow-patterns.md +662 -0
- package/.claude/skills/command-guide/index/all-commands.json +772 -0
- package/.claude/skills/command-guide/index/by-category.json +800 -0
- package/.claude/skills/command-guide/index/by-use-case.json +786 -0
- package/.claude/skills/command-guide/index/command-relationships.json +307 -0
- package/.claude/skills/command-guide/index/essential-commands.json +112 -0
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +857 -0
- package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +267 -0
- package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -0
- package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +446 -0
- package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +558 -0
- package/.claude/skills/command-guide/reference/agents/code-developer.md +311 -0
- package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +308 -0
- package/.claude/skills/command-guide/reference/agents/context-search-agent.md +581 -0
- package/.claude/skills/command-guide/reference/agents/doc-generator.md +330 -0
- package/.claude/skills/command-guide/reference/agents/memory-bridge.md +94 -0
- package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +400 -0
- package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +344 -0
- package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +593 -0
- package/.claude/skills/command-guide/reference/agents/universal-executor.md +131 -0
- package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +440 -0
- package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +93 -0
- package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +687 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs.md +616 -0
- package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +182 -0
- package/.claude/skills/command-guide/reference/commands/memory/load.md +240 -0
- package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +525 -0
- package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +396 -0
- package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +314 -0
- package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -0
- package/.claude/skills/command-guide/reference/commands/memory/update-related.md +332 -0
- package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +517 -0
- package/.claude/skills/command-guide/reference/commands/task/breakdown.md +204 -0
- package/.claude/skills/command-guide/reference/commands/task/create.md +152 -0
- package/.claude/skills/command-guide/reference/commands/task/execute.md +270 -0
- package/.claude/skills/command-guide/reference/commands/task/replan.md +437 -0
- package/.claude/skills/command-guide/reference/commands/version.md +254 -0
- package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +447 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +452 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +443 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +398 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -0
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +465 -0
- package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +748 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +664 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +645 -0
- package/.claude/skills/command-guide/reference/commands/workflow/plan.md +551 -0
- package/.claude/skills/command-guide/reference/commands/workflow/replan.md +515 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +606 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +765 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +776 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review.md +298 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +547 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +114 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +77 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +257 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +460 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +400 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +498 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +529 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +766 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +487 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +525 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +163 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +235 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +256 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +1150 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +652 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +454 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +678 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +745 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +788 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +356 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +773 -0
- package/.claude/skills/command-guide/scripts/analyze_commands.py +502 -0
- package/.claude/skills/command-guide/scripts/update-index.sh +130 -0
- package/.claude/skills/command-guide/templates/issue-bug.md +104 -0
- package/.claude/skills/command-guide/templates/issue-diagnosis.md +275 -0
- package/.claude/skills/command-guide/templates/issue-feature.md +97 -0
- package/.claude/skills/command-guide/templates/issue-question.md +141 -0
- package/.claude/skills/prompt-enhancer/SKILL.md +124 -0
- package/.claude/workflows/_template-compare-matrix.html +692 -0
- package/.claude/workflows/chinese-response.md +38 -0
- package/.claude/workflows/cli-templates/fix-plan-template.json +75 -0
- package/.claude/workflows/cli-templates/fix-progress-template.json +48 -0
- package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +299 -0
- package/.claude/workflows/cli-templates/planning-roles/data-architect.md +120 -0
- package/.claude/workflows/cli-templates/planning-roles/product-manager.md +119 -0
- package/.claude/workflows/cli-templates/planning-roles/product-owner.md +261 -0
- package/.claude/workflows/cli-templates/planning-roles/scrum-master.md +186 -0
- package/.claude/workflows/cli-templates/planning-roles/subject-matter-expert.md +281 -0
- package/.claude/workflows/cli-templates/planning-roles/synthesis-role.md +414 -0
- package/.claude/workflows/cli-templates/planning-roles/system-architect.md +106 -0
- package/.claude/workflows/cli-templates/planning-roles/test-strategist.md +124 -0
- package/.claude/workflows/cli-templates/planning-roles/ui-designer.md +379 -0
- package/.claude/workflows/cli-templates/planning-roles/ux-expert.md +240 -0
- package/.claude/workflows/cli-templates/prompts/analysis/01-diagnose-bug-root-cause.txt +127 -0
- package/.claude/workflows/cli-templates/prompts/analysis/01-trace-code-execution.txt +115 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt +37 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-technical-document.txt +33 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-architecture.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-analyze-performance.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-assess-security-risks.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-review-quality-standards.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/development/02-generate-tests.txt +70 -0
- package/.claude/workflows/cli-templates/prompts/development/02-implement-component-ui.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/development/02-implement-feature.txt +58 -0
- package/.claude/workflows/cli-templates/prompts/development/02-refactor-codebase.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/development/03-debug-runtime-issues.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/documentation/api.txt +15 -0
- package/.claude/workflows/cli-templates/prompts/documentation/folder-navigation.txt +27 -0
- package/.claude/workflows/cli-templates/prompts/documentation/module-readme.txt +49 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-architecture.txt +41 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-examples.txt +35 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-readme.txt +35 -0
- package/.claude/workflows/cli-templates/prompts/memory/02-document-module-structure.txt +165 -0
- package/.claude/workflows/cli-templates/prompts/planning/01-plan-architecture-design.txt +109 -0
- package/.claude/workflows/cli-templates/prompts/planning/02-breakdown-task-steps.txt +30 -0
- package/.claude/workflows/cli-templates/prompts/planning/02-design-component-spec.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/planning/03-evaluate-concept-feasibility.txt +127 -0
- package/.claude/workflows/cli-templates/prompts/planning/03-plan-migration-strategy.txt +30 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-api.txt +122 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-components.txt +122 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-config.txt +89 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-core.txt +60 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-patterns.txt +70 -0
- package/.claude/workflows/cli-templates/prompts/rules/rule-testing.txt +81 -0
- package/.claude/workflows/cli-templates/prompts/rules/tech-rules-agent-prompt.txt +89 -0
- package/.claude/workflows/cli-templates/prompts/tech/tech-module-format.txt +359 -0
- package/.claude/workflows/cli-templates/prompts/tech/tech-skill-index.txt +185 -0
- package/.claude/workflows/cli-templates/prompts/test/test-concept-analysis.txt +179 -0
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-creative-style.txt +95 -0
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt +92 -0
- package/.claude/workflows/cli-templates/prompts/verification/codex-technical.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/verification/cross-validation.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/verification/gemini-strategic.txt +27 -0
- package/.claude/workflows/cli-templates/prompts/workflow/analysis-results-structure.txt +224 -0
- package/.claude/workflows/cli-templates/prompts/workflow/codex-feasibility-validation.txt +176 -0
- package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -0
- package/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt +286 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-aggregation.txt +172 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +94 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-index.txt +224 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +94 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-sessions-timeline.txt +53 -0
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-agent-mode.txt +123 -0
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-cli-mode.txt +182 -0
- package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +112 -0
- package/.claude/workflows/cli-templates/protocols/write-protocol.md +201 -0
- package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +137 -0
- package/.claude/workflows/cli-templates/schemas/debug-log-json-schema.json +127 -0
- package/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json +234 -0
- package/.claude/workflows/cli-templates/schemas/explore-json-schema.json +124 -0
- package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +298 -0
- package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +244 -0
- package/.claude/workflows/cli-templates/schemas/project-json-schema.json +221 -0
- package/.claude/workflows/cli-templates/schemas/review-deep-dive-results-schema.json +82 -0
- package/.claude/workflows/cli-templates/schemas/review-dimension-results-schema.json +51 -0
- package/.claude/workflows/cli-templates/tech-stacks/go-dev.md +91 -0
- package/.claude/workflows/cli-templates/tech-stacks/java-dev.md +107 -0
- package/.claude/workflows/cli-templates/tech-stacks/javascript-dev.md +58 -0
- package/.claude/workflows/cli-templates/tech-stacks/python-dev.md +79 -0
- package/.claude/workflows/cli-templates/tech-stacks/react-dev.md +103 -0
- package/.claude/workflows/cli-templates/tech-stacks/typescript-dev.md +83 -0
- package/.claude/workflows/cli-templates/ui-design/systems/animation-tokens.json +247 -0
- package/.claude/workflows/cli-templates/ui-design/systems/design-tokens.json +342 -0
- package/.claude/workflows/cli-templates/ui-design/systems/layout-templates.json +145 -0
- package/.claude/workflows/cli-tools-usage.md +526 -0
- package/.claude/workflows/coding-philosophy.md +70 -0
- package/.claude/workflows/context-tools.md +84 -0
- package/.claude/workflows/file-modification.md +64 -0
- package/.claude/workflows/review-directory-specification.md +336 -0
- package/.claude/workflows/task-core.md +214 -0
- package/.claude/workflows/tool-strategy.md +216 -0
- package/.claude/workflows/windows-platform.md +16 -0
- package/.claude/workflows/workflow-architecture.md +942 -0
- package/.codex/AGENTS.md +63 -0
- package/.codex/prompts/debug.md +318 -0
- package/.codex/prompts/execute.md +273 -0
- package/.codex/prompts/lite-execute.md +164 -0
- package/.codex/prompts/lite-plan.md +469 -0
- package/.codex/prompts.zip +0 -0
- package/.gemini/GEMINI.md +25 -0
- package/.qwen/QWEN.md +25 -0
- package/LICENSE +21 -0
- package/README.md +294 -145
- package/ccw/README.md +145 -0
- package/ccw/package.json +65 -0
- package/codex-lens/pyproject.toml +48 -0
- package/codex-lens/src/codexlens/.workflow/.cli-history/history.db +0 -0
- package/codex-lens/src/codexlens/__init__.py +28 -0
- package/codex-lens/src/codexlens/__main__.py +14 -0
- package/codex-lens/src/codexlens/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/__main__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__init__.py +27 -0
- package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/cli/commands.py +1931 -0
- package/codex-lens/src/codexlens/cli/embedding_manager.py +620 -0
- package/codex-lens/src/codexlens/cli/model_manager.py +289 -0
- package/codex-lens/src/codexlens/cli/output.py +124 -0
- package/codex-lens/src/codexlens/config.py +201 -0
- package/codex-lens/src/codexlens/entities.py +121 -0
- package/codex-lens/src/codexlens/errors.py +55 -0
- package/codex-lens/src/codexlens/indexing/README.md +77 -0
- package/codex-lens/src/codexlens/indexing/__init__.py +4 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -0
- package/codex-lens/src/codexlens/parsers/__init__.py +8 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/encoding.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/parsers/encoding.py +202 -0
- package/codex-lens/src/codexlens/parsers/factory.py +256 -0
- package/codex-lens/src/codexlens/parsers/tokenizer.py +98 -0
- package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -0
- package/codex-lens/src/codexlens/search/__init__.py +15 -0
- package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/query_parser.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/search/chain_search.py +647 -0
- package/codex-lens/src/codexlens/search/enrichment.py +150 -0
- package/codex-lens/src/codexlens/search/hybrid_search.py +313 -0
- package/codex-lens/src/codexlens/search/query_parser.py +242 -0
- package/codex-lens/src/codexlens/search/ranking.py +274 -0
- package/codex-lens/src/codexlens/semantic/__init__.py +39 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/code_extractor.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/graph_analyzer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/llm_enhancer.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/semantic/ann_index.py +414 -0
- package/codex-lens/src/codexlens/semantic/chunker.py +448 -0
- package/codex-lens/src/codexlens/semantic/code_extractor.py +274 -0
- package/codex-lens/src/codexlens/semantic/embedder.py +185 -0
- package/codex-lens/src/codexlens/semantic/vector_store.py +955 -0
- package/codex-lens/src/codexlens/storage/__init__.py +29 -0
- package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/file_cache.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/migration_manager.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/dir_index.py +1850 -0
- package/codex-lens/src/codexlens/storage/file_cache.py +32 -0
- package/codex-lens/src/codexlens/storage/index_tree.py +776 -0
- package/codex-lens/src/codexlens/storage/migration_manager.py +154 -0
- package/codex-lens/src/codexlens/storage/migrations/__init__.py +1 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_001_normalize_keywords.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_002_add_token_metadata.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_003_code_relationships.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_005_cleanup_unused_fields.cpython-313.pyc +0 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_001_normalize_keywords.py +123 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_002_add_token_metadata.py +48 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_004_dual_fts.py +232 -0
- package/codex-lens/src/codexlens/storage/migrations/migration_005_cleanup_unused_fields.py +196 -0
- package/codex-lens/src/codexlens/storage/path_mapper.py +274 -0
- package/codex-lens/src/codexlens/storage/registry.py +670 -0
- package/codex-lens/src/codexlens/storage/sqlite_store.py +576 -0
- package/codex-lens/src/codexlens/storage/sqlite_utils.py +64 -0
- package/package.json +37 -32
- /package/{bin → ccw/bin}/ccw-mcp.js +0 -0
- /package/{bin → ccw/bin}/ccw.js +0 -0
- /package/{dist → ccw/dist}/cli.d.ts +0 -0
- /package/{dist → ccw/dist}/cli.d.ts.map +0 -0
- /package/{dist → ccw/dist}/cli.js +0 -0
- /package/{dist → ccw/dist}/cli.js.map +0 -0
- /package/{dist → ccw/dist}/commands/cli.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/cli.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/cli.js +0 -0
- /package/{dist → ccw/dist}/commands/cli.js.map +0 -0
- /package/{dist → ccw/dist}/commands/core-memory.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/core-memory.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/core-memory.js +0 -0
- /package/{dist → ccw/dist}/commands/core-memory.js.map +0 -0
- /package/{dist → ccw/dist}/commands/hook.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/hook.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/hook.js +0 -0
- /package/{dist → ccw/dist}/commands/hook.js.map +0 -0
- /package/{dist → ccw/dist}/commands/install.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/install.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/install.js +0 -0
- /package/{dist → ccw/dist}/commands/install.js.map +0 -0
- /package/{dist → ccw/dist}/commands/list.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/list.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/list.js +0 -0
- /package/{dist → ccw/dist}/commands/list.js.map +0 -0
- /package/{dist → ccw/dist}/commands/memory.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/memory.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/memory.js +0 -0
- /package/{dist → ccw/dist}/commands/memory.js.map +0 -0
- /package/{dist → ccw/dist}/commands/serve.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/serve.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/serve.js +0 -0
- /package/{dist → ccw/dist}/commands/serve.js.map +0 -0
- /package/{dist → ccw/dist}/commands/session-path-resolver.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/session-path-resolver.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/session-path-resolver.js +0 -0
- /package/{dist → ccw/dist}/commands/session-path-resolver.js.map +0 -0
- /package/{dist → ccw/dist}/commands/session.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/session.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/session.js +0 -0
- /package/{dist → ccw/dist}/commands/session.js.map +0 -0
- /package/{dist → ccw/dist}/commands/stop.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/stop.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/stop.js +0 -0
- /package/{dist → ccw/dist}/commands/stop.js.map +0 -0
- /package/{dist → ccw/dist}/commands/tool.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/tool.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/tool.js +0 -0
- /package/{dist → ccw/dist}/commands/tool.js.map +0 -0
- /package/{dist → ccw/dist}/commands/uninstall.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/uninstall.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/uninstall.js +0 -0
- /package/{dist → ccw/dist}/commands/uninstall.js.map +0 -0
- /package/{dist → ccw/dist}/commands/upgrade.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/upgrade.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/upgrade.js +0 -0
- /package/{dist → ccw/dist}/commands/upgrade.js.map +0 -0
- /package/{dist → ccw/dist}/commands/view.d.ts +0 -0
- /package/{dist → ccw/dist}/commands/view.d.ts.map +0 -0
- /package/{dist → ccw/dist}/commands/view.js +0 -0
- /package/{dist → ccw/dist}/commands/view.js.map +0 -0
- /package/{dist → ccw/dist}/config/storage-paths.d.ts +0 -0
- /package/{dist → ccw/dist}/config/storage-paths.d.ts.map +0 -0
- /package/{dist → ccw/dist}/config/storage-paths.js +0 -0
- /package/{dist → ccw/dist}/config/storage-paths.js.map +0 -0
- /package/{dist → ccw/dist}/core/cache-manager.d.ts +0 -0
- /package/{dist → ccw/dist}/core/cache-manager.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/cache-manager.js +0 -0
- /package/{dist → ccw/dist}/core/cache-manager.js.map +0 -0
- /package/{dist → ccw/dist}/core/claude-freshness.d.ts +0 -0
- /package/{dist → ccw/dist}/core/claude-freshness.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/claude-freshness.js +0 -0
- /package/{dist → ccw/dist}/core/claude-freshness.js.map +0 -0
- /package/{dist → ccw/dist}/core/core-memory-store.d.ts +0 -0
- /package/{dist → ccw/dist}/core/core-memory-store.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/core-memory-store.js +0 -0
- /package/{dist → ccw/dist}/core/core-memory-store.js.map +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator-patch.d.ts +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator-patch.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator-patch.js +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator-patch.js.map +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator.d.ts +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator.js +0 -0
- /package/{dist → ccw/dist}/core/dashboard-generator.js.map +0 -0
- /package/{dist → ccw/dist}/core/data-aggregator.d.ts +0 -0
- /package/{dist → ccw/dist}/core/data-aggregator.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/data-aggregator.js +0 -0
- /package/{dist → ccw/dist}/core/data-aggregator.js.map +0 -0
- /package/{dist → ccw/dist}/core/history-importer.d.ts +0 -0
- /package/{dist → ccw/dist}/core/history-importer.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/history-importer.js +0 -0
- /package/{dist → ccw/dist}/core/history-importer.js.map +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner-complete.d.ts +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner-complete.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner-complete.js +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner-complete.js.map +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner.d.ts +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner.js +0 -0
- /package/{dist → ccw/dist}/core/lite-scanner.js.map +0 -0
- /package/{dist → ccw/dist}/core/manifest.d.ts +0 -0
- /package/{dist → ccw/dist}/core/manifest.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/manifest.js +0 -0
- /package/{dist → ccw/dist}/core/manifest.js.map +0 -0
- /package/{dist → ccw/dist}/core/memory-embedder-bridge.d.ts +0 -0
- /package/{dist → ccw/dist}/core/memory-embedder-bridge.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/memory-embedder-bridge.js +0 -0
- /package/{dist → ccw/dist}/core/memory-embedder-bridge.js.map +0 -0
- /package/{dist → ccw/dist}/core/memory-store.d.ts +0 -0
- /package/{dist → ccw/dist}/core/memory-store.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/memory-store.js +0 -0
- /package/{dist → ccw/dist}/core/memory-store.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/ccw-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/ccw-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/ccw-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/ccw-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/claude-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/claude-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/claude-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/claude-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/cli-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/cli-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/cli-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/cli-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/codexlens-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/codexlens-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/codexlens-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/codexlens-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/core-memory-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/core-memory-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/core-memory-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/core-memory-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/files-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/files-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/files-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/files-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/graph-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/graph-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/graph-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/graph-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/help-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/help-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/help-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/help-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/hooks-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/hooks-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/hooks-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/hooks-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-templates-db.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-templates-db.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-templates-db.js +0 -0
- /package/{dist → ccw/dist}/core/routes/mcp-templates-db.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/memory-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/memory-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/memory-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/memory-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/rules-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/rules-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/rules-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/rules-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/session-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/session-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/session-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/session-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/skills-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/skills-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/skills-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/skills-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/status-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/status-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/status-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/status-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/routes/system-routes.d.ts +0 -0
- /package/{dist → ccw/dist}/core/routes/system-routes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/routes/system-routes.js +0 -0
- /package/{dist → ccw/dist}/core/routes/system-routes.js.map +0 -0
- /package/{dist → ccw/dist}/core/server.d.ts +0 -0
- /package/{dist → ccw/dist}/core/server.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/server.js +0 -0
- /package/{dist → ccw/dist}/core/server.js.map +0 -0
- /package/{dist → ccw/dist}/core/session-clustering-service.d.ts +0 -0
- /package/{dist → ccw/dist}/core/session-clustering-service.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/session-clustering-service.js +0 -0
- /package/{dist → ccw/dist}/core/session-clustering-service.js.map +0 -0
- /package/{dist → ccw/dist}/core/session-scanner.d.ts +0 -0
- /package/{dist → ccw/dist}/core/session-scanner.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/session-scanner.js +0 -0
- /package/{dist → ccw/dist}/core/session-scanner.js.map +0 -0
- /package/{dist → ccw/dist}/core/websocket.d.ts +0 -0
- /package/{dist → ccw/dist}/core/websocket.d.ts.map +0 -0
- /package/{dist → ccw/dist}/core/websocket.js +0 -0
- /package/{dist → ccw/dist}/core/websocket.js.map +0 -0
- /package/{dist → ccw/dist}/index.d.ts +0 -0
- /package/{dist → ccw/dist}/index.d.ts.map +0 -0
- /package/{dist → ccw/dist}/index.js +0 -0
- /package/{dist → ccw/dist}/index.js.map +0 -0
- /package/{dist → ccw/dist}/mcp-server/index.d.ts +0 -0
- /package/{dist → ccw/dist}/mcp-server/index.d.ts.map +0 -0
- /package/{dist → ccw/dist}/mcp-server/index.js +0 -0
- /package/{dist → ccw/dist}/mcp-server/index.js.map +0 -0
- /package/{dist → ccw/dist}/tools/classify-folders.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/classify-folders.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/classify-folders.js +0 -0
- /package/{dist → ccw/dist}/tools/classify-folders.js.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-config-manager.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/cli-config-manager.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-config-manager.js +0 -0
- /package/{dist → ccw/dist}/tools/cli-config-manager.js.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-executor.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/cli-executor.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-executor.js +0 -0
- /package/{dist → ccw/dist}/tools/cli-executor.js.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-history-store.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/cli-history-store.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/cli-history-store.js +0 -0
- /package/{dist → ccw/dist}/tools/cli-history-store.js.map +0 -0
- /package/{dist → ccw/dist}/tools/codex-lens.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/codex-lens.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/codex-lens.js +0 -0
- /package/{dist → ccw/dist}/tools/codex-lens.js.map +0 -0
- /package/{dist → ccw/dist}/tools/convert-tokens-to-css.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/convert-tokens-to-css.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/convert-tokens-to-css.js +0 -0
- /package/{dist → ccw/dist}/tools/convert-tokens-to-css.js.map +0 -0
- /package/{dist → ccw/dist}/tools/core-memory.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/core-memory.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/core-memory.js +0 -0
- /package/{dist → ccw/dist}/tools/core-memory.js.map +0 -0
- /package/{dist → ccw/dist}/tools/detect-changed-modules.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/detect-changed-modules.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/detect-changed-modules.js +0 -0
- /package/{dist → ccw/dist}/tools/detect-changed-modules.js.map +0 -0
- /package/{dist → ccw/dist}/tools/discover-design-files.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/discover-design-files.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/discover-design-files.js +0 -0
- /package/{dist → ccw/dist}/tools/discover-design-files.js.map +0 -0
- /package/{dist → ccw/dist}/tools/edit-file.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/edit-file.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/edit-file.js +0 -0
- /package/{dist → ccw/dist}/tools/edit-file.js.map +0 -0
- /package/{dist → ccw/dist}/tools/generate-module-docs.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/generate-module-docs.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/generate-module-docs.js +0 -0
- /package/{dist → ccw/dist}/tools/generate-module-docs.js.map +0 -0
- /package/{dist → ccw/dist}/tools/get-modules-by-depth.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/get-modules-by-depth.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/get-modules-by-depth.js +0 -0
- /package/{dist → ccw/dist}/tools/get-modules-by-depth.js.map +0 -0
- /package/{dist → ccw/dist}/tools/index.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/index.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/index.js +0 -0
- /package/{dist → ccw/dist}/tools/index.js.map +0 -0
- /package/{dist → ccw/dist}/tools/native-session-discovery.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/native-session-discovery.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/native-session-discovery.js +0 -0
- /package/{dist → ccw/dist}/tools/native-session-discovery.js.map +0 -0
- /package/{dist → ccw/dist}/tools/notifier.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/notifier.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/notifier.js +0 -0
- /package/{dist → ccw/dist}/tools/notifier.js.map +0 -0
- /package/{dist → ccw/dist}/tools/read-file.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/read-file.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/read-file.js +0 -0
- /package/{dist → ccw/dist}/tools/read-file.js.map +0 -0
- /package/{dist → ccw/dist}/tools/resume-strategy.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/resume-strategy.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/resume-strategy.js +0 -0
- /package/{dist → ccw/dist}/tools/resume-strategy.js.map +0 -0
- /package/{dist → ccw/dist}/tools/session-content-parser.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/session-content-parser.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/session-content-parser.js +0 -0
- /package/{dist → ccw/dist}/tools/session-content-parser.js.map +0 -0
- /package/{dist → ccw/dist}/tools/session-manager.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/session-manager.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/session-manager.js +0 -0
- /package/{dist → ccw/dist}/tools/session-manager.js.map +0 -0
- /package/{dist → ccw/dist}/tools/smart-context.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/smart-context.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/smart-context.js +0 -0
- /package/{dist → ccw/dist}/tools/smart-context.js.map +0 -0
- /package/{dist → ccw/dist}/tools/smart-search.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/smart-search.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/smart-search.js +0 -0
- /package/{dist → ccw/dist}/tools/smart-search.js.map +0 -0
- /package/{dist → ccw/dist}/tools/storage-manager.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/storage-manager.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/storage-manager.js +0 -0
- /package/{dist → ccw/dist}/tools/storage-manager.js.map +0 -0
- /package/{dist → ccw/dist}/tools/ui-generate-preview.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/ui-generate-preview.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/ui-generate-preview.js +0 -0
- /package/{dist → ccw/dist}/tools/ui-generate-preview.js.map +0 -0
- /package/{dist → ccw/dist}/tools/ui-instantiate-prototypes.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/ui-instantiate-prototypes.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/ui-instantiate-prototypes.js +0 -0
- /package/{dist → ccw/dist}/tools/ui-instantiate-prototypes.js.map +0 -0
- /package/{dist → ccw/dist}/tools/update-module-claude.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/update-module-claude.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/update-module-claude.js +0 -0
- /package/{dist → ccw/dist}/tools/update-module-claude.js.map +0 -0
- /package/{dist → ccw/dist}/tools/write-file.d.ts +0 -0
- /package/{dist → ccw/dist}/tools/write-file.d.ts.map +0 -0
- /package/{dist → ccw/dist}/tools/write-file.js +0 -0
- /package/{dist → ccw/dist}/tools/write-file.js.map +0 -0
- /package/{dist → ccw/dist}/types/config.d.ts +0 -0
- /package/{dist → ccw/dist}/types/config.d.ts.map +0 -0
- /package/{dist → ccw/dist}/types/config.js +0 -0
- /package/{dist → ccw/dist}/types/config.js.map +0 -0
- /package/{dist → ccw/dist}/types/index.d.ts +0 -0
- /package/{dist → ccw/dist}/types/index.d.ts.map +0 -0
- /package/{dist → ccw/dist}/types/index.js +0 -0
- /package/{dist → ccw/dist}/types/index.js.map +0 -0
- /package/{dist → ccw/dist}/types/session.d.ts +0 -0
- /package/{dist → ccw/dist}/types/session.d.ts.map +0 -0
- /package/{dist → ccw/dist}/types/session.js +0 -0
- /package/{dist → ccw/dist}/types/session.js.map +0 -0
- /package/{dist → ccw/dist}/types/tool.d.ts +0 -0
- /package/{dist → ccw/dist}/types/tool.d.ts.map +0 -0
- /package/{dist → ccw/dist}/types/tool.js +0 -0
- /package/{dist → ccw/dist}/types/tool.js.map +0 -0
- /package/{dist → ccw/dist}/utils/browser-launcher.d.ts +0 -0
- /package/{dist → ccw/dist}/utils/browser-launcher.d.ts.map +0 -0
- /package/{dist → ccw/dist}/utils/browser-launcher.js +0 -0
- /package/{dist → ccw/dist}/utils/browser-launcher.js.map +0 -0
- /package/{dist → ccw/dist}/utils/file-utils.d.ts +0 -0
- /package/{dist → ccw/dist}/utils/file-utils.d.ts.map +0 -0
- /package/{dist → ccw/dist}/utils/file-utils.js +0 -0
- /package/{dist → ccw/dist}/utils/file-utils.js.map +0 -0
- /package/{dist → ccw/dist}/utils/path-resolver.d.ts +0 -0
- /package/{dist → ccw/dist}/utils/path-resolver.d.ts.map +0 -0
- /package/{dist → ccw/dist}/utils/path-resolver.js +0 -0
- /package/{dist → ccw/dist}/utils/path-resolver.js.map +0 -0
- /package/{dist → ccw/dist}/utils/path-validator.d.ts +0 -0
- /package/{dist → ccw/dist}/utils/path-validator.d.ts.map +0 -0
- /package/{dist → ccw/dist}/utils/path-validator.js +0 -0
- /package/{dist → ccw/dist}/utils/path-validator.js.map +0 -0
- /package/{dist → ccw/dist}/utils/ui.d.ts +0 -0
- /package/{dist → ccw/dist}/utils/ui.d.ts.map +0 -0
- /package/{dist → ccw/dist}/utils/ui.js +0 -0
- /package/{dist → ccw/dist}/utils/ui.js.map +0 -0
- /package/{src → ccw/src}/.workflow/.cli-history/history.db +0 -0
- /package/{src → ccw/src}/.workflow/.cli-history/history.db-shm +0 -0
- /package/{src → ccw/src}/.workflow/.cli-history/history.db-wal +0 -0
- /package/{src → ccw/src}/cli.ts +0 -0
- /package/{src → ccw/src}/commands/cli.ts +0 -0
- /package/{src → ccw/src}/commands/core-memory.ts +0 -0
- /package/{src → ccw/src}/commands/hook.ts +0 -0
- /package/{src → ccw/src}/commands/install.ts +0 -0
- /package/{src → ccw/src}/commands/list.ts +0 -0
- /package/{src → ccw/src}/commands/memory.ts +0 -0
- /package/{src → ccw/src}/commands/serve.ts +0 -0
- /package/{src → ccw/src}/commands/session-path-resolver.ts +0 -0
- /package/{src → ccw/src}/commands/session.ts +0 -0
- /package/{src → ccw/src}/commands/stop.ts +0 -0
- /package/{src → ccw/src}/commands/tool.ts +0 -0
- /package/{src → ccw/src}/commands/uninstall.ts +0 -0
- /package/{src → ccw/src}/commands/upgrade.ts +0 -0
- /package/{src → ccw/src}/commands/view.ts +0 -0
- /package/{src → ccw/src}/config/storage-paths.ts +0 -0
- /package/{src → ccw/src}/core/cache-manager.ts +0 -0
- /package/{src → ccw/src}/core/claude-freshness.ts +0 -0
- /package/{src → ccw/src}/core/core-memory-store.ts +0 -0
- /package/{src → ccw/src}/core/dashboard-generator-patch.ts +0 -0
- /package/{src → ccw/src}/core/dashboard-generator.ts +0 -0
- /package/{src → ccw/src}/core/data-aggregator.ts +0 -0
- /package/{src → ccw/src}/core/history-importer.ts +0 -0
- /package/{src → ccw/src}/core/lite-scanner-complete.ts +0 -0
- /package/{src → ccw/src}/core/lite-scanner.ts +0 -0
- /package/{src → ccw/src}/core/manifest.ts +0 -0
- /package/{src → ccw/src}/core/memory-embedder-bridge.ts +0 -0
- /package/{src → ccw/src}/core/memory-store.ts +0 -0
- /package/{src → ccw/src}/core/routes/ccw-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/claude-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/cli-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/codexlens-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/core-memory-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/files-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/graph-routes.md +0 -0
- /package/{src → ccw/src}/core/routes/graph-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/help-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/hooks-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/mcp-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/mcp-routes.ts.backup +0 -0
- /package/{src → ccw/src}/core/routes/mcp-templates-db.ts +0 -0
- /package/{src → ccw/src}/core/routes/memory-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/rules-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/session-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/skills-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/status-routes.ts +0 -0
- /package/{src → ccw/src}/core/routes/system-routes.ts +0 -0
- /package/{src → ccw/src}/core/server.ts +0 -0
- /package/{src → ccw/src}/core/session-clustering-service.ts +0 -0
- /package/{src → ccw/src}/core/session-scanner.ts +0 -0
- /package/{src → ccw/src}/core/websocket.ts +0 -0
- /package/{src → ccw/src}/index.ts +0 -0
- /package/{src → ccw/src}/mcp-server/index.ts +0 -0
- /package/{src → ccw/src}/templates/assets/css/github-dark.min.css +0 -0
- /package/{src → ccw/src}/templates/assets/css/github.min.css +0 -0
- /package/{src → ccw/src}/templates/assets/js/cytoscape.min.js +0 -0
- /package/{src → ccw/src}/templates/assets/js/d3.min.js +0 -0
- /package/{src → ccw/src}/templates/assets/js/highlight.min.js +0 -0
- /package/{src → ccw/src}/templates/assets/js/lucide.min.js +0 -0
- /package/{src → ccw/src}/templates/assets/js/marked.min.js +0 -0
- /package/{src → ccw/src}/templates/assets/js/tailwind.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/01-base.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/02-session.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/03-tasks.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/04-lite-tasks.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/05-context.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/06-cards.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/07-managers.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/08-review.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/09-explorer.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/10-cli-status.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/11-cli-history.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/12-cli-legacy.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/13-cli-ccw.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/14-cli-modals.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/15-cli-endpoints.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/16-cli-session.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/17-cli-conversation.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/18-cli-settings.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/19-cli-native-session.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/20-cli-taskqueue.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/21-cli-toolmgmt.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/22-cli-semantic.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/23-memory.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/24-prompt-history.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/25-skills-rules.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/26-claude-manager.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/27-graph-explorer.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/28-mcp-manager.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/29-help.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-css/30-core-memory.css +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/api.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/_conflict_tab.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/_exp_helpers.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/_review_tab.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/carousel.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/cli-history.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/cli-status.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/flowchart.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/global-notifications.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/hook-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/index-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/mcp-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/modals.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/navigation.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/notifications.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/sidebar.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/storage-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/tabs-context.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/tabs-other.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/task-drawer-core.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/task-drawer-renderers.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/task-queue-sidebar.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/theme.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/components/version-check.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/help-i18n.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/i18n.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/main.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/state.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/utils.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/claude-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/cli-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/codexlens-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/core-memory-clusters.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/core-memory.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/explorer.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/fix-session.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/graph-explorer.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/help.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/history.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/home.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/hook-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/lite-tasks.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/mcp-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/mcp-manager.js.backup +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/mcp-manager.js.new +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/memory.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/project-overview.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/prompt-history.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/review-session.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/rules-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/session-detail.js +0 -0
- /package/{src → ccw/src}/templates/dashboard-js/views/skills-manager.js +0 -0
- /package/{src → ccw/src}/templates/dashboard.html +0 -0
- /package/{src → ccw/src}/templates/hooks-config-example.json +0 -0
- /package/{src → ccw/src}/templates/review-cycle-dashboard.html +0 -0
- /package/{src → ccw/src}/templates/workflow-dashboard.html +0 -0
- /package/{src → ccw/src}/tools/classify-folders.ts +0 -0
- /package/{src → ccw/src}/tools/cli-config-manager.ts +0 -0
- /package/{src → ccw/src}/tools/cli-executor.ts +0 -0
- /package/{src → ccw/src}/tools/cli-history-store.ts +0 -0
- /package/{src → ccw/src}/tools/codex-lens.ts +0 -0
- /package/{src → ccw/src}/tools/convert-tokens-to-css.ts +0 -0
- /package/{src → ccw/src}/tools/core-memory.ts +0 -0
- /package/{src → ccw/src}/tools/detect-changed-modules.ts +0 -0
- /package/{src → ccw/src}/tools/discover-design-files.ts +0 -0
- /package/{src → ccw/src}/tools/edit-file.ts +0 -0
- /package/{src → ccw/src}/tools/generate-module-docs.ts +0 -0
- /package/{src → ccw/src}/tools/get-modules-by-depth.ts +0 -0
- /package/{src → ccw/src}/tools/index.ts +0 -0
- /package/{src → ccw/src}/tools/native-session-discovery.ts +0 -0
- /package/{src → ccw/src}/tools/notifier.ts +0 -0
- /package/{src → ccw/src}/tools/read-file.ts +0 -0
- /package/{src → ccw/src}/tools/resume-strategy.ts +0 -0
- /package/{src → ccw/src}/tools/session-content-parser.ts +0 -0
- /package/{src → ccw/src}/tools/session-manager.ts +0 -0
- /package/{src → ccw/src}/tools/smart-context.ts +0 -0
- /package/{src → ccw/src}/tools/smart-search.ts +0 -0
- /package/{src → ccw/src}/tools/smart-search.ts.backup +0 -0
- /package/{src → ccw/src}/tools/storage-manager.ts +0 -0
- /package/{src → ccw/src}/tools/ui-generate-preview.js +0 -0
- /package/{src → ccw/src}/tools/ui-instantiate-prototypes.js +0 -0
- /package/{src → ccw/src}/tools/update-module-claude.js +0 -0
- /package/{src → ccw/src}/tools/write-file.ts +0 -0
- /package/{src → ccw/src}/types/config.ts +0 -0
- /package/{src → ccw/src}/types/index.ts +0 -0
- /package/{src → ccw/src}/types/session.ts +0 -0
- /package/{src → ccw/src}/types/tool.ts +0 -0
- /package/{src → ccw/src}/utils/browser-launcher.ts +0 -0
- /package/{src → ccw/src}/utils/file-utils.ts +0 -0
- /package/{src → ccw/src}/utils/path-resolver.ts +0 -0
- /package/{src → ccw/src}/utils/path-validator.ts +0 -0
- /package/{src → ccw/src}/utils/ui.ts +0 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# codex-lens/src/codexlens/search/enrichment.py
|
|
2
|
+
"""Relationship enrichment for search results."""
|
|
3
|
+
import sqlite3
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import List, Dict, Any, Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RelationshipEnricher:
|
|
9
|
+
"""Enriches search results with code graph relationships."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, index_path: Path):
|
|
12
|
+
"""Initialize with path to index database.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
index_path: Path to _index.db SQLite database
|
|
16
|
+
"""
|
|
17
|
+
self.index_path = index_path
|
|
18
|
+
self.db_conn: Optional[sqlite3.Connection] = None
|
|
19
|
+
self._connect()
|
|
20
|
+
|
|
21
|
+
def _connect(self) -> None:
|
|
22
|
+
"""Establish read-only database connection."""
|
|
23
|
+
if self.index_path.exists():
|
|
24
|
+
self.db_conn = sqlite3.connect(
|
|
25
|
+
f"file:{self.index_path}?mode=ro",
|
|
26
|
+
uri=True,
|
|
27
|
+
check_same_thread=False
|
|
28
|
+
)
|
|
29
|
+
self.db_conn.row_factory = sqlite3.Row
|
|
30
|
+
|
|
31
|
+
def enrich(self, results: List[Dict[str, Any]], limit: int = 10) -> List[Dict[str, Any]]:
|
|
32
|
+
"""Add relationship data to search results.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
results: List of search result dictionaries
|
|
36
|
+
limit: Maximum number of results to enrich
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Results with relationships field added
|
|
40
|
+
"""
|
|
41
|
+
if not self.db_conn:
|
|
42
|
+
return results
|
|
43
|
+
|
|
44
|
+
for result in results[:limit]:
|
|
45
|
+
file_path = result.get('file') or result.get('path')
|
|
46
|
+
symbol_name = result.get('symbol')
|
|
47
|
+
result['relationships'] = self._find_relationships(file_path, symbol_name)
|
|
48
|
+
return results
|
|
49
|
+
|
|
50
|
+
def _find_relationships(self, file_path: Optional[str], symbol_name: Optional[str]) -> List[Dict[str, Any]]:
|
|
51
|
+
"""Query relationships for a symbol.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
file_path: Path to file containing the symbol
|
|
55
|
+
symbol_name: Name of the symbol
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
List of relationship dictionaries with type, direction, target/source, file, line
|
|
59
|
+
"""
|
|
60
|
+
if not self.db_conn or not symbol_name:
|
|
61
|
+
return []
|
|
62
|
+
|
|
63
|
+
relationships = []
|
|
64
|
+
cursor = self.db_conn.cursor()
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
# Find symbol ID(s) by name and optionally file
|
|
68
|
+
if file_path:
|
|
69
|
+
cursor.execute(
|
|
70
|
+
'SELECT id FROM symbols WHERE name = ? AND file_path = ?',
|
|
71
|
+
(symbol_name, file_path)
|
|
72
|
+
)
|
|
73
|
+
else:
|
|
74
|
+
cursor.execute('SELECT id FROM symbols WHERE name = ?', (symbol_name,))
|
|
75
|
+
|
|
76
|
+
symbol_ids = [row[0] for row in cursor.fetchall()]
|
|
77
|
+
|
|
78
|
+
if not symbol_ids:
|
|
79
|
+
return []
|
|
80
|
+
|
|
81
|
+
# Query outgoing relationships (symbol is source)
|
|
82
|
+
placeholders = ','.join('?' * len(symbol_ids))
|
|
83
|
+
cursor.execute(f'''
|
|
84
|
+
SELECT sr.relationship_type, sr.target_symbol_fqn, sr.file_path, sr.line
|
|
85
|
+
FROM symbol_relationships sr
|
|
86
|
+
WHERE sr.source_symbol_id IN ({placeholders})
|
|
87
|
+
''', symbol_ids)
|
|
88
|
+
|
|
89
|
+
for row in cursor.fetchall():
|
|
90
|
+
relationships.append({
|
|
91
|
+
'type': row[0],
|
|
92
|
+
'direction': 'outgoing',
|
|
93
|
+
'target': row[1],
|
|
94
|
+
'file': row[2],
|
|
95
|
+
'line': row[3],
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
# Query incoming relationships (symbol is target)
|
|
99
|
+
# Match against symbol name or qualified name patterns
|
|
100
|
+
cursor.execute('''
|
|
101
|
+
SELECT sr.relationship_type, s.name AS source_name, sr.file_path, sr.line
|
|
102
|
+
FROM symbol_relationships sr
|
|
103
|
+
JOIN symbols s ON sr.source_symbol_id = s.id
|
|
104
|
+
WHERE sr.target_symbol_fqn = ? OR sr.target_symbol_fqn LIKE ?
|
|
105
|
+
''', (symbol_name, f'%.{symbol_name}'))
|
|
106
|
+
|
|
107
|
+
for row in cursor.fetchall():
|
|
108
|
+
rel_type = row[0]
|
|
109
|
+
# Convert to incoming type
|
|
110
|
+
incoming_type = self._to_incoming_type(rel_type)
|
|
111
|
+
relationships.append({
|
|
112
|
+
'type': incoming_type,
|
|
113
|
+
'direction': 'incoming',
|
|
114
|
+
'source': row[1],
|
|
115
|
+
'file': row[2],
|
|
116
|
+
'line': row[3],
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
except sqlite3.Error:
|
|
120
|
+
return []
|
|
121
|
+
|
|
122
|
+
return relationships
|
|
123
|
+
|
|
124
|
+
def _to_incoming_type(self, outgoing_type: str) -> str:
|
|
125
|
+
"""Convert outgoing relationship type to incoming type.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
outgoing_type: The outgoing relationship type (e.g., 'calls', 'imports')
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
Corresponding incoming type (e.g., 'called_by', 'imported_by')
|
|
132
|
+
"""
|
|
133
|
+
type_map = {
|
|
134
|
+
'calls': 'called_by',
|
|
135
|
+
'imports': 'imported_by',
|
|
136
|
+
'extends': 'extended_by',
|
|
137
|
+
}
|
|
138
|
+
return type_map.get(outgoing_type, f'{outgoing_type}_by')
|
|
139
|
+
|
|
140
|
+
def close(self) -> None:
|
|
141
|
+
"""Close database connection."""
|
|
142
|
+
if self.db_conn:
|
|
143
|
+
self.db_conn.close()
|
|
144
|
+
self.db_conn = None
|
|
145
|
+
|
|
146
|
+
def __enter__(self) -> 'RelationshipEnricher':
|
|
147
|
+
return self
|
|
148
|
+
|
|
149
|
+
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
|
|
150
|
+
self.close()
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"""Hybrid search engine orchestrating parallel exact/fuzzy/vector searches with RRF fusion.
|
|
2
|
+
|
|
3
|
+
Coordinates multiple search backends in parallel using ThreadPoolExecutor and combines
|
|
4
|
+
results via Reciprocal Rank Fusion (RRF) algorithm.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Dict, List, Optional
|
|
13
|
+
|
|
14
|
+
from codexlens.entities import SearchResult
|
|
15
|
+
from codexlens.search.ranking import reciprocal_rank_fusion, tag_search_source
|
|
16
|
+
from codexlens.storage.dir_index import DirIndexStore
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class HybridSearchEngine:
|
|
20
|
+
"""Hybrid search engine with parallel execution and RRF fusion.
|
|
21
|
+
|
|
22
|
+
Orchestrates searches across exact FTS, fuzzy FTS, and optional vector backends,
|
|
23
|
+
executing them in parallel and fusing results via Reciprocal Rank Fusion.
|
|
24
|
+
|
|
25
|
+
Attributes:
|
|
26
|
+
logger: Python logger instance
|
|
27
|
+
default_weights: Default RRF weights for each source
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
# Default RRF weights (exact: 40%, fuzzy: 30%, vector: 30%)
|
|
31
|
+
DEFAULT_WEIGHTS = {
|
|
32
|
+
"exact": 0.4,
|
|
33
|
+
"fuzzy": 0.3,
|
|
34
|
+
"vector": 0.3,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
def __init__(self, weights: Optional[Dict[str, float]] = None):
|
|
38
|
+
"""Initialize hybrid search engine.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
weights: Optional custom RRF weights (default: DEFAULT_WEIGHTS)
|
|
42
|
+
"""
|
|
43
|
+
self.logger = logging.getLogger(__name__)
|
|
44
|
+
self.weights = weights or self.DEFAULT_WEIGHTS.copy()
|
|
45
|
+
|
|
46
|
+
def search(
|
|
47
|
+
self,
|
|
48
|
+
index_path: Path,
|
|
49
|
+
query: str,
|
|
50
|
+
limit: int = 20,
|
|
51
|
+
enable_fuzzy: bool = True,
|
|
52
|
+
enable_vector: bool = False,
|
|
53
|
+
pure_vector: bool = False,
|
|
54
|
+
) -> List[SearchResult]:
|
|
55
|
+
"""Execute hybrid search with parallel retrieval and RRF fusion.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
index_path: Path to _index.db file
|
|
59
|
+
query: FTS5 query string (for FTS) or natural language query (for vector)
|
|
60
|
+
limit: Maximum results to return after fusion
|
|
61
|
+
enable_fuzzy: Enable fuzzy FTS search (default True)
|
|
62
|
+
enable_vector: Enable vector search (default False)
|
|
63
|
+
pure_vector: If True, only use vector search without FTS fallback (default False)
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
List of SearchResult objects sorted by fusion score
|
|
67
|
+
|
|
68
|
+
Examples:
|
|
69
|
+
>>> engine = HybridSearchEngine()
|
|
70
|
+
>>> # Hybrid search (exact + fuzzy + vector)
|
|
71
|
+
>>> results = engine.search(Path("project/_index.db"), "authentication",
|
|
72
|
+
... enable_vector=True)
|
|
73
|
+
>>> # Pure vector search (semantic only)
|
|
74
|
+
>>> results = engine.search(Path("project/_index.db"),
|
|
75
|
+
... "how to authenticate users",
|
|
76
|
+
... enable_vector=True, pure_vector=True)
|
|
77
|
+
>>> for r in results[:5]:
|
|
78
|
+
... print(f"{r.path}: {r.score:.3f}")
|
|
79
|
+
"""
|
|
80
|
+
# Determine which backends to use
|
|
81
|
+
backends = {}
|
|
82
|
+
|
|
83
|
+
if pure_vector:
|
|
84
|
+
# Pure vector mode: only use vector search, no FTS fallback
|
|
85
|
+
if enable_vector:
|
|
86
|
+
backends["vector"] = True
|
|
87
|
+
else:
|
|
88
|
+
# Invalid configuration: pure_vector=True but enable_vector=False
|
|
89
|
+
self.logger.warning(
|
|
90
|
+
"pure_vector=True requires enable_vector=True. "
|
|
91
|
+
"Falling back to exact search. "
|
|
92
|
+
"To use pure vector search, enable vector search mode."
|
|
93
|
+
)
|
|
94
|
+
backends["exact"] = True
|
|
95
|
+
else:
|
|
96
|
+
# Hybrid mode: always include exact search as baseline
|
|
97
|
+
backends["exact"] = True
|
|
98
|
+
if enable_fuzzy:
|
|
99
|
+
backends["fuzzy"] = True
|
|
100
|
+
if enable_vector:
|
|
101
|
+
backends["vector"] = True
|
|
102
|
+
|
|
103
|
+
# Execute parallel searches
|
|
104
|
+
results_map = self._search_parallel(index_path, query, backends, limit)
|
|
105
|
+
|
|
106
|
+
# Provide helpful message if pure-vector mode returns no results
|
|
107
|
+
if pure_vector and enable_vector and len(results_map.get("vector", [])) == 0:
|
|
108
|
+
self.logger.warning(
|
|
109
|
+
"Pure vector search returned no results. "
|
|
110
|
+
"This usually means embeddings haven't been generated. "
|
|
111
|
+
"Run: codexlens embeddings-generate %s",
|
|
112
|
+
index_path.parent if index_path.name == "_index.db" else index_path
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Apply RRF fusion
|
|
116
|
+
# Filter weights to only active backends
|
|
117
|
+
active_weights = {
|
|
118
|
+
source: weight
|
|
119
|
+
for source, weight in self.weights.items()
|
|
120
|
+
if source in results_map
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
fused_results = reciprocal_rank_fusion(results_map, active_weights)
|
|
124
|
+
|
|
125
|
+
# Apply final limit
|
|
126
|
+
return fused_results[:limit]
|
|
127
|
+
|
|
128
|
+
def _search_parallel(
|
|
129
|
+
self,
|
|
130
|
+
index_path: Path,
|
|
131
|
+
query: str,
|
|
132
|
+
backends: Dict[str, bool],
|
|
133
|
+
limit: int,
|
|
134
|
+
) -> Dict[str, List[SearchResult]]:
|
|
135
|
+
"""Execute parallel searches across enabled backends.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
index_path: Path to _index.db file
|
|
139
|
+
query: FTS5 query string
|
|
140
|
+
backends: Dictionary of backend name to enabled flag
|
|
141
|
+
limit: Results limit per backend
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
Dictionary mapping source name to results list
|
|
145
|
+
"""
|
|
146
|
+
results_map: Dict[str, List[SearchResult]] = {}
|
|
147
|
+
|
|
148
|
+
# Use ThreadPoolExecutor for parallel I/O-bound searches
|
|
149
|
+
with ThreadPoolExecutor(max_workers=len(backends)) as executor:
|
|
150
|
+
# Submit search tasks
|
|
151
|
+
future_to_source = {}
|
|
152
|
+
|
|
153
|
+
if backends.get("exact"):
|
|
154
|
+
future = executor.submit(
|
|
155
|
+
self._search_exact, index_path, query, limit
|
|
156
|
+
)
|
|
157
|
+
future_to_source[future] = "exact"
|
|
158
|
+
|
|
159
|
+
if backends.get("fuzzy"):
|
|
160
|
+
future = executor.submit(
|
|
161
|
+
self._search_fuzzy, index_path, query, limit
|
|
162
|
+
)
|
|
163
|
+
future_to_source[future] = "fuzzy"
|
|
164
|
+
|
|
165
|
+
if backends.get("vector"):
|
|
166
|
+
future = executor.submit(
|
|
167
|
+
self._search_vector, index_path, query, limit
|
|
168
|
+
)
|
|
169
|
+
future_to_source[future] = "vector"
|
|
170
|
+
|
|
171
|
+
# Collect results as they complete
|
|
172
|
+
for future in as_completed(future_to_source):
|
|
173
|
+
source = future_to_source[future]
|
|
174
|
+
try:
|
|
175
|
+
results = future.result()
|
|
176
|
+
# Tag results with source for debugging
|
|
177
|
+
tagged_results = tag_search_source(results, source)
|
|
178
|
+
results_map[source] = tagged_results
|
|
179
|
+
self.logger.debug(
|
|
180
|
+
"Got %d results from %s search", len(results), source
|
|
181
|
+
)
|
|
182
|
+
except Exception as exc:
|
|
183
|
+
self.logger.error("Search failed for %s: %s", source, exc)
|
|
184
|
+
results_map[source] = []
|
|
185
|
+
|
|
186
|
+
return results_map
|
|
187
|
+
|
|
188
|
+
def _search_exact(
|
|
189
|
+
self, index_path: Path, query: str, limit: int
|
|
190
|
+
) -> List[SearchResult]:
|
|
191
|
+
"""Execute exact FTS search using unicode61 tokenizer.
|
|
192
|
+
|
|
193
|
+
Args:
|
|
194
|
+
index_path: Path to _index.db file
|
|
195
|
+
query: FTS5 query string
|
|
196
|
+
limit: Maximum results
|
|
197
|
+
|
|
198
|
+
Returns:
|
|
199
|
+
List of SearchResult objects
|
|
200
|
+
"""
|
|
201
|
+
try:
|
|
202
|
+
with DirIndexStore(index_path) as store:
|
|
203
|
+
return store.search_fts_exact(query, limit=limit)
|
|
204
|
+
except Exception as exc:
|
|
205
|
+
self.logger.debug("Exact search error: %s", exc)
|
|
206
|
+
return []
|
|
207
|
+
|
|
208
|
+
def _search_fuzzy(
|
|
209
|
+
self, index_path: Path, query: str, limit: int
|
|
210
|
+
) -> List[SearchResult]:
|
|
211
|
+
"""Execute fuzzy FTS search using trigram/extended unicode61 tokenizer.
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
index_path: Path to _index.db file
|
|
215
|
+
query: FTS5 query string
|
|
216
|
+
limit: Maximum results
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
List of SearchResult objects
|
|
220
|
+
"""
|
|
221
|
+
try:
|
|
222
|
+
with DirIndexStore(index_path) as store:
|
|
223
|
+
return store.search_fts_fuzzy(query, limit=limit)
|
|
224
|
+
except Exception as exc:
|
|
225
|
+
self.logger.debug("Fuzzy search error: %s", exc)
|
|
226
|
+
return []
|
|
227
|
+
|
|
228
|
+
def _search_vector(
|
|
229
|
+
self, index_path: Path, query: str, limit: int
|
|
230
|
+
) -> List[SearchResult]:
|
|
231
|
+
"""Execute vector similarity search using semantic embeddings.
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
index_path: Path to _index.db file
|
|
235
|
+
query: Natural language query string
|
|
236
|
+
limit: Maximum results
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
List of SearchResult objects ordered by semantic similarity
|
|
240
|
+
"""
|
|
241
|
+
try:
|
|
242
|
+
# Check if semantic chunks table exists
|
|
243
|
+
import sqlite3
|
|
244
|
+
try:
|
|
245
|
+
with sqlite3.connect(index_path) as conn:
|
|
246
|
+
cursor = conn.execute(
|
|
247
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name='semantic_chunks'"
|
|
248
|
+
)
|
|
249
|
+
has_semantic_table = cursor.fetchone() is not None
|
|
250
|
+
except sqlite3.Error as e:
|
|
251
|
+
self.logger.error("Database check failed in vector search: %s", e)
|
|
252
|
+
return []
|
|
253
|
+
|
|
254
|
+
if not has_semantic_table:
|
|
255
|
+
self.logger.info(
|
|
256
|
+
"No embeddings found in index. "
|
|
257
|
+
"Generate embeddings with: codexlens embeddings-generate %s",
|
|
258
|
+
index_path.parent if index_path.name == "_index.db" else index_path
|
|
259
|
+
)
|
|
260
|
+
return []
|
|
261
|
+
|
|
262
|
+
# Initialize embedder and vector store
|
|
263
|
+
from codexlens.semantic.embedder import get_embedder
|
|
264
|
+
from codexlens.semantic.vector_store import VectorStore
|
|
265
|
+
|
|
266
|
+
vector_store = VectorStore(index_path)
|
|
267
|
+
|
|
268
|
+
# Check if vector store has data
|
|
269
|
+
if vector_store.count_chunks() == 0:
|
|
270
|
+
self.logger.info(
|
|
271
|
+
"Vector store is empty (0 chunks). "
|
|
272
|
+
"Generate embeddings with: codexlens embeddings-generate %s",
|
|
273
|
+
index_path.parent if index_path.name == "_index.db" else index_path
|
|
274
|
+
)
|
|
275
|
+
return []
|
|
276
|
+
|
|
277
|
+
# Auto-detect embedding dimension and select appropriate profile
|
|
278
|
+
detected_dim = vector_store.dimension
|
|
279
|
+
if detected_dim is None:
|
|
280
|
+
self.logger.info("Vector store dimension unknown, using default profile")
|
|
281
|
+
profile = "code" # Default fallback
|
|
282
|
+
elif detected_dim == 384:
|
|
283
|
+
profile = "fast"
|
|
284
|
+
elif detected_dim == 768:
|
|
285
|
+
profile = "code"
|
|
286
|
+
elif detected_dim == 1024:
|
|
287
|
+
profile = "multilingual" # or balanced, both are 1024
|
|
288
|
+
else:
|
|
289
|
+
profile = "code" # Default fallback
|
|
290
|
+
|
|
291
|
+
# Use cached embedder (singleton) for performance
|
|
292
|
+
embedder = get_embedder(profile=profile)
|
|
293
|
+
|
|
294
|
+
# Generate query embedding
|
|
295
|
+
query_embedding = embedder.embed_single(query)
|
|
296
|
+
|
|
297
|
+
# Search for similar chunks
|
|
298
|
+
results = vector_store.search_similar(
|
|
299
|
+
query_embedding=query_embedding,
|
|
300
|
+
top_k=limit,
|
|
301
|
+
min_score=0.0, # Return all results, let RRF handle filtering
|
|
302
|
+
return_full_content=True,
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
self.logger.debug("Vector search found %d results", len(results))
|
|
306
|
+
return results
|
|
307
|
+
|
|
308
|
+
except ImportError as exc:
|
|
309
|
+
self.logger.debug("Semantic dependencies not available: %s", exc)
|
|
310
|
+
return []
|
|
311
|
+
except Exception as exc:
|
|
312
|
+
self.logger.error("Vector search error: %s", exc)
|
|
313
|
+
return []
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"""Query preprocessing for CodexLens search.
|
|
2
|
+
|
|
3
|
+
Provides query expansion for better identifier matching:
|
|
4
|
+
- CamelCase splitting: UserAuth → User OR Auth
|
|
5
|
+
- snake_case splitting: user_auth → user OR auth
|
|
6
|
+
- Preserves original query for exact matching
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
import re
|
|
13
|
+
from typing import Set, List
|
|
14
|
+
|
|
15
|
+
log = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class QueryParser:
|
|
19
|
+
"""Parser for preprocessing search queries before FTS5 execution.
|
|
20
|
+
|
|
21
|
+
Expands identifier-style queries (CamelCase, snake_case) into OR queries
|
|
22
|
+
to improve recall when searching for code symbols.
|
|
23
|
+
|
|
24
|
+
Example transformations:
|
|
25
|
+
- 'UserAuth' → 'UserAuth OR User OR Auth'
|
|
26
|
+
- 'user_auth' → 'user_auth OR user OR auth'
|
|
27
|
+
- 'getUserData' → 'getUserData OR get OR User OR Data'
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
# Patterns for identifier splitting
|
|
31
|
+
CAMEL_CASE_PATTERN = re.compile(r'([a-z])([A-Z])')
|
|
32
|
+
SNAKE_CASE_PATTERN = re.compile(r'_+')
|
|
33
|
+
KEBAB_CASE_PATTERN = re.compile(r'-+')
|
|
34
|
+
|
|
35
|
+
# Minimum token length to include in expansion (avoid noise from single chars)
|
|
36
|
+
MIN_TOKEN_LENGTH = 2
|
|
37
|
+
|
|
38
|
+
# All-caps acronyms pattern (e.g., HTTP, SQL, API)
|
|
39
|
+
ALL_CAPS_PATTERN = re.compile(r'^[A-Z]{2,}$')
|
|
40
|
+
|
|
41
|
+
def __init__(self, enable: bool = True, min_token_length: int = 2):
|
|
42
|
+
"""Initialize query parser.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
enable: Whether to enable query preprocessing
|
|
46
|
+
min_token_length: Minimum token length to include in expansion
|
|
47
|
+
"""
|
|
48
|
+
self.enable = enable
|
|
49
|
+
self.min_token_length = min_token_length
|
|
50
|
+
|
|
51
|
+
def preprocess_query(self, query: str) -> str:
|
|
52
|
+
"""Preprocess query with identifier expansion.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
query: Original search query
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Expanded query with OR operator connecting original and split tokens
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
>>> parser = QueryParser()
|
|
62
|
+
>>> parser.preprocess_query('UserAuth')
|
|
63
|
+
'UserAuth OR User OR Auth'
|
|
64
|
+
>>> parser.preprocess_query('get_user_data')
|
|
65
|
+
'get_user_data OR get OR user OR data'
|
|
66
|
+
"""
|
|
67
|
+
if not self.enable:
|
|
68
|
+
return query
|
|
69
|
+
|
|
70
|
+
query = query.strip()
|
|
71
|
+
if not query:
|
|
72
|
+
return query
|
|
73
|
+
|
|
74
|
+
# Extract tokens from query (handle multiple words/terms)
|
|
75
|
+
# For simple queries, just process the whole thing
|
|
76
|
+
# For complex FTS5 queries with operators, preserve structure
|
|
77
|
+
if self._is_simple_query(query):
|
|
78
|
+
return self._expand_simple_query(query)
|
|
79
|
+
else:
|
|
80
|
+
# Complex query with FTS5 operators, don't expand
|
|
81
|
+
log.debug(f"Skipping expansion for complex FTS5 query: {query}")
|
|
82
|
+
return query
|
|
83
|
+
|
|
84
|
+
def _is_simple_query(self, query: str) -> bool:
|
|
85
|
+
"""Check if query is simple (no FTS5 operators).
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
query: Search query
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
True if query is simple (safe to expand), False otherwise
|
|
92
|
+
"""
|
|
93
|
+
# Check for FTS5 operators that indicate complex query
|
|
94
|
+
fts5_operators = ['OR', 'AND', 'NOT', 'NEAR', '*', '^', '"']
|
|
95
|
+
return not any(op in query for op in fts5_operators)
|
|
96
|
+
|
|
97
|
+
def _expand_simple_query(self, query: str) -> str:
|
|
98
|
+
"""Expand a simple query with identifier splitting.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
query: Simple search query
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Expanded query with OR operators
|
|
105
|
+
"""
|
|
106
|
+
tokens: Set[str] = set()
|
|
107
|
+
|
|
108
|
+
# Always include original query
|
|
109
|
+
tokens.add(query)
|
|
110
|
+
|
|
111
|
+
# Split on whitespace first
|
|
112
|
+
words = query.split()
|
|
113
|
+
|
|
114
|
+
for word in words:
|
|
115
|
+
# Extract tokens from this word
|
|
116
|
+
word_tokens = self._extract_tokens(word)
|
|
117
|
+
tokens.update(word_tokens)
|
|
118
|
+
|
|
119
|
+
# Filter out short tokens and duplicates
|
|
120
|
+
filtered_tokens = [
|
|
121
|
+
t for t in tokens
|
|
122
|
+
if len(t) >= self.min_token_length
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
# Remove duplicates while preserving original query first
|
|
126
|
+
unique_tokens: List[str] = []
|
|
127
|
+
seen: Set[str] = set()
|
|
128
|
+
|
|
129
|
+
# Always put original query first
|
|
130
|
+
if query not in seen and len(query) >= self.min_token_length:
|
|
131
|
+
unique_tokens.append(query)
|
|
132
|
+
seen.add(query)
|
|
133
|
+
|
|
134
|
+
# Add other tokens
|
|
135
|
+
for token in filtered_tokens:
|
|
136
|
+
if token not in seen:
|
|
137
|
+
unique_tokens.append(token)
|
|
138
|
+
seen.add(token)
|
|
139
|
+
|
|
140
|
+
# Join with OR operator (only if we have multiple tokens)
|
|
141
|
+
if len(unique_tokens) > 1:
|
|
142
|
+
expanded = ' OR '.join(unique_tokens)
|
|
143
|
+
log.debug(f"Expanded query: '{query}' → '{expanded}'")
|
|
144
|
+
return expanded
|
|
145
|
+
else:
|
|
146
|
+
return query
|
|
147
|
+
|
|
148
|
+
def _extract_tokens(self, word: str) -> Set[str]:
|
|
149
|
+
"""Extract tokens from a single word using various splitting strategies.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
word: Single word/identifier to split
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
Set of extracted tokens
|
|
156
|
+
"""
|
|
157
|
+
tokens: Set[str] = set()
|
|
158
|
+
|
|
159
|
+
# Add original word
|
|
160
|
+
tokens.add(word)
|
|
161
|
+
|
|
162
|
+
# Handle all-caps acronyms (don't split)
|
|
163
|
+
if self.ALL_CAPS_PATTERN.match(word):
|
|
164
|
+
return tokens
|
|
165
|
+
|
|
166
|
+
# CamelCase splitting
|
|
167
|
+
camel_tokens = self._split_camel_case(word)
|
|
168
|
+
tokens.update(camel_tokens)
|
|
169
|
+
|
|
170
|
+
# snake_case splitting
|
|
171
|
+
snake_tokens = self._split_snake_case(word)
|
|
172
|
+
tokens.update(snake_tokens)
|
|
173
|
+
|
|
174
|
+
# kebab-case splitting
|
|
175
|
+
kebab_tokens = self._split_kebab_case(word)
|
|
176
|
+
tokens.update(kebab_tokens)
|
|
177
|
+
|
|
178
|
+
return tokens
|
|
179
|
+
|
|
180
|
+
def _split_camel_case(self, word: str) -> List[str]:
|
|
181
|
+
"""Split CamelCase identifier into tokens.
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
word: CamelCase identifier (e.g., 'getUserData')
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
List of tokens (e.g., ['get', 'User', 'Data'])
|
|
188
|
+
"""
|
|
189
|
+
# Insert space before uppercase letters preceded by lowercase
|
|
190
|
+
spaced = self.CAMEL_CASE_PATTERN.sub(r'\1 \2', word)
|
|
191
|
+
# Split on spaces and filter empty
|
|
192
|
+
return [t for t in spaced.split() if t]
|
|
193
|
+
|
|
194
|
+
def _split_snake_case(self, word: str) -> List[str]:
|
|
195
|
+
"""Split snake_case identifier into tokens.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
word: snake_case identifier (e.g., 'get_user_data')
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
List of tokens (e.g., ['get', 'user', 'data'])
|
|
202
|
+
"""
|
|
203
|
+
# Split on underscores
|
|
204
|
+
return [t for t in self.SNAKE_CASE_PATTERN.split(word) if t]
|
|
205
|
+
|
|
206
|
+
def _split_kebab_case(self, word: str) -> List[str]:
|
|
207
|
+
"""Split kebab-case identifier into tokens.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
word: kebab-case identifier (e.g., 'get-user-data')
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
List of tokens (e.g., ['get', 'user', 'data'])
|
|
214
|
+
"""
|
|
215
|
+
# Split on hyphens
|
|
216
|
+
return [t for t in self.KEBAB_CASE_PATTERN.split(word) if t]
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# Global default parser instance
|
|
220
|
+
_default_parser = QueryParser(enable=True)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def preprocess_query(query: str, enable: bool = True) -> str:
|
|
224
|
+
"""Convenience function for query preprocessing.
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
query: Original search query
|
|
228
|
+
enable: Whether to enable preprocessing
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
Preprocessed query with identifier expansion
|
|
232
|
+
"""
|
|
233
|
+
if not enable:
|
|
234
|
+
return query
|
|
235
|
+
|
|
236
|
+
return _default_parser.preprocess_query(query)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
__all__ = [
|
|
240
|
+
"QueryParser",
|
|
241
|
+
"preprocess_query",
|
|
242
|
+
]
|