methodproof 0.7.6__tar.gz → 0.7.7__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.6 → methodproof-0.7.7}/PKG-INFO +1 -1
  2. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/__init__.py +1 -1
  3. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/cli.py +86 -1
  4. {methodproof-0.7.6 → methodproof-0.7.7}/pyproject.toml +1 -1
  5. {methodproof-0.7.6 → methodproof-0.7.7}/.github/workflows/ci.yml +0 -0
  6. {methodproof-0.7.6 → methodproof-0.7.7}/.gitignore +0 -0
  7. {methodproof-0.7.6 → methodproof-0.7.7}/CHANGELOG.md +0 -0
  8. {methodproof-0.7.6 → methodproof-0.7.7}/LICENSE +0 -0
  9. {methodproof-0.7.6 → methodproof-0.7.7}/README.md +0 -0
  10. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/__main__.py +0 -0
  11. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/_daemon.py +0 -0
  12. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/agents/__init__.py +0 -0
  13. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/agents/base.py +0 -0
  14. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/agents/music.py +0 -0
  15. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/agents/terminal.py +0 -0
  16. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/agents/watcher.py +0 -0
  17. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/analysis.py +0 -0
  18. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/binding.py +0 -0
  19. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/bip39.py +0 -0
  20. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/bridge.py +0 -0
  21. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/config.py +0 -0
  22. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/crypto.py +0 -0
  23. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/e2e.py +0 -0
  24. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/graph.py +0 -0
  25. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hook.py +0 -0
  26. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/__init__.py +0 -0
  27. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/claude_code.py +0 -0
  28. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/claude_code.sh +0 -0
  29. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/cline_hook.sh +0 -0
  30. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/codex_hook.sh +0 -0
  31. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/gemini_hook.sh +0 -0
  32. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/install.py +0 -0
  33. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/kiro_hook.sh +0 -0
  34. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/mcp_register.py +0 -0
  35. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/openclaw/HOOK.md +0 -0
  36. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/openclaw/handler.ts +0 -0
  37. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/openclaw_install.py +0 -0
  38. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/opencode_plugin.js +0 -0
  39. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/hooks/wrappers.py +0 -0
  40. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/integrity.py +0 -0
  41. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/kdf.py +0 -0
  42. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/keychain.py +0 -0
  43. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/live.py +0 -0
  44. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/lock.py +0 -0
  45. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/mcp.py +0 -0
  46. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/migrate_db.py +0 -0
  47. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/proxy.py +0 -0
  48. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/proxy_daemon.py +0 -0
  49. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/repos.py +0 -0
  50. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/skills/methodproof/SKILL.md +0 -0
  51. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/store.py +0 -0
  52. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/sync.py +0 -0
  53. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/viewer.py +0 -0
  54. {methodproof-0.7.6 → methodproof-0.7.7}/methodproof/wordlist.py +0 -0
  55. {methodproof-0.7.6 → methodproof-0.7.7}/test_windows_compat.py +0 -0
  56. {methodproof-0.7.6 → methodproof-0.7.7}/tests/__init__.py +0 -0
  57. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_analysis.py +0 -0
  58. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_graph.py +0 -0
  59. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_hooks.py +0 -0
  60. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_live.py +0 -0
  61. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_openclaw_hooks.py +0 -0
  62. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_security.py +0 -0
  63. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_store.py +0 -0
  64. {methodproof-0.7.6 → methodproof-0.7.7}/tests/test_wrappers.py +0 -0
  65. {methodproof-0.7.6 → methodproof-0.7.7}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodproof
3
- Version: 0.7.6
3
+ Version: 0.7.7
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.6"
3
+ __version__ = "0.7.7"
@@ -1293,6 +1293,89 @@ def cmd_log(args: argparse.Namespace) -> None:
1293
1293
  print(f" {s['id'][:8]} {dt} {dur} {s['total_events']} events{suffix}")
1294
1294
 
1295
1295
 
