chore(core): address bot findings on extraction follow-up

- Add __all__ to all re-export shims (crewai.{settings,constants,utilities.{
  version,paths,printer,lock_store,constants,project_utils},auth.token_manager,
  events.utils.console_formatter}, crewai_cli.{config,shared.token_manager},
  crewai_cli.utils) to silence CodeQL "unused import" findings — the imports
  are the module's public API.
- Migrate three CLI internal callers (cli.py, authentication/main.py,
  authentication/token.py) off the deprecated crewai_cli.shared.token_manager
  shim, importing crewai_core.token_manager directly. Avoids a self-imposed
  DeprecationWarning on every CLI startup.
- Add Telemetry._safe_telemetry_procedure for void operations; switch the
  CLI-facing span methods (deploy/template/flow_creation/signup, _add_attribute)
  off _safe_telemetry_operation since they don't return a span.
- Delete unused crewai_cli.utils.update_env_vars (had a latent type-cast bug
  and zero callers).
This commit is contained in:
Greyson Lalonde
2026-05-05 20:59:42 +08:00
parent fb045534aa
commit 832fdb7c5d
17 changed files with 136 additions and 49 deletions

View File

@@ -2,13 +2,13 @@ import time
from typing import TYPE_CHECKING, Any, TypeVar, cast
import webbrowser
from crewai_core.token_manager import TokenManager
import httpx
from pydantic import BaseModel, Field
from rich.console import Console
from crewai_cli.authentication.utils import validate_jwt_token
from crewai_cli.config import Settings
from crewai_cli.shared.token_manager import TokenManager
console = Console()

View File

@@ -1,4 +1,4 @@
from crewai_cli.shared.token_manager import TokenManager
from crewai_core.token_manager import TokenManager
class AuthError(Exception):

View File

@@ -6,6 +6,7 @@ import subprocess
from typing import Any
import click
from crewai_core.token_manager import TokenManager
from crewai_cli.add_crew_to_flow import add_crew_to_flow
from crewai_cli.authentication.main import AuthenticationCommand
@@ -25,7 +26,6 @@ from crewai_cli.replay_from_task import replay_task_command
from crewai_cli.reset_memories_command import reset_memories_command
from crewai_cli.run_crew import run_crew
from crewai_cli.settings.main import SettingsCommand
from crewai_cli.shared.token_manager import TokenManager
from crewai_cli.task_outputs import load_task_outputs
from crewai_cli.tools.main import ToolCommand
from crewai_cli.train_crew import train_crew

View File

@@ -16,3 +16,15 @@ from crewai_core.settings import (
Settings as Settings,
get_writable_config_path as get_writable_config_path,
)
__all__ = [
"CLI_SETTINGS_KEYS",
"DEFAULT_CLI_SETTINGS",
"DEFAULT_CONFIG_PATH",
"HIDDEN_SETTINGS_KEYS",
"READONLY_SETTINGS_KEYS",
"USER_SETTINGS_KEYS",
"Settings",
"get_writable_config_path",
]

View File

@@ -7,6 +7,9 @@ import warnings
from crewai_core.token_manager import TokenManager as TokenManager
__all__ = ["TokenManager"]
warnings.warn(
"crewai_cli.shared.token_manager is deprecated; "
"import from crewai_core.token_manager.",

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
import os
from pathlib import Path
import shutil
from typing import Any, cast
from typing import Any
import click
from crewai_core.project import (
@@ -21,7 +21,22 @@ from crewai_core.tool_credentials import (
)
from rich.console import Console
from crewai_cli.constants import ENV_VARS
__all__ = [
"build_env_with_all_tool_credentials",
"build_env_with_tool_repository_credentials",
"copy_template",
"fetch_and_json_env_file",
"get_project_description",
"get_project_name",
"get_project_version",
"load_env_vars",
"parse_toml",
"read_toml",
"tree_copy",
"tree_find_and_replace",
"write_env_file",
]
console = Console()
@@ -116,41 +131,6 @@ def load_env_vars(folder_path: Path) -> dict[str, Any]:
return env_vars
def update_env_vars(
env_vars: dict[str, Any], provider: str, model: str
) -> dict[str, Any] | None:
"""Updates environment variables with the API key for the selected provider and model."""
provider_config = cast(
list[str],
ENV_VARS.get(
provider,
[
click.prompt(
f"Enter the environment variable name for your {provider.capitalize()} API key",
type=str,
)
],
),
)
api_key_var = provider_config[0]
if api_key_var not in env_vars:
try:
env_vars[api_key_var] = click.prompt(
f"Enter your {provider.capitalize()} API key", type=str, hide_input=True
)
except click.exceptions.Abort:
click.secho("Operation aborted by the user.", fg="red")
return None
else:
click.secho(f"API key already exists for {provider.capitalize()}.", fg="yellow")
env_vars["MODEL"] = model
click.secho(f"Selected model: {model}", fg="green")
return env_vars
def write_env_file(folder_path: Path, env_vars: dict[str, Any]) -> None:
"""Writes environment variables to a .env file in the specified folder."""
env_file_path = folder_path / ".env"