methodproof 0.7.33__tar.gz → 0.7.35__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {methodproof-0.7.33 → methodproof-0.7.35}/CHANGELOG.md +22 -0
  2. {methodproof-0.7.33 → methodproof-0.7.35}/PKG-INFO +24 -1
  3. {methodproof-0.7.33 → methodproof-0.7.35}/README.md +23 -0
  4. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/cli.py +3 -1
  5. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/store.py +8 -0
  6. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/sync.py +11 -3
  7. methodproof-0.7.35/methodproof/tui/start.py +748 -0
  8. {methodproof-0.7.33 → methodproof-0.7.35}/pyproject.toml +1 -1
  9. methodproof-0.7.33/methodproof/tui/start.py +0 -436
  10. {methodproof-0.7.33 → methodproof-0.7.35}/.github/workflows/ci.yml +0 -0
  11. {methodproof-0.7.33 → methodproof-0.7.35}/.gitignore +0 -0
  12. {methodproof-0.7.33 → methodproof-0.7.35}/LICENSE +0 -0
  13. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/__init__.py +0 -0
  14. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/__main__.py +0 -0
  15. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/_daemon.py +0 -0
  16. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/agents/__init__.py +0 -0
  17. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/agents/base.py +0 -0
  18. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/agents/music.py +0 -0
  19. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/agents/terminal.py +0 -0
  20. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/agents/watcher.py +0 -0
  21. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/analysis.py +0 -0
  22. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/binding.py +0 -0
  23. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/bip39.py +0 -0
  24. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/bridge.py +0 -0
  25. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/config.py +0 -0
  26. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/crypto.py +0 -0
  27. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/e2e.py +0 -0
  28. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/graph.py +0 -0
  29. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hook.py +0 -0
  30. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/__init__.py +0 -0
  31. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/claude_code.py +0 -0
  32. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/claude_code.sh +0 -0
  33. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/cline_hook.sh +0 -0
  34. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/codex_hook.sh +0 -0
  35. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/gemini_hook.sh +0 -0
  36. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/install.py +0 -0
  37. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/kiro_hook.sh +0 -0
  38. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/mcp_register.py +0 -0
  39. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/openclaw/HOOK.md +0 -0
  40. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/openclaw/handler.ts +0 -0
  41. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/openclaw_install.py +0 -0
  42. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/opencode_plugin.js +0 -0
  43. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/hooks/wrappers.py +0 -0
  44. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/integrity.py +0 -0
  45. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/kdf.py +0 -0
  46. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/keychain.py +0 -0
  47. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/live.py +0 -0
  48. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/lock.py +0 -0
  49. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/mcp.py +0 -0
  50. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/migrate_db.py +0 -0
  51. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/proxy.py +0 -0
  52. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/proxy_daemon.py +0 -0
  53. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/repos.py +0 -0
  54. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/skills/methodproof/SKILL.md +0 -0
  55. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/__init__.py +0 -0
  56. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/consent.py +0 -0
  57. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/init.py +0 -0
  58. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/log.py +0 -0
  59. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/login_success.py +0 -0
  60. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/review.py +0 -0
  61. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/status.py +0 -0
  62. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/tui/theme.py +0 -0
  63. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/viewer.py +0 -0
  64. {methodproof-0.7.33 → methodproof-0.7.35}/methodproof/wordlist.py +0 -0
  65. {methodproof-0.7.33 → methodproof-0.7.35}/test_windows_compat.py +0 -0
  66. {methodproof-0.7.33 → methodproof-0.7.35}/tests/__init__.py +0 -0
  67. {methodproof-0.7.33 → methodproof-0.7.35}/tests/conftest.py +0 -0
  68. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_analysis.py +0 -0
  69. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_auth.py +0 -0
  70. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_config.py +0 -0
  71. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_helpers.py +0 -0
  72. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_session.py +0 -0
  73. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_share.py +0 -0
  74. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_start.py +0 -0
  75. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_cli_update.py +0 -0
  76. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_e2e_integration.py +0 -0
  77. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_graph.py +0 -0
  78. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_hooks.py +0 -0
  79. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_live.py +0 -0
  80. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_openclaw_hooks.py +0 -0
  81. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_profiles.py +0 -0
  82. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_security.py +0 -0
  83. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_store.py +0 -0
  84. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_sync.py +0 -0
  85. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_viewer.py +0 -0
  86. {methodproof-0.7.33 → methodproof-0.7.35}/tests/test_wrappers.py +0 -0
  87. {methodproof-0.7.33 → methodproof-0.7.35}/uv.lock +0 -0
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.35] — 2026-04-12
4
+
5
+ ### Added
6
+ - **10 TUI controls for `mp start`** — `j` journal toggle, `f` event filter cycle (all/ai_input/ai_output/human/verify), `s` scroll lock, `/` feed search, `tab` sidebar cycle (stats/files/tools), `t` tree collapse (hides chain inners, shows `+N` on closer), `d` timestamp format cycle (clock/relative/elapsed), `c` copy last event to clipboard, `enter` event detail modal, `m` quiet mode (hides dim events). All modes shown as badges in the session bar.
7
+ - **Structural analysis summary on `user_prompt` events** — main line now shows `prompt_summary` from the 35-dimension analysis (e.g. `[instruction/synthesis] refactor auth — DI`) instead of just char count.
8
+ - **Multi-line journal output** — `user_prompt` shows full prompt text wrapped at 100 chars. `agent_complete` shows up to 500 chars / 8 lines preserving natural line breaks. Other event types remain single-line at 120 char cap.
9
+
10
+ ## [0.7.34] — 2026-04-12
11
+
12
+ ### Fixed
13
+ - **`mp push` after mid-session push was permanently blocked** — pushing an active session marked it as synced. After stopping, additional events existed locally but could never be uploaded. Now: if a session was pushed while active and is now completed, `mp push` automatically re-pushes the full session. For already-completed sessions, `mp push --force` re-uploads all events.
14
+
15
+ ## [0.7.33] — 2026-04-12
16
+
17
+ ### Added
18
+ - **KINMYAKU theme palette**: `Palette` frozen dataclass replaces flat hex constants in `tui/theme.py`. Dark-adjusted colors from METHODPROOF.md spec — purple, green, red, dim all shifted for proper contrast on dark backgrounds. Five semantic roles (`ai_input`, `ai_output`, `human`, `verify`, `moment`) so TUI code reads intent, not hex. Backward-compatible re-exports — all existing imports unchanged.
19
+ - **Rich structural formatting for all 42 event types**: `mp start` feed now shows curated one-liners for every event type. `tool_call` → `Edit app/core/auth.py`, `tool_result` → `Edit ✓`, `agent_launch` → `explorer spawned`, etc. Previously only 8 types had formatters; the rest showed raw key dumps or nothing.
20
+ - **Causal chain tree indentation**: Prompt→tool_call→tool_result chains render with Unicode box-drawing characters (`├`, `│`, `└`) in gold-ember. Non-AI events (file edits, tests, commits) appear at root level. Mirrors the Neo4j graph structure during live capture.
21
+ - **Journal mode content enrichment**: When journal is ON, a second dim line appears below events carrying content fields — truncated prompt text, tool results, diffs. Quoted and indented with a `│` gutter. When journal is OFF, these lines don't exist.
22
+ - **Enriched session bar**: Now shows running event count and a gold `J` badge when journal mode is active.
23
+ - **Moment alert wiring**: `_show_moment()` (previously dead code) now fires when known moment types appear in the event stream.
24
+
3
25
  ## [0.7.32] — 2026-04-12
