fix(ui): inject Spec Kit architectural templates directly into Architect mode prompt
This commit is contained in:
@@ -135,11 +135,36 @@ function ObjectiveView({ plan, projectId, onChange }: { plan: Plan, projectId: s
|
||||
<div>
|
||||
|
||||
</div>
|
||||
{!editing && (
|
||||
<button onClick={() => setEditing(true)} className="btn-ghost">
|
||||
<Pencil size={12} /> Edit
|
||||
<div style={{ display: "flex", gap: 12 }}>
|
||||
<button
|
||||
onClick={async () => {
|
||||
if (!confirm("This will overwrite the PRD and Execution Plan based on the current objective. Continue?")) return;
|
||||
setSaving(true);
|
||||
try {
|
||||
const r = await fetch(`/api/projects/${projectId}/plan/generate`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ objective: draft }),
|
||||
});
|
||||
const d = await r.json();
|
||||
if (d.plan) onChange(d.plan);
|
||||
} finally {
|
||||
setSaving(false);
|
||||
setEditing(false);
|
||||
}
|
||||
}}
|
||||
disabled={saving || !draft.trim()}
|
||||
className="btn-primary"
|
||||
style={{ fontWeight: 600, fontSize: "0.85rem", padding: "6px 16px", borderRadius: 6 }}
|
||||
>
|
||||
{saving ? <><Loader2 size={12} className="animate-spin" /> Generating...</> : "Generate Complete PRD"}
|
||||
</button>
|
||||
)}
|
||||
{!editing && (
|
||||
<button onClick={() => setEditing(true)} className="btn-ghost">
|
||||
<Pencil size={12} /> Edit
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{editing ? (
|
||||
@@ -153,36 +178,11 @@ function ObjectiveView({ plan, projectId, onChange }: { plan: Plan, projectId: s
|
||||
}}
|
||||
placeholder="Describe the business objective..."
|
||||
/>
|
||||
<div style={{ display: "flex", justifyContent: "space-between", padding: "12px 20px", background: INK.bgHover, borderTop: `1px solid ${INK.border}` }}>
|
||||
<button
|
||||
onClick={async () => {
|
||||
if (!confirm("This will overwrite the PRD and Execution Plan based on the current objective. Continue?")) return;
|
||||
setSaving(true);
|
||||
try {
|
||||
const r = await fetch(`/api/projects/${projectId}/plan/generate`, {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ objective: draft }),
|
||||
});
|
||||
const d = await r.json();
|
||||
if (d.plan) onChange(d.plan);
|
||||
} finally {
|
||||
setSaving(false);
|
||||
setEditing(false);
|
||||
}
|
||||
}}
|
||||
disabled={saving}
|
||||
className="btn-secondary"
|
||||
style={{ background: "#fff", borderColor: INK.border }}
|
||||
>
|
||||
{saving ? "Generating PRD..." : "Generate Complete PRD"}
|
||||
<div style={{ display: "flex", justifyContent: "flex-end", gap: 8, padding: "12px 20px", background: INK.bgHover, borderTop: `1px solid ${INK.border}` }}>
|
||||
<button onClick={() => setEditing(false)} className="btn-ghost">Cancel</button>
|
||||
<button onClick={save} disabled={saving} className="btn-primary">
|
||||
{saving ? "Saving..." : "Save Objective"}
|
||||
</button>
|
||||
<div style={{ display: "flex", gap: 8 }}>
|
||||
<button onClick={() => setEditing(false)} className="btn-ghost">Cancel</button>
|
||||
<button onClick={save} disabled={saving} className="btn-primary">
|
||||
{saving ? "Saving..." : "Save Objective"}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
|
||||
Reference in New Issue
Block a user