Changelog — Repio

Changelog

All notable changes to Repio, version by version.

v5.9.0 Enterprise 2026-03-15
✓ Added
  • Simplified variable syntax — variables can now be referenced as $varname instead of $_varname_; the old syntax is still accepted for backward compatibility
  • Script stdout capture — set the new “Output variable” field on a script action (e.g. $result) to run the command blocking and store its stdout in a variable; leaving the field empty keeps the previous non-blocking fire-and-forget behaviour
  • Run Program stdout capture — append |$varname to the arguments of a run_program / run action to capture the program’s stdout: e.g. --flag value|$out; blocking when a variable is specified, non-blocking otherwise
  • Variable interpolation in executable path$varname now expands in the run_program / run file path field, not only in arguments
⚠ Fixed
  • set_var string values — assigning a non-numeric value (e.g. dir=C:\Scripts) was silently coerced to 0.0; values are now stored as strings when they cannot be evaluated as a number; arithmetic expressions still work correctly
v5.8.0 Enterprise 2026-03-10
✓ Added
  • Session tab restore — on startup all previously open tabs are restored (not just the last one); active tab position is preserved; falls back to most recent file if session state is empty
↻ Changed
  • like() returns countlike("needle", $text) now returns the number of non-overlapping occurrences (integer) instead of boolean; backward-compatible: 0 is falsy, 1+ is truthy; enables expressions like like("err", $log) > 1
v5.7.0 Enterprise 2026-03-06
✓ Added
  • Activity LogTools > Logs opens a dedicated tab showing the last 100 system events (record start/stop, play, pause, file ops, hotkeys); persisted to JSON; columns: Time, File, Trigger, Action, Line
  • Search all columnsCtrl+F / F3 now searches across every visible column (type, coordinates, key, comment, etc.) instead of comment only; also works in the Logs tab
  • Pause reason tracking — player now distinguishes F7 manual pause, auto-pause by mouse movement, auto-pause by keyboard press, and breakpoint — each logged with its own trigger
⚠ Fixed
  • F7 pause was logging as “Play resume F8” instead of “Pause F7”
  • F7 could trigger stop instead of pause (race condition between pynput listener and GlobalHotkeyManager)
  • F6 stop was not logged when the player thread finished before GUI stop_all() ran
v5.7.0 Enterprise 2026-03-06
✓ Added
  • Comment/uncomment rowsCtrl+/ or right-click menu toggles rows as commented; commented rows shown as gray overstrike text and skipped during playback
  • Open include in new tab — right-click on a local include row → “Open in New Tab” opens the referenced file
  • Platform-native OCRrepio/platform/ abstraction layer; Windows uses Windows.Media.Ocr API (zero external install); macOS Vision framework planned
  • Screenshot OCRscreenshot action comment "label|$varname" triggers text recognition after capture and stores result in a variable
  • like() function in if_var conditions — like("needle", $text) performs case-insensitive substring match; works with string literals and variables
  • Pause status bar context — status bar shows full playback context (file, loop, action) during pause/breakpoint with bold font
  • “Commented out” checkbox in Edit dialog for any action
↻ Changed
  • CSV format: 13 → 14 fields (added is_commented); backward-compatible with older files
v5.5.0 Enterprise 2026-03-03
✓ Added
  • Runtime variable systemVariableStore module with $varname interpolation syntax; variables shared across all nested loops and includes
  • Loop iteration variablesloop_start Comment field accepts a variable name; that variable is set to the 1-based iteration index before each iteration body executes
  • set_var action — Comment = name=expression; evaluates the right-hand side as an arithmetic expression (supports + - * / ** % and $var references), stores result; not yielded to player (pure side-effect)
  • if_var action — Comment = boolean condition (e.g. $i > 3, $counter == 5); conditionally executes a block using the same else / end_if markers as if_color; supports all Python comparison operators
  • Variable interpolation in fields$name substitution applied in: type text, delay_ms expressions, script shell commands, run_program arguments
  • label & goto actions — named position markers and jump instructions; goto propagates through any nesting depth via exception mechanism and restarts the iterator from the target label; variable store preserved across goto restarts
  • Label picker in EditDialog — goto type switches Comment field to a Combobox listing all label names in the current scenario
  • Insert menu: Set Variable…, If Variable…, Label…, Goto…
  • Color coding: set_var rows in purple, if_var in green (same as if_color), label in gray italic
v5.4.0 Enterprise 2026-03-03
✓ Added
  • Conditional actionsif_color / else / end_if structured blocks; checks pixel color at (x, y) with per-channel tolerance; executes if-body or else-body depending on result
  • break action — exits the innermost loop_start/loop_end block immediately
  • exit action — stops all macro playback completely (equivalent to pressing Esc)
  • Pick Color button in EditDialog for if_color rows: reads pixel at (x, y) and fills the color field automatically
  • Tolerance field (stored in dx) for if_color: per-channel tolerance 0–255
  • "Wrap in If" in Insert menu & toolbar: wraps selected rows in if_color/end_if block
  • Color-coded rows: if_color/else/end_if in green, break/exit in orange
v5.3.0 Enterprise 2026-03-02
✓ Added
  • Quick list sidebar — collapsible left panel with a global macro library; Open in tab, Play headless, Set Hotkey per entry; assigned hotkeys work globally even when Repio is minimized
  • Middle-click on a tab closes it (browser-style)
  • wait action type — synonym for pause, same timing behaviour and visual styling
↻ Changed
  • Opening a file already open in a tab from Quick list switches to that tab (no duplicate)
  • Del in Quick list removes selected entry with confirmation
  • Set Hotkey dialog is now centered on screen
✓ Fixed
  • Timeline (Time column) now correctly accumulates duration of include files for all subsequent rows
v5.2.1 Enterprise 2026-03-02
✓ Added
  • Per-macro hotkey binding — Settings → Macro Hotkeys (7th tab); assign a global key combo directly to a .repio file; fires even when Repio is minimized
  • 10 configurable slots: each maps a hotkey → file path; uses the same Capture UI as Tab Hotkeys
  • If the file is open in a tab — plays via GUI player; if not open — loads and runs headless in a background thread
  • Conflict detection checks against F5–F8 internal hotkeys and all Tab Hotkeys
  • New engine module MacroHotkeyRunner — zero tkinter, constructor-injected callbacks, fully unit-tested
v5.2.0 PRO 2026-02-27
✓ Added
  • Multi-tab support — browser-like tabs inside one window; open multiple .repio files simultaneously. Tab bar sits between toolbar and table; shows filename with * if modified and [+] new-tab button
  • Tab hotkeys: Ctrl+T new tab • Ctrl+W close tab • Ctrl+Tab next • Ctrl+Shift+Tab previous • Ctrl+1–9 switch by index
  • Close tab prompts to save if modified; last tab resets to empty instead of closing the window
  • Only one macro plays at a time (the active tab's); all existing hotkeys and mixins unchanged
↻ Changed
  • Entry point renamed repio-dev-pro.pyrepio-dev-enterprise.py; compiled binary is Repio-Enterprise.exe
v5.1.2 PRO 2026-02-27
✓ Added
  • Enterprise licensing — offline HWID+HMAC-SHA256 key system; no server; license in %APPDATA%\Repio\license.key; startup verification + Help > License Info
  • Autoplay on startup — Settings > General checkbox; plays last-opened file 300 ms after launch
  • Random delay jitter — Settings > Playback: enable + ±1–50% range; adds natural timing variation during playback
  • script action — inline shell command (in Comment field) executed non-blocking via shell=True; Insert > Shell Script…
  • run action — alias for run_program; file_path = executable, comment = arguments
v5.1.1 PRO 2026-02-27
✓ Added
  • Settings → Screenshot folder (General tab) — folder picker for screenshot output directory; persists in settings.json; empty = current working directory
  • Settings → Colors tab — 10 configurable row colors: foreground for pause, include, run_program, type, screenshot, key actions; background for loop, bookmark, breakpoint; color swatch button opens color picker, Reset restores default
v5.1.0 PRO 2026-02-27
✓ Added
  • type action — types a full string in one step (unicode-safe, including Cyrillic). Text set in the Comment field
  • screenshot action — captures the screen as a macro step; label used in filename; output path via --output-dir
  • CLI --run FILE — headless playback without GUI: repio.exe --run morning.repio. Useful for Task Scheduler, CI/CD, macro chains
  • CLI --output-dir PATH — sets screenshot save directory (pairs with --run for visual test logs)
  • .repio file extension — new branded extension; Open/Save dialogs default to .repio (existing .csv files work as-is)
  • Windows file association — double-click on .repio opens Repio. Registered in HKCU (no admin required), auto-updates to exe after compilation
  • Custom app icon — branded blue "R" with red recording dot in the title bar, taskbar, and Windows Explorer
  • Insert > Type Text — toolbar button ⌨ and menu item; prompts for text and inserts a type action
  • Insert > Screenshot — toolbar button 📷 and menu item; prompts for label and inserts a screenshot action
  • Color-coded rows: type bold purple, screenshot brown
↻ Changed
  • EditDialog Comment label updates contextually: "Text to type:" / "Label:" / "Arguments:" depending on action type
  • Browse dialog in EditDialog supports *.repio *.csv
  • Compiled EXE bundles Pillow — screenshot action works without separate install
v5.0.x PRO 2026-02-20
✓ Added
  • Cumulative timeline column — running total duration for each action
  • Column management — reorder and toggle visibility, persisted to settings.json
  • Settings dialog (4 tabs): Recording, Playback, Hotkeys, General
  • Configurable hotkeys — reassign Start/Stop/Play/Pause keys
  • Post-script actions: lock, logout, restart, shutdown after script completes
  • Run external program: Insert > Run Program — execute .exe/.bat with arguments
  • Window geometry persistence — size and position restored on restart
  • Shift+Up/Down standard selection extension
  • Ctrl+Up/Down to move selected rows
  • Min mouse movement filter (configurable pixel threshold)
  • Ignore multiple modifier key events option
  • Playback pause on real mouse movement or keyboard press
  • Launch on login (Windows registry autostart)
  • Start minimized option
↻ Changed
  • Delay column now shows short format (5.4s, 1m 5.0s)
  • PgUp/PgDn properly sets focus for subsequent arrow key navigation
  • Recording filters all configured hotkeys and control keys
  • Queue drained on stop to prevent stale events
⚠ Fixed
  • PgUp/PgDn cursor tracking — arrow keys now track from correct position
  • Ctrl+Up/Down shortcuts restored for row movement
  • Stop recording no longer captures stop key events in scenario
  • Shift+Arrow selection now works correctly (standard behavior)
v4.0.x PRO 2025-02-17
✓ Added
  • Build auto-increment — version auto-increments (4.0.1, 4.0.2, ...) on each run, stored in build_index.json
  • Recursive duration calculation — includes recursive traversal of include files, loop expansion (body × count), display in status bar
  • Save As... — File > Save As... (Ctrl+Shift+S)
  • Unsaved changes tracking — asterisk (*) in title, Yes/No/Cancel confirmation, WM_DELETE_WINDOW interception
  • Web hook include — HTTP URL support, auto query params, 3s timeout, TTL caching (60s)
  • Preview Hook — context menu for URL includes, auto-detects CSV vs plain text
  • About dialog — Help > About with version + repio.dev link
  • Include duration annotation — auto-calculates and shows duration in comment
↻ Changed
  • calc_total_duration_ms() rewritten with recursion for includes and loops
  • IncludeCache.load() now supports URLs with TTL-based caching
  • Play button always shows triangle (not "Continue" text)
  • add_include() offers choice between local file and URL
⚠ Fixed
  • Play button text did not revert to triangle after pause
v3.x Community 2025-02-14/15
✓ Added
  • Breakpoints (F9) — toggle via F9 or context menu, red highlight (#CD5C5C), auto-stop during playback, saved in CSV
  • Bookmarks (Ctrl+B) — toggle via Ctrl+B, cyan highlight (#E0FFFF), navigate with wrap-around, saved in CSV
  • Search in comments (Ctrl+F) — find substring, navigate F3/Shift+F3, wrap-around
  • Play from selected line — context menu "Play from Here", starts from selected row
↻ Changed
  • Recorder now collapses consecutive mouse moves into single action
v2.x Community 2025-02-14
✓ Added
  • Movement recording — mouse movement capture with perf_counter timestamps
  • Move collapse — auto-merge consecutive move events
  • Undo/Redo (Ctrl+Z/Y) — 50 states, deep copy isolation
  • Include files — recursive inline playback, LRU cache (32), mtime check, max depth 20
↻ Changed
  • CSV format extended with is_breakpoint, is_bookmark fields
⚠ Fixed
  • Mouse playback was jerky after recording — fixed with move collapse
v1.0 Community 2025-02-13
✓ Added
  • Basic recorder — mouse capture (clicks, scroll), keyboard capture (keydown/keyup), auto pause insertion, start/end markers
  • Editor — TreeView table with 10 columns, EditDialog, insert/delete rows, copy/paste
  • Player — lazy generator engine, virtual clock, hotkeys F5/F6/F7/F8, status bar
  • Loops — insert via menu, loop_start/loop_end pairs, nested, iteration display
  • File operations — CSV save/load, recent files (max 10), Ctrl+N/O/S
  • GUI — tkinter 1200x800, toolbar, context menu, tooltips