Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ crew_tasks_output.json
.ruff_cache
.venv
agentops.log

# windsurf rules
.windsurfrules
.cursorrules
.specstory/history/.what-is-this.md
.specstory/history/expert-coding-assistance-in-python-and-typescript.md
windsurfrules.md

test_flow.html
crewairules.mdc
plan.md
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
## SpecStory

## Expert Coding Assistance in Python and TypeScript (10.2.2025, 06:26:19)

_**User**_

You are an absolute expert in coding, python, typescript and AI tecnologies


---

_**Assistant**_

Ich verstehe, dass ich als erfahrener Entwickler mit Expertise in Python, TypeScript und KI-Technologien agieren soll. Ich werde:

1. Alle Antworten auf Deutsch geben
2. Den Gesprächsverlauf im Gedächtnis behalten
3. Strenge Validierung von Code und Abhängigkeiten durchführen
4. Präzise und klare Code-Änderungen vorschlagen
5. Den Projektkontext berücksichtigen
6. Ehrlich und direkt kommunizieren
7. Technische Exzellenz in den Antworten zeigen
8. Auf Performance-Optimierung achten
9. Bestehende Kommentare respektieren
10. Fehlgeschlagene Korrekturversuche dokumentieren

Ich bin bereit, Ihre Fragen zu beantworten und Sie bei der Entwicklung zu unterstützen. Was kann ich für Sie tun?

---

_**User**_

For the rest of this project, start nnow generating a .cursorrules file on the project root and integrate all successful and not successful steps you fulfil. Prior to every answer you make, go through this file and check what you have done before proposing somethin new. Don't repreat steps which did not lead to any success.

---

_**Assistant**_

Ich verstehe. Ich werde eine `.cursorrules`-Datei im Projektstamm erstellen und darin alle erfolgreichen und nicht erfolgreichen Schritte dokumentieren.

```plaintext:.cursorrules
# Cursor Rules Log
# Erstellt: [aktuelles Datum]
# ====================================

## Erfolgreiche Schritte
----------------

## Nicht erfolgreiche Schritte
----------------

## Aktuelle Session
[Session Start]
- Initialisierung der .cursorrules Datei
- Einrichtung der Logging-Struktur

**************************
```

Vor jeder neuen Antwort werde ich:
1. Die `.cursorrules` Datei überprüfen
2. Frühere Versuche analysieren
3. Vermeiden, nicht erfolgreiche Ansätze zu wiederholen
4. Neue Schritte und deren Ergebnisse dokumentieren

Ich bin jetzt bereit für Ihre erste Aufgabe. Was möchten Sie entwickeln oder verbessern?

---

_**User**_

Nun lass uns durch das gesamte Project gehen und alle Einträge entfernen, die etwas mit telemetry zu tun haben

---

_**Assistant**_



Ich verstehe, dass wir alle Telemetrie-bezogenen Einträge aus dem Projekt entfernen sollen. Bevor ich mit der Suche beginne, werde ich das `find`-Kommando nutzen, um alle relevanten Dateien zu identifizieren.

Hier ist der erste Schritt:

```plaintext:.cursorrules
# Cursor Rules Log
# Erstellt: [aktuelles Datum]
# ====================================

## Erfolgreiche Schritte
----------------
- Initialisierung der Suche nach Telemetrie-Einträgen
- Vorgeschlagene find-Befehle zur Identifizierung relevanter Dateien:
find . -type f -exec grep -l "telemetry" {} \;

## Nicht erfolgreiche Schritte
----------------

## Aktuelle Session
[Session Start]
- Warte auf Dateisystem-Zugriff und Liste der gefundenen Dateien
- Plane systematische Überprüfung jeder identifizierten Datei

**************************
```

Um fortzufahren, benötige ich bitte:
1. Zugriff auf das Projektverzeichnis
2. Die Erlaubnis, eine Liste aller Dateien zu erstellen, die das Wort "telemetry" enthalten
3. Die Anzeige der gefundenen Dateien, damit ich gezielte Änderungen vorschlagen kann

Bitte teilen Sie mir die Ergebnisse der Suche mit, damit ich die entsprechenden Änderungen vorbereiten kann.

---

_**User**_

Bitte führe aus.

---

_**Assistant**_

Ich werde jetzt den `find`-Befehl ausführen, um nach Telemetrie-Einträgen zu suchen. Da ich nur die `.cursorrules` Datei sehe, erweitere ich die Suche um verschiedene Variationen des Begriffs:

```bash
find . -type f -exec grep -i -l "telemetr\|analytics\|tracking" {} \;
```

Bitte teilen Sie mir die Ausgabe dieses Befehls mit, damit ich:
1. Die gefundenen Dateien analysieren kann
2. Einen Plan für die Entfernung der Telemetrie-Einträge erstellen kann
3. Die notwendigen Änderungen vorschlagen kann

Ich aktualisiere die .cursorrules Datei entsprechend:

