# altriazyk/myautowork architecture

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

- Interactive diagram: https://gitdiagram.com/altriazyk/myautowork
- Repository: https://github.com/altriazyk/myautowork

## Overview

MyAutoWork is a Windows automation studio and plugin-based workflow runtime. A user edits or selects a workflow in the GUI and runs it; the engine follows execution edges, resolves inputs and data edges, dispatches plugin actions, and collects outputs, logs, and run history. Built-in actions cover flow control, app/window/UI automation, input, timing, and files. The GUI and engine paths are visible in sampled source; several kernel and UI subsystem links are based on module names and README-level product documentation, so uncertain wiring is omitted.

Main entry points: [`myautowork/context.py`](https://github.com/altriazyk/myautowork/blob/main/myautowork/context.py) (Automation SDK), [`kernel/engine.py`](https://github.com/altriazyk/myautowork/blob/main/kernel/engine.py) (Workflow Engine), [`host/module_editor.py`](https://github.com/altriazyk/myautowork/blob/main/host/module_editor.py) (Workflow Editor), [`kernel/registry.py`](https://github.com/altriazyk/myautowork/blob/main/kernel/registry.py) (Plugin Registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_studio["Workflow Studio"]
  node_studio_app["Studio App<br/>[app.py]"]
  node_main_window["Main Window<br/>[main_window.py]"]
  node_workflow_list["Workflow List<br/>[workflow_list.py]"]
  node_module_editor["Workflow Editor<br/>[module_editor.py]"]
  node_canvas["Graph Canvas<br/>[scene.py]"]
  node_forms["Node Forms<br/>[builder.py]"]
  node_uia_picker["UIA Picker<br/>[uia_picker.py]"]
  node_host_runner["Run Controls<br/>[runner.py]"]
end

subgraph group_runtime["Workflow Runtime"]
  node_registry["Plugin Registry<br/>[registry.py]"]
  node_engine["Workflow Engine<br/>[engine.py]"]
  node_graph["Workflow Graph<br/>[graph.py]"]
  node_rpc["Plugin RPC<br/>[rpc.py]"]
  node_worker["Plugin Worker<br/>[worker.py]"]
  node_store[("Run History<br/>[store.py]")]
end

subgraph group_plugins["Automation Plugins"]
  node_manual["Manual Trigger<br/>[main.py]"]
  node_flow["Flow Control<br/>[main.py]"]
  node_app["App Actions<br/>[main.py]"]
  node_window["Window Actions<br/>[main.py]"]
  node_input["Keyboard Mouse<br/>[main.py]"]
  node_uia["UI Automation<br/>[main.py]"]
  node_file_actions["File Actions<br/>[main.py]"]
  node_file_write["Write Files<br/>[main.py]"]
  node_delay["Timing Actions<br/>[main.py]"]
end

subgraph group_sdk["Plugin SDK"]
  node_sdk["Automation SDK<br/>[context.py]"]
  node_locator["Locator Toolkit<br/>[uia.py]"]
end

node_user(("User"))
node_windows(("Windows Desktop"))
node_filesystem[("Filesystem")]

node_user -->|"launches"| node_studio_app
node_studio_app -->|"creates"| node_main_window
node_main_window -->|"shows"| node_workflow_list
node_main_window -->|"opens"| node_module_editor
node_module_editor -->|"edits graph"| node_canvas
node_module_editor -->|"edits inputs"| node_forms
node_module_editor -->|"picks elements"| node_uia_picker
node_user -->|"runs workflow"| node_host_runner
node_host_runner -->|"starts run"| node_engine
node_engine -->|"traverses"| node_graph
node_engine -->|"dispatches action"| node_registry
node_registry -->|"starts worker"| node_worker
node_worker -->|"handles RPC"| node_rpc
node_registry -->|"sends calls"| node_rpc
node_manual -->|"uses context"| node_sdk
node_flow -->|"uses context"| node_sdk
node_app -->|"uses context"| node_sdk
node_window -->|"uses context"| node_sdk
node_input -->|"uses context"| node_sdk
node_uia -->|"uses context"| node_sdk
node_file_actions -->|"uses context"| node_sdk
node_file_write -->|"uses context"| node_sdk
node_delay -->|"uses context"| node_sdk
node_sdk -->|"resolves locators"| node_locator
node_window -->|"operates on"| node_windows
node_input -->|"injects input"| node_windows
node_uia -->|"locates controls"| node_windows
node_app -->|"launches apps"| node_windows
node_file_actions -->|"reads and changes"| node_filesystem
node_file_write -->|"writes"| node_filesystem
node_engine -->|"records runs"| node_store
node_engine -->|"receives notifications"| node_registry

click node_studio_app "https://github.com/altriazyk/myautowork/blob/main/host/app.py"
click node_main_window "https://github.com/altriazyk/myautowork/blob/main/host/main_window.py"
click node_workflow_list "https://github.com/altriazyk/myautowork/blob/main/host/workflow_list.py"
click node_module_editor "https://github.com/altriazyk/myautowork/blob/main/host/module_editor.py"
click node_canvas "https://github.com/altriazyk/myautowork/blob/main/host/canvas/scene.py"
click node_forms "https://github.com/altriazyk/myautowork/blob/main/host/forms/builder.py"
click node_uia_picker "https://github.com/altriazyk/myautowork/blob/main/host/uia_picker.py"
click node_host_runner "https://github.com/altriazyk/myautowork/blob/main/host/runner.py"
click node_registry "https://github.com/altriazyk/myautowork/blob/main/kernel/registry.py"
click node_engine "https://github.com/altriazyk/myautowork/blob/main/kernel/engine.py"
click node_graph "https://github.com/altriazyk/myautowork/blob/main/kernel/graph.py"
click node_rpc "https://github.com/altriazyk/myautowork/blob/main/kernel/rpc.py"
click node_worker "https://github.com/altriazyk/myautowork/blob/main/kernel/worker.py"
click node_store "https://github.com/altriazyk/myautowork/blob/main/kernel/store.py"
click node_manual "https://github.com/altriazyk/myautowork/blob/main/plugins/core.trigger.manual/main.py"
click node_flow "https://github.com/altriazyk/myautowork/blob/main/plugins/core.flow/main.py"
click node_app "https://github.com/altriazyk/myautowork/blob/main/plugins/core.app/main.py"
click node_window "https://github.com/altriazyk/myautowork/blob/main/plugins/win.window/main.py"
click node_input "https://github.com/altriazyk/myautowork/blob/main/plugins/win.input/main.py"
click node_uia "https://github.com/altriazyk/myautowork/blob/main/plugins/win.uia/main.py"
click node_file_actions "https://github.com/altriazyk/myautowork/blob/main/plugins/core.file/main.py"
click node_file_write "https://github.com/altriazyk/myautowork/blob/main/plugins/core.file.write/main.py"
click node_delay "https://github.com/altriazyk/myautowork/blob/main/plugins/core.time.delay/main.py"
click node_sdk "https://github.com/altriazyk/myautowork/blob/main/myautowork/context.py"
click node_locator "https://github.com/altriazyk/myautowork/blob/main/myautowork/uia.py"

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_studio_app,node_main_window,node_workflow_list,node_module_editor,node_canvas,node_forms,node_uia_picker,node_host_runner,node_user toneBlue
class node_registry,node_engine,node_graph,node_rpc,node_worker,node_store,node_filesystem toneAmber
class node_manual,node_flow,node_app,node_window,node_input,node_uia,node_file_actions,node_file_write,node_delay toneMint
class node_sdk,node_locator toneRose
class node_windows toneIndigo
```

## Components

### Workflow Studio

- [Studio App](https://github.com/altriazyk/myautowork/blob/main/host/app.py): `host/app.py`
- [Main Window](https://github.com/altriazyk/myautowork/blob/main/host/main_window.py): `host/main_window.py`
- [Workflow List](https://github.com/altriazyk/myautowork/blob/main/host/workflow_list.py): `host/workflow_list.py`
- [Workflow Editor](https://github.com/altriazyk/myautowork/blob/main/host/module_editor.py): `host/module_editor.py`
- [Graph Canvas](https://github.com/altriazyk/myautowork/blob/main/host/canvas/scene.py): `host/canvas/scene.py`
- [Node Forms](https://github.com/altriazyk/myautowork/blob/main/host/forms/builder.py): `host/forms/builder.py`
- [UIA Picker](https://github.com/altriazyk/myautowork/blob/main/host/uia_picker.py): `host/uia_picker.py`
- [Run Controls](https://github.com/altriazyk/myautowork/blob/main/host/runner.py): `host/runner.py`

### Workflow Runtime

- [Plugin Registry](https://github.com/altriazyk/myautowork/blob/main/kernel/registry.py): `kernel/registry.py`
- [Workflow Engine](https://github.com/altriazyk/myautowork/blob/main/kernel/engine.py): `kernel/engine.py`
- [Workflow Graph](https://github.com/altriazyk/myautowork/blob/main/kernel/graph.py): `kernel/graph.py`
- [Plugin RPC](https://github.com/altriazyk/myautowork/blob/main/kernel/rpc.py): `kernel/rpc.py`
- [Plugin Worker](https://github.com/altriazyk/myautowork/blob/main/kernel/worker.py): `kernel/worker.py`
- [Run History](https://github.com/altriazyk/myautowork/blob/main/kernel/store.py): `kernel/store.py`

### Automation Plugins

- [Manual Trigger](https://github.com/altriazyk/myautowork/blob/main/plugins/core.trigger.manual/main.py): `plugins/core.trigger.manual/main.py`
- [Flow Control](https://github.com/altriazyk/myautowork/blob/main/plugins/core.flow/main.py): `plugins/core.flow/main.py`
- [App Actions](https://github.com/altriazyk/myautowork/blob/main/plugins/core.app/main.py): `plugins/core.app/main.py`
- [Window Actions](https://github.com/altriazyk/myautowork/blob/main/plugins/win.window/main.py): `plugins/win.window/main.py`
- [Keyboard Mouse](https://github.com/altriazyk/myautowork/blob/main/plugins/win.input/main.py): `plugins/win.input/main.py`
- [UI Automation](https://github.com/altriazyk/myautowork/blob/main/plugins/win.uia/main.py): `plugins/win.uia/main.py`
- [File Actions](https://github.com/altriazyk/myautowork/blob/main/plugins/core.file/main.py): `plugins/core.file/main.py`
- [Write Files](https://github.com/altriazyk/myautowork/blob/main/plugins/core.file.write/main.py): `plugins/core.file.write/main.py`
- [Timing Actions](https://github.com/altriazyk/myautowork/blob/main/plugins/core.time.delay/main.py): `plugins/core.time.delay/main.py`

### Plugin SDK

- [Automation SDK](https://github.com/altriazyk/myautowork/blob/main/myautowork/context.py): `myautowork/context.py`
- [Locator Toolkit](https://github.com/altriazyk/myautowork/blob/main/myautowork/uia.py): `myautowork/uia.py`

### Other components

- **User**
- **Windows Desktop**
- **Filesystem**

## Connections

- User → Studio App: launches
- Studio App → Main Window: creates
- Main Window → Workflow List: shows
- Main Window → Workflow Editor: opens
- Workflow Editor → Graph Canvas: edits graph
- Workflow Editor → Node Forms: edits inputs
- Workflow Editor → UIA Picker: picks elements
- User → Run Controls: runs workflow
- Run Controls → Workflow Engine: starts run
- Workflow Engine → Workflow Graph: traverses
- Workflow Engine → Plugin Registry: dispatches action
- Plugin Registry → Plugin Worker: starts worker
- Plugin Worker → Plugin RPC: handles RPC
- Plugin Registry → Plugin RPC: sends calls
- Manual Trigger → Automation SDK: uses context
- Flow Control → Automation SDK: uses context
- App Actions → Automation SDK: uses context
- Window Actions → Automation SDK: uses context
- Keyboard Mouse → Automation SDK: uses context
- UI Automation → Automation SDK: uses context
- File Actions → Automation SDK: uses context
- Write Files → Automation SDK: uses context
- Timing Actions → Automation SDK: uses context
- Automation SDK → Locator Toolkit: resolves locators
- Window Actions → Windows Desktop: operates on
- Keyboard Mouse → Windows Desktop: injects input
- UI Automation → Windows Desktop: locates controls
- App Actions → Windows Desktop: launches apps
- File Actions → Filesystem: reads and changes
- Write Files → Filesystem: writes
- Workflow Engine → Run History: records runs
- Workflow Engine → Plugin Registry: receives notifications