1296
+ def cmd_status(args: argparse.Namespace) -> None:
1297
+ """Show auth, session, and config status at a glance."""
1298
+ from methodproof import __version__
1299
+ cfg = config.load()
1300
+ token = cfg.get("token", "")
1301
+ claims = _decode_jwt_claims(token) if token else {}
1302
+ sessions = store.list_sessions()
1303
+ active = cfg.get("active_session")
1304
+ capture = cfg.get("capture", {})
1305
+ enabled = [k for k, v in capture.items() if v]
1306
+
1307
+ print(f"\n methodproof v{__version__}")
1308
+ print(f" api: {cfg.get('api_url', '—')}\n")
1309
+
1310
+ # Auth
1311
+ if not token:
1312
+ print(" auth: not signed in")
1313
+ else:
1314
+ account_id = claims.get("user_id", "—")
1315
+ role = claims.get("role", "—")
1316
+ acct_type = claims.get("account_type", "—")
1317
+ exp = claims.get("exp", 0)
1318
+ if exp and time.time() > exp:
1319
+ expiry = "expired"
1320
+ elif exp:
1321
+ remaining = int(exp - time.time())
1322
+ hours = remaining // 3600
1323
+ mins = (remaining % 3600) // 60
1324
+ expiry = f"{hours}h {mins}m remaining"
1325
+ else:
1326
+ expiry = "unknown"
1327
+ print(f" auth: signed in")
1328
+ print(f" account: {account_id[:8]}...{account_id[-4:]}")
1329
+ print(f" role: {role} | type: {acct_type} | token: {expiry}")
1330
+ if claims.get("is_superadmin"):
1331
+ print(" superadmin: yes")
1332
+
1333
+ # Session
1334
+ print()
1335
+ if active:
1336
+ sess = store.get_session(active)
1337
+ if sess:
1338
+ dt = datetime.fromtimestamp(sess["created_at"], tz=UTC).strftime("%H:%M")
1339
+ print(f" session: RECORDING {active[:8]} started {dt} ({sess['total_events']} events)")
1340
+ else:
1341
+ print(f" session: RECORDING {active[:8]}")
1342
+ else:
1343
+ print(" session: idle")
1344
+
1345
+ # Local sessions
1346
+ total = len(sessions)
1347
+ unsynced = len([s for s in sessions if not s["synced"] and s.get("completed_at") and s["total_events"] > 0])
1348
+ print(f" local: {total} session{'s' if total != 1 else ''}", end="")
1349
+ if unsynced:
1350
+ print(f" ({unsynced} unsynced)")
1351
+ else:
1352
+ print()
1353
+
1354
+ # Capture config
1355
+ print(f"\n consent: {len(enabled)}/11 categories")
1356
+ full_spectrum = len(enabled) >= 10
1357
+ if full_spectrum:
1358
+ print(" spectrum: FULL")
1359
+
1360
+ # Modes
1361
+ modes = []
1362
+ if cfg.get("journal_mode"):
1363
+ credits = cfg.get("journal_credits", 0)
1364
+ modes.append(f"journal ({credits} credits)")
1365
+ if cfg.get("e2e_mode"):
1366
+ fp = cfg.get("e2e_fingerprint", "")
1367
+ modes.append(f"e2e ({fp[:8]})" if fp else "e2e")
1368
+ if modes:
1369
+ print(f" modes: {' | '.join(modes)}")
1370
+
1371
+ # Research
1372
+ if cfg.get("research_consent"):
1373
+ level = cfg.get("contribution_level", "structural")
1374
+ print(f" research: opted in ({level})")
1375
+
1376
+ print()
1377
+
1378
+
1296
1379
  def cmd_logout(args: argparse.Namespace) -> None:
1297
1380
  """Clear login credentials only. Keeps consent, sessions, and hooks."""
1298
1381
  cfg = config.load()
@@ -1779,6 +1862,7 @@ def main() -> None:
1779
1862
  v = sub.add_parser("view", help="Inspect captured session data")
1780
1863
  v.add_argument("session_id", nargs="?")
1781
1864
  sub.add_parser("log", help="List sessions")
1865
+ sub.add_parser("status", help="Auth, session, and config status")
1782
1866
  l = sub.add_parser("login", help="Connect to platform")
1783
1867
  l.add_argument("--api-url")
1784
1868
  l.add_argument("--force", "-f", action="store_true", help="Skip switch-account prompt")
@@ -1843,7 +1927,8 @@ def main() -> None:
1843
1927
  args = p.parse_args()
1844
1928
  cmds = {
1845
1929
  "init": cmd_init, "start": cmd_start, "stop": cmd_stop,
1846
- "view": cmd_view, "log": cmd_log, "login": cmd_login, "logout": cmd_logout,
1930
+ "view": cmd_view, "log": cmd_log, "status": cmd_status,
1931
+ "login": cmd_login, "logout": cmd_logout,
1847
1932
  "push": cmd_push, "tag": cmd_tag, "publish": cmd_publish,
1848
1933
  "delete": cmd_delete, "review": cmd_review, "consent": cmd_consent,
1849
1934
  "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.6"
3
+ version = "0.7.7"
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