feat(tui): implement SQLite session persistence and multi-session tab bar with state indicators #10994

Closed
HAL9000 wants to merge 6 commits from pr-fix-10593 into master

6 Commits

Author SHA1 Message Date
CleverAgents Bot 7691724fdf ci: stop master workflow on PR updates
CI / lint (pull_request) Has been cancelled
CI / typecheck (pull_request) Has been cancelled
CI / security (pull_request) Has been cancelled
CI / quality (pull_request) Has been cancelled
CI / unit_tests (pull_request) Has been cancelled
CI / integration_tests (pull_request) Has been cancelled
CI / e2e_tests (pull_request) Has been cancelled
CI / coverage (pull_request) Has been cancelled
CI / build (pull_request) Has been cancelled
CI / docker (pull_request) Has been cancelled
CI / helm (pull_request) Has been cancelled
CI / push-validation (pull_request) Has been cancelled
CI / status-check (pull_request) Has been cancelled
Remove the stale pull_request trigger from master.yml so PR branch commits do not launch the master workflow.

Maintenance patch for PR #10994.
2026-06-10 20:20:56 -04:00
HAL9000 302f630d98 fix(tui): resolve lint, typecheck, and unit_tests CI failures
CI / lint (pull_request) Successful in 36s
CI / build (pull_request) Successful in 38s
CI / quality (pull_request) Successful in 1m12s
CI / typecheck (pull_request) Successful in 1m18s
CI / security (pull_request) Successful in 1m17s
CI / helm (pull_request) Successful in 40s
CI / push-validation (pull_request) Successful in 19s
CI / integration_tests (pull_request) Failing after 3m36s
CI / e2e_tests (pull_request) Successful in 3m57s
CI / unit_tests (pull_request) Failing after 4m40s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 4s
CI / benchmark-publish (pull_request) Has been cancelled
CI / benchmark-regression (pull_request) Has been cancelled
- Use module-level _StaticBase = _load_static_base() pattern (matches
  PersonaBar) so class SessionTabBar(_StaticBase) needs no type: ignore
- Replace base_cls.__init__(self, id=safe_id or "") with
  super().__init__(id=id, classes=classes) — passing id=None (not "")
  avoids Textual BadIdentifier on no-arg construction
