From f83909372ddb0defcd10410b9ca4dec2b60d1c83 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 10 Mar 2026 00:24:03 -0400 Subject: [PATCH] new csharp support track --- .../index.md | 5 ++ .../metadata.json | 8 +++ .../plan.md | 25 ++++++++ .../spec.md | 32 ++++++++++ config.toml | 28 +++++---- manualslop_layout.ini | 58 +++++++++---------- 6 files changed, 117 insertions(+), 39 deletions(-) create mode 100644 conductor/tracks/csharp_language_support_tools_20260310/index.md create mode 100644 conductor/tracks/csharp_language_support_tools_20260310/metadata.json create mode 100644 conductor/tracks/csharp_language_support_tools_20260310/plan.md create mode 100644 conductor/tracks/csharp_language_support_tools_20260310/spec.md diff --git a/conductor/tracks/csharp_language_support_tools_20260310/index.md b/conductor/tracks/csharp_language_support_tools_20260310/index.md new file mode 100644 index 0000000..87836c1 --- /dev/null +++ b/conductor/tracks/csharp_language_support_tools_20260310/index.md @@ -0,0 +1,5 @@ +# Track csharp_language_support_tools_20260310 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/tracks/csharp_language_support_tools_20260310/metadata.json b/conductor/tracks/csharp_language_support_tools_20260310/metadata.json new file mode 100644 index 0000000..49a7695 --- /dev/null +++ b/conductor/tracks/csharp_language_support_tools_20260310/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "csharp_language_support_tools_20260310", + "type": "feature", + "status": "new", + "created_at": "2026-03-10T01:15:00Z", + "updated_at": "2026-03-10T01:15:00Z", + "description": "C# language support tools (Unreal build script, Unity and Godot scripting usage)." +} diff --git a/conductor/tracks/csharp_language_support_tools_20260310/plan.md b/conductor/tracks/csharp_language_support_tools_20260310/plan.md new file mode 100644 index 0000000..f9e4943 --- /dev/null +++ b/conductor/tracks/csharp_language_support_tools_20260310/plan.md @@ -0,0 +1,25 @@ +# Implementation Plan: C# MCP Tools + +## Phase 1: Grammar Integration & Base Parser +- [ ] Task: Update project dependencies (e.g., `requirements.txt` or `pyproject.toml`) to include the native `tree-sitter-c-sharp` dependency. +- [ ] Task: Write Tests: Verify the tree-sitter parser can successfully initialize the C# language and parse a simple `namespace { class A { void M() {} } }` string. +- [ ] Task: Implement: Create `src/csharp_parser.py` (or extend existing AST parsers) to handle the base C# tree-sitter initialization and generic node walking. +- [ ] Task: Conductor - User Manual Verification 'Phase 1: Grammar Integration & Base Parser' (Protocol in workflow.md) + +## Phase 2: Structural & Context Tools +- [ ] Task: Write Tests: Verify `cs_get_skeleton` and `cs_get_code_outline` against a complex C# file containing namespaces, classes, properties, attributes, and XML docstrings. +- [ ] Task: Implement: Add `cs_get_skeleton` logic to extract namespaces, classes, method signatures, attributes, and replace bodies with `...`. +- [ ] Task: Implement: Add `cs_get_code_outline` and `cs_get_docstring` logic to traverse the AST and map line numbers and comments. +- [ ] Task: Conductor - User Manual Verification 'Phase 2: Structural & Context Tools' (Protocol in workflow.md) + +## Phase 3: Surgical Editing Tools +- [ ] Task: Write Tests: Verify `cs_get_definition` returns the exact source text of a targeted method or class, and `cs_update_definition` replaces it accurately within a larger file. +- [ ] Task: Implement: Add `cs_get_definition` logic using AST line/byte ranges. +- [ ] Task: Implement: Add `cs_update_definition` and `cs_set_signature` logic to perform string replacement based on strict AST node boundaries. +- [ ] Task: Conductor - User Manual Verification 'Phase 3: Surgical Editing Tools' (Protocol in workflow.md) + +## Phase 4: MCP Client Integration & Polish +- [ ] Task: Write Tests: Verify the new tools are successfully registered and invokable via the `mcp_client.py` unified interface. +- [ ] Task: Implement: Register the new `cs_*` functions as official tools in `src/mcp_client.py`. +- [ ] Task: Implement: Ensure the caching layer (mtime invalidation) is correctly applied to the new C# parsing operations. +- [ ] Task: Conductor - User Manual Verification 'Phase 4: MCP Client Integration & Polish' (Protocol in workflow.md) diff --git a/conductor/tracks/csharp_language_support_tools_20260310/spec.md b/conductor/tracks/csharp_language_support_tools_20260310/spec.md new file mode 100644 index 0000000..049f76e --- /dev/null +++ b/conductor/tracks/csharp_language_support_tools_20260310/spec.md @@ -0,0 +1,32 @@ +# Specification: C# MCP Tools + +## Overview +Expand the Conductor's AI context-gathering and surgical editing capabilities by introducing full Tree-Sitter parsing support for C#. This brings C# to feature-parity with existing Python MCP tools, enabling deep AST-driven structural mapping, documentation extraction, and precise code modification, specifically targeting Unreal Engine build scripts, and Unity/Godot scripting. + +## Functional Requirements +- **Grammar Integration:** + - Introduce the stable `tree-sitter-c-sharp` grammar to the project's parsing environment as a native dependency to generate deterministic Abstract Syntax Trees for `.cs` files. +- **Structural Parsing Tools:** + - **`cs_get_skeleton`:** Extract a high-level view of a C# file, containing all namespaces, class/struct/interface declarations, fields, properties, and method signatures with their associated XML docstrings. Method bodies will be replaced with `...`. + - **`cs_get_code_outline`:** Generate a hierarchical text outline showing line ranges for major structural elements (namespaces, classes, methods). +- **Documentation & Context Tools:** + - **`cs_get_docstring`:** Extract the XML docstring (`///`) immediately preceding a class, field, property, or method definition. + - **`cs_find_usages`:** Locate usages of specific C# symbols across a file or directory using strict regex or AST node analysis. +- **Surgical Editing Tools:** + - **`cs_get_definition`:** Extract the full source code of a specific C# method, class, or property. + - **`cs_update_definition`:** Surgically replace the implementation of a specific C# method or class without relying on generic search-and-replace strings. + - **`cs_set_signature`:** Update only the signature (modifiers, return type, parameters) of a C# method. + +## Non-Functional Requirements +- **Performance:** Parsing and skeleton generation should utilize the existing `mtime` invalidation cache to ensure near-instantaneous responses. +- **Robustness:** The parser must gracefully handle malformed or incomplete C# code (e.g., during active development), returning as much structural information as possible rather than failing entirely. + +## Acceptance Criteria +- [ ] A new suite of C#-specific tools (`cs_get_skeleton`, `cs_get_code_outline`, `cs_get_definition`, `cs_update_definition`) is registered and available via the MCP Client. +- [ ] Automated tests verify that `cs_get_skeleton` correctly identifies namespaces, classes, methods, and C#-specific constructs (like attributes `[Serializable]` and properties `{ get; set; }`). +- [ ] `cs_update_definition` successfully replaces a multi-line method body while maintaining the surrounding file structure and indentation. +- [ ] The `tree-sitter-c-sharp` native dependency is successfully integrated into the python environment setup (`uv` / `requirements.txt`). + +## Out of Scope +- Full language server protocol (LSP) features like deep cross-file type inference, semantic variable renaming, or Roslyn integration. +- Automated code formatting or linting for C# (this relies on external ecosystem tools like `dotnet format`). diff --git a/config.toml b/config.toml index 7c8bfee..a1a0c16 100644 --- a/config.toml +++ b/config.toml @@ -24,28 +24,36 @@ separate_response_panel = false separate_tool_calls_panel = false bg_shader_enabled = true crt_filter_enabled = false -separate_task_dag = true -separate_usage_analytics = true +separate_task_dag = false +separate_usage_analytics = false +separate_tier1 = false +separate_tier2 = false +separate_tier3 = false +separate_tier4 = false [gui.show_windows] "Context Hub" = true "Files & Media" = true "AI Settings" = true "MMA Dashboard" = true -"Task DAG" = true -"Usage Analytics" = true -"Tier 1: Strategy" = true -"Tier 2: Tech Lead" = true -"Tier 3: Workers" = true -"Tier 4: QA" = true +"Task DAG" = false +"Usage Analytics" = false +"Tier 1" = false +"Tier 2" = false +"Tier 3" = false +"Tier 4" = false +"Tier 1: Strategy" = false +"Tier 2: Tech Lead" = false +"Tier 3: Workers" = false +"Tier 4: QA" = false "Discussion Hub" = true "Operations Hub" = true Message = true Response = true -"Tool Calls" = true +"Tool Calls" = false Theme = true "Log Management" = true -Diagnostics = false +Diagnostics = true [theme] palette = "Nord Dark" diff --git a/manualslop_layout.ini b/manualslop_layout.ini index 92f508b..4bf3d46 100644 --- a/manualslop_layout.ini +++ b/manualslop_layout.ini @@ -44,18 +44,18 @@ Collapsed=0 DockId=0x00000001,0 [Window][Message] -Pos=1890,1100 -Size=1065,548 +Pos=642,1879 +Size=1002,242 Collapsed=0 [Window][Response] -Pos=2086,1780 -Size=1036,351 +Pos=1700,1898 +Size=1111,224 Collapsed=0 [Window][Tool Calls] -Pos=99,730 -Size=762,628 +Pos=1461,1220 +Size=913,631 Collapsed=0 [Window][Comms History] @@ -73,8 +73,8 @@ Collapsed=0 DockId=0xAFC85805,2 [Window][Theme] -Pos=0,1079 -Size=629,1058 +Pos=0,850 +Size=629,1287 Collapsed=0 DockId=0x00000002,2 @@ -90,8 +90,8 @@ Collapsed=0 DockId=0x0000000C,2 [Window][Context Hub] -Pos=0,1079 -Size=629,1058 +Pos=0,850 +Size=629,1287 Collapsed=0 DockId=0x00000002,1 @@ -114,14 +114,14 @@ Collapsed=0 DockId=0x00000012,0 [Window][Files & Media] -Pos=0,1079 -Size=629,1058 +Pos=0,850 +Size=629,1287 Collapsed=0 DockId=0x00000002,0 [Window][AI Settings] Pos=0,28 -Size=629,1049 +Size=629,820 Collapsed=0 DockId=0x00000001,0 @@ -132,13 +132,13 @@ Collapsed=0 [Window][MMA Dashboard] Pos=2833,28 -Size=1007,1695 +Size=1007,1872 Collapsed=0 DockId=0x0000000C,0 [Window][Log Management] Pos=2833,28 -Size=1007,1695 +Size=1007,1872 Collapsed=0 DockId=0x0000000C,1 @@ -148,20 +148,20 @@ Size=262,209 Collapsed=0 [Window][Tier 1: Strategy] -Pos=2833,1725 -Size=1007,412 +Pos=2833,1902 +Size=1007,235 Collapsed=0 DockId=0x0000000F,0 [Window][Tier 2: Tech Lead] -Pos=2833,1725 -Size=1007,412 +Pos=2833,1902 +Size=1007,235 Collapsed=0 DockId=0x0000000F,1 [Window][Tier 4: QA] -Pos=2833,1725 -Size=1007,412 +Pos=2833,1902 +Size=1007,235 Collapsed=0 DockId=0x0000000F,2 @@ -327,13 +327,13 @@ Size=956,942 Collapsed=0 [Window][Task DAG] -Pos=1461,823 -Size=1190,872 +Pos=2397,1224 +Size=1340,621 Collapsed=0 [Window][Usage Analytics] -Pos=1636,680 -Size=644,666 +Pos=2530,426 +Size=275,375 Collapsed=0 [Table][0xFB6E3870,4] @@ -428,15 +428,15 @@ DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,28 Size=3840,2109 Split= DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2831,1183 Split=X DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2 DockNode ID=0x00000007 Parent=0x0000000B SizeRef=629,858 Split=Y Selected=0x8CA2375C - DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,1049 CentralNode=1 Selected=0x7BD57D6A - DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,1058 Selected=0x1DCB2623 + DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,820 CentralNode=1 Selected=0x7BD57D6A + DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,1287 Selected=0x1DCB2623 DockNode ID=0x0000000E Parent=0x0000000B SizeRef=2200,858 Split=X Selected=0x418C7449 DockNode ID=0x00000012 Parent=0x0000000E SizeRef=1068,402 Selected=0x418C7449 DockNode ID=0x00000013 Parent=0x0000000E SizeRef=1130,402 Selected=0x6F2B5B04 DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6 DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1007,1183 Split=Y Selected=0x3AEC3498 - DockNode ID=0x0000000C Parent=0x00000004 SizeRef=1074,1695 Selected=0x3AEC3498 - DockNode ID=0x0000000F Parent=0x00000004 SizeRef=1074,412 Selected=0xBB346584 + DockNode ID=0x0000000C Parent=0x00000004 SizeRef=1074,1872 Selected=0x3AEC3498 + DockNode ID=0x0000000F Parent=0x00000004 SizeRef=1074,235 Selected=0xBB346584 ;;;<<>>;;; ;;;<<>>;;;