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.
- {methodproof-0.7.1 → methodproof-0.7.3}/PKG-INFO +1 -1
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/__init__.py +1 -1
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/cli.py +32 -3
- {methodproof-0.7.1 → methodproof-0.7.3}/pyproject.toml +1 -1
- {methodproof-0.7.1 → methodproof-0.7.3}/.github/workflows/ci.yml +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/.gitignore +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/CHANGELOG.md +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/LICENSE +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/README.md +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/__main__.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/_daemon.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/__init__.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/base.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/music.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/terminal.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/agents/watcher.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/analysis.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/binding.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/bip39.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/bridge.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/config.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/crypto.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/e2e.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/graph.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hook.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/__init__.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/claude_code.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/claude_code.sh +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/cline_hook.sh +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/codex_hook.sh +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/gemini_hook.sh +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/install.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/kiro_hook.sh +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/mcp_register.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw/HOOK.md +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw/handler.ts +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/openclaw_install.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/opencode_plugin.js +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/hooks/wrappers.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/integrity.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/kdf.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/keychain.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/live.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/lock.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/mcp.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/migrate_db.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/proxy.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/proxy_daemon.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/repos.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/skills/methodproof/SKILL.md +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/store.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/sync.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/viewer.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/methodproof/wordlist.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/test_windows_compat.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/__init__.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_analysis.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_graph.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_hooks.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_live.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_openclaw_hooks.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_security.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_store.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/tests/test_wrappers.py +0 -0
- {methodproof-0.7.1 → methodproof-0.7.3}/uv.lock +0 -0
|
@@ -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
|
-
|
|
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.
|
|
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
|
|
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
|