Skip to content

v0.18.0

Choose a tag to compare

@smm-h smm-h released this 03 Jul 20:26
· 1667 commits to main since this release

Themed form system, zero-paste token capture with API validation, profile inspect and delete in the TUI, and six new internal modules.

Context

The profile creation and auth flows are rebuilt on a themed widget layer (new forms theme section, focus-bg idiom matching the segment bar) running in one continuous fullscreen session. Token capture uses a PTY proxy to scrape setup-token's output automatically -- no more copy-paste. Every token is validated against the Anthropic API before saving (hard 401 rejection; the warn-and-save path is gone). Profiles can be inspected (i key / show-profile CLI) and deleted (Ctrl-D/Delete key / delete-profile CLI) from the TUI, with a data-destruction hard-block for profiles whose shared dirs are real directories.

Infrastructure: fsutil.py consolidates all atomic JSON writes (the permission-loss bug class is structurally eliminated), tokens.py consolidates token I/O, the CSI decoder handles Delete/PgUp/PgDn/Insert/parametric Shift-Tab without leaking bytes, and Terminal.cooked() replaces hand-rolled raw-mode transitions.

Breaking: delete-profile now requires --force-delete-data (in addition to --force-delete) to remove profiles with real shared directories.

Features

  • Continuous fullscreen create-profile flow. The profile wizard, auth method/browser forms, and a new creation summary page now run as one uninterrupted fullscreen session (no more bouncing between the TUI and scrollback), themed via the new forms theme section. The claude auth login / setup-token subprocess and token paste open in a temporary cooked window and return to the session. The CLI new-profile path gets the same flow.
  • Zero-paste token auth with hard validation. The long-lived token flow now captures claude setup-token output directly -- no manual paste needed -- and validates every token against the API before saving. Tokens the API rejects (401) are never saved (one manual re-paste is offered); when the API is unreachable, saving unvalidated requires an explicit choice and is reported as "unverified". The pre-launch auth prompt now launches only on an explicit skip.
  • Profile inspect. Press i on the profile segment to open a fullscreen inspection page for the focused profile, or run c show-profile <name> from the CLI. The report covers registration, credentials, token expiry, shared-dir symlink health (with a danger flag for real data at shared names), settings/permission summary, active session count, and disk usage.
  • TUI profile delete. Press Ctrl-D or Delete on the profile segment to delete the focused profile after an informed confirmation (Cancel default-focused). Profiles holding real data at shared-dir names are hard-blocked with a pointer to the new delete-profile --force-delete-data CLI flag -- the TUI offers no override.

Fixes

  • Fix: tokens.json no longer loses its 0600 permissions when a token is updated or a profile is deleted (previously triggered health-check warnings after any token update). options.json, state.json, and inodes.json likewise keep their existing permissions across updates, and a corrupt tokens.json now produces a clear error instead of a crash.
  • Fixed silent data loss on profile delete. delete-profile used to rmtree shared-dir names (e.g. projects/) even when they were real directories holding conversation data instead of symlinks. Deletion now refuses with the at-risk dir names; the built-in default profile is refused outright; profiles on disk but missing from options.json can now be deleted; a stale last_config profile reference is purged from state.json.
  • Fixed a bug where Delete, PgUp, PgDn, and Insert keys leaked stray bytes into the search buffer. Also added support for parametric Shift-Tab (ESC[1;2Z).
  • Fixed a bug where updating tokens.json lost its restrictive file permissions (0600 reverted to 0644 on every write).