methodproof 0.7.18__tar.gz → 0.7.19__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.18 → methodproof-0.7.19}/PKG-INFO +1 -1
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/__init__.py +1 -1
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/cli.py +20 -12
- methodproof-0.7.19/methodproof/tui/login_success.py +41 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/pyproject.toml +1 -1
- {methodproof-0.7.18 → methodproof-0.7.19}/.code-review-graph/.gitignore +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/.code-review-graph/graph.db +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/.github/workflows/ci.yml +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/.gitignore +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/CHANGELOG.md +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/LICENSE +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/README.md +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/__main__.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/_daemon.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/agents/__init__.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/agents/base.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/agents/music.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/agents/terminal.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/agents/watcher.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/analysis.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/binding.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/bip39.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/bridge.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/config.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/crypto.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/e2e.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/graph.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hook.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/__init__.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/claude_code.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/claude_code.sh +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/cline_hook.sh +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/codex_hook.sh +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/gemini_hook.sh +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/install.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/kiro_hook.sh +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/mcp_register.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/openclaw/HOOK.md +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/openclaw/handler.ts +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/openclaw_install.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/opencode_plugin.js +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/hooks/wrappers.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/integrity.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/kdf.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/keychain.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/live.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/lock.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/mcp.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/migrate_db.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/proxy.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/proxy_daemon.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/repos.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/skills/methodproof/SKILL.md +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/store.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/sync.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/__init__.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/consent.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/init.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/log.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/review.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/start.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/status.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/tui/theme.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/viewer.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/methodproof/wordlist.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/test_windows_compat.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/__init__.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/conftest.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_analysis.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_auth.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_config.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_helpers.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_session.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_share.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_start.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_cli_update.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_e2e_integration.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_graph.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_hooks.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_live.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_openclaw_hooks.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_profiles.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_security.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_store.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_sync.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_viewer.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/tests/test_wrappers.py +0 -0
- {methodproof-0.7.18 → methodproof-0.7.19}/uv.lock +0 -0
|
@@ -1646,13 +1646,15 @@ def cmd_login(args: argparse.Namespace) -> None:
|
|
|
1646
1646
|
api = args.api_url or cfg["api_url"]
|
|
1647
1647
|
|
|
1648
1648
|
if cfg.get("token") and not getattr(args, "force", False):
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1649
|
+
if getattr(args, "add", False):
|
|
1650
|
+
config.save_active_profile(cfg)
|
|
1651
|
+
else:
|
|
1652
|
+
current = cfg.get("email") or cfg.get("account_id", "")[:8] or "an account"
|
|
1653
|
+
print(f"Already logged in as {current}.")
|
|
1654
|
+
answer = input(" Switch accounts? [y/N]: ").strip().lower()
|
|
1655
|
+
if answer not in ("y", "yes"):
|
|
1656
|
+
return
|
|
1657
|
+
config.save_active_profile(cfg)
|
|
1656
1658
|
|
|
1657
1659
|
# Start device auth flow
|
|
1658
1660
|
result = _request("POST", "/auth/cli/start", api, "")
|
|
@@ -1661,6 +1663,9 @@ def cmd_login(args: argparse.Namespace) -> None:
|
|
|
1661
1663
|
user_code = result.get("user_code", "")
|
|
1662
1664
|
verification_url = result.get("verification_url", "")
|
|
1663
1665
|
|
|
1666
|
+
if getattr(args, "add", False):
|
|
1667
|
+
auth_url += ("&" if "?" in auth_url else "?") + "mode=add"
|
|
1668
|
+
|
|
1664
1669
|
print(f"\nOpening browser to sign in...\n")
|
|
1665
1670
|
print(f" {auth_url}\n")
|
|
1666
1671
|
if user_code and verification_url:
|
|
@@ -1692,11 +1697,13 @@ def cmd_login(args: argparse.Namespace) -> None:
|
|
|
1692
1697
|
_setup_master_key(cfg)
|
|
1693
1698
|
from methodproof.sync import sync_research_consent
|
|
1694
1699
|
sync_research_consent(cfg["token"], cfg["api_url"])
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
+
from methodproof.tui.login_success import run as show_success
|
|
1701
|
+
show_success(
|
|
1702
|
+
display_name=cfg.get("email") or cfg.get("account_id", "")[:8],
|
|
1703
|
+
email=cfg.get("email", ""),
|
|
1704
|
+
account_count=len(cfg.get("profiles", {})),
|
|
1705
|
+
added=getattr(args, "add", False),
|
|
1706
|
+
)
|
|
1700
1707
|
return
|
|
1701
1708
|
except Exception:
|
|
1702
1709
|
pass
|
|
@@ -2134,6 +2141,7 @@ def main() -> None:
|
|
|
2134
2141
|
_add_ui_flags(s_status)
|
|
2135
2142
|
l = sub.add_parser("login", help="Connect to platform")
|
|
2136
2143
|
l.add_argument("--api-url")
|
|
2144
|
+
l.add_argument("--add", action="store_true", help="Add another account to this device")
|
|
2137
2145
|
l.add_argument("--force", "-f", action="store_true", help="Skip switch-account prompt")
|
|
2138
2146
|
l.add_argument("--no-key", action="store_true", help="Skip master key generation (test accounts)")
|
|
2139
2147
|
sub.add_parser("logout", help="Clear login credentials (keeps consent and sessions)")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Rich success panel shown after mp login / mp login --add."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.panel import Panel
|
|
6
|
+
from rich.text import Text
|
|
7
|
+
|
|
8
|
+
from methodproof.tui.theme import BORDER, DIM, GOLD, GREEN, TEXT
|
|
9
|
+
|
|
10
|
+
_CONSOLE = Console()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def run(display_name: str, email: str, account_count: int, added: bool) -> None:
|
|
14
|
+
"""Render post-login success panel. Always shown regardless of ui_mode."""
|
|
15
|
+
body = Text()
|
|
16
|
+
body.append("✓ ", style=f"bold {GREEN}")
|
|
17
|
+
|
|
18
|
+
if added:
|
|
19
|
+
body.append("You have successfully added ", style=TEXT)
|
|
20
|
+
body.append(display_name, style=f"bold {TEXT}")
|
|
21
|
+
body.append(" authentication to your CLI.", style=TEXT)
|
|
22
|
+
else:
|
|
23
|
+
body.append("Signed in as ", style=TEXT)
|
|
24
|
+
body.append(display_name, style=f"bold {TEXT}")
|
|
25
|
+
body.append(".", style=TEXT)
|
|
26
|
+
|
|
27
|
+
if email and email != display_name:
|
|
28
|
+
body.append(f"\n {email}", style=DIM)
|
|
29
|
+
|
|
30
|
+
n = account_count
|
|
31
|
+
body.append(
|
|
32
|
+
f"\n\n {n} account{'s' if n != 1 else ''} on this device · ",
|
|
33
|
+
style=DIM,
|
|
34
|
+
)
|
|
35
|
+
body.append("mp switch", style=f"bold {GOLD}")
|
|
36
|
+
body.append(" to swap", style=DIM)
|
|
37
|
+
|
|
38
|
+
title = f"[{GOLD}] {'Added to CLI' if added else 'Logged In'} [/{GOLD}]"
|
|
39
|
+
_CONSOLE.print()
|
|
40
|
+
_CONSOLE.print(Panel(body, title=title, border_style=BORDER, padding=(0, 1)))
|
|
41
|
+
_CONSOLE.print()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "methodproof"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.19"
|
|
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", "textual>=0.59", "rich>=13.7"]
|
|
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
|