- Replace try/except/pass with contextlib.suppress for SIM105
- Replace ambiguous U+276F in docstrings/comments with > (RUF002/003)
- Move Callable import to collections.abc (UP035)
- Replace assert False with raise AssertionError() (B011)
- Replace Optional[X] with X | None (UP035/UP007)
- Switch two conflicting @when step patterns to regex matcher with
  [^\"]+ captures to prevent Behave AmbiguousStep registration error
- Add quotes around {state} in update/verify step patterns so parse
  captures the value without surrounding double-quote characters
- Apply ruff format to session_store.py (pre-existing formatting drift)

ISSUES CLOSED: #5330
2026-06-10 09:18:51 -04:00
HAL9000 6f7ca8c0f0 fix(tui): correct widget id, render text tracking, and step def helpers
CI / benchmark-publish (pull_request) Has been skipped
CI / helm (pull_request) Successful in 56s
CI / build (pull_request) Successful in 58s
CI / lint (pull_request) Failing after 1m0s
CI / benchmark-regression (pull_request) Failing after 1m10s
CI / quality (pull_request) Successful in 1m39s
CI / typecheck (pull_request) Failing after 1m43s
CI / security (pull_request) Successful in 1m43s
CI / push-validation (pull_request) Successful in 22s
CI / integration_tests (pull_request) Successful in 3m53s
CI / e2e_tests (pull_request) Successful in 5m24s
CI / unit_tests (pull_request) Failing after 6m22s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 4s
- Remove invalid empty string for Textual widget id parameter (id must contain
  alphanumeric/underscore/hyphen or be None)
- Add _current_text attribute to SessionTabBar for consistent text tracking across
  both Textual Static and fallback widget implementations
- Update _get_widget_text() helper to check _current_text before _text fallback
- Ensure _render() updates both instance-level tracking and widget display methods

ISSUES CLOSED: #5330
2026-05-09 14:30:18 +00:00
HAL9000 b5513d94c5 fix(tui): implement SQLite session persistence and multi-session tab bar with state indicators
CI / push-validation (pull_request) Successful in 36s
CI / helm (pull_request) Successful in 46s
CI / build (pull_request) Successful in 55s
CI / lint (pull_request) Failing after 1m6s
CI / security (pull_request) Successful in 1m33s
CI / quality (pull_request) Successful in 1m37s
CI / typecheck (pull_request) Failing after 1m43s
CI / benchmark-publish (pull_request) Has been skipped
CI / benchmark-regression (pull_request) Failing after 1m3s
CI / e2e_tests (pull_request) Successful in 4m16s
CI / integration_tests (pull_request) Successful in 6m25s
CI / unit_tests (pull_request) Failing after 7m42s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
- Replace > (U+003E) with ❯ (U+276F) waiting indicator per issue #5330 spec
- Remove all # type: ignore suppressions from session_tab_bar.py (except unavoidable [misc])
- Fix long line lint violations in BDD step definitions
- Add _get_widget_text helper for safe widget text extraction
- Add tab navigation callback methods (prev, next, new, close, jump)
- Update CHANGELOG.md to reference issue #5330 instead of PR #10593
- Fix Contributors.md and feature consistency markers

ISSUES CLOSED: #5330
2026-05-09 11:12:01 +00:00
HAL9000 8240fc3132 fix(ruff): sort imports and use datetime.UTC alias in session_store
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Failing after 1m18s
CI / quality (pull_request) Successful in 1m23s
CI / benchmark-regression (pull_request) Failing after 1m22s
CI / typecheck (pull_request) Successful in 1m37s
CI / push-validation (pull_request) Successful in 27s
CI / helm (pull_request) Successful in 30s
CI / build (pull_request) Successful in 38s
CI / security (pull_request) Successful in 1m54s
CI / integration_tests (pull_request) Successful in 3m47s
CI / unit_tests (pull_request) Failing after 4m3s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / e2e_tests (pull_request) Successful in 4m19s
CI / status-check (pull_request) Failing after 3s
- Organize Python imports per ruff I001 rule
- Replace deprecated timezone.utc with datetime.UTC alias (UP017)
- Break long SQL string literal across multiple lines (E501)
2026-05-07 11:17:00 +00:00
HAL9000 55a8a3e717 feat(tui): implement SQLite session persistence and multi-session tab bar with state indicators
CI / helm (pull_request) Successful in 44s
CI / build (pull_request) Successful in 56s
CI / quality (pull_request) Successful in 1m6s
CI / lint (pull_request) Failing after 1m18s
CI / typecheck (pull_request) Successful in 1m27s
CI / security (pull_request) Successful in 1m27s
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 28s
CI / benchmark-regression (pull_request) Failing after 1m0s
CI / e2e_tests (pull_request) Successful in 4m38s
CI / integration_tests (pull_request) Successful in 6m5s
CI / unit_tests (pull_request) Failing after 7m42s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
- Add thread-safe SessionStore backed by SQLite (check_same_thread=False,
  threading.Lock protection, finally: conn.close())
- Replace deprecated datetime.utcnow() with datetime.now(timezone.utc)
- Add SessionTabBar Textual widget with per-session state indicators
  ( working, > awaiting_input, none for idle) and active-session bracketing
- Export SessionTabBar in widgets __init__.py
- Update CHANGELOG.md under [Unreleased] / Added
- Update CONTRIBUTORS.md with contribution entry + fix stale <<* typo
- Add 8 BDD scenarios (features/tui_session_persistence_tabs.feature)

ISSUES CLOSED: #10593
2026-05-07 09:28:10 +00:00