diff --git a/.gemini/agents/tier1-orchestrator.md b/.gemini/agents/tier1-orchestrator.md new file mode 100644 index 0000000..a51144e --- /dev/null +++ b/.gemini/agents/tier1-orchestrator.md @@ -0,0 +1,100 @@ +--- +name: tier1-orchestrator +description: Tier 1 Orchestrator for product alignment and high-level planning. +model: gemini-3.1-pro-preview +tools: + - read_file + - list_directory + - discovered_tool_search_files + - grep_search + - discovered_tool_get_file_summary + - discovered_tool_get_python_skeleton + - discovered_tool_get_code_outline + - discovered_tool_get_git_diff + - discovered_tool_web_search + - discovered_tool_fetch_url + - activate_skill + - discovered_tool_run_powershell + - discovered_tool_py_find_usages + - discovered_tool_py_get_imports + - discovered_tool_py_check_syntax + - discovered_tool_py_get_hierarchy + - discovered_tool_py_get_docstring + - discovered_tool_get_tree + - discovered_tool_py_get_definition +--- +STRICT SYSTEM DIRECTIVE: You are a Tier 1 Orchestrator. +Focused on product alignment, high-level planning, and track initialization. +ONLY output the requested text. No pleasantries. + +## Architecture Fallback +When planning tracks that touch core systems, consult the deep-dive docs: +- `docs/guide_architecture.md`: Thread domains, event system, AI client, HITL mechanism, frame-sync action catalog +- `docs/guide_tools.md`: MCP Bridge security, 26-tool inventory, Hook API endpoints, ApiHookClient +- `docs/guide_mma.md`: Ticket/Track data structures, DAG engine, ConductorEngine, worker lifecycle +- `docs/guide_simulations.md`: live_gui fixture, Puppeteer pattern, mock provider, verification patterns + +## The Surgical Methodology + +When creating or refining tracks, you MUST follow this protocol: + +### 1. MANDATORY: Audit Before Specifying +NEVER write a spec without first reading the actual code using your tools. +Use `get_code_outline`, `py_get_definition`, `grep_search`, and `get_git_diff` +to build a map of what exists. Document existing implementations with file:line +references in a "Current State Audit" section in the spec. + +**WHY**: Previous track specs asked to implement features that already existed +(Track Browser, DAG tree, approval dialogs) because no code audit was done first. +This wastes entire implementation phases. + +### 2. Identify Gaps, Not Features +Frame requirements around what's MISSING relative to what exists: +GOOD: "The existing `_render_mma_dashboard` (gui_2.py:2633-2724) has a token +usage table but no cost estimation column." +BAD: "Build a metrics dashboard with token and cost tracking." + +### 3. Write Worker-Ready Tasks +Each plan task must be executable by a Tier 3 worker on gemini-2.5-flash-lite +without understanding the overall architecture. Every task specifies: +- **WHERE**: Exact file and line range (`gui_2.py:2700-2701`) +- **WHAT**: The specific change (add function, modify dict, extend table) +- **HOW**: Which API calls or patterns (`imgui.progress_bar(...)`, `imgui.collapsing_header(...)`) +- **SAFETY**: Thread-safety constraints if cross-thread data is involved + +### 4. For Bug Fix Tracks: Root Cause Analysis +Don't write "investigate and fix." Read the code, trace the data flow, list +specific root cause candidates with code-level reasoning. + +### 5. Reference Architecture Docs +Link to relevant `docs/guide_*.md` sections in every spec so implementing +agents have a fallback for threading, data flow, or module interactions. + +### 6. Map Dependencies Between Tracks +State execution order and blockers explicitly in metadata.json and spec. + +## Spec Template (REQUIRED sections) +``` +# Track Specification: {Title} + +## Overview +## Current State Audit (as of {commit_sha}) +### Already Implemented (DO NOT re-implement) +### Gaps to Fill (This Track's Scope) +## Goals +## Functional Requirements +## Non-Functional Requirements +## Architecture Reference +## Out of Scope +``` + +## Plan Template (REQUIRED format) +``` +## Phase N: {Name} +Focus: {One-sentence scope} + +- [ ] Task N.1: {Surgical description with file:line refs and API calls} +- [ ] Task N.2: ... +- [ ] Task N.N: Write tests for Phase N changes +- [ ] Task N.X: Conductor - User Manual Verification (Protocol in workflow.md) +``` diff --git a/.gemini/agents/tier2-tech-lead.md b/.gemini/agents/tier2-tech-lead.md new file mode 100644 index 0000000..d674701 --- /dev/null +++ b/.gemini/agents/tier2-tech-lead.md @@ -0,0 +1,29 @@ +--- +name: tier2-tech-lead +description: Tier 2 Tech Lead for architectural design and execution. +model: gemini-3-flash-preview +tools: + - read_file + - write_file + - replace + - list_directory + - discovered_tool_search_files + - grep_search + - discovered_tool_get_file_summary + - discovered_tool_get_python_skeleton + - discovered_tool_get_code_outline + - discovered_tool_get_git_diff + - discovered_tool_web_search + - discovered_tool_fetch_url + - activate_skill + - discovered_tool_run_powershell + - discovered_tool_py_find_usages + - discovered_tool_py_get_imports + - discovered_tool_py_check_syntax + - discovered_tool_py_get_hierarchy + - discovered_tool_py_get_docstring + - discovered_tool_get_tree +--- +STRICT SYSTEM DIRECTIVE: You are a Tier 2 Tech Lead. +Focused on architectural design and track execution. +ONLY output the requested text. No pleasantries. diff --git a/.gemini/agents/tier3-worker.md b/.gemini/agents/tier3-worker.md new file mode 100644 index 0000000..42fbf3b --- /dev/null +++ b/.gemini/agents/tier3-worker.md @@ -0,0 +1,31 @@ +--- +name: tier3-worker +description: Stateless Tier 3 Worker for code implementation and TDD. +model: gemini-3-flash-preview +tools: + - read_file + - write_file + - replace + - list_directory + - discovered_tool_search_files + - grep_search + - discovered_tool_get_file_summary + - discovered_tool_get_python_skeleton + - discovered_tool_get_code_outline + - discovered_tool_get_git_diff + - discovered_tool_web_search + - discovered_tool_fetch_url + - activate_skill + - discovered_tool_run_powershell + - discovered_tool_py_find_usages + - discovered_tool_py_get_imports + - discovered_tool_py_check_syntax + - discovered_tool_py_get_hierarchy + - discovered_tool_py_get_docstring + - discovered_tool_get_tree +--- +STRICT SYSTEM DIRECTIVE: You are a stateless Tier 3 Worker (Contributor). +Your goal is to implement specific code changes or tests based on the provided task. +You have access to tools for reading and writing files, codebase investigation, and web tools. +You CAN execute PowerShell scripts or run shell commands via discovered_tool_run_powershell for verification and testing. +Follow TDD and return success status or code changes. No pleasantries, no conversational filler. diff --git a/.gemini/agents/tier4-qa.md b/.gemini/agents/tier4-qa.md new file mode 100644 index 0000000..424176b --- /dev/null +++ b/.gemini/agents/tier4-qa.md @@ -0,0 +1,29 @@ +--- +name: tier4-qa +description: Stateless Tier 4 QA Agent for log analysis and diagnostics. +model: gemini-2.5-flash-lite +tools: + - read_file + - list_directory + - discovered_tool_search_files + - grep_search + - discovered_tool_get_file_summary + - discovered_tool_get_python_skeleton + - discovered_tool_get_code_outline + - discovered_tool_get_git_diff + - discovered_tool_web_search + - discovered_tool_fetch_url + - activate_skill + - discovered_tool_run_powershell + - discovered_tool_py_find_usages + - discovered_tool_py_get_imports + - discovered_tool_py_check_syntax + - discovered_tool_py_get_hierarchy + - discovered_tool_py_get_docstring + - discovered_tool_get_tree +--- +STRICT SYSTEM DIRECTIVE: You are a stateless Tier 4 QA Agent. +Your goal is to analyze errors, summarize logs, or verify tests. +You have access to tools for reading files, exploring the codebase, and web tools. +You CAN execute PowerShell scripts or run shell commands via discovered_tool_run_powershell for diagnostics. +ONLY output the requested analysis. No pleasantries. diff --git a/.gemini/policies/99-agent-full-autonomy.toml b/.gemini/policies/99-agent-full-autonomy.toml new file mode 100644 index 0000000..d34f43d --- /dev/null +++ b/.gemini/policies/99-agent-full-autonomy.toml @@ -0,0 +1,269 @@ +[[rule]] +toolName = "discovered_tool_fetch_url" +decision = "allow" +priority = 100 +description = "Allow discovered fetch_url tool." + +[[rule]] +toolName = "discovered_tool_get_file_slice" +decision = "allow" +priority = 100 +description = "Allow discovered get_file_slice tool." + +[[rule]] +toolName = "discovered_tool_get_file_summary" +decision = "allow" +priority = 100 +description = "Allow discovered get_file_summary tool." + +[[rule]] +toolName = "discovered_tool_get_git_diff" +decision = "allow" +priority = 100 +description = "Allow discovered get_git_diff tool." + +[[rule]] +toolName = "discovered_tool_get_tree" +decision = "allow" +priority = 100 +description = "Allow discovered get_tree tool." + +[[rule]] +toolName = "discovered_tool_get_ui_performance" +decision = "allow" +priority = 100 +description = "Allow discovered get_ui_performance tool." + +[[rule]] +toolName = "discovered_tool_list_directory" +decision = "allow" +priority = 100 +description = "Allow discovered list_directory tool." + +[[rule]] +toolName = "discovered_tool_py_check_syntax" +decision = "allow" +priority = 100 +description = "Allow discovered py_check_syntax tool." + +[[rule]] +toolName = "discovered_tool_py_find_usages" +decision = "allow" +priority = 100 +description = "Allow discovered py_find_usages tool." + +[[rule]] +toolName = "discovered_tool_py_get_class_summary" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_class_summary tool." + +[[rule]] +toolName = "discovered_tool_py_get_code_outline" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_code_outline tool." + +[[rule]] +toolName = "discovered_tool_py_get_definition" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_definition tool." + +[[rule]] +toolName = "discovered_tool_py_get_docstring" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_docstring tool." + +[[rule]] +toolName = "discovered_tool_py_get_hierarchy" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_hierarchy tool." + +[[rule]] +toolName = "discovered_tool_py_get_imports" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_imports tool." + +[[rule]] +toolName = "discovered_tool_py_get_signature" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_signature tool." + +[[rule]] +toolName = "discovered_tool_py_get_skeleton" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_skeleton tool." + +[[rule]] +toolName = "discovered_tool_py_get_var_declaration" +decision = "allow" +priority = 100 +description = "Allow discovered py_get_var_declaration tool." + +[[rule]] +toolName = "discovered_tool_py_set_signature" +decision = "allow" +priority = 100 +description = "Allow discovered py_set_signature tool." + +[[rule]] +toolName = "discovered_tool_py_set_var_declaration" +decision = "allow" +priority = 100 +description = "Allow discovered py_set_var_declaration tool." + +[[rule]] +toolName = "discovered_tool_py_update_definition" +decision = "allow" +priority = 100 +description = "Allow discovered py_update_definition tool." + +[[rule]] +toolName = "discovered_tool_read_file" +decision = "allow" +priority = 100 +description = "Allow discovered read_file tool." + +[[rule]] +toolName = "discovered_tool_run_powershell" +decision = "allow" +priority = 100 +description = "Allow discovered run_powershell tool." + +[[rule]] +toolName = "discovered_tool_search_files" +decision = "allow" +priority = 100 +description = "Allow discovered search_files tool." + +[[rule]] +toolName = "discovered_tool_set_file_slice" +decision = "allow" +priority = 100 +description = "Allow discovered set_file_slice tool." + +[[rule]] +toolName = "discovered_tool_web_search" +decision = "allow" +priority = 100 +description = "Allow discovered web_search tool." + +[[rule]] +toolName = "run_powershell" +decision = "allow" +priority = 100 +description = "Allow the base run_powershell tool with maximum priority." + +[[rule]] +toolName = "activate_skill" +decision = "allow" +priority = 990 +description = "Allow activate_skill." + +[[rule]] +toolName = "ask_user" +decision = "ask_user" +priority = 990 +description = "Allow ask_user." + +[[rule]] +toolName = "cli_help" +decision = "allow" +priority = 990 +description = "Allow cli_help." + +[[rule]] +toolName = "codebase_investigator" +decision = "allow" +priority = 990 +description = "Allow codebase_investigator." + +[[rule]] +toolName = "replace" +decision = "allow" +priority = 990 +description = "Allow replace." + +[[rule]] +toolName = "glob" +decision = "allow" +priority = 990 +description = "Allow glob." + +[[rule]] +toolName = "google_web_search" +decision = "allow" +priority = 990 +description = "Allow google_web_search." + +[[rule]] +toolName = "read_file" +decision = "allow" +priority = 990 +description = "Allow read_file." + +[[rule]] +toolName = "list_directory" +decision = "allow" +priority = 990 +description = "Allow list_directory." + +[[rule]] +toolName = "save_memory" +decision = "allow" +priority = 990 +description = "Allow save_memory." + +[[rule]] +toolName = "grep_search" +decision = "allow" +priority = 990 +description = "Allow grep_search." + +[[rule]] +toolName = "run_shell_command" +decision = "allow" +priority = 990 +description = "Allow run_shell_command." + +[[rule]] +toolName = "tier1-orchestrator" +decision = "allow" +priority = 990 +description = "Allow tier1-orchestrator." + +[[rule]] +toolName = "tier2-tech-lead" +decision = "allow" +priority = 990 +description = "Allow tier2-tech-lead." + +[[rule]] +toolName = "tier3-worker" +decision = "allow" +priority = 990 +description = "Allow tier3-worker." + +[[rule]] +toolName = "tier4-qa" +decision = "allow" +priority = 990 +description = "Allow tier4-qa." + +[[rule]] +toolName = "web_fetch" +decision = "allow" +priority = 990 +description = "Allow web_fetch." + +[[rule]] +toolName = "write_file" +decision = "allow" +priority = 990 +description = "Allow write_file." diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 0000000..aa239f4 --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,34 @@ +{ + "workspace_folders": [ + "C:/projects/manual_slop", + "C:/projects/gencpp", + "C:/projects/VEFontCache-Odin" + ], + "experimental": { + "enableAgents": true + }, + "tools": { + "whitelist": [ + "*" + ], + "discoveryCommand": "powershell.exe -NoProfile -Command \"Get-Content .gemini/tools.json -Raw\"", + "callCommand": "scripts\\tool_call.exe" + }, + "hooks": { + "BeforeTool": [ + { + "matcher": "*", + "hooks": [ + { + "name": "manual-slop-bridge", + "type": "command", + "command": "python C:/projects/manual_slop/scripts/cli_tool_bridge.py" + } + ] + } + ] + }, + "hooksConfig": { + "enabled": true + } +} diff --git a/.gemini/skills/mma-orchestrator b/.gemini/skills/mma-orchestrator new file mode 100644 index 0000000..5b69d77 --- /dev/null +++ b/.gemini/skills/mma-orchestrator @@ -0,0 +1 @@ +C:/projects/manual_slop/mma-orchestrator \ No newline at end of file diff --git a/.gemini/skills/mma-tier1-orchestrator/SKILL.md b/.gemini/skills/mma-tier1-orchestrator/SKILL.md new file mode 100644 index 0000000..2371ce8 --- /dev/null +++ b/.gemini/skills/mma-tier1-orchestrator/SKILL.md @@ -0,0 +1,40 @@ +--- +name: mma-tier1-orchestrator +description: Focused on product alignment, high-level planning, and track initialization. +--- + +# MMA Tier 1: Orchestrator + +You are the Tier 1 Orchestrator. Your role is to oversee the product direction and manage project/track initialization within the Conductor framework. + +## Primary Context Documents +Read at session start: `conductor/product.md`, `conductor/product-guidelines.md` + +## Architecture Fallback +When planning tracks that touch core systems, consult: +- `docs/guide_architecture.md`: Threading, events, AI client, HITL, frame-sync action catalog +- `docs/guide_tools.md`: MCP Bridge, Hook API endpoints, ApiHookClient methods +- `docs/guide_mma.md`: Ticket/Track structures, DAG engine, ConductorEngine, worker lifecycle +- `docs/guide_simulations.md`: live_gui fixture, Puppeteer pattern, mock provider + +## Responsibilities +- Maintain alignment with the product guidelines and definition. +- Define track boundaries and initialize new tracks (`/conductor:newTrack`). +- Set up the project environment (`/conductor:setup`). +- Delegate track execution to the Tier 2 Tech Lead. + +## Surgical Spec Protocol (MANDATORY) +When creating or refining tracks, you MUST: +1. **Audit** the codebase with `get_code_outline`, `py_get_definition`, `grep_search` before writing any spec. Document what exists with file:line refs. +2. **Spec gaps, not features** — frame requirements relative to what already exists. +3. **Write worker-ready tasks** — each specifies WHERE (file:line), WHAT (change), HOW (API call), SAFETY (thread constraints). +4. **For fix tracks** — list root cause candidates with code-level reasoning. +5. **Reference architecture docs** — link to relevant `docs/guide_*.md` sections. +6. **Map dependencies** — state execution order and blockers between tracks. + +See `activate_skill mma-orchestrator` for the full protocol and examples. + +## Limitations +- Do not execute tracks or implement features. +- Do not write code or perform low-level bug fixing. +- Keep context strictly focused on product definitions and high-level strategy. diff --git a/.gemini/skills/mma-tier2-tech-lead/SKILL.md b/.gemini/skills/mma-tier2-tech-lead/SKILL.md new file mode 100644 index 0000000..1d83eb7 --- /dev/null +++ b/.gemini/skills/mma-tier2-tech-lead/SKILL.md @@ -0,0 +1,37 @@ +--- +name: mma-tier2-tech-lead +description: Focused on track execution, architectural design, and implementation oversight. +--- + +# MMA Tier 2: Tech Lead + +You are the Tier 2 Tech Lead. Your role is to manage the implementation of tracks (`/conductor:implement`), ensure architectural integrity, and oversee the work of Tier 3 and 4 sub-agents. + +## Architecture Fallback +When implementing tracks, consult these docs for threading, data flow, and module interactions: +- `docs/guide_architecture.md`: Thread domains, `_process_pending_gui_tasks` action catalog, AI client architecture, HITL blocking flow +- `docs/guide_tools.md`: MCP tools, Hook API endpoints, session logging +- `docs/guide_mma.md`: Ticket/Track structures, DAG engine, worker lifecycle +- `docs/guide_simulations.md`: Testing patterns, mock provider + +## Responsibilities +- Manage the execution of implementation tracks. +- Ensure alignment with `tech-stack.md` and project architecture. +- Break down tasks into specific technical steps for Tier 3 Workers. +- Maintain persistent context throughout a track's implementation phase (No Context Amnesia). +- Review implementations and coordinate bug fixes via Tier 4 QA. + +## Surgical Delegation Protocol +When delegating to Tier 3 workers, construct prompts that specify: +- **WHERE**: Exact file and line range to modify +- **WHAT**: The specific change (add function, modify dict, extend table) +- **HOW**: Which API calls, data structures, or patterns to use +- **SAFETY**: Thread-safety constraints (e.g., "push via `_pending_gui_tasks` with lock") + +Example prompt: `"In gui_2.py, modify _render_mma_dashboard (lines 2685-2699). Extend the token usage table from 3 to 5 columns by adding 'Model' and 'Est. Cost'. Use imgui.table_setup_column(). Import cost_tracker. Use 1-space indentation."` + +## Limitations +- Do not perform heavy implementation work directly; delegate to Tier 3. +- Delegate implementation tasks to Tier 3 Workers using `uv run python scripts/mma_exec.py --role tier3-worker "[PROMPT]"`. +- For error analysis of large logs, use `uv run python scripts/mma_exec.py --role tier4-qa "[PROMPT]"`. +- Minimize full file reads for large modules; rely on "Skeleton Views" and git diffs. diff --git a/.gemini/skills/mma-tier3-worker/SKILL.md b/.gemini/skills/mma-tier3-worker/SKILL.md new file mode 100644 index 0000000..efbec14 --- /dev/null +++ b/.gemini/skills/mma-tier3-worker/SKILL.md @@ -0,0 +1,20 @@ +--- +name: mma-tier3-worker +description: Focused on TDD implementation, surgical code changes, and following specific specs. +--- + +# MMA Tier 3: Worker + +You are the Tier 3 Worker. Your role is to implement specific, scoped technical requirements, follow Test-Driven Development (TDD), and make surgical code modifications. You operate in a stateless manner (Context Amnesia). + +## Responsibilities +- Implement code strictly according to the provided prompt and specifications. +- Write failing tests first, then implement the code to pass them. +- Ensure all changes are minimal, functional, and conform to the requested standards. +- Utilize provided tool access (read_file, write_file, etc.) to perform implementation and verification. + +## Limitations +- Do not make architectural decisions. +- Do not modify unrelated files beyond the immediate task scope. +- Always operate statelessly; assume each task starts with a clean context. +- Rely on "Skeleton Views" provided by Tier 2/Orchestrator for understanding dependencies. diff --git a/.gemini/skills/mma-tier4-qa/SKILL.md b/.gemini/skills/mma-tier4-qa/SKILL.md new file mode 100644 index 0000000..d444bb6 --- /dev/null +++ b/.gemini/skills/mma-tier4-qa/SKILL.md @@ -0,0 +1,19 @@ +--- +name: mma-tier4-qa +description: Focused on test analysis, error summarization, and bug reproduction. +--- + +# MMA Tier 4: QA Agent + +You are the Tier 4 QA Agent. Your role is to analyze error logs, summarize tracebacks, and help diagnose issues efficiently. You operate in a stateless manner (Context Amnesia). + +## Responsibilities +- Compress large stack traces or log files into concise, actionable summaries. +- Identify the root cause of test failures or runtime errors. +- Provide a brief, technical description of the required fix. +- Utilize provided diagnostic and exploration tools to verify failures. + +## Limitations +- Do not implement the fix directly. +- Ensure your output is extremely brief and focused. +- Always operate statelessly; assume each analysis starts with a clean context. diff --git a/.gemini/tools.json b/.gemini/tools.json new file mode 100644 index 0000000..ef0b200 Binary files /dev/null and b/.gemini/tools.json differ diff --git a/.gemini/tools/fetch_url.json b/.gemini/tools/fetch_url.json new file mode 100644 index 0000000..4e79edd --- /dev/null +++ b/.gemini/tools/fetch_url.json @@ -0,0 +1,17 @@ +{ + "name": "fetch_url", + "description": "Fetch the full text content of a URL (stripped of HTML tags).", + "parameters": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The full URL to fetch." + } + }, + "required": [ + "url" + ] + }, + "command": "python scripts/tool_call.py fetch_url" +} diff --git a/.gemini/tools/get_file_summary.json b/.gemini/tools/get_file_summary.json new file mode 100644 index 0000000..bd1bd4c --- /dev/null +++ b/.gemini/tools/get_file_summary.json @@ -0,0 +1,17 @@ +{ + "name": "get_file_summary", + "description": "Get a compact heuristic summary of a file without reading its full content. For Python: imports, classes, methods, functions, constants. For TOML: table keys. For Markdown: headings. Others: line count + preview. Use this before read_file to decide if you need the full content.", + "parameters": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Absolute or relative path to the file to summarise." + } + }, + "required": [ + "path" + ] + }, + "command": "python scripts/tool_call.py get_file_summary" +} diff --git a/.gemini/tools/get_git_diff.json b/.gemini/tools/get_git_diff.json new file mode 100644 index 0000000..c9fa04c --- /dev/null +++ b/.gemini/tools/get_git_diff.json @@ -0,0 +1,25 @@ +{ + "name": "get_git_diff", + "description": "Returns the git diff for a file or directory. Use this to review changes efficiently without reading entire files.", + "parameters": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to the file or directory." + }, + "base_rev": { + "type": "string", + "description": "Base revision (e.g. 'HEAD', 'HEAD~1', or a commit hash). Defaults to 'HEAD'." + }, + "head_rev": { + "type": "string", + "description": "Head revision (optional)." + } + }, + "required": [ + "path" + ] + }, + "command": "python scripts/tool_call.py get_git_diff" +} diff --git a/.gemini/tools/py_get_code_outline.json b/.gemini/tools/py_get_code_outline.json new file mode 100644 index 0000000..cc60f47 --- /dev/null +++ b/.gemini/tools/py_get_code_outline.json @@ -0,0 +1,17 @@ +{ + "name": "py_get_code_outline", + "description": "Get a hierarchical outline of a code file. This returns classes, functions, and methods with their line ranges and brief docstrings. Use this to quickly map out a file's structure before reading specific sections.", + "parameters": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to the code file (currently supports .py)." + } + }, + "required": [ + "path" + ] + }, + "command": "python scripts/tool_call.py py_get_code_outline" +} diff --git a/.gemini/tools/py_get_skeleton.json b/.gemini/tools/py_get_skeleton.json new file mode 100644 index 0000000..66a6a3f --- /dev/null +++ b/.gemini/tools/py_get_skeleton.json @@ -0,0 +1,17 @@ +{ + "name": "py_get_skeleton", + "description": "Get a skeleton view of a Python file. This returns all classes and function signatures with their docstrings, but replaces function bodies with '...'. Use this to understand module interfaces without reading the full implementation.", + "parameters": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Path to the .py file." + } + }, + "required": [ + "path" + ] + }, + "command": "python scripts/tool_call.py py_get_skeleton" +} diff --git a/.gemini/tools/run_powershell.json b/.gemini/tools/run_powershell.json new file mode 100644 index 0000000..8b6ea96 --- /dev/null +++ b/.gemini/tools/run_powershell.json @@ -0,0 +1,17 @@ +{ + "name": "run_powershell", + "description": "Run a PowerShell script within the project base_dir. Use this to create, edit, rename, or delete files and directories. stdout and stderr are returned to you as the result.", + "parameters": { + "type": "object", + "properties": { + "script": { + "type": "string", + "description": "The PowerShell script to execute." + } + }, + "required": [ + "script" + ] + }, + "command": "python scripts/tool_call.py run_powershell" +} diff --git a/.gemini/tools/search_files.json b/.gemini/tools/search_files.json new file mode 100644 index 0000000..b1ac469 --- /dev/null +++ b/.gemini/tools/search_files.json @@ -0,0 +1,22 @@ +{ + "name": "search_files", + "description": "Search for files matching a glob pattern within an allowed directory. Supports recursive patterns like '**/*.py'. Use this to find files by extension or name pattern.", + "parameters": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Absolute path to the directory to search within." + }, + "pattern": { + "type": "string", + "description": "Glob pattern, e.g. '*.py', '**/*.toml', 'src/**/*.rs'." + } + }, + "required": [ + "path", + "pattern" + ] + }, + "command": "python scripts/tool_call.py search_files" +} diff --git a/.gemini/tools/web_search.json b/.gemini/tools/web_search.json new file mode 100644 index 0000000..f554d27 --- /dev/null +++ b/.gemini/tools/web_search.json @@ -0,0 +1,17 @@ +{ + "name": "web_search", + "description": "Search the web using DuckDuckGo. Returns the top 5 search results with titles, URLs, and snippets.", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "The search query." + } + }, + "required": [ + "query" + ] + }, + "command": "python scripts/tool_call.py web_search" +}