minitest-cli 0.8.1__tar.gz → 0.8.2__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.
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/PKG-INFO +1 -1
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/pyproject.toml +1 -1
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/token_exchange.py +23 -2
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/utils/update_check.py +2 -2
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/uv.lock +1 -1
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.env.example +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.github/workflows/ci.yml +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.github/workflows/install-scripts.yml +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.github/workflows/release.yml +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.gitignore +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/.opencode/skill/release/SKILL.md +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/AGENTS.md +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/README.md +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/RELEASE.md +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/install.ps1 +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/install.sh +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/pyrightconfig.json +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/api/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/api/apps_manager_client.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/api/client.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/assets/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/assets/callback.html +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/app_knowledge.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/app_knowledge_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/apps.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/apps_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/auth.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/batch.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/batch_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/build.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/build_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/flow_types.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/maintenance_check.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/run.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/run_display.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/run_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/skill.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/upgrade.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/user_story.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/user_story_helpers.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/user_story_modify.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/app_context.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/auth.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/config.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/credentials.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/oauth.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/core/tenants.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/main.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/app.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/base.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/build.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/maintenance_check.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/story_run.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/models/user_story.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/utils/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/utils/output.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/utils/skill_refresh.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/__init__.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_app_knowledge_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_apps_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_auth.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_auth_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_batch_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_build_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_code_quality.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_flow_types_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_run_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_skill_command.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_upgrade_command.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_user_story_commands.py +0 -0
- {minitest_cli-0.8.1 → minitest_cli-0.8.2}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: minitest-cli
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.2
|
|
4
4
|
Summary: Minitest CLI – command-line interface for the Minitest testing platform
|
|
5
5
|
Project-URL: Homepage, https://minitap.ai/
|
|
6
6
|
Project-URL: Source, https://github.com/minitap-ai/minitest-cli
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import base64
|
|
6
|
+
import json
|
|
5
7
|
import sys
|
|
6
8
|
import time
|
|
7
9
|
from typing import Any, NoReturn
|
|
@@ -40,12 +42,21 @@ def parse_and_save_token_response(settings: Settings, data: dict[str, Any]) -> C
|
|
|
40
42
|
if not isinstance(user, dict):
|
|
41
43
|
user = {}
|
|
42
44
|
expires_in = data.get("expires_in", 3600)
|
|
45
|
+
|
|
46
|
+
user_id = user.get("id", "")
|
|
47
|
+
email = user.get("email", "")
|
|
48
|
+
|
|
49
|
+
if not email or not user_id:
|
|
50
|
+
claims = _decode_jwt_claims(data["access_token"])
|
|
51
|
+
user_id = user_id or claims.get("sub", "")
|
|
52
|
+
email = email or claims.get("email", "")
|
|
53
|
+
|
|
43
54
|
creds = Credentials(
|
|
44
55
|
access_token=data["access_token"],
|
|
45
56
|
refresh_token=data["refresh_token"],
|
|
46
57
|
expires_at=time.time() + int(expires_in),
|
|
47
|
-
user_id=
|
|
48
|
-
email=
|
|
58
|
+
user_id=user_id,
|
|
59
|
+
email=email,
|
|
49
60
|
)
|
|
50
61
|
save_credentials(settings, creds)
|
|
51
62
|
return creds
|
|
@@ -53,6 +64,16 @@ def parse_and_save_token_response(settings: Settings, data: dict[str, Any]) -> C
|
|
|
53
64
|
return None
|
|
54
65
|
|
|
55
66
|
|
|
67
|
+
def _decode_jwt_claims(token: str) -> dict[str, Any]:
|
|
68
|
+
"""Decode JWT payload without verification. Returns empty dict on failure."""
|
|
69
|
+
try:
|
|
70
|
+
payload = token.split(".")[1]
|
|
71
|
+
payload += "=" * (-len(payload) % 4)
|
|
72
|
+
return json.loads(base64.urlsafe_b64decode(payload))
|
|
73
|
+
except Exception: # noqa: BLE001
|
|
74
|
+
return {}
|
|
75
|
+
|
|
76
|
+
|
|
56
77
|
def register_oauth_client(supabase_url: str, redirect_uri: str) -> str:
|
|
57
78
|
"""Dynamically register an OAuth2 client with Supabase and return the client_id."""
|
|
58
79
|
register_url = f"{supabase_url}/auth/v1/oauth/clients/register"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""PyPI version check – cached for
|
|
1
|
+
"""PyPI version check – cached for 1 hour, non-blocking, max 2s timeout."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import shutil
|
|
@@ -13,7 +13,7 @@ from minitest_cli.core.config import Settings
|
|
|
13
13
|
from minitest_cli.utils.output import print_warning
|
|
14
14
|
|
|
15
15
|
CACHE_FILE_NAME = ".last_update_check"
|
|
16
|
-
CACHE_TTL_SECONDS =
|
|
16
|
+
CACHE_TTL_SECONDS = 3600
|
|
17
17
|
CHECK_TIMEOUT_SECONDS = 2.0
|
|
18
18
|
PYPI_URL = "https://pypi.org/pypi/minitest-cli/json"
|
|
19
19
|
|
|
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
|
{minitest_cli-0.8.1 → minitest_cli-0.8.2}/src/minitest_cli/commands/app_knowledge_helpers.py
RENAMED
|
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
|