Skip to content

Releases: trsdn/outlook-ax

v1.1.0

Choose a tag to compare

@trsdn trsdn released this 29 Jul 20:43

Added

  • SwiftPM architectureSources/OutlookAXCLIKit, Sources/OutlookAXCLI executable product
  • JSON v2 typed envelopesJSONSuccess/JSONFailure with native numbers and booleans
    (notifications --json now returns "count": 3 as an integer, not "3" as a string)
  • Opt-in JSON v2--json-version 2 selects v2 in v1.1; --json-version 1 for legacy compat
  • Typed CLICommand enum with CLIParser — argument parsing separated from execution
  • Typed OutlookAXError with exit codes (77 permission, 69 unavailable, 1 failure, 64 usage)
  • Shared L10n catalogSources/OutlookAX/Localization/L10n.swift with verified de/en/fr/es/it variants
  • CalendarTemporal model — normalized temporal values with explicit resolution states
    (no silent year inference; unresolved = explicit .unresolved + reason)
  • CalendarTemporalParser — 12-hour/24-hour, all-day, year-boundary, DST-safe parsing
  • Passive connectionstatus and notifications no longer launch/activate Outlook
  • Stop-loss safety:
    • calendar create no longer discards pre-existing event drafts
    • calendar create and mail compose block Send/Save after any field failure
    • mail inbox --limit strictly validates 1…100; exits 64 on invalid values
    • mail inbox verifies Inbox is selected; removes unsafe AXRow fallback
    • Window cleanup removed from calendar today / event detail reads
  • scripts/check-repository-layout.sh — validates .claude/settings.json and script syntax
  • scripts/check-architecture.sh — validates SwiftPM architecture conventions
  • GitHub Actions CI — macOS hosted runner, build + test + help + layout + architecture checks
  • Docsdocs/json-schema-v2.md, docs/calendar-temporal-contract.md

Fixed

  • notifications --json returned count as string "3"; now returns integer 3 (#26)
  • calendar create discarded existing event drafts without confirmation (#2)
  • Form commands (compose, calendar create) reported success after failed AX writes (#3)
  • mail inbox --limit 0 (and negative/non-integer values) did not return a usage error (#17)
  • mail inbox read whichever folder was currently selected instead of verifying Inbox (#11)
  • mail inbox treated every AXRow in the window as an email message (#12)
  • status and notifications launched/activated Outlook when it was in the background (#4)
  • Unknown commands and bare mail/calendar groups exited with status 0 instead of 64 (#18)
  • wins[0] assumption in OutlookAX library replaced with semantic selectors (#20)
  • Claude SessionStart hook was silently ignored because the settings filename was wrong (#23)

v1.0.0 — Initial Release

Choose a tag to compare

@trsdn trsdn released this 19 Apr 11:50

outlook-ax v1.0.0

Lightweight CLI to read and control Microsoft Outlook (new) on macOS via the Accessibility API.

Features

Mail

  • Read current email, inbox listing, search
  • Reply, reply-all, forward, delete, archive, flag, move
  • Compose new emails with --to, --subject, --body
  • List and switch mail folders

Calendar

  • Read today's events with full detail (attendees, status, categories)
  • Create events with attendees, date/time, send invites
  • Navigate (today/next/prev), switch views (day/week/month)
  • Accept, decline, tentatively accept meetings
  • Join online meetings, duplicate events, categorize, set show-as

Navigation & System

  • Switch between Mail, Calendar, People, Tasks, Copilot, OneDrive
  • Sync, auto-reply settings, My Day panel, account switching

Architecture

  • Single Swift file, no dependencies — compiles with swiftc
  • Multi-language L10n support (de, en, fr, es, it) via label matching
  • Auto-launch and unminimize Outlook via AppleScript
  • JSON output on all read commands (--json)
  • Detailed event info with --details flag
  • Agent skill included for AX tree discovery

Requirements

  • macOS with Xcode Command Line Tools
  • Accessibility permission for terminal app
  • Microsoft Outlook (new version)