# Test Plan: Functions and Tools

## Behaviors to test

### Function declarations
- [ ] Functions::init loads from visible_tools config
- [ ] Tool declarations parsed from bash scripts (argc annotations)
- [ ] Tool declarations parsed from python scripts (docstrings)
- [ ] Tool declarations parsed from typescript (JSDoc + type inference)
- [ ] Each declaration has name, description, parameters
- [ ] Agent tools loaded via Functions::init_agent
- [ ] Global tools loaded via build_global_tool_declarations

### Tool compilation
- [ ] Bash tools compiled to bin directory
- [ ] Python tools compiled to bin directory
- [ ] TypeScript tools compiled to bin directory
- [ ] clear_agent_bin_dir removes old binaries
- [ ] Tool file priority: .sh > .py > .ts > .js

### User interaction functions
- [ ] append_user_interaction_functions adds user__ask/confirm/input/checkbox
- [ ] Only appended in REPL mode
- [ ] User interaction tools work at depth 0 (direct prompt)
- [ ] User interaction tools escalate at depth > 0

### MCP meta functions
- [ ] append_mcp_meta_functions adds invoke/search/describe per server
- [ ] Meta functions removed when ToolScope rebuilt without those servers
- [ ] Function names follow mcp_invoke_<server> pattern

### Function selection
- [ ] select_functions filters by role's enabled_tools
- [ ] "all" enables everything
- [ ] Specific tool names enabled selectively
- [ ] mapping_tools aliases resolved
- [ ] Agent functions included when agent active
- [ ] MCP meta functions included when servers active

## Old code reference
- `src/function/mod.rs` — Functions struct, init, init_agent
- `src/config/paths.rs` — agent_functions_file (priority)
- `src/parsers/` — bash, python, typescript parsers
