-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
73 lines (54 loc) · 1.81 KB
/
main.py
File metadata and controls
73 lines (54 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""Punto de entrada CLI para el agente de desarrollo dirigido por specs.
Ejemplos:
python main.py -r "Construir una API REST para tareas con auth JWT..."
python main.py -f requisitos.txt
"""
from __future__ import annotations
import argparse
import asyncio
import sys
from src.graph import build_graph
from src.state import SpecState
def _leer_requisitos(args: argparse.Namespace) -> str:
if args.file:
with open(args.file, encoding="utf-8") as f:
return f.read()
if args.requirements:
return args.requirements
if not sys.stdin.isatty():
return sys.stdin.read()
return input("Introduce tus requisitos: ")
async def run(requisitos: str) -> dict:
graph = build_graph()
initial = SpecState(raw_requirements=requisitos)
return await graph.ainvoke(initial)
async def _amain() -> int:
parser = argparse.ArgumentParser(
description="Agente de Desarrollo Dirigido por Specs"
)
parser.add_argument(
"--requirements", "-r", type=str, help="Requisitos como texto"
)
parser.add_argument(
"--file", "-f", type=str, help="Ruta a un archivo con los requisitos"
)
args = parser.parse_args()
requisitos = _leer_requisitos(args).strip()
if not requisitos:
print("error: no se proporcionaron requisitos", file=sys.stderr)
return 2
resultado = await run(requisitos)
output_path = resultado.get("output_path")
resumen = resultado.get("final_summary")
print(f"\nSpecs generados en: {output_path}")
if resumen:
print(f"\n{resumen}")
fallidos = [
r for r in resultado.get("validation_results", [])
if not getattr(r, "is_valid", True)
]
return 1 if fallidos else 0
def main() -> None:
sys.exit(asyncio.run(_amain()))
if __name__ == "__main__":
main()