IDE-Welt: Vorbereiten-Bahn — Idee → Konzept + leeres Repo + Doku, Bau in Zed
Neue Intake-Weiche Box/IDE. IDE-Ideen gehen direkt an das neue Profil 'projektstart' (am Triage/Auto-Zerleger vorbei, kein Werkstatt-Bau): es haertet via konzept-fliessband ein Konzept, legt ein leeres Gitea-Repo an und fuellt es NUR mit Doku (Konzept/Roadmap/AGENTS.md/.aiexclude). Ergebnis ist ein vorbereitetes Projekt, das der Commander in Zed selbst baut. UI: Toggle 'Box baut / Ich bau in Zed', IDE-Badge auf Karten. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ router = APIRouter(prefix="/api")
|
||||
class IdeeIn(BaseModel):
|
||||
titel: str
|
||||
notiz: str = ""
|
||||
welt: str = "box" # "box" = Werkstatt baut · "ide" = vorbereiten für Zed
|
||||
|
||||
|
||||
class TaskIn(BaseModel):
|
||||
@@ -30,7 +31,7 @@ def list_queue() -> dict:
|
||||
|
||||
@router.post("/ideen")
|
||||
def add_idea(body: IdeeIn) -> dict:
|
||||
res = ideen.add_idea(body.titel, body.notiz)
|
||||
res = ideen.add_idea(body.titel, body.notiz, welt=body.welt)
|
||||
if not res.get("ok"):
|
||||
raise HTTPException(400, res.get("error", "Idee konnte nicht angelegt werden."))
|
||||
return res
|
||||
|
||||
@@ -249,6 +249,8 @@ def list_queue() -> dict:
|
||||
"body": (t.get("body") or "")[:600],
|
||||
"status": t.get("status", "?"),
|
||||
"assignee": t.get("assignee"),
|
||||
# IDE-Welt = das Vorbereiter-Profil (Konzept + Repo + Doku, kein Bau).
|
||||
"welt": "ide" if t.get("assignee") == "projektstart" else "box",
|
||||
"erstellt": t.get("created_at"),
|
||||
"fertig": t.get("completed_at"),
|
||||
"von": t.get("created_by"),
|
||||
@@ -273,14 +275,26 @@ def list_queue() -> dict:
|
||||
return data
|
||||
|
||||
|
||||
def add_idea(titel: str, notiz: str = "", created_by: str = "mc2-ui") -> dict:
|
||||
"""Idee in die Queue legen: triage — der Specifier der Box arbeitet sie selbst aus."""
|
||||
def add_idea(titel: str, notiz: str = "", created_by: str = "mc2-ui", welt: str = "box") -> dict:
|
||||
"""Idee in die Queue legen.
|
||||
|
||||
welt='box' (Default): triage — der Specifier arbeitet sie aus, die Werkstatt baut,
|
||||
Ergebnis ist ein Patch-Vorschlag im Auftragsbuch (Box-Welt).
|
||||
welt='ide': geht DIREKT an das Profil `projektstart` (am Triage/Auto-Zerleger vorbei) —
|
||||
die Box härtet ein Konzept (konzept-fliessband), legt ein leeres Gitea-Repo an und
|
||||
füllt es NUR mit Doku. Ergebnis ist ein vorbereitetes Projekt, das der Commander in
|
||||
Zed selbst baut (IDE-Welt). Bewusst KEIN --triage: so fasst der Auto-Zerleger die
|
||||
Karte nie an und die Werkstatt baut sie nie (der Fan-out-Fehler vom 20.07.)."""
|
||||
if not _available():
|
||||
return {"ok": False, "error": "Die Ideen-Queue lebt auf der Box."}
|
||||
titel = (titel or "").strip()
|
||||
if not (3 <= len(titel) <= 200):
|
||||
return {"ok": False, "error": "Titel bitte zwischen 3 und 200 Zeichen."}
|
||||
args = ["create", titel, "--triage", "--created-by", created_by, "--json"]
|
||||
welt = "ide" if str(welt).lower() == "ide" else "box"
|
||||
if welt == "ide":
|
||||
args = ["create", titel, "--assignee", "projektstart", "--created-by", created_by, "--json"]
|
||||
else:
|
||||
args = ["create", titel, "--triage", "--created-by", created_by, "--json"]
|
||||
notiz = (notiz or "").strip()
|
||||
if notiz:
|
||||
args[2:2] = ["--body", notiz[:4000]]
|
||||
@@ -294,11 +308,16 @@ def add_idea(titel: str, notiz: str = "", created_by: str = "mc2-ui") -> dict:
|
||||
_list_cache["ts"] = 0.0 # nächster Poll zeigt die neue Idee sofort
|
||||
try:
|
||||
from services import announce
|
||||
announce.add(f"Neue Idee in der Queue: „{titel}“ ({task['id']}) — die Box arbeitet sie aus.",
|
||||
"[Ideen-Queue]", "ideen-queue", "silent")
|
||||
if welt == "ide":
|
||||
announce.add(f"Neues IDE-Projekt in Vorbereitung: „{titel}“ ({task['id']}) — die Box "
|
||||
"härtet das Konzept und legt das Repo an, dann baust du in Zed.",
|
||||
"[Ideen-Queue]", "ideen-queue", "silent")
|
||||
else:
|
||||
announce.add(f"Neue Idee in der Queue: „{titel}“ ({task['id']}) — die Box arbeitet sie aus.",
|
||||
"[Ideen-Queue]", "ideen-queue", "silent")
|
||||
except Exception:
|
||||
pass
|
||||
return {"ok": True, "id": task["id"], "status": task.get("status")}
|
||||
return {"ok": True, "id": task["id"], "status": task.get("status"), "welt": welt}
|
||||
|
||||
|
||||
def answer_task(task_id: str, antwort: str) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user