#!/usr/bin/env python3 """Analyze action mappings binary structure by examining offsets""" 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 analyze_mappings(): """Get action mappings and analyze their binary structure""" print("Connecting to SDK Bridge...") with grpc.insecure_channel('localhost:50051') as channel: stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) # Get action mappings request = configuration_pb2.ReadActionMappingsRequest() response = stub.ReadActionMappings(request) print(f"Success: {response.success}") print(f"Total mappings: {response.total_count}") if not response.success or not response.mappings: print("Failed to get mappings") return False # Examine first 3 mappings for i, mapping in enumerate(response.mappings[:3]): print(f"\n{'='*80}") print(f"Mapping {i+1}:") print(f" Start offset: {mapping.start_offset}") print(f" End offset: {mapping.end_offset}") print(f" Size: {mapping.end_offset - mapping.start_offset} bytes") # Try to decode name try: name_display = mapping.name[:100] if mapping.name else "(no name)" print(f" Name: {name_display}") except: print(f" Name: (encoding error)") print(f" Old format actions count: {len(mapping.actions)}") for j, action in enumerate(mapping.actions[:5]): try: print(f" [{j}] {action[:80]}") except: print(f" [{j}] (encoding error)") print(f" Input actions count: {len(mapping.input_actions)}") for j, action_def in enumerate(mapping.input_actions[:3]): try: print(f" Input [{j}] {action_def.action[:60]}") print(f" Parameters: {len(action_def.parameters)}") for param in action_def.parameters[:3]: print(f" {param.name} = {param.value}") except: print(f" Input [{j}] (encoding error)") print(f" Output actions count: {len(mapping.output_actions)}") for j, action_def in enumerate(mapping.output_actions[:3]): try: print(f" Output [{j}] {action_def.action[:60]}") print(f" Parameters: {len(action_def.parameters)}") for param in action_def.parameters[:3]: print(f" {param.name} = {param.value}") except: print(f" Output [{j}] (encoding error)") return True if __name__ == '__main__': analyze_mappings()