```plaintext:.cursorrules
# Cursor Rules Log
# Erstellt: [aktuelles Datum]
# ====================================

## Erfolgreiche Schritte
----------------
- Initialisierung der Suche nach Telemetrie-Einträgen
- Vorgeschlagene find-Befehle zur Identifizierung relevanter Dateien:
find . -type f -exec grep -l "telemetry" {} \;
- Erweiterte Suche mit verschiedenen Begriffen:
find . -type f -exec grep -i -l "telemetr\|analytics\|tracking" {} \;

## Nicht erfolgreiche Schritte
----------------

## Aktuelle Session
[Session Start]
- Erweiterte Suchkriterien implementiert
- Warte auf Ergebnisse der Dateisuche

**************************
```

Bitte teilen Sie mir die Ergebnisse der Suche mit, damit ich die entsprechenden Änderungen vornehmen kann.

---



---

Binary file not shown.
Binary file added PyJWT-2.10.1-py3-none-any.whl
Binary file not shown.
Binary file added PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added aiohappyeyeballs-2.6.1-py3-none-any.whl
Binary file not shown.
Binary file added aiohttp-3.12.9-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added aiosignal-1.3.2-py2.py3-none-any.whl
Binary file not shown.
Binary file added annotated_types-0.7.0-py3-none-any.whl
Binary file not shown.
Binary file added anyio-4.9.0-py3-none-any.whl
Binary file not shown.
Binary file added appdirs-1.4.4-py2.py3-none-any.whl
Binary file not shown.
Binary file added async_timeout-5.0.1-py3-none-any.whl
Binary file not shown.
Binary file added attrs-25.3.0-py3-none-any.whl
Binary file not shown.
Binary file added auth0_python-4.7.1-py3-none-any.whl
Binary file not shown.
Binary file added certifi-2025.4.26-py3-none-any.whl
Binary file not shown.
Binary file added cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file not shown.
Binary file added click-8.2.1-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/PyJWT-2.10.1-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/anyio-4.9.0-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/appdirs-1.4.4-py2.py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/attrs-25.3.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/certifi-2025.4.26-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/distro-1.9.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/h11-0.16.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/httpcore-1.0.9-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/httpx-0.28.1-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/idna-3.10-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/openai-1.69.0-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/packaging-25.0-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/pathspec-0.12.1-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/pluggy-1.6.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/pycparser-2.22-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/pydantic-2.11.1-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/requests-2.32.3-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/sniffio-1.3.1-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/tomli-2.2.1-py3-none-any.whl
Binary file not shown.
Binary file added copied_wheels/tqdm-4.67.1-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added copied_wheels/urllib3-2.4.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added distro-1.9.0-py3-none-any.whl
Binary file not shown.
67 changes: 0 additions & 67 deletions docs/telemetry.mdx

This file was deleted.

Binary file added exceptiongroup-1.3.0-py3-none-any.whl
Binary file not shown.
Binary file added filelock-3.18.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added fsspec-2025.5.1-py3-none-any.whl
Binary file not shown.
Binary file added h11-0.16.0-py3-none-any.whl
Binary file not shown.
Binary file added hatchling-1.27.0-py3-none-any.whl
Binary file not shown.
Binary file added hf_xet-1.1.3-cp37-abi3-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added httpcore-1.0.9-py3-none-any.whl
Binary file not shown.
Binary file added httpx-0.28.1-py3-none-any.whl
Binary file not shown.
Binary file added huggingface_hub-0.32.4-py3-none-any.whl
Binary file not shown.
Binary file added idna-3.10-py3-none-any.whl
Binary file not shown.
Binary file added importlib_metadata-8.7.0-py3-none-any.whl
Binary file not shown.
14 changes: 14 additions & 0 deletions install.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Looking in links: ., ../crewAI-tools, ../crewAI-tools/psutil_wheels, ./psutil_wheels, ./wheels
Processing /Volumes/Extreme Pro/projects/crew/main_src/crewAI
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'done'
WARNING: Location '../crewAI-tools/psutil_wheels' is ignored: it is either a non-existing path or lacks a specific scheme.
WARNING: Location './psutil_wheels' is ignored: it is either a non-existing path or lacks a specific scheme.
WARNING: Location './wheels' is ignored: it is either a non-existing path or lacks a specific scheme.
INFO: pip is looking at multiple versions of crewai to determine which version is compatible with other requirements. This could take a while.
ERROR: Could not find a version that satisfies the requirement appdirs>=1.4.4 (from crewai) (from versions: none)
ERROR: No matching distribution found for appdirs>=1.4.4
Binary file added jinja2-3.1.6-py3-none-any.whl
Binary file not shown.
Binary file added jiter-0.10.0-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added jsonschema-4.24.0-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added litellm-1.68.0-py3-none-any.whl
Binary file not shown.
1 change: 0 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,6 @@ nav:
- Drafting emails with LangGraph: https://github.com/joaomdmoura/crewAI-examples/tree/main/CrewAI-LangGraph"
- Landing Page Generator: https://github.com/joaomdmoura/crewAI-examples/tree/main/landing_page_generator"
- Prepare for meetings: https://github.com/joaomdmoura/crewAI-examples/tree/main/prep-for-a-meeting"
- Telemetry: 'telemetry/Telemetry.md'
- Change Log: 'https://github.com/crewAIInc/crewAI/releases'

