methodproof 0.7.1__tar.gz → 0.7.3__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 (65) hide show
  1. {methodproof-0.7.1 → methodproof-0.7.3}/PKG-INFO +1 -1
  2. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/__init__.py +1 -1
  3. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/cli.py +32 -3
  4. {methodproof-0.7.1 → methodproof-0.7.3}/pyproject.toml +1 -1
  5. {methodproof-0.7.1 → methodproof-0.7.3}/.github/workflows/ci.yml +0 -0
  6. {methodproof-0.7.1 → methodproof-0.7.3}/.gitignore +0 -0
  7. {methodproof-0.7.1 → methodproof-0.7.3}/CHANGELOG.md +0 -0
  8. {methodproof-0.7.1 → methodproof-0.7.3}/LICENSE +0 -0
  9. {methodproof-0.7.1 → methodproof-0.7.3}/README.md +0 -0
  10. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/__main__.py +0 -0
  11. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/_daemon.py +0 -0
  12. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/__init__.py +0 -0
  13. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/base.py +0 -0
  14. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/music.py +0 -0
  15. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/terminal.py +0 -0
  16. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/watcher.py +0 -0
  17. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/analysis.py +0 -0
  18. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/binding.py +0 -0
  19. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/bip39.py +0 -0
  20. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/bridge.py +0 -0
  21. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/config.py +0 -0
  22. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/crypto.py +0 -0
  23. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/e2e.py +0 -0
  24. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/graph.py +0 -0
  25. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hook.py +0 -0
  26. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/__init__.py +0 -0
  27. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/claude_code.py +0 -0
  28. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/claude_code.sh +0 -0
  29. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/cline_hook.sh +0 -0
  30. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/codex_hook.sh +0 -0
  31. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/gemini_hook.sh +0 -0
  32. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/install.py +0 -0
  33. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/kiro_hook.sh +0 -0
  34. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/mcp_register.py +0 -0
  35. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw/HOOK.md +0 -0
  36. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw/handler.ts +0 -0
  37. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw_install.py +0 -0
  38. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/opencode_plugin.js +0 -0
  39. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/wrappers.py +0 -0
  40. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/integrity.py +0 -0
  41. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/kdf.py +0 -0
  42. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/keychain.py +0 -0
  43. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/live.py +0 -0
  44. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/lock.py +0 -0
  45. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/mcp.py +0 -0
  46. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/migrate_db.py +0 -0
  47. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/proxy.py +0 -0
  48. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/proxy_daemon.py +0 -0
  49. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/repos.py +0 -0
  50. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/skills/methodproof/SKILL.md +0 -0
  51. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/store.py +0 -0
  52. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/sync.py +0 -0
  53. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/viewer.py +0 -0
  54. {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/wordlist.py +0 -0
  55. {methodproof-0.7.1 → methodproof-0.7.3}/test_windows_compat.py +0 -0
  56. {methodproof-0.7.1 → methodproof-0.7.3}/tests/__init__.py +0 -0
  57. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_analysis.py +0 -0
  58. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_graph.py +0 -0
  59. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_hooks.py +0 -0
  60. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_live.py +0 -0
  61. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_openclaw_hooks.py +0 -0
  62. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_security.py +0 -0
  63. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_store.py +0 -0
  64. {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_wrappers.py +0 -0
  65. {methodproof-0.7.1 → methodproof-0.7.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodproof
3
- Version: 0.7.1
3
+ Version: 0.7.3
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
@@ -1,3 +1,3 @@
1
1
  """MethodProof — see how you code."""
2
2
 
3
- __version__ = "0.7.1"
3
+ __version__ = "0.7.3"
@@ -662,13 +662,15 @@ def cmd_reset(args: argparse.Namespace) -> None:
662
662
  if answer not in ("y", "yes"):
663
663
  print(" Cancelled.")
664
664
  return
665
- for key in ("token", "refresh_token", "email", "e2e_key"):
665
+ for key in ("token", "refresh_token", "email", "e2e_key",
666
+ "account_id", "last_auth_at", "master_key_fingerprint"):
666
667
  cfg[key] = config._DEFAULTS[key]
667
668
  for key in ("capture", "research_consent", "publish_redact", "consent_acknowledged",
668
669
  "journal_mode", "journal_credits", "auto_update", "auto_update_offered"):
669
670
  cfg[key] = config._DEFAULTS.get(key)
670
671
  config.save(cfg)
671
672
  cleared = ["login token", "refresh token", "email", "e2e key",
673
+ "account id", "master key fingerprint",
672
674
  "capture consent", "research consent", "redaction defaults",
673
675
  "journal mode", "auto-update"]
674
676
  print(" Cleared:")
@@ -1251,6 +1253,21 @@ def cmd_log(args: argparse.Namespace) -> None:
1251
1253
  print(f" {s['id'][:8]} {dt} {dur} {s['total_events']} events{suffix}")
1252
1254
 
1253
1255
 
1256
+ def cmd_logout(args: argparse.Namespace) -> None:
1257
+ """Clear login credentials only. Keeps consent, sessions, and hooks."""
1258
+ cfg = config.load()
1259
+ if not cfg.get("token"):
1260
+ print("Not logged in.")
1261
+ return
1262
+ old_email = cfg.get("email", "")
1263
+ old_account = cfg.get("account_id", "")[:8]
1264
+ for key in ("token", "refresh_token", "email", "account_id", "last_auth_at", "master_key_fingerprint"):
1265
+ cfg[key] = config._DEFAULTS.get(key, "")
1266
+ config.save(cfg)
1267
+ label = old_email or old_account or "account"
1268
+ print(f"Logged out ({label}). Run `mp login` to sign in again.")
1269
+
1270
+
1254
1271
  def cmd_login(args: argparse.Namespace) -> None:
1255
1272
  import webbrowser
1256
1273
  from methodproof.sync import _request
@@ -1258,6 +1275,13 @@ def cmd_login(args: argparse.Namespace) -> None:
1258
1275
  cfg = config.load()
1259
1276
  api = args.api_url or cfg["api_url"]
1260
1277
 
1278
+ if cfg.get("token") and not getattr(args, "force", False):
1279
+ current = cfg.get("email") or cfg.get("account_id", "")[:8] or "an account"
1280
+ print(f"Already logged in as {current}.")
1281
+ answer = input(" Switch accounts? [y/N]: ").strip().lower()
1282
+ if answer not in ("y", "yes"):
1283
+ return
1284
+
1261
1285
  # Start device auth flow
1262
1286
  result = _request("POST", "/auth/cli/start", api, "")
1263
1287
  code = result["code"]
@@ -1288,9 +1312,11 @@ def cmd_login(args: argparse.Namespace) -> None:
1288
1312
  claims = _decode_jwt_claims(poll["token"])
1289
1313
  cfg["account_id"] = claims.get("user_id", "")
1290
1314
  cfg["last_auth_at"] = time.time()
1315
+ cfg["master_key_fingerprint"] = "" # clear stale fingerprint from previous account
1291
1316
  config.save(cfg)
1292
1317
  print(" done.\n")
1293
- _setup_master_key(cfg)
1318
+ if not getattr(args, "no_key", False):
1319
+ _setup_master_key(cfg)
1294
1320
  from methodproof.sync import sync_research_consent
1295
1321
  sync_research_consent(cfg["token"], cfg["api_url"])
1296
1322
  print("Logged in. Run `methodproof push` to upload sessions.")
@@ -1713,6 +1739,9 @@ def main() -> None:
1713
1739
  sub.add_parser("log", help="List sessions")
1714
1740
  l = sub.add_parser("login", help="Connect to platform")
1715
1741
  l.add_argument("--api-url")
1742
+ l.add_argument("--force", "-f", action="store_true", help="Skip switch-account prompt")
1743
+ l.add_argument("--no-key", action="store_true", help="Skip master key generation (test accounts)")
1744
+ sub.add_parser("logout", help="Clear login credentials (keeps consent and sessions)")
1716
1745
  pu = sub.add_parser("push", help="Upload privately to your account")
1717
1746
  pu.add_argument("session_id", nargs="?")
1718
1747
  tg = sub.add_parser("tag", help="Tag a session")
@@ -1771,7 +1800,7 @@ def main() -> None:
1771
1800
  args = p.parse_args()
1772
1801
  cmds = {
1773
1802
  "init": cmd_init, "start": cmd_start, "stop": cmd_stop,
1774
- "view": cmd_view, "log": cmd_log, "login": cmd_login,
1803
+ "view": cmd_view, "log": cmd_log, "login": cmd_login, "logout": cmd_logout,
1775
1804
  "push": cmd_push, "tag": cmd_tag, "publish": cmd_publish,
1776
1805
  "delete": cmd_delete, "review": cmd_review, "consent": cmd_consent,
1777
1806
  "update": cmd_update, "lock": cmd_lock, "reset": cmd_reset, "uninstall": cmd_uninstall,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "methodproof"
3
- version = "0.7.1"
3
+ version = "0.7.3"
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"]
File without changes
File without changes
File without changes
File without changes
File without changes