methodproof 0.7.33__tar.gz → 0.7.34__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 (86) hide show
  1. {methodproof-0.7.33 → methodproof-0.7.34}/CHANGELOG.md +15 -0
  2. {methodproof-0.7.33 → methodproof-0.7.34}/PKG-INFO +1 -1
  3. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/cli.py +3 -1
  4. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/store.py +8 -0
  5. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/sync.py +11 -3
  6. {methodproof-0.7.33 → methodproof-0.7.34}/pyproject.toml +1 -1
  7. {methodproof-0.7.33 → methodproof-0.7.34}/.github/workflows/ci.yml +0 -0
  8. {methodproof-0.7.33 → methodproof-0.7.34}/.gitignore +0 -0
  9. {methodproof-0.7.33 → methodproof-0.7.34}/LICENSE +0 -0
  10. {methodproof-0.7.33 → methodproof-0.7.34}/README.md +0 -0
  11. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/__init__.py +0 -0
  12. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/__main__.py +0 -0
  13. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/_daemon.py +0 -0
  14. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/__init__.py +0 -0
  15. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/base.py +0 -0
  16. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/music.py +0 -0
  17. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/terminal.py +0 -0
  18. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/watcher.py +0 -0
  19. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/analysis.py +0 -0
  20. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/binding.py +0 -0
  21. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/bip39.py +0 -0
  22. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/bridge.py +0 -0
  23. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/config.py +0 -0
  24. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/crypto.py +0 -0
  25. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/e2e.py +0 -0
  26. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/graph.py +0 -0
  27. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hook.py +0 -0
  28. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/__init__.py +0 -0
  29. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/claude_code.py +0 -0
  30. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/claude_code.sh +0 -0
  31. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/cline_hook.sh +0 -0
  32. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/codex_hook.sh +0 -0
  33. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/gemini_hook.sh +0 -0
  34. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/install.py +0 -0
  35. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/kiro_hook.sh +0 -0
  36. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/mcp_register.py +0 -0
  37. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw/HOOK.md +0 -0
  38. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw/handler.ts +0 -0
  39. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw_install.py +0 -0
  40. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/opencode_plugin.js +0 -0
  41. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/wrappers.py +0 -0
  42. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/integrity.py +0 -0
  43. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/kdf.py +0 -0
  44. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/keychain.py +0 -0
  45. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/live.py +0 -0
  46. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/lock.py +0 -0
  47. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/mcp.py +0 -0
  48. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/migrate_db.py +0 -0
  49. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/proxy.py +0 -0
  50. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/proxy_daemon.py +0 -0
  51. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/repos.py +0 -0
  52. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/skills/methodproof/SKILL.md +0 -0
  53. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/__init__.py +0 -0
  54. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/consent.py +0 -0
  55. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/init.py +0 -0
  56. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/log.py +0 -0
  57. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/login_success.py +0 -0
  58. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/review.py +0 -0
  59. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/start.py +0 -0
  60. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/status.py +0 -0
  61. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/theme.py +0 -0
  62. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/viewer.py +0 -0
  63. {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/wordlist.py +0 -0
  64. {methodproof-0.7.33 → methodproof-0.7.34}/test_windows_compat.py +0 -0
  65. {methodproof-0.7.33 → methodproof-0.7.34}/tests/__init__.py +0 -0
  66. {methodproof-0.7.33 → methodproof-0.7.34}/tests/conftest.py +0 -0
  67. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_analysis.py +0 -0
  68. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_auth.py +0 -0
  69. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_config.py +0 -0
  70. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_helpers.py +0 -0
  71. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_session.py +0 -0
  72. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_share.py +0 -0
  73. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_start.py +0 -0
  74. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_update.py +0 -0
  75. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_e2e_integration.py +0 -0
  76. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_graph.py +0 -0
  77. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_hooks.py +0 -0
  78. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_live.py +0 -0
  79. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_openclaw_hooks.py +0 -0
  80. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_profiles.py +0 -0
  81. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_security.py +0 -0
  82. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_store.py +0 -0
  83. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_sync.py +0 -0
  84. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_viewer.py +0 -0
  85. {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_wrappers.py +0 -0
  86. {methodproof-0.7.33 → methodproof-0.7.34}/uv.lock +0 -0
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.34] — 2026-04-12
4
+
5
+ ### Fixed
6
+ - **`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.
7
+
8
+ ## [0.7.33] — 2026-04-12
9
+
10
+ ### Added
11
+ - **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.
12
+ - **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.
13
+ - **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.
14
+ - **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.
15
+ - **Enriched session bar**: Now shows running event count and a gold `J` badge when journal mode is active.
16
+ - **Moment alert wiring**: `_show_moment()` (previously dead code) now fires when known moment types appear in the event stream.
17
+
3
18
  ## [0.7.32] — 2026-04-12
4
19
 
5
20
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodproof
3
- Version: 0.7.33
3
+ Version: 0.7.34
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
@@ -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)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "methodproof"
3
- version = "0.7.33"
3
+ version = "0.7.34"
4
4
  description = "See how you code. Capture and visualize your engineering process."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = ["watchdog>=4.0", "websocket-client>=1.7", "cryptography>=43.0", "keyring>=25.0", "textual>=0.59", "rich>=13.7"]
File without changes
File without changes
File without changes
File without changes