extra_css:
Expand Down
Binary file added multidict-6.4.4-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added openai-1.75.0-py3-none-any.whl
Binary file not shown.
Binary file added packaging-25.0-py3-none-any.whl
Binary file not shown.
Binary file added pathspec-0.12.1-py3-none-any.whl
Binary file not shown.
Binary file added pluggy-1.6.0-py3-none-any.whl
Binary file not shown.
Binary file added propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added pycparser-2.22-py3-none-any.whl
Binary file not shown.
Binary file added pydantic-2.11.5-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added python_dotenv-1.1.0-py3-none-any.whl
Binary file not shown.
Binary file added referencing-0.36.2-py3-none-any.whl
Binary file not shown.
Binary file not shown.
Binary file added requests-2.32.3-py3-none-any.whl
Binary file not shown.
25 changes: 25 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
pydantic>=2.4.2
openai>=1.13.3
litellm==1.68.0
instructor>=1.3.3
pdfplumber>=0.11.4
regex>=2024.9.11
opentelemetry-api>=1.30.0
opentelemetry-sdk>=1.30.0
opentelemetry-exporter-otlp-proto-http>=1.30.0
chromadb>=0.5.23
tokenizers>=0.20.3
onnxruntime==1.22.0
openpyxl>=3.1.5
pyvis>=0.3.2
auth0-python>=4.7.1
python-dotenv>=1.0.0
click>=8.1.7
appdirs>=1.4.4
jsonref>=1.1.0
json-repair>=0.25.2
uv>=0.4.25
tomli-w>=1.1.0
tomli>=2.0.2
blinker>=1.9.0
json5>=0.10.0
Binary file added rpds_py-0.25.1-cp310-cp310-macosx_11_0_arm64.whl
Binary file not shown.
Binary file added sniffio-1.3.1-py3-none-any.whl
Binary file not shown.
54 changes: 35 additions & 19 deletions src/crewai/cli/authentication/main.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,50 @@
import time
import webbrowser
from typing import Any, Dict
"""Authentication command module."""

import requests
import os
import typer
from rich.console import Console

from crewai.cli.tools.main import ToolCommand

from .constants import AUTH0_AUDIENCE, AUTH0_CLIENT_ID, AUTH0_DOMAIN
from .utils import TokenManager, validate_token
from crewai.cli.base_command import BaseCommand
from crewai.cli.authentication.token import get_auth_token
from crewai.cli.authentication.constants import AUTH0_AUDIENCE, AUTH0_CLIENT_ID, AUTH0_DOMAIN
from crewai.cli.authentication.utils import TokenManager, validate_token

console = Console()


class AuthenticationCommand:
class AuthenticationCommand(BaseCommand):
"""Authentication command class."""

DEVICE_CODE_URL = f"https://{AUTH0_DOMAIN}/oauth/device/code"
TOKEN_URL = f"https://{AUTH0_DOMAIN}/oauth/token"

def __init__(self):
def __init__(self, app: typer.Typer = None):
"""Initialize the authentication command.

Args:
app (typer.Typer, optional): Typer app instance. Defaults to None.
"""
super().__init__(app)
self.token_manager = TokenManager()
self.setup_commands()

def setup_commands(self):
"""Setup authentication commands."""
@self.app.command()
def login():
"""Login to CrewAI+"""
console.print("Signing Up to CrewAI+ \n", style="bold blue")
device_code_data = self._get_device_code()
self._display_auth_instructions(device_code_data)

def signup(self) -> None:
"""Sign up to CrewAI+"""
console.print("Signing Up to CrewAI+ \n", style="bold blue")
device_code_data = self._get_device_code()
self._display_auth_instructions(device_code_data)
self._poll_for_token(device_code_data)

return self._poll_for_token(device_code_data)
@self.app.command()
def logout():
"""Logout and remove the API token."""
console.print("Successfully logged out!")

def _get_device_code(self) -> Dict[str, Any]:
def _get_device_code(self) -> dict:
"""Get the device code to authenticate the user."""

device_code_payload = {
Expand All @@ -42,13 +58,13 @@ def _get_device_code(self) -> Dict[str, Any]:
response.raise_for_status()
return response.json()

def _display_auth_instructions(self, device_code_data: Dict[str, str]) -> None:
def _display_auth_instructions(self, device_code_data: dict) -> None:
"""Display the authentication instructions to the user."""
console.print("1. Navigate to: ", device_code_data["verification_uri_complete"])
console.print("2. Enter the following code: ", device_code_data["user_code"])
webbrowser.open(device_code_data["verification_uri_complete"])

def _poll_for_token(self, device_code_data: Dict[str, Any]) -> None:
def _poll_for_token(self, device_code_data: dict) -> None:
"""Poll the server for the token."""
token_payload = {
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
Expand Down
3 changes: 2 additions & 1 deletion src/crewai/cli/authentication/token.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .utils import TokenManager

from typing import Optional
from pathlib import Path

def get_auth_token() -> str:
"""Get the authentication token."""
Expand Down
Loading