Skip to content

v0.0.18

Choose a tag to compare

@migueldeicaza migueldeicaza released this 29 Aug 21:53
· 22 commits to main since this release

Tecolot

Theme system improvements

  • Added theme lineage tracking (baseThemeName) to TerminalTheme, so derived themes know which built-in theme they were forked from.
  • Added first-class theme forking/duplication helpers in ThemeStore:
    • Smart de-duplicated naming (<theme> (Custom), <theme> copy, with numeric suffixes)
    • Built-in themes are no longer edited directly; edits create a non-built-in fork.
    • Custom themes duplicate with copy semantics while preserving lineage.
  • Added robust theme operations in profile settings:
    • In-place theme editing section with name editing, duplicate/revert/delete actions, and color pickers for background/foreground/selection/cursor + all 16 ANSI colors.
    • Built-in/custom differentiation in previews and cards.
    • “Revert to base theme” action for custom themes created from built-ins.

Theme browser + picker refinements

  • Refactored theme browser into reusable sectioned view model:
    • Favorites are separated from others and sorted alphabetically.
    • Supports paged mode (popular/more) and full list mode for chooser sheets.
    • Added optional “Done” action for modal usage.
  • Updated theme cards:
    • Added hover/focus-friendly favorite toggle on card.
    • Added “CUSTOM” badge on non-built-in themes.
  • Duplicate action for built-in themes now uses centralized forking logic.

Profile/settings reliability updates

  • Updated profile update flow to return success/failure (Bool) so multi-step operations can roll back on storage failures.
  • Theme edits in settings now use safer result-handling and rollback when persistence fails.
  • Added delayed/batched save behavior for theme edits to reduce churn and preserve responsiveness.

App behavior and maintenance

  • Fixed app reopen behavior: reopening with no visible windows now opens a new window.
  • Release workflow now explicitly requests contents and actions permissions for release/appcast dispatch needs.
  • Updated SwiftTerm dependency revision in Package.resolved.

SwiftTerm Highlights

  • Added formal fuzzer infrastructure and coverage for parser/stream/OSC behavior, plus documentation for live and corpus-driven fuzzing.
  • Implemented XTGETTCAP support (DCS +q) using generated terminfo-based reply data.
  • Added substantial hardening fixes around wide-cell seams, OSC bounds, and local process lifecycle safety.
  • Expanded benchmarking and profiling tooling with dedicated hardening workloads and an executable profiler.
  • Added extensive new regression test coverage (including Ghostty corpus and seam/OSC/XTGETTCAP tests).

New Features

  • Terminal protocol support

    • Added XTGETTCAP DCS handler with multiple key support, malformed-key handling, terminal name (TN) responses, and limits.
    • Added generated SwiftTermTerminfo table from checked-in swifterm-terminfo.
    • Added docs for new Kitty graphics types and integration (KittyGraphicsIntegration, configuration/policy/snapshot docs).
  • New hardening and performance knobs

    • TerminalOptions.maximumOscBytes added (default 65 MB).
    • BenchmarkOptions-adjacent improvements for profiling:
      • Added hardening benchmark set in VTEBenchWorkload.
      • Added SwiftTermProfile tool for headless profiling.
    • Added profiling support for seam check counters (SWIFTTERM_SEAM_COUNTER).
  • Fuzzing/testing assets

    • Added Docs/fuzzing.md and Makefile targets for corpus replay and live fuzzing.
    • Added Tools/import-ghostty-fuzz-corpus.swift to import Ghostty fuzz corpora.
    • Added new fixture archives and provenance docs under Tests/SwiftTermTests/Fixtures/GhosttyFuzzCorpus.

Fixed / Reliability Improvements

  • Wide-cell correctness & seam integrity

    • Added destination-keyed seam repair in buffer writes.
    • Added bulk scalar insertion path for valid homogeneous scalar runs.
    • Fixed wide-character seam corruption risks in many editing/movement paths and margin-restricted operations.
    • Added integrity regression tests asserting wide-cell invariants.
  • ESC/OSC parser hardening

    • Reworked OSC buffering with explicit size caps and capped retained capacity.
    • Added parser-level limit for oversized OSC payloads and memory release path after reset/completion.
    • Replaced separator parsing representation (_parsTxt -> bitmask) for safer, cheaper CSI separator handling.
  • Local process lifecycle safety

    • Reworked LocalProcess lifecycle to avoid stale callbacks and PID reuse races.
    • Added bounded output-drain + reaping behavior to preserve queued output before termination notifications.
    • Added explicit termination escalation (SIGTERM then SIGKILL) and configurable delays.
    • Added state phases and generation-based guards for restart safety.
  • Pipeline robustness

    • Added TerminalIOPipeline.drainAvailableAndShutdown(timeout:) for bounded shutdown draining.
    • Introduced explicit run phases (streaming/draining/quitting) and control wakepipe for deterministic stop behavior.