4
26
 
5
27
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodproof
3
- Version: 0.7.33
3
+ Version: 0.7.35
4
4
  Summary: See how you code. Capture and visualize your engineering process.
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -69,6 +69,29 @@ methodproof view # explore your session in the browser
69
69
  - **Auto-detection** — hooks for shell, Claude Code, OpenClaw, codex, gemini, aider installed automatically
70
70
  - **Platform sync** — `methodproof push` uploads sessions. `methodproof publish` makes them public and shareable
71
71
 
72
+ ## Live Session TUI
73
+
74
+ `mp start` launches a rich terminal UI that streams captured events in real-time. Events are color-coded by role (purple = AI input, gold = AI output, cream = human, green = verification) and indented into causal chains with Unicode tree characters.
75
+
76
+ ### Controls
77
+
78
+ | Key | Action | Description |
79
+ |-----|--------|-------------|
80
+ | `j` | Journal toggle | Show/hide full content lines (prompts, completions, diffs) mid-session |
81
+ | `f` | Filter cycle | All → AI input → AI output → Human → Verify |
82
+ | `s` | Scroll lock | Freeze scroll position while events buffer; release snaps to bottom |
83
+ | `/` | Search | Filter feed — non-matching lines render dimmed |
84
+ | `tab` | Sidebar cycle | Stats → Recent files → Recent tools |
85
+ | `t` | Tree collapse | Hide chain inners, show `+N` count on closer |
86
+ | `d` | Timestamp format | Clock (`12:34:56`) → Relative (`+1.2s`) → Elapsed (`45.3s`) |
87
+ | `c` | Copy last event | Full JSON metadata to clipboard |
88
+ | `enter` | Event detail | Modal overlay with all metadata fields |
89
+ | `m` | Quiet mode | Hide dim events (music, environment, MCP, context compaction) |
90
+ | `p` | Pause | Pause/resume event polling |
91
+ | `q` | Stop | Stop the session |
92
+
93
+ Active modes display as badges in the session bar: `J` (journal), `⏸` (scroll locked), `Q` (quiet), `T` (tree collapsed), filter name when not "all".
94
+
72
95
  ## Security Architecture
73
96
 
74
97
  Every event passes through consent gating, encryption, and hash chaining before touching disk. The platform adds a server co-signature on push, creating two-party evidence.
@@ -52,6 +52,29 @@ methodproof view # explore your session in the browser
52
52
  - **Auto-detection** — hooks for shell, Claude Code, OpenClaw, codex, gemini, aider installed automatically
