This commit is contained in:
2026-03-06 16:06:54 -05:00
parent bf24164b1f
commit 88e27ae414
5 changed files with 651 additions and 83 deletions

View File

@@ -1,33 +1,115 @@
# Track Specification: On-Demand Definition Lookup (on_demand_def_lookup_20260306)
## Overview
Add ability for agent to request specific class/function definitions during discussion. Parse @symbol syntax to trigger lookup.
Add ability for agent to request specific class/function definitions during discussion. Parse @symbol syntax to trigger lookup and display inline in the discussion.
## Current State Audit
### Already Implemented
- **`mcp_client.py_get_definition()`**: Returns full definition source
- **`outline_tool.py`**: Code outlining
### Already Implemented (DO NOT re-implement)
### Gaps to Fill
- No @symbol parsing in discussion input
- No inline definition display
- No click-to-source navigation
#### MCP Tool (mcp_client.py)
- **`py_get_definition(path, name)`**: Returns full source of class/function/method
- **Already exposed to AI** as tool #18 in tool inventory
- **Parameters**: `path` (file path), `name` (symbol name, supports `ClassName.method_name`)
#### Code Outline Tool (outline_tool.py)
- **`CodeOutliner` class**: Uses AST to extract code structure
- **`outline(code: str) -> str`**: Returns hierarchical outline
#### GUI Discussion (gui_2.py)
- **`_render_discussion_panel()`**: Renders discussion history
- **`_send_callback()`**: Handles user input submission
- **No @symbol parsing exists**
### Gaps to Fill (This Track's Scope)
- No parsing of @symbol syntax in user input
- No automatic definition lookup on @symbol
- No inline display of definitions in discussion
- No click-to-navigate to source file
## Architectural Constraints
### Lookup Performance
- Definition lookup MUST complete in <100ms
- Use existing MCP tool - no new parsing needed
### Display Integration
- Definitions displayed inline in discussion flow
- Preserve discussion context (don't replace user message)
## Architecture Reference
### Key Integration Points
| File | Lines | Purpose |
|------|-------|---------|
| `src/gui_2.py` | ~1400-1500 | `_send_callback()` - add @symbol parsing |
| `src/gui_2.py` | ~1200-1300 | `_render_discussion_panel()` - display definitions |
| `src/mcp_client.py` | ~400-450 | `py_get_definition()` - existing tool |
| `src/outline_tool.py` | 10-30 | `CodeOutliner` class |
### Proposed Flow
```
1. User types: "Check @MyClass.method_name implementation"
2. _send_callback() parses input, finds @symbol
3. Call py_get_definition() for symbol
4. Inject definition into discussion as system message
5. Display with syntax highlighting
6. Click on definition opens file at line
```
## Functional Requirements
- Parse `@ClassName` or `@function_name` in input
- Display definition inline in discussion
- Click to jump to source file
- Uses existing `py_get_definition()` tool
## Key Integration Points
| File | Purpose |
|-----|---------|
| `src/gui_2.py` | Input parsing, definition display |
| `src/mcp_client.py` | `py_get_definition()` |
### FR1: @Symbol Parsing
- Parse user input for `@SymbolName` pattern
- Support: `@FunctionName`, `@ClassName`, `@ClassName.method_name`
- Extract symbol name and optional file context
### FR2: Definition Retrieval
- Use existing `py_get_definition()` MCP tool
- If no file specified, search all project files
- Handle "symbol not found" gracefully
### FR3: Inline Display
- Inject definition as special discussion entry
- Use monospace font with syntax highlighting
- Show file path and line numbers
- Collapse long definitions (>50 lines)
### FR4: Click Navigation
- Store file path and line number with definition
- On click, open file viewer at that location
- Use existing file viewing mechanism
## Non-Functional Requirements
| Requirement | Constraint |
|-------------|------------|
| Lookup Time | <100ms per symbol |
| Display Impact | No frame drop during display |
| Memory | Definitions not cached (lookup each time) |
## Testing Requirements
### Unit Tests
- Test @symbol regex parsing
- Test symbol name extraction
- Test file path resolution
### Integration Tests (via `live_gui` fixture)
- Type @symbol, verify definition appears
- Click definition, verify navigation works
## Out of Scope
- Auto-fetch on unknown symbols (explicit @ only)
- Definition editing inline
- Multi-file symbol search optimization
## Acceptance Criteria
- [ ] @symbol triggers lookup
- [ ] Definition displays inline
- [ ] Click navigation functional
- [ ] 1-space indentation
- [ ] Definition displays inline in discussion
- [ ] File path and line numbers shown
- [ ] Click navigates to source
- [ ] "Not found" handled gracefully
- [ ] Uses existing `py_get_definition()`
- [ ] 1-space indentation maintained