commit fe36ec86de27e6455e702681cda90b8ced3087cc Author: Zhongwei Li Date: Sat Nov 29 18:00:16 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..ce52289 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,15 @@ +{ + "name": "codanna-cc", + "description": "Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration", + "version": "0.1.3", + "author": { + "name": "bartolli" + }, + "commands": [ + "./commands/x-ray.md", + "./commands/symbol.md" + ], + "mcp": [ + "./.mcp.json" + ] +} \ No newline at end of file diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..de3fc1c --- /dev/null +++ b/.mcp.json @@ -0,0 +1,16 @@ +{ + "mcpServers": { + "codanna-cc": { + "command": "codanna", + "args": ["--config", ".codanna/settings.toml", "serve", "--watch", "--watch-interval", "5"] + }, + "codanna-cc-sse": { + "type": "sse", + "url": "http://127.0.0.1:8080/mcp/sse" + }, + "codanna-cc-https": { + "type": "sse", + "url": "https://127.0.0.1:8443/mcp/sse" + } + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c83462 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# codanna-cc + +Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration diff --git a/commands/symbol.md b/commands/symbol.md new file mode 100644 index 0000000..e1d3c73 --- /dev/null +++ b/commands/symbol.md @@ -0,0 +1,36 @@ +--- +allowed-tools: Bash(node:*), Bash(sed:*), Grep, Glob +description: Looks up a symbol by name. Returns its location, signature, line range, documentation, calls, callers, implementations, and definitions. +argument-hint: "" +--- + +## Environment + +CLAUDE_PLUGIN_ROOT = !`node -e "console.log(process.env.CLAUDE_PLUGIN_ROOT)"` + +## Context + +Symbol to analyze: **$1** + +User's question: **$2** + +## Your task + +Use the Bash tool to fetch symbol information, then answer the user's question. + +**Workflow:** +1. Execute: `node ${CLAUDE_PLUGIN_ROOT}/codanna-cc/scripts/context-provider.js symbol $1` +2. Analyze the symbol details returned (includes `[symbol_id:123]` for all symbols) +3. Answer the question: "$2" + +When answering: +- Reference actual code locations (file:line_range) +- Explain relationships (calls, called_by, implements, defines) +- Use the signature and documentation from the symbol +- Be specific about how the symbol is used in the codebase + +**Following relationships:** +- Use `` for follow-up queries +- Commands: `calls`, `callers`, `describe` accept either format + +Focus on what the code actually shows, not general programming principles. diff --git a/commands/x-ray.md b/commands/x-ray.md new file mode 100644 index 0000000..0c98b50 --- /dev/null +++ b/commands/x-ray.md @@ -0,0 +1,103 @@ +--- +allowed-tools: Bash(node:*), Bash(sed:*), Grep, Glob +description: Deep codebase exploration using semantic search and relationship mapping +argument-hint: "" +--- + +## Environment + +CLAUDE_PLUGIN_ROOT = !`node -e "console.log(process.env.CLAUDE_PLUGIN_ROOT)"` + +## Search Query Analysis + +**User's Original Query**: "$ARGUMENTS" + +### Query Optimization + +Codanna's semantic search works best with technical terms and specific concepts. Analyze the query above and improve it for code search: + +1. **If vague** (e.g., "that parsing thing") → Make it specific (e.g., "language parser implementation") +2. **If a question** (e.g., "how does parsing work?") → Extract keywords (e.g., "parsing implementation process") +3. **If conversational** (e.g., "the stuff that handles languages") → Use technical terms (e.g., "language handler processor") +4. **If too broad** (e.g., "errors") → Add context (e.g., "error handling exception management") + +**OptimizedQuery**: _{Claude: Write your improved query here, then use it below}_ + +Execute this command with your optimized query: + +## Your Workflow + +### Gather Context + +Use the Bash tool to perform semantic code search: + +Execute: `node ${CLAUDE_PLUGIN_ROOT}/codanna-cc/scripts/context-provider.js find "$OptimizedQuery" --limit=5` + +**What Codanna returns:** +- Relevance scores (how well each result matches) +- Symbol signatures and documentation +- Relationships (calls, called_by, implements, defines) +- File locations with line ranges + +### Your Workflow + +1. Analyze the results with their relevance scores (focus on results with score > 0.6 (if possible)) + +2. **To see actual implementation** of interesting results: + - Use the line range from the Location field to read just the relevant code + - Example: If you see "Location: `src/io/exit_code.rs:108-120`" + - Use the Read tool with: + - `file_path`: `src/io/exit_code.rs` (use the working directory from your environment context to construct the absolute path) + - `offset`: 108 (start line) + - `limit`: 13 (calculated as: 120 - 108 + 1) + - Formula: `limit = end_line - start_line + 1` + - Example: `Read(file_path="/full/path/to/src/io/exit_code.rs", offset=108, limit=13)` + +⚠️ **CRITICAL**: Do NOT read entire files! Use offset/limit based on Location fields! + +3. **When relationships are shown** (called_by, calls, defines, implements): + - If a relationship looks relevant to answering the query, investigate it + - Execute: `node ${CLAUDE_PLUGIN_ROOT}/codanna-cc/scripts/context-provider.js describe ` + - Example: If you see "Called by: `initialize_registry [symbol_id:123]`", run: `node ${CLAUDE_PLUGIN_ROOT}/codanna-cc/scripts/context-provider.js describe initialize_registry` or `describe symbol_id:123` + - Note: Following 1-2 key relationships per result is typically sufficient + +⚠️ **CRITICAL**: Do NOT read entire files! Use offset/limit based on Location fields! + +4. Build a complete picture by following key relationships and reading relevant code sections + +5. **If needed**, repeat with a refined query based on what you learned. + +--- + +## Tips for Efficient Exploration + +**The results include:** +- Relevance scores (how well each result matches the query) +- Symbol documentation and signatures +- Relationships (who calls this, what it calls, what it defines) +- System guidance for follow-up investigation + +**sed (native on unix only):** +- You can also see actual implementation with `sed`: (works native on Unix based environments): + - Use the line range from the Location field to read just the relevant code + - Example: If you see "Location: `src/io/exit_code.rs:108-120`" + - Execute: `sed -n '108,120p' src/io/exit_code.rs` to read lines 108-120 + - This shows the actual code implementation, not just the signature. It works like the Read tool. + +- Add `--lang=rust` (or python, typescript, etc.) to narrow results by language if you work on multi-language projects +- Follow relationships that appear in multiple results (they're likely important) +- Use the `describe` command to get full details about interesting relationships + +**Token awareness:** +- Each search uses ~500 tokens +- Each relationship follow uses ~300 tokens +- Each file read uses ~100-500 tokens (depends on size) +- Staying efficient keeps your context window clean for deeper analysis + +**This command is for exploration:** +- Build understanding of the codebase +- Identify patterns and integration points +- Present findings and await user direction +- Don't start implementing or making changes yet + +Based on the gathered context, engage with the user to narrow focus and help the user with further request. diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..ff9ddb0 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,53 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:bartolli/codanna-plugins:plugins/codanna-cc", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "f724f3fa313f055471a5bfafe77fffb364fdeab3", + "treeHash": "82fe3075909d314424d0a6a4335f46bc7d47266c13140cc360effe307085b8c3", + "generatedAt": "2025-11-28T10:14:10.890582Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "codanna-cc", + "description": "Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration", + "version": "0.1.3" + }, + "content": { + "files": [ + { + "path": ".mcp.json", + "sha256": "d7ea13d023f9d9156cea038ef171925f120ea1c1a1b22db1803c1ce032e52bea" + }, + { + "path": "README.md", + "sha256": "46c0ce34b8a8916ad4a3a5f01ce07ed566294f7d62e597f40ec502884cc9d7eb" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "1a8bddd0e0381cc42ab7dd0f63fbdbaa688dfc636ee43a3dd3cb99e356cd7774" + }, + { + "path": "commands/symbol.md", + "sha256": "db3d9c66d6c87f49f5549d480b37d07365a5077a19316c54c7c609cbc9d1b374" + }, + { + "path": "commands/x-ray.md", + "sha256": "4586f3e540a48c8e65f5e7357f5c7060ffb4f6291a2b432c9dd09662fe441095" + } + ], + "dirSha256": "82fe3075909d314424d0a6a4335f46bc7d47266c13140cc360effe307085b8c3" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file