Commit Graph

13 Commits

Author SHA1 Message Date
2653b5a0ee Make vertical timeline more compact with smaller nodes
Reduces font sizes, padding, spacing, and note truncation length
specifically for vertical (TB) mode to improve usability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:02:28 +01:00
87ed2f1dfb Merge timeline tabs into single polished tab with adaptive scaling
Combine stable and WIP timeline tabs into one with all features:
view switcher, restore/rename/delete, and data preview panel.
Add adaptive graph spacing based on node count, show full dates
and branch names on node labels, increase label truncation to 25
chars, and drop streamlit-agraph dependency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 13:10:23 +01:00
b02bf124fb Add atomic writes, magic string constants, unit tests, type hints, and fix navigation
- save_json() now writes to a temp file then uses os.replace() for atomic writes
- Replace hardcoded "batch_data", "history_tree", "prompt_history", "sequence_number"
  strings with constants (KEY_BATCH_DATA, etc.) across all modules
- Add 29 unit tests for history_tree, utils, and json_loader
- Add type hints to public functions in utils.py, json_loader.py, history_tree.py
- Remove ALLOWED_BASE_DIR restriction that blocked navigating outside app CWD
- Fix path text input not updating on navigation by using session state key
- Add unpin button () for removing pinned folders

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:44:31 +01:00
326ae25ab2 Fix critical bugs, security issues, and code quality across all modules
- Replace bare except clauses with specific exceptions (JSONDecodeError, IOError, ValueError, TypeError)
- Add path traversal protection restricting navigation to ALLOWED_BASE_DIR
- Sanitize iframe URLs with scheme validation and html.escape to prevent XSS
- Extract duplicate to_float/to_int to module-level helpers in json_loader.py
- Replace silent modulo wrapping with clamped bounds checking via get_batch_item()
- Remove hardcoded IP 192.168.1.51:5800, default to empty string
- Add try/except around fragile batch history string parsing
- Add JSON schema validation (dict type check) in read_json_data()
- Add Python logging framework, replace print() calls
- Consolidate session state initialization into loop with defaults dict
- Guard streamlit_agraph import with try/except ImportError
- Add backup snapshot before history node deletion
- Add cycle detection in HistoryTree.commit()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:47:50 +01:00
ab973c6d58 Update history_tree.py 2026-01-03 01:00:35 +01:00
08955b2e0c Update history_tree.py 2026-01-02 16:09:33 +01:00
8f4f049fb8 Update history_tree.py 2026-01-02 13:34:50 +01:00
943f964f9b Update history_tree.py 2026-01-02 13:33:04 +01:00
244f0f44d7 Update history_tree.py 2026-01-02 13:29:37 +01:00
adccd601a5 Update history_tree.py 2026-01-02 13:25:53 +01:00
fe5abd6eb5 Create history_tree.py 2026-01-02 13:13:11 +01:00
6b4079176d Delete history_tree.py 2026-01-02 01:26:35 +01:00
c1ec676e2e Implement HistoryTree class for version control 2026-01-02 01:16:23 +01:00