# gameshowlda/askmkim architecture

> Architecture diagram of the GitHub repository gameshowlda/askmkim, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gameshowlda/askmkim
- Repository: https://github.com/gameshowlda/askmkim

## Overview

AskMkiM is a Windows control-programming and equipment-test application. Its principal workflow is opening a control program, editing and analyzing it, translating it for execution, running it against connected instruments, then presenting and retaining protocol results. Separate product branches support metrology and equipment self-tests, device configuration, and application settings. The README documents these capabilities; the sampled source confirms selected parser, device, database, and protocol internals. Several UI and metrology implementation details were not sampled, so those links reflect documented workflows rather than inspected calls.

Main entry points: [`Ask.Engine/ControlCommandExecutor/Execution/CommandExecutionManager.cs`](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandExecutor/Execution/CommandExecutionManager.cs) (Command execution), [`Ask.Engine/ControlCommandAnalyser/CommandTranslationManager.cs`](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandAnalyser/CommandTranslationManager.cs) (Command translation), [`Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs`](https://github.com/gameshowlda/askmkim/blob/debug/Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs) (Execution protocol), [`UI/Components/MultiEditorMethods/TextSearchManager.cs`](https://github.com/gameshowlda/askmkim/blob/debug/UI/Components/MultiEditorMethods/TextSearchManager.cs) (Text editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Program authoring"]
  node_editor["Text editor"]
end

subgraph group_execution["Analysis and execution"]
  node_translation["Command translation"]
  node_parameter_pipeline["Parameter parsing"]
  node_command_execution["Command execution"]
  node_device_manager["Device coordination<br/>[DeviceManager.cs]"]
end

subgraph group_equipment["Equipment and metrology"]
  node_device_runtime["Device runtime"]
  node_instrumentation["Connected instruments"]
  node_metrology["Metrology modes"]
  node_equipment_tests["Equipment checks"]
end

subgraph group_results["Results and history"]
  node_protocol["Execution protocol"]
  node_protocol_history["Protocol history"]
  node_pdf_output["PDF reports<br/>[PrintUtility.cs]"]
end

subgraph group_configuration["Configuration"]
  node_device_configuration["Device configuration<br/>[DeviceEngine.cs]"]
  node_device_storage[("Device database")]
  node_app_settings["Application settings<br/>[ExecutionConfig.cs]"]
end

node_operator(("Operator"))
node_program_files["Control programs"]
node_equipment{{"Physical equipment"}}

node_operator -->|"opens"| node_program_files
node_program_files -->|"loads into"| node_editor
node_operator -->|"edits"| node_editor
node_editor -->|"submits text"| node_translation
node_translation -.->|"parses parameters"| node_parameter_pipeline
node_translation -->|"translates for"| node_command_execution
node_operator -->|"starts or steps"| node_command_execution
node_command_execution -->|"coordinates devices"| node_device_manager
node_device_manager -->|"controls devices"| node_device_runtime
node_device_runtime -.->|"communicates via"| node_instrumentation
node_instrumentation -->|"sends commands"| node_equipment
node_operator -->|"starts mode"| node_metrology
node_metrology -->|"checks measurement paths"| node_equipment
node_operator -->|"runs checks"| node_equipment_tests
node_equipment_tests -->|"tests hardware"| node_equipment
node_command_execution -->|"records execution"| node_protocol
node_protocol -->|"retains history"| node_protocol_history
node_protocol -->|"exports PDF"| node_pdf_output
node_operator -->|"configures devices"| node_device_configuration
node_device_configuration -.->|"persists device data"| node_device_storage
node_operator -->|"changes settings"| node_app_settings

click node_editor "https://github.com/gameshowlda/askmkim/blob/debug/UI/Components/MultiEditorMethods/TextSearchManager.cs"
click node_translation "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandAnalyser/CommandTranslationManager.cs"
click node_parameter_pipeline "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandAnalyser/Parser/Common/Pipeline/PrParameterPipeline.cs"
click node_command_execution "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandExecutor/Execution/CommandExecutionManager.cs"
click node_device_manager "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandExecutor/BaseStrategies/DeviceManager.cs"
click node_device_runtime "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Runtime/Function/DeviceBusCommutation/ConnectorManager.cs"
click node_instrumentation "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Communication/Com/Interop/ComPortDeviceManager.cs"
click node_metrology "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Metrology/MetrologyControlFactory.cs"
click node_equipment_tests "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Runtime/Function/DeviceBusCommutation/SelfCheck/SelfTestProcessManager.cs"
click node_protocol "https://github.com/gameshowlda/askmkim/blob/debug/Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs"
click node_protocol_history "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Protocols/ExecutionProtocolHistoryService.cs"
click node_pdf_output "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/FilesUtility/PrintUtility.cs"
click node_device_configuration "https://github.com/gameshowlda/askmkim/blob/debug/Ask.DataBase.Engine/Services/DeviceEngine.cs"
click node_device_storage "https://github.com/gameshowlda/askmkim/blob/debug/Ask.DataBase.Provider/Services/Devices/LegacyMkiHardwareProfileStorageSql.cs"
click node_app_settings "https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Config/AppSettings/ExecutionConfig.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_editor toneBlue
class node_translation,node_parameter_pipeline,node_command_execution,node_device_manager toneAmber
class node_device_runtime,node_instrumentation,node_metrology,node_equipment_tests toneMint
class node_protocol,node_protocol_history,node_pdf_output toneRose
class node_device_configuration,node_device_storage,node_app_settings,node_operator,node_program_files,node_equipment toneIndigo
```

## Components

### Program authoring

- [Text editor](https://github.com/gameshowlda/askmkim/blob/debug/UI/Components/MultiEditorMethods/TextSearchManager.cs): `UI/Components/MultiEditorMethods/TextSearchManager.cs`

### Analysis and execution

- [Command translation](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandAnalyser/CommandTranslationManager.cs): `Ask.Engine/ControlCommandAnalyser/CommandTranslationManager.cs`
- [Parameter parsing](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandAnalyser/Parser/Common/Pipeline/PrParameterPipeline.cs): `Ask.Engine/ControlCommandAnalyser/Parser/Common/Pipeline/PrParameterPipeline.cs`
- [Command execution](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandExecutor/Execution/CommandExecutionManager.cs): `Ask.Engine/ControlCommandExecutor/Execution/CommandExecutionManager.cs`
- [Device coordination](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Engine/ControlCommandExecutor/BaseStrategies/DeviceManager.cs): `Ask.Engine/ControlCommandExecutor/BaseStrategies/DeviceManager.cs`

### Equipment and metrology

- [Device runtime](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Runtime/Function/DeviceBusCommutation/ConnectorManager.cs): `Ask.Device.Runtime/Function/DeviceBusCommutation/ConnectorManager.cs`
- [Connected instruments](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Communication/Com/Interop/ComPortDeviceManager.cs): `Ask.Device.Communication/Com/Interop/ComPortDeviceManager.cs`
- [Metrology modes](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Metrology/MetrologyControlFactory.cs): `Ask.Core/Services/Metrology/MetrologyControlFactory.cs`
- [Equipment checks](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Device.Runtime/Function/DeviceBusCommutation/SelfCheck/SelfTestProcessManager.cs): `Ask.Device.Runtime/Function/DeviceBusCommutation/SelfCheck/SelfTestProcessManager.cs`

### Results and history

- [Execution protocol](https://github.com/gameshowlda/askmkim/blob/debug/Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs): `Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs`
- [Protocol history](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Protocols/ExecutionProtocolHistoryService.cs): `Ask.Core/Services/Protocols/ExecutionProtocolHistoryService.cs`
- [PDF reports](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/FilesUtility/PrintUtility.cs): `Ask.Core/Services/FilesUtility/PrintUtility.cs`

### Configuration

- [Device configuration](https://github.com/gameshowlda/askmkim/blob/debug/Ask.DataBase.Engine/Services/DeviceEngine.cs): `Ask.DataBase.Engine/Services/DeviceEngine.cs`
- [Device database](https://github.com/gameshowlda/askmkim/blob/debug/Ask.DataBase.Provider/Services/Devices/LegacyMkiHardwareProfileStorageSql.cs): `Ask.DataBase.Provider/Services/Devices/LegacyMkiHardwareProfileStorageSql.cs`
- [Application settings](https://github.com/gameshowlda/askmkim/blob/debug/Ask.Core/Services/Config/AppSettings/ExecutionConfig.cs): `Ask.Core/Services/Config/AppSettings/ExecutionConfig.cs`

### Other components

- **Operator**
- **Control programs**
- **Physical equipment**

## Connections

- Operator → Control programs: opens
- Control programs → Text editor: loads into
- Operator → Text editor: edits
- Text editor → Command translation: submits text
- Command translation → Parameter parsing: parses parameters
- Command translation → Command execution: translates for
- Operator → Command execution: starts or steps
- Command execution → Device coordination: coordinates devices (evidence: `Ask.Engine/ControlCommandExecutor/BaseStrategies/DeviceManager.cs`)
- Device coordination → Device runtime: controls devices (evidence: `Ask.Engine/ControlCommandExecutor/BaseStrategies/DeviceManager.cs`)
- Device runtime → Connected instruments: communicates via
- Connected instruments → Physical equipment: sends commands
- Operator → Metrology modes: starts mode
- Metrology modes → Physical equipment: checks measurement paths
- Operator → Equipment checks: runs checks
- Equipment checks → Physical equipment: tests hardware
- Command execution → Execution protocol: records execution
- Execution protocol → Protocol history: retains history (evidence: `Ask.UI/Features/ProtocolNew/Protocol/ProtocolStorageService.cs`)
- Execution protocol → PDF reports: exports PDF
- Operator → Device configuration: configures devices
- Device configuration → Device database: persists device data
- Operator → Application settings: changes settings
