#!/usr/bin/env python3 """Find properties near action mapping markers to understand parameter storage""" import sys sys.path.insert(0, r'C:\DEV\COPILOT\geutebruck-api\src\api') import grpc from protos import configuration_pb2 from protos import configuration_pb2_grpc def find_properties_near_actions(): """Look for property nodes near action mapping markers""" print("Connecting to SDK Bridge...") with grpc.insecure_channel('localhost:50051') as channel: stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) # Read comprehensive configuration request = configuration_pb2.ReadConfigurationRequest() try: response = stub.ReadConfiguration(request) nodes = list(response.nodes) print(f"Total nodes: {len(nodes)}") # Find first "ules" marker (should be at offset 253894) ules_markers = [i for i, n in enumerate(nodes) if n.node_type == "marker" and "ules" in (n.name or "")] if not ules_markers: print("No ules markers found!") return False print(f"\nFound {len(ules_markers)} ules markers") print("\nExamining first 3 action mappings:") print("=" * 80) for marker_idx in ules_markers[:3]: marker = nodes[marker_idx] print(f"\n\nAction Mapping at offset {marker.start_offset}:") print(f" Marker index: {marker_idx}") print(f" Marker name: {repr(marker.name[:100] if marker.name else '')}") print(f" Value: {marker.value}") # Look at surrounding nodes (100 before and after) start_idx = max(0, marker_idx - 50) end_idx = min(len(nodes), marker_idx + 100) print(f"\n Nodes in range [{start_idx}, {end_idx}]:") for i in range(start_idx, end_idx): node = nodes[i] prefix = ">>>" if i == marker_idx else " " # Show node details name_display = repr(node.name[:40] if node.name else '') value_display = repr(node.value[:40] if node.value else '') print(f" {prefix} [{i}] offset={node.start_offset:6d}, type={node.node_type:8s}, name={name_display:45s}, value={value_display}") # Highlight interesting nodes if node.node_type == "property": print(f" ^^^ PROPERTY: {node.name} = {node.value}") return True except grpc.RpcError as e: print(f"\nError: {e.code()}") print(f"Details: {e.details()}") return False if __name__ == '__main__': find_properties_near_actions()