methodproof 0.7.16__tar.gz → 0.7.18__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.16 → methodproof-0.7.18}/PKG-INFO +3 -4
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/__init__.py +1 -1
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/cli.py +27 -15
- {methodproof-0.7.16 → methodproof-0.7.18}/pyproject.toml +2 -3
- {methodproof-0.7.16 → methodproof-0.7.18}/.code-review-graph/.gitignore +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/.code-review-graph/graph.db +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/.github/workflows/ci.yml +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/.gitignore +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/CHANGELOG.md +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/LICENSE +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/README.md +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/__main__.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/_daemon.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/__init__.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/base.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/music.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/terminal.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/watcher.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/analysis.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/binding.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/bip39.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/bridge.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/config.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/crypto.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/e2e.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/graph.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hook.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/__init__.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/claude_code.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/claude_code.sh +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/cline_hook.sh +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/codex_hook.sh +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/gemini_hook.sh +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/install.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/kiro_hook.sh +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/mcp_register.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw/HOOK.md +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw/handler.ts +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw_install.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/opencode_plugin.js +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/wrappers.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/integrity.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/kdf.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/keychain.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/live.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/lock.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/mcp.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/migrate_db.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/proxy.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/proxy_daemon.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/repos.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/skills/methodproof/SKILL.md +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/store.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/sync.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/__init__.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/consent.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/init.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/log.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/review.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/start.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/status.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/theme.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/viewer.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/wordlist.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/test_windows_compat.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/__init__.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/conftest.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_analysis.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_auth.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_config.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_helpers.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_session.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_share.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_start.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_update.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_e2e_integration.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_graph.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_hooks.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_live.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_openclaw_hooks.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_profiles.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_security.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_store.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_sync.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_viewer.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_wrappers.py +0 -0
- {methodproof-0.7.16 → methodproof-0.7.18}/uv.lock +0 -0
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: methodproof
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.18
|
|
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
|
|
7
7
|
Requires-Python: >=3.11
|
|
8
8
|
Requires-Dist: cryptography>=43.0
|
|
9
9
|
Requires-Dist: keyring>=25.0
|
|
10
|
+
Requires-Dist: rich>=13.7
|
|
11
|
+
Requires-Dist: textual>=0.59
|
|
10
12
|
Requires-Dist: watchdog>=4.0
|
|
11
13
|
Requires-Dist: websocket-client>=1.7
|
|
12
14
|
Provides-Extra: proxy
|
|
13
15
|
Requires-Dist: mitmproxy>=10.0; extra == 'proxy'
|
|
14
|
-
Provides-Extra: ui
|
|
15
|
-
Requires-Dist: rich>=13.7; extra == 'ui'
|
|
16
|
-
Requires-Dist: textual>=0.59; extra == 'ui'
|
|
17
16
|
Description-Content-Type: text/markdown
|
|
18
17
|
|
|
19
18
|
<p align="center">
|
|
@@ -343,13 +343,9 @@ def cmd_init(args: argparse.Namespace) -> None:
|
|
|
343
343
|
needs_setup = not cfg.get("consent_acknowledged")
|
|
344
344
|
use_ui = needs_setup or _resolve_ui(args, cfg)
|
|
345
345
|
if use_ui:
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
tui_init(cfg)
|
|
350
|
-
return
|
|
351
|
-
except SystemExit:
|
|
352
|
-
pass # textual not installed — fall through to classic
|
|
346
|
+
from methodproof.tui.init import run as tui_init
|
|
347
|
+
tui_init(cfg)
|
|
348
|
+
return
|
|
353
349
|
|
|
354
350
|
if not cfg.get("consent_acknowledged"):
|
|
355
351
|
cfg = _run_consent(cfg)
|
|
@@ -1243,14 +1239,10 @@ def cmd_start(args: argparse.Namespace) -> None:
|
|
|
1243
1239
|
except Exception as exc:
|
|
1244
1240
|
print(f"Extension: not detected ({exc})")
|
|
1245
1241
|
if _resolve_ui(args, cfg):
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
tui_start(sid, session)
|
|
1251
|
-
return
|
|
1252
|
-
except SystemExit:
|
|
1253
|
-
pass # textual not installed — fall through to plain message
|
|
1242
|
+
session = store.get_session(sid)
|
|
1243
|
+
from methodproof.tui.start import run as tui_start
|
|
1244
|
+
tui_start(sid, session)
|
|
1245
|
+
return
|
|
1254
1246
|
print("Run `mp stop` to finish.")
|
|
1255
1247
|
return
|
|
1256
1248
|
|
|
@@ -1399,6 +1391,25 @@ def cmd_view(args: argparse.Namespace) -> None:
|
|
|
1399
1391
|
|
|
1400
1392
|
|
|
1401
1393
|
def cmd_log(args: argparse.Namespace) -> None:
|
|
1394
|
+
if getattr(args, "purge_empty", False):
|
|
1395
|
+
empty = [s for s in store.list_sessions() if s["total_events"] == 0]
|
|
1396
|
+
if not empty:
|
|
1397
|
+
print("No empty sessions.")
|
|
1398
|
+
return
|
|
1399
|
+
print(f"Found {len(empty)} empty session{'s' if len(empty) != 1 else ''}:")
|
|
1400
|
+
for s in empty:
|
|
1401
|
+
from datetime import datetime, UTC
|
|
1402
|
+
dt = datetime.fromtimestamp(s["created_at"], tz=UTC).strftime("%Y-%m-%d %H:%M")
|
|
1403
|
+
print(f" {s['id'][:8]} {dt} {s.get('watch_dir', '?')}")
|
|
1404
|
+
answer = input(f"\nDelete {len(empty)} empty session{'s' if len(empty) != 1 else ''}? [y/N]: ").strip().lower()
|
|
1405
|
+
if answer != "y":
|
|
1406
|
+
print("Cancelled.")
|
|
1407
|
+
return
|
|
1408
|
+
for s in empty:
|
|
1409
|
+
store.delete_session(s["id"])
|
|
1410
|
+
print(f"Deleted {len(empty)} empty session{'s' if len(empty) != 1 else ''}.")
|
|
1411
|
+
return
|
|
1412
|
+
|
|
1402
1413
|
cfg = config.load()
|
|
1403
1414
|
if _resolve_ui(args, cfg):
|
|
1404
1415
|
_tui_guard()
|
|
@@ -2117,6 +2128,7 @@ def main() -> None:
|
|
|
2117
2128
|
v = sub.add_parser("view", help="Inspect captured session data")
|
|
2118
2129
|
v.add_argument("session_id", nargs="?")
|
|
2119
2130
|
l_log = sub.add_parser("log", help="List sessions")
|
|
2131
|
+
l_log.add_argument("--purge-empty", action="store_true", help="Delete all sessions with 0 events")
|
|
2120
2132
|
_add_ui_flags(l_log)
|
|
2121
2133
|
s_status = sub.add_parser("status", help="Auth, session, and config status")
|
|
2122
2134
|
_add_ui_flags(s_status)
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "methodproof"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.18"
|
|
4
4
|
description = "See how you code. Capture and visualize your engineering process."
|
|
5
5
|
requires-python = ">=3.11"
|
|
6
|
-
dependencies = ["watchdog>=4.0", "websocket-client>=1.7", "cryptography>=43.0", "keyring>=25.0"]
|
|
6
|
+
dependencies = ["watchdog>=4.0", "websocket-client>=1.7", "cryptography>=43.0", "keyring>=25.0", "textual>=0.59", "rich>=13.7"]
|
|
7
7
|
license = "Apache-2.0"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
|
|
10
10
|
[project.optional-dependencies]
|
|
11
11
|
proxy = ["mitmproxy>=10.0"]
|
|
12
|
-
ui = ["textual>=0.59", "rich>=13.7"]
|
|
13
12
|
|
|
14
13
|
[dependency-groups]
|
|
15
14
|
dev = ["pytest>=8.0", "pytest-cov>=5.0"]
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|