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
Binary file modified backend/Agents/AppAI/CodeBackend/Sessions/session_1.db
Binary file not shown.
499 changes: 332 additions & 167 deletions backend/Agents/AppAI/CodeBackend/ai.py

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,30 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
linux-headers-amd64 \
libssl-dev \
docker-compose \
&& rm -rf /var/lib/apt/lists/*

# Instalar Docker CLI
RUN apt-get update && apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release && \
mkdir -m 0755 -p /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && \
apt-get install -y docker-ce-cli docker-compose-plugin

RUN apt-get update && \
apt-get install -y curl && \
curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
apt-get install -y nodejs


RUN apt-get update && apt-get install -y \
ca-certificates \
curl \
Expand Down
Empty file.
45 changes: 45 additions & 0 deletions backend/Functions/autocreaterepo/autocreaterepo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from typing_extensions import TypedDict, Any
from agents import Agent, ModelSettings, function_tool, FileSearchTool, WebSearchTool, Runner
from datetime import datetime
import requests

class autocreaterepoData(TypedDict):
repo_owner: str
repo_name: str
description: str
githubtoken: str
private: bool

@function_tool
def autocreaterepo(data: autocreaterepoData):
try:
data_FINAL = data["data"]
repo_owner = data_FINAL["repo_owner"]
repo_name = data_FINAL["repo_name"]
description = data_FINAL["description"]
githubtoken = data_FINAL["githubtoken"]
private = data_FINAL["private"]
except Exception as eroo1:
print(eroo1)
repo_owner = data["repo_owner"]
repo_name = data["repo_name"]
description = data["description"]
githubtoken = data["githubtoken"]
private = data["private"]
repo_url = f"https://api.github.com/orgs/{repo_owner}/repos"
headers = {
"Authorization": f"token {githubtoken}",
"Accept": "application/vnd.github.v3+json"
}
repo_data = {
"name": repo_name,
"description": description,
"private": private
}
response = requests.post(repo_url, json=repo_data, headers=headers)
if response.status_code == 201:
print(f"Repositório {repo_name} criado com sucesso na organização {repo_owner}")
return {"status": "success", "message": f"Repositório {repo_name} criado com sucesso na organização {repo_owner}"}
else:
print(f"Falha ao criar o repositório. Status: {response.status_code}, Resposta: {response.json()}")
return {"status": "error", "message": response.json()}
17 changes: 13 additions & 4 deletions backend/Functions/autolistlocalproject/autolistlocalproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,28 @@ def ler_conteudos_arquivos(caminhos_arquivos):

class FunctionData(TypedDict):
path_project: str
show_contents: bool

@function_tool
def autolistlocalproject(data: FunctionData):
try:
data_FINAL = data["data"]
path_project = data_FINAL["path_project"]
show_contents = data_FINAL["show_contents"]
except Exception as eroo1:
print(eroo1)
path_project = data["path_project"]
show_contents = data["show_contents"]
caminhos_arquivos = listar_arquivos(path_project)
conteudos_arquivos = ler_conteudos_arquivos(caminhos_arquivos)
data = {
"paths": caminhos_arquivos,
"contents": conteudos_arquivos,
}
if show_contents == False:
data = {
"paths": caminhos_arquivos,
}
else:

data = {
"paths": caminhos_arquivos,
"contents": conteudos_arquivos,
}
return data
Empty file.
44 changes: 40 additions & 4 deletions backend/Models/postgreSQL.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from enum import Enum as PyEnum
from sqlalchemy import Text
from sqlalchemy.sql import func
from sqlalchemy.dialects.postgresql import JSON

TOKEN_DEFAULT_EXPIRES_DAYS = 30

Expand Down Expand Up @@ -51,23 +52,58 @@ class TaskStatus(PyEnum):
DONE = "done"
FAILED = "failed"

class TaskLog(db.Model):
__tablename__ = "task_logs"

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
task_id = db.Column(db.Integer, db.ForeignKey("backend_tasks.id"), nullable=False)
type = db.Column(db.String(32), default="info") # info, success, warning, error
message = db.Column(db.Text, nullable=False)
task_metadata = db.Column(JSON, nullable=True) # Qualquer dado extra, opcional
created_at = db.Column(db.DateTime(timezone=True), default=func.now())

class ApprovedProject(db.Model):
__tablename__ = "approved_projects"

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
task_id = db.Column(db.Integer, db.ForeignKey("backend_tasks.id"), nullable=False)
agent_id = db.Column(db.Integer, nullable=False)
approved_at = db.Column(db.DateTime(timezone=True), default=func.now())
amount_paid = db.Column(db.Float, nullable=False)
bonus_paid = db.Column(db.Float, default=0.0)
status = db.Column(db.String(32), default="completed") # completed, pending, failed


class BackendTask(db.Model):
__tablename__ = "backend_tasks"

id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
user_content = db.Column(db.Text, nullable=False)
category = db.Column(db.String(128), default="desenvolvimento")
commit_language = db.Column(db.String(128), default="pt")
priority = db.Column(db.Integer, default=1)

status = db.Column(db.String(128), default=TaskStatus.PENDING)
created_at = db.Column(db.DateTime(timezone=True), default=func.now())
completed_at = db.Column(db.DateTime(timezone=True), default=func.now())

commit_language = db.Column(db.String(128), default="pt")

title = db.Column(db.Text, nullable=True)
description = db.Column(db.Text, nullable=True)
category = db.Column(db.String(128), default="desenvolvimento")
price = db.Column(db.String(128), nullable=True)
priority = db.Column(db.Integer, default=1)
technologies = db.Column(db.String(128), nullable=True)
deadline = db.Column(db.String(128), nullable=True)
early_bonus = db.Column(db.String(128), nullable=True)
estimated_hours = db.Column(db.String(128), nullable=True)
progress = db.Column(db.Integer, default=0)
allocated_agent = db.Column(db.String(128), nullable=True)
project_files = db.Column(JSON, nullable=True, default=list)


total_tokens = db.Column(db.String(128), nullable=True)
result = db.Column(db.Text, nullable=True)
eta_str = db.Column(db.String(328), nullable=True)
updated_at = db.Column(db.DateTime, default=datetime.utcnow)

class CommitMessage(db.Model):
__tablename__ = 'commit_messages'
Expand Down
9 changes: 8 additions & 1 deletion backend/Modules/Savers/create_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@
from datetime import datetime
import pytz

def create_task(user_id, content, priority=1, hours="1.2", lang="pt", eta_str='', EMPLOYER_CATEGORY=''):
def create_task(user_id,
content,
priority=1,
hours="1.2",
lang="pt",
eta_str='',
EMPLOYER_CATEGORY=''
):
"""
Cria uma tarefa no banco Flask-SQLAlchemy.
"""
Expand Down
33 changes: 0 additions & 33 deletions backend/TestDiscovery/teste_mcp.py

This file was deleted.

33 changes: 33 additions & 0 deletions backend/_task_allocate_logs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from datetime import datetime
from api import db, app
from Models.postgreSQL import BackendTask, TaskLog

TASK_ID = 3
NEW_LOGS = [
{"id": "log1", "type": "info", "message": "Tarefa iniciada pelo agente CodAgent", "timestamp": datetime.utcnow()},
{"id": "log2", "type": "success", "message": "Estrutura inicial do projeto carregada", "timestamp": datetime.utcnow()},
]

def allocate_logs(task_id: int, logs: list):
with app.app_context():
task = db.session.query(BackendTask).filter_by(id=task_id).first()
if not task:
print(f"Tarefa {task_id} não encontrada.")
return

for log in logs:
new_log = TaskLog(
task_id=task.id,
type=log["type"],
message=log["message"],
task_metadata={}, # se precisar de dados extras
created_at=log["timestamp"]
)
db.session.add(new_log)

task.updated_at = datetime.utcnow() if hasattr(task, "updated_at") else None
db.session.commit()
print(f"Logs alocados com sucesso na tarefa {task_id}!")

if __name__ == "__main__":
allocate_logs(TASK_ID, NEW_LOGS)
38 changes: 38 additions & 0 deletions backend/_task_allocate_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import os
import json
from datetime import datetime
from api import db, app
from Models.postgreSQL import BackendTask # importe seu modelo correto

# Configurações iniciais
TASK_ID = 3 # ID da tarefa que você quer atualizar
AGENT_NAME = "CodAgent" # Nome do agente a ser alocado

# Exemplo de project_files compatível com FileItem do front-end
PROJECT_FILES = [
{"name": "server.js", "language": "javascript", "lines": 120, "status": "completed"},
{"name": "auth.js", "language": "javascript", "lines": 45, "status": "in_progress"},
{"name": "README.md", "language": "markdown", "lines": 10, "status": "completed"},
]

def allocate_task(task_id: int, agent_name: str, project_files: list):
with app.app_context():

task = db.session.query(BackendTask).filter_by(id=task_id).first()
if not task:
print(f"Tarefa {task_id} não encontrada.")
return

task.allocated_agent = agent_name
task.project_files = project_files
task.status = "running"
task.progress = 20
task.updated_at = datetime.utcnow() if hasattr(task, "updated_at") else None

db.session.commit()
print(f"Tarefa {task_id} atualizada com sucesso!")
print(f"Agente: {agent_name}")
print(f"Arquivos: {json.dumps(project_files, indent=2)}")

if __name__ == "__main__":
allocate_task(TASK_ID, AGENT_NAME, PROJECT_FILES)
Loading