53
53
  - **Platform sync** — `methodproof push` uploads sessions. `methodproof publish` makes them public and shareable
54
54
 
55
+ ## Live Session TUI
56
+
57
+ `mp start` launches a rich terminal UI that streams captured events in real-time. Events are color-coded by role (purple = AI input, gold = AI output, cream = human, green = verification) and indented into causal chains with Unicode tree characters.
58
+
59
+ ### Controls
60
+
61
+ | Key | Action | Description |
62
+ |-----|--------|-------------|
63
+ | `j` | Journal toggle | Show/hide full content lines (prompts, completions, diffs) mid-session |
64
+ | `f` | Filter cycle | All → AI input → AI output → Human → Verify |
65
+ | `s` | Scroll lock | Freeze scroll position while events buffer; release snaps to bottom |
66
+ | `/` | Search | Filter feed — non-matching lines render dimmed |
67
+ | `tab` | Sidebar cycle | Stats → Recent files → Recent tools |
68
+ | `t` | Tree collapse | Hide chain inners, show `+N` count on closer |
69
+ | `d` | Timestamp format | Clock (`12:34:56`) → Relative (`+1.2s`) → Elapsed (`45.3s`) |
70
+ | `c` | Copy last event | Full JSON metadata to clipboard |
71
+ | `enter` | Event detail | Modal overlay with all metadata fields |
72
+ | `m` | Quiet mode | Hide dim events (music, environment, MCP, context compaction) |
73
+ | `p` | Pause | Pause/resume event polling |
74
+ | `q` | Stop | Stop the session |
75
+
76
+ Active modes display as badges in the session bar: `J` (journal), `⏸` (scroll locked), `Q` (quiet), `T` (tree collapsed), filter name when not "all".
77
+
55
78
  ## Security Architecture
56
79
 
57
80
  Every event passes through consent gating, encryption, and hash chaining before touching disk. The platform adds a server co-signature on push, creating two-party evidence.
@@ -1793,7 +1793,8 @@ def cmd_push(args: argparse.Namespace) -> None:
1793
1793
  print("No sessions to push.")
1794
1794
  sys.exit(1)
1795
1795
  from methodproof.sync import push
1796
- remote_id = push(sid, cfg["token"], cfg["api_url"])
1796
+ force = getattr(args, "force", False)
1797
+ remote_id = push(sid, cfg["token"], cfg["api_url"], force=force)
1797
1798
  app = _app_url(cfg["api_url"])
1798
1799
  print(f"Pushed {sid[:8]} → {cfg['api_url']} (private).")
1799
1800
  print(f" View: {app}/personal/sessions/{remote_id}")
@@ -2222,6 +2223,7 @@ def main() -> None:
2222
2223
  sw.add_argument("account", nargs="?", help="Email or account ID prefix")
2223
2224
  pu = sub.add_parser("push", help="Upload privately to your account")
2224
2225
  pu.add_argument("session_id", nargs="?")
2226
+ pu.add_argument("--force", "-f", action="store_true", help="Re-upload all events (replaces previous push)")
2225
2227
  pu.add_argument("--local", action="store_true", help="Push to local dev API (localhost:8000)")
2226
2228
  tg = sub.add_parser("tag", help="Tag a session")
2227
2229
  tg.add_argument("session_id", help="Session ID (prefix ok)")
@@ -389,3 +389,11 @@ def mark_synced(session_id: str, remote_id: str) -> None:
389
389
  (remote_id, session_id),
390
390
  )
391
391
  _db().commit()
392
+
393
+
394
+ def clear_sync(session_id: str) -> None:
395
+ _db().execute(
396
+ "UPDATE sessions SET synced = 0, remote_id = NULL WHERE id = ?",
397
+ (session_id,),
398
+ )
399
+ _db().commit()
@@ -84,14 +84,22 @@ def _request(
84
84
  raise SystemExit(f"API error {exc.code}: {detail}") from None
85
85
 
86
86
 
87
- def push(session_id: str, token: str, api_url: str) -> str:
87
+ def push(session_id: str, token: str, api_url: str, force: bool = False) -> str:
88
88
  """Upload a local session to the platform."""
89
89
  session = store.get_session(session_id)
90
90
  if not session:
91
91
  raise SystemExit(f"Session not found: {session_id}")
92
92
  if session["synced"]:
93
- print(f"Already synced: {session_id[:8]}")
94
- return session.get("remote_id", "")
93
+ if force:
94
+ print(f"Force re-push: {session_id[:8]}")
95
+ store.clear_sync(session_id)
96
+ elif not session.get("completed_at"):
97
+ print(f"Session was pushed while still active — re-pushing complete session.")
98
+ store.clear_sync(session_id)
99
+ else:
100
+ print(f"Already synced: {session_id[:8]}")
101
+ print(f" (Use `mp push --force` to re-upload all events)")
102
+ return session.get("remote_id", "")
95
103
 
96
104
  # Create remote session (include binding + device_id if available)
97
105
  print("Creating remote session...", end=" ", flush=True)