From 277201416c69325e1be575016cdc00562bb9be0a Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 5 Oct 2025 01:00:32 -0400 Subject: [PATCH] feat: Enhance CMake presets and add new function schemas for ROM manipulation - Updated CMake presets for macOS to include binary directory and cache variables for improved build configuration. - Added new function schemas for ROM manipulation, including `hex-read`, `hex-write`, `hex-search`, and palette management functions such as `palette-get-colors` and `palette-set-color`. - Introduced TODO management functions to create, list, and update tasks, enhancing task tracking capabilities within the application. --- CMakePresets.json | 12 +- assets/agent/function_schemas.json | 198 +++++++++++++++++++++++++++++ src/CMakeLists.txt | 4 - src/app/app.cmake | 7 - src/app/gui/gui_library.cmake | 1 + 5 files changed, 210 insertions(+), 12 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 9d709ecc..a3b2d916 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -162,7 +162,17 @@ "name": "mac-z3ed", "displayName": "macOS z3ed", "description": "macOS z3ed CLI with agent support", - "inherits": "mac-ai" + "inherits": "mac-ai", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "Z3ED_AI": "ON", + "YAZE_WITH_JSON": "ON", + "YAZE_WITH_GRPC": "ON", + "YAZE_BUILD_Z3ED": "ON", + "YAZE_BUILD_EMU": "ON", + "YAZE_BUILD_TESTS": "ON", + "CMAKE_BUILD_TYPE": "Debug" + } }, { "name": "mac-rooms", diff --git a/assets/agent/function_schemas.json b/assets/agent/function_schemas.json index 14fe08ea..42341bad 100644 --- a/assets/agent/function_schemas.json +++ b/assets/agent/function_schemas.json @@ -161,6 +161,204 @@ } } } + }, + { + "name": "hex-read", + "description": "Read bytes from ROM at a specific address in hexadecimal", + "parameters": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "ROM address in hex format (e.g., '0x1C800')" + }, + "length": { + "type": "integer", + "description": "Number of bytes to read (default: 16)" + }, + "format": { + "type": "string", + "enum": ["hex", "ascii", "both"], + "description": "Output format (default: both)" + } + }, + "required": ["address"] + } + }, + { + "name": "hex-write", + "description": "Write bytes to ROM at a specific address (creates a proposal)", + "parameters": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "ROM address in hex format (e.g., '0x1C800')" + }, + "data": { + "type": "string", + "description": "Hex data to write (space-separated bytes like 'FF 00 12 34')" + } + }, + "required": ["address", "data"] + } + }, + { + "name": "hex-search", + "description": "Search for a byte pattern in ROM", + "parameters": { + "type": "object", + "properties": { + "pattern": { + "type": "string", + "description": "Hex pattern to search (e.g., 'FF 00 ?? 12' where ?? is wildcard)" + }, + "start_address": { + "type": "string", + "description": "Start address (default: 0x00000)" + }, + "end_address": { + "type": "string", + "description": "End address (default: ROM size)" + } + }, + "required": ["pattern"] + } + }, + { + "name": "palette-get-colors", + "description": "Get all colors from a specific palette", + "parameters": { + "type": "object", + "properties": { + "group": { + "type": "integer", + "description": "Palette group index (0-based)" + }, + "palette": { + "type": "integer", + "description": "Palette index within group (0-7)" + }, + "format": { + "type": "string", + "enum": ["snes", "rgb", "hex"], + "description": "Color format (default: hex)" + } + }, + "required": ["group", "palette"] + } + }, + { + "name": "palette-set-color", + "description": "Set a specific color in a palette (creates a proposal)", + "parameters": { + "type": "object", + "properties": { + "group": { + "type": "integer", + "description": "Palette group index" + }, + "palette": { + "type": "integer", + "description": "Palette index within group" + }, + "color_index": { + "type": "integer", + "description": "Color index in palette (0-15)" + }, + "color": { + "type": "string", + "description": "Color value in hex format (e.g., '#FF0000' or 'FF0000')" + } + }, + "required": ["group", "palette", "color_index", "color"] + } + }, + { + "name": "palette-analyze", + "description": "Analyze color usage and statistics for a palette or bitmap", + "parameters": { + "type": "object", + "properties": { + "target_type": { + "type": "string", + "enum": ["palette", "bitmap", "graphics_sheet"], + "description": "What to analyze" + }, + "target_id": { + "type": "string", + "description": "ID or index of target" + } + }, + "required": ["target_type", "target_id"] + } + }, + { + "name": "todo-create", + "description": "Create a new TODO task for complex operations", + "parameters": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Task description" + }, + "category": { + "type": "string", + "description": "Task category (e.g., 'rom_edit', 'ai_task', 'build')" + }, + "priority": { + "type": "integer", + "description": "Priority level (0-10, higher = more important)" + } + }, + "required": ["description"] + } + }, + { + "name": "todo-list", + "description": "List all TODO tasks or filter by status/category", + "parameters": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["pending", "in_progress", "completed", "blocked", "cancelled"], + "description": "Filter by status" + }, + "category": { + "type": "string", + "description": "Filter by category" + } + } + } + }, + { + "name": "todo-update-status", + "description": "Update the status of a TODO task", + "parameters": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "TODO ID" + }, + "status": { + "type": "string", + "enum": ["pending", "in_progress", "completed", "blocked", "cancelled"], + "description": "New status" + } + }, + "required": ["id", "status"] + } + }, + { + "name": "todo-next", + "description": "Get the next actionable TODO task (respecting dependencies and priority)", + "parameters": { + "type": "object", + "properties": {} + } } ] } \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fbddec98..af1dbc46 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -299,10 +299,6 @@ if (YAZE_BUILD_APP) endif() endif() - target_sources(yaze PRIVATE - ${CMAKE_SOURCE_DIR}/src/app/gui/widgets/widget_state_capture.cc - ${CMAKE_SOURCE_DIR}/src/app/gui/widgets/widget_state_capture.h) - if(YAZE_WITH_GRPC) message(STATUS "Adding gRPC ImGuiTestHarness to yaze target") diff --git a/src/app/app.cmake b/src/app/app.cmake index fb47ec42..506e5360 100644 --- a/src/app/app.cmake +++ b/src/app/app.cmake @@ -225,13 +225,6 @@ if(NOT APPLE) endif() endif() -# ============================================================================ -# Test harness utilities shared across builds (IT-08 widget state capture) -# ============================================================================ -target_sources(yaze PRIVATE - ${CMAKE_SOURCE_DIR}/src/app/gui/widgets/widget_state_capture.cc - ${CMAKE_SOURCE_DIR}/src/app/gui/widgets/widget_state_capture.h) - # ============================================================================ # Optional gRPC Support for ImGuiTestHarness # ============================================================================ diff --git a/src/app/gui/gui_library.cmake b/src/app/gui/gui_library.cmake index 5b22cef7..b7c5d22e 100644 --- a/src/app/gui/gui_library.cmake +++ b/src/app/gui/gui_library.cmake @@ -14,6 +14,7 @@ set( app/gui/bpp_format_ui.cc app/gui/widgets/widget_id_registry.cc app/gui/widgets/widget_auto_register.cc + app/gui/widgets/widget_state_capture.cc # Canvas system components app/gui/canvas/canvas_modals.cc app/gui/canvas/canvas_context_menu.cc