45 lines
1.1 KiB
Markdown
45 lines
1.1 KiB
Markdown
|
|
# TICKET-204: Create ExecutionRegistry
|
||
|
|
|
||
|
|
**Epic:** EPIC-202
|
||
|
|
**Priority:** P0
|
||
|
|
**Status:** Ready
|
||
|
|
**Assignee:** Allegro
|
||
|
|
**Estimate:** 6 hours
|
||
|
|
|
||
|
|
## Description
|
||
|
|
|
||
|
|
Create ExecutionRegistry for clean command/tool routing, replacing model-decided routing.
|
||
|
|
|
||
|
|
## Acceptance Criteria
|
||
|
|
|
||
|
|
- [ ] `ExecutionRegistry` class
|
||
|
|
- [ ] `register_command(name, handler)` method
|
||
|
|
- [ ] `register_tool(name, handler)` method
|
||
|
|
- [ ] `command(name) -> CommandHandler` lookup
|
||
|
|
- [ ] `tool(name) -> ToolHandler` lookup
|
||
|
|
- [ ] `execute(prompt, context)` routing method
|
||
|
|
- [ ] Permission context integration
|
||
|
|
- [ ] Tests pass
|
||
|
|
|
||
|
|
## Implementation Notes
|
||
|
|
|
||
|
|
Pattern from Claw `src/execution_registry.py`:
|
||
|
|
|
||
|
|
```python
|
||
|
|
class ExecutionRegistry:
|
||
|
|
def __init__(self):
|
||
|
|
self._commands: dict[str, CommandHandler] = {}
|
||
|
|
self._tools: dict[str, ToolHandler] = {}
|
||
|
|
|
||
|
|
def register_command(self, name: str, handler: CommandHandler):
|
||
|
|
self._commands[name] = handler
|
||
|
|
|
||
|
|
def command(self, name: str) -> CommandHandler | None:
|
||
|
|
return self._commands.get(name)
|
||
|
|
```
|
||
|
|
|
||
|
|
## References
|
||
|
|
|
||
|
|
- Claw: `src/execution_registry.py`
|
||
|
|
- Claw: `src/runtime.py` for usage
|