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.
- {methodproof-0.7.33 → methodproof-0.7.34}/CHANGELOG.md +15 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/PKG-INFO +1 -1
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/cli.py +3 -1
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/store.py +8 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/sync.py +11 -3
- {methodproof-0.7.33 → methodproof-0.7.34}/pyproject.toml +1 -1
- {methodproof-0.7.33 → methodproof-0.7.34}/.github/workflows/ci.yml +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/.gitignore +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/LICENSE +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/README.md +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/__init__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/__main__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/_daemon.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/__init__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/base.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/music.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/terminal.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/agents/watcher.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/analysis.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/binding.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/bip39.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/bridge.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/config.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/crypto.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/e2e.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/graph.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hook.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/__init__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/claude_code.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/claude_code.sh +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/cline_hook.sh +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/codex_hook.sh +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/gemini_hook.sh +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/install.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/kiro_hook.sh +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/mcp_register.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw/HOOK.md +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw/handler.ts +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/openclaw_install.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/opencode_plugin.js +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/hooks/wrappers.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/integrity.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/kdf.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/keychain.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/live.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/lock.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/mcp.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/migrate_db.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/proxy.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/proxy_daemon.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/repos.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/skills/methodproof/SKILL.md +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/__init__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/consent.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/init.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/log.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/login_success.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/review.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/start.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/status.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/tui/theme.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/viewer.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/methodproof/wordlist.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/test_windows_compat.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/__init__.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/conftest.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_analysis.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_auth.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_config.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_helpers.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_session.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_share.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_start.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_cli_update.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_e2e_integration.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_graph.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_hooks.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_live.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_openclaw_hooks.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_profiles.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_security.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_store.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_sync.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_viewer.py +0 -0
- {methodproof-0.7.33 → methodproof-0.7.34}/tests/test_wrappers.py +0 -0
- {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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
94
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|