Initial commit
This commit is contained in:
15
.claude-plugin/plugin.json
Normal file
15
.claude-plugin/plugin.json
Normal file
@@ -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"
|
||||
]
|
||||
}
|
||||
16
.mcp.json
Normal file
16
.mcp.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# codanna-cc
|
||||
|
||||
Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration
|
||||
36
commands/symbol.md
Normal file
36
commands/symbol.md
Normal file
@@ -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: <symbol-name> "<question>"
|
||||
---
|
||||
|
||||
## 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 `<symbol_name|symbol_id:ID>` for follow-up queries
|
||||
- Commands: `calls`, `callers`, `describe` accept either format
|
||||
|
||||
Focus on what the code actually shows, not general programming principles.
|
||||
103
commands/x-ray.md
Normal file
103
commands/x-ray.md
Normal file
@@ -0,0 +1,103 @@
|
||||
---
|
||||
allowed-tools: Bash(node:*), Bash(sed:*), Grep, Glob
|
||||
description: Deep codebase exploration using semantic search and relationship mapping
|
||||
argument-hint: "<query>"
|
||||
---
|
||||
|
||||
## 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 <Workflow>
|
||||
|
||||
### Gather Context <Step_1 GatherContext>
|
||||
|
||||
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 <Step_2 YourWorkflow>
|
||||
|
||||
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 <env> 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 <relationship_symbol_name|symbol_id:ID>`
|
||||
- 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 <Step_1: GatherContext> 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.
|
||||
53
plugin.lock.json
Normal file
53
plugin.lock.json
Normal file
@@ -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": []
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user