From 122e9185033046c0612b42754a6fa7fbcb20f673 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 28 Dec 2025 19:23:29 +0900 Subject: [PATCH] Add LSP tool integration to init-deep template for code intelligence analysis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhanced init-deep.ts template with LSP-First core principle and Code Intelligence Analysis phase: - Added LSP-First principle for semantic code understanding - Integrated lsp_servers, lsp_document_symbols, lsp_workspace_symbols, lsp_find_references in Phase 1 - Added LSP-based scoring factors (symbol density, export count, reference centrality) in Phase 2 - Included CODE_INTELLIGENCE output format specification - Added LSP fallback guidance for unavailable servers - Updated scoring matrix with LSP sources and enhanced metrics 🤖 Generated with assistance of OhMyOpenCode (https://github.com/code-yeongyu/oh-my-opencode) --- .../builtin-commands/templates/init-deep.ts | 111 ++++++++++++++++-- 1 file changed, 103 insertions(+), 8 deletions(-) diff --git a/src/features/builtin-commands/templates/init-deep.ts b/src/features/builtin-commands/templates/init-deep.ts index 72ac907..ec9c65f 100644 --- a/src/features/builtin-commands/templates/init-deep.ts +++ b/src/features/builtin-commands/templates/init-deep.ts @@ -18,6 +18,7 @@ Generate comprehensive AGENTS.md files across project hierarchy. Combines root-l - **Predict-then-Compare**: Predict standard → find actual → document ONLY deviations - **Hierarchy Aware**: Parent covers general, children cover specific - **No Redundancy**: Child AGENTS.md NEVER repeats parent content +- **LSP-First**: Use LSP tools for accurate code intelligence when available (semantic > text search) --- @@ -80,6 +81,53 @@ background_task(agent="explore", prompt="Build/CI: FIND .github/workflows, Makef background_task(agent="explore", prompt="Test patterns: FIND pytest.ini, jest.config, test structure → REPORT unique testing conventions") \`\`\` +### Code Intelligence Analysis (LSP tools - run in parallel) + +LSP provides semantic understanding beyond text search. Use for accurate code mapping. + +\`\`\` +# Step 1: Check LSP availability +lsp_servers() # Verify language server is available + +# Step 2: Analyze entry point files (run in parallel) +# Find entry points first, then analyze each with lsp_document_symbols +lsp_document_symbols(filePath="src/index.ts") # Main entry +lsp_document_symbols(filePath="src/main.py") # Python entry +lsp_document_symbols(filePath="cmd/main.go") # Go entry + +# Step 3: Discover key symbols across workspace (run in parallel) +lsp_workspace_symbols(filePath=".", query="class") # All classes +lsp_workspace_symbols(filePath=".", query="interface") # All interfaces +lsp_workspace_symbols(filePath=".", query="function") # Top-level functions +lsp_workspace_symbols(filePath=".", query="type") # Type definitions + +# Step 4: Analyze symbol centrality (for top 5-10 key symbols) +# High reference count = central/important concept +lsp_find_references(filePath="src/index.ts", line=X, character=Y) # Main export +\`\`\` + +#### LSP Analysis Output Format + +\`\`\` +CODE_INTELLIGENCE = { + entry_points: [ + { file: "src/index.ts", exports: ["Plugin", "createHook"], symbol_count: 12 } + ], + key_symbols: [ + { name: "Plugin", type: "class", file: "src/index.ts", refs: 45, role: "Central orchestrator" }, + { name: "createHook", type: "function", file: "src/utils.ts", refs: 23, role: "Hook factory" } + ], + module_boundaries: [ + { dir: "src/hooks", exports: 21, imports_from: ["shared/"] }, + { dir: "src/tools", exports: 15, imports_from: ["shared/", "hooks/"] } + ] +} +\`\`\` + + +**LSP Fallback**: If LSP unavailable (no server installed), skip this section and rely on explore agents + AST-grep patterns. + + **Collect all results. Mark "p1-analysis" as completed.** @@ -92,13 +140,35 @@ background_task(agent="explore", prompt="Test patterns: FIND pytest.ini, jest.co ### Scoring Matrix -| Factor | Weight | Threshold | -|--------|--------|-----------| -| File count | 3x | >20 files = high | -| Subdirectory count | 2x | >5 subdirs = high | -| Code file ratio | 2x | >70% code = high | -| Unique patterns | 1x | Has own config | -| Module boundary | 2x | Has __init__.py/index.ts | +| Factor | Weight | Threshold | Source | +|--------|--------|-----------|--------| +| File count | 3x | >20 files = high | bash | +| Subdirectory count | 2x | >5 subdirs = high | bash | +| Code file ratio | 2x | >70% code = high | bash | +| Unique patterns | 1x | Has own config | explore | +| Module boundary | 2x | Has __init__.py/index.ts | bash | +| **Symbol density** | 2x | >30 symbols = high | LSP | +| **Export count** | 2x | >10 exports = high | LSP | +| **Reference centrality** | 3x | Symbols with >20 refs | LSP | + + +**LSP-Enhanced Scoring** (if available): + +\`\`\` +For each directory in candidates: + symbols = lsp_document_symbols(dir/index.ts or dir/__init__.py) + + symbol_score = len(symbols) > 30 ? 6 : len(symbols) > 15 ? 3 : 0 + export_score = count(exported symbols) > 10 ? 4 : 0 + + # Check if this module is central (many things depend on it) + for each exported symbol: + refs = lsp_find_references(symbol) + if refs > 20: centrality_score += 3 + + total_score += symbol_score + export_score + centrality_score +\`\`\` + ### Decision Rules @@ -156,6 +226,28 @@ Root AGENTS.md gets **full treatment** with Predict-then-Compare synthesis. |------|----------|-------| | Add feature X | \\\`src/x/\\\` | {pattern hint} | +## CODE MAP + +{Generated from LSP analysis - shows key symbols and their relationships} + +| Symbol | Type | Location | Refs | Role | +|--------|------|----------|------|------| +| {MainClass} | Class | \\\`src/index.ts\\\` | {N} | {Central orchestrator} | +| {createX} | Function | \\\`src/utils.ts\\\` | {N} | {Factory pattern} | +| {Config} | Interface | \\\`src/types.ts\\\` | {N} | {Configuration contract} | + +### Module Dependencies + +\\\`\\\`\\\` +{entry} ──imports──> {core/} + │ │ + └──imports──> {utils/} <──imports── {features/} +\\\`\\\`\\\` + + +**Skip CODE MAP if**: LSP unavailable OR project too small (<10 files) OR no clear module boundaries. + + ## CONVENTIONS {ONLY deviations from standard - skip generic advice} @@ -296,4 +388,7 @@ Hierarchy: - **Generic content**: Remove anything that applies to ALL projects - **Sequential execution**: MUST use parallel agents - **Deep nesting**: Rarely need AGENTS.md at depth 4+ -- **Verbose style**: "This directory contains..." → just list it` +- **Verbose style**: "This directory contains..." → just list it +- **Ignoring LSP**: If LSP available, USE IT - semantic analysis > text grep +- **LSP without fallback**: Always have explore agent backup if LSP unavailable +- **Over-referencing**: Don't trace refs for EVERY symbol - focus on exports only`