Skip to content

amipilot v0.1

Choose a tag to compare

@sidick sidick released this 05 Aug 10:59
· 67 commits to main since this release

The platform's first object-level GUI automation tool for classic
AmigaOS: an Intuition/BOOPSI walker library and a standalone Shell
command that inspects any window's gadget tree by role, label, and
class, semantically rather than by pixels.

What's in 0.1:

  • intuition-model: a reusable walker library reading windows and
    gadgets under strict LockIBase() discipline (brief holds, copy-out,
    no live Intuition pointers, no patching or SetFunction() anywhere).
  • AmiInspect: a standalone on-Amiga Shell command that prints any
    window's gadget tree - the platform's first UIA-Inspect/browser
    element-picker equivalent. No host or server session required.
  • GadTools role classification, including officially-sanctioned
    GT_GetGadgetAttrsA kind-probing to distinguish BUTTON_KIND from
    CHECKBOX_KIND (both produce the same plain GTYP_BOOLGADGET, so a
    single flag check can't tell them apart).
  • BOOPSI/ReAction class reading via OCLASS() - a documented NDK
    mechanism, not a hack - correctly identifying real class names
    (button.gadget, checkbox.gadget, layout.gadget, and Intuition's
    own private system-gadget classes) and mapping known classes to
    roles.
  • Two conformance fixtures (fixtures/gadtools-app,
    fixtures/classact-app) plus a verified pass against a real, stock
    AmigaOS Prefs editor (ScreenMode) - not just software built for this
    project.
  • An automated regression check (make test-target, headless under
    Copperline) that boots both fixtures and
    asserts AmiInspect's classification output - proven to actually
    catch regressions, not just written: a deliberately reintroduced bug
    was caught by this check before being reverted.
  • Honest, documented limits rather than silent gaps: PLACETEXT_IN
    button labels are genuinely unreadable via this tier (GadTools bakes
    them into rendered imagery, not GadgetText), and a window.class
    window's layout.gadget children aren't enumerable on classic OS
    3.x - no public API exists for it, and this project doesn't reverse-
    engineer private structures to work around that.

Minimum requirements: AmigaOS 2.04 (V37), plain 68000, no FPU.
Recommended/CI-tested: AmigaOS 3.1, 68020, 2 MB chip + 8 MB fast.

See docs/implementation-plan.md
for the full design and phase sequencing, and
CLAUDE.md for
build instructions and architecture notes.

Not on Aminet yet - source only, via this release.