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.
Files changed (87) hide show
  1. {methodproof-0.7.16 → methodproof-0.7.18}/PKG-INFO +3 -4
  2. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/__init__.py +1 -1
  3. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/cli.py +27 -15
  4. {methodproof-0.7.16 → methodproof-0.7.18}/pyproject.toml +2 -3
  5. {methodproof-0.7.16 → methodproof-0.7.18}/.code-review-graph/.gitignore +0 -0
  6. {methodproof-0.7.16 → methodproof-0.7.18}/.code-review-graph/graph.db +0 -0
  7. {methodproof-0.7.16 → methodproof-0.7.18}/.github/workflows/ci.yml +0 -0
  8. {methodproof-0.7.16 → methodproof-0.7.18}/.gitignore +0 -0
  9. {methodproof-0.7.16 → methodproof-0.7.18}/CHANGELOG.md +0 -0
  10. {methodproof-0.7.16 → methodproof-0.7.18}/LICENSE +0 -0
  11. {methodproof-0.7.16 → methodproof-0.7.18}/README.md +0 -0
  12. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/__main__.py +0 -0
  13. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/_daemon.py +0 -0
  14. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/__init__.py +0 -0
  15. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/base.py +0 -0
  16. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/music.py +0 -0
  17. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/terminal.py +0 -0
  18. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/agents/watcher.py +0 -0
  19. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/analysis.py +0 -0
  20. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/binding.py +0 -0
  21. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/bip39.py +0 -0
  22. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/bridge.py +0 -0
  23. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/config.py +0 -0
  24. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/crypto.py +0 -0
  25. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/e2e.py +0 -0
  26. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/graph.py +0 -0
  27. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hook.py +0 -0
  28. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/__init__.py +0 -0
  29. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/claude_code.py +0 -0
  30. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/claude_code.sh +0 -0
  31. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/cline_hook.sh +0 -0
  32. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/codex_hook.sh +0 -0
  33. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/gemini_hook.sh +0 -0
  34. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/install.py +0 -0
  35. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/kiro_hook.sh +0 -0
  36. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/mcp_register.py +0 -0
  37. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw/HOOK.md +0 -0
  38. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw/handler.ts +0 -0
  39. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/openclaw_install.py +0 -0
  40. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/opencode_plugin.js +0 -0
  41. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/hooks/wrappers.py +0 -0
  42. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/integrity.py +0 -0
  43. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/kdf.py +0 -0
  44. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/keychain.py +0 -0
  45. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/live.py +0 -0
  46. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/lock.py +0 -0
  47. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/mcp.py +0 -0
  48. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/migrate_db.py +0 -0
  49. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/proxy.py +0 -0
  50. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/proxy_daemon.py +0 -0
  51. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/repos.py +0 -0
  52. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/skills/methodproof/SKILL.md +0 -0
  53. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/store.py +0 -0
  54. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/sync.py +0 -0
  55. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/__init__.py +0 -0
  56. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/consent.py +0 -0
  57. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/init.py +0 -0
  58. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/log.py +0 -0
  59. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/review.py +0 -0
  60. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/start.py +0 -0
  61. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/status.py +0 -0
  62. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/tui/theme.py +0 -0
  63. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/viewer.py +0 -0
  64. {methodproof-0.7.16 → methodproof-0.7.18}/methodproof/wordlist.py +0 -0
  65. {methodproof-0.7.16 → methodproof-0.7.18}/test_windows_compat.py +0 -0
  66. {methodproof-0.7.16 → methodproof-0.7.18}/tests/__init__.py +0 -0
  67. {methodproof-0.7.16 → methodproof-0.7.18}/tests/conftest.py +0 -0
  68. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_analysis.py +0 -0
  69. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_auth.py +0 -0
  70. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_config.py +0 -0
  71. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_helpers.py +0 -0
  72. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_session.py +0 -0
  73. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_share.py +0 -0
  74. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_start.py +0 -0
  75. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_cli_update.py +0 -0
  76. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_e2e_integration.py +0 -0
  77. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_graph.py +0 -0
  78. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_hooks.py +0 -0
  79. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_live.py +0 -0
  80. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_openclaw_hooks.py +0 -0
  81. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_profiles.py +0 -0
  82. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_security.py +0 -0
  83. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_store.py +0 -0
  84. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_sync.py +0 -0
  85. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_viewer.py +0 -0
  86. {methodproof-0.7.16 → methodproof-0.7.18}/tests/test_wrappers.py +0 -0
  87. {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.16
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">
@@ -1,3 +1,3 @@
1
1
  """MethodProof — see how you code."""
2
2
 
3
- __version__ = "0.7.16"
3
+ __version__ = "0.7.18"
@@ -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
- try:
347
- _tui_guard()
348
- from methodproof.tui.init import run as tui_init
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
- try:
1247
- _tui_guard()
1248
- session = store.get_session(sid)
1249
- from methodproof.tui.start import run as tui_start
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.16"
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