Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:00:14 +08:00
commit 150b6aa82c
5 changed files with 190 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
{
"name": "codanna",
"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"
]
}

3
README.md Normal file
View File

@@ -0,0 +1,3 @@
# codanna
Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration

31
commands/symbol.md Normal file
View File

@@ -0,0 +1,31 @@
---
description: Looks up a symbol by name. Returns its location, signature, line range, documentation, calls, callers, implementations, and definitions.
argument-hint: <symbol-name> "<question>"
---
## 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/scripts/codanna/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.

95
commands/x-ray.md Normal file
View File

@@ -0,0 +1,95 @@
---
allowed-tools: Bash(node .claude/scripts/codanna/context-provider.js:*)
description: Deep codebase exploration using semantic search and relationship mapping
argument-hint: "<query>"
---
## 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/scripts/codanna/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)`
3. **When relationships are shown** (called_by, calls, defines, implements):
- If a relationship looks relevant to answering the query, investigate it
- Execute: `node .claude/scripts/codanna/context-provider.js describe <relationship_symbol_name|symbol_id:ID>`
- Example: If you see "Called by: `initialize_registry [symbol_id:123]`", run: `node .claude/scripts/codanna/context-provider.js describe initialize_registry` or `describe symbol_id:123`
- Note: Following 1-2 key relationships per result is typically sufficient
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.

49
plugin.lock.json Normal file
View File

@@ -0,0 +1,49 @@
{
"$schema": "internal://schemas/plugin.lock.v1.json",
"pluginId": "gh:bartolli/codanna-plugins:plugins/codanna-base",
"normalized": {
"repo": null,
"ref": "refs/tags/v20251128.0",
"commit": "79db26f44944e974712f0f30a42ff0876e616069",
"treeHash": "936782e7c8017efbca15aebf1d722d06dba1724f079607aabf02b7931bc795df",
"generatedAt": "2025-11-28T10:14:10.681163Z",
"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",
"description": "Codanna code intelligence integration for Claude Code - semantic search, symbol analysis, and call graph exploration",
"version": "0.1.3"
},
"content": {
"files": [
{
"path": "README.md",
"sha256": "e55f6786495938311161690bbe17aa8e2e37c40cef58f6e5ac1b09395f70b062"
},
{
"path": ".claude-plugin/plugin.json",
"sha256": "366dc9136c674e5f1a024b7ee26cae0b74675374401169c6d35541c94c0ff616"
},
{
"path": "commands/symbol.md",
"sha256": "c79488cb16f29d65fda211327cd8e7b03f3dc826e6167289cd638bf3b5f75f7a"
},
{
"path": "commands/x-ray.md",
"sha256": "87cc4cd5fd66b816814e8f3062ff62254ea85135f5198c8cc5cb7b5fa687d63a"
}
],
"dirSha256": "936782e7c8017efbca15aebf1d722d06dba1724f079607aabf02b7931bc795df"
},
"security": {
"scannedAt": null,
"scannerVersion": null,
"flags": []
}
}