DevOps generoi Dockerfilen + Tarkkailija kirjoittaa README.md-raportin
Uudet pipeline-vaiheet: DevOps — Dockerfile: - python:3.12-slim + uv (astral-sh) - Oikea COPY-järjestys (pyproject.toml → sync → source) - Expose 8000, CMD uvicorn Tarkkailija — README.md: - Markdown-raportti joka sisältää: - Tiedostolista ja kuvaukset - Käyttöohjeet (uv + Docker) - API Endpoints -taulukko - Arkkitehtuurihuomiot - Riskiarviointi - README.md lisätään projektikorttin tiedostoihin → avattavissa editorissa Pipeline nyt: Data → Koodari → DevOps review → korjaukset → QA testit → DevOps Dockerfile → Tarkkailija README → Valmis Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -812,15 +812,43 @@ OUTPUT FORMAT:
|
|||||||
stepN++;
|
stepN++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tarkkailija: riskianalyysi
|
// DevOps: Dockerfile
|
||||||
|
termLog(`\n<span style="color:var(--accent);font-weight:bold">[${stepN}] ${esc(tst.name)}</span> — Dockerfile`);
|
||||||
|
highlightAgent('tester');
|
||||||
|
explainStep('Dockerfile', `${tst.name} generoi Docker-kontin joka pakkaa projektin ajettavaksi.`);
|
||||||
|
const dockerPrompt = (tst.prompt ? tst.prompt+'\n\n' : '') +
|
||||||
|
`Write a Dockerfile for this Python FastAPI project.\n\n` +
|
||||||
|
`Project files: ${Object.keys(files).join(', ')}\n\n` +
|
||||||
|
`Requirements:\n` +
|
||||||
|
`- Use python:3.12-slim as base\n` +
|
||||||
|
`- Install uv: COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv\n` +
|
||||||
|
`- Copy pyproject.toml first, then uv sync, then copy source\n` +
|
||||||
|
`- Expose port 8000\n` +
|
||||||
|
`- CMD: uv run uvicorn main:app --host 0.0.0.0 --port 8000\n` +
|
||||||
|
`\nWrite ONLY the Dockerfile, no explanations.`;
|
||||||
|
const dockerfile = await kpnRun(tst.model, dockerPrompt);
|
||||||
|
if (dockerfile) files['Dockerfile'] = dockerfile;
|
||||||
|
stepN++;
|
||||||
|
|
||||||
|
// Tarkkailija: yhteenveto + raportti
|
||||||
const obs = agents.observer || Object.values(agents)[5];
|
const obs = agents.observer || Object.values(agents)[5];
|
||||||
if (obs) {
|
if (obs) {
|
||||||
termLog(`\n<span style="color:#8b949e;font-weight:bold">[${stepN}] ${esc(obs.name)}</span> — riskianalyysi`);
|
termLog(`\n<span style="color:#8b949e;font-weight:bold">[${stepN}] ${esc(obs.name)}</span> — projektin yhteenveto`);
|
||||||
highlightAgent('observer');
|
highlightAgent('observer');
|
||||||
explainStep('Riskianalyysi', `${obs.name} arvioi arkkitehtuurin, tietoturvan ja ylläpidettävyyden.`);
|
explainStep('Raportti', `${obs.name} kokoaa yhteenvedon projektin rakenteesta, riskeistä ja käyttöönotosta.`);
|
||||||
const finalCode = Object.entries(files).map(([n,c]) => `--- ${n} ---\n${c}`).join('\n\n');
|
const finalCode = Object.entries(files).map(([n,c]) => `--- ${n} ---\n${c}`).join('\n\n');
|
||||||
const obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') + `Evaluate this project:\n\n${finalCode}`;
|
const obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') +
|
||||||
await kpnRun(obs.model, obsPrompt);
|
`Write a project README.md report in markdown for this project: ${task}\n\n` +
|
||||||
|
`Include these sections:\n` +
|
||||||
|
`# Project: ${task}\n` +
|
||||||
|
`## Files (list each file and its purpose)\n` +
|
||||||
|
`## How to run (uv + Docker commands)\n` +
|
||||||
|
`## API Endpoints (table: method, path, description)\n` +
|
||||||
|
`## Architecture notes\n` +
|
||||||
|
`## Risk assessment (security, reliability)\n\n` +
|
||||||
|
`Project code:\n${finalCode}`;
|
||||||
|
const readme = await kpnRun(obs.model, obsPrompt);
|
||||||
|
if (readme) files['README.md'] = readme;
|
||||||
stepN++;
|
stepN++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -828,7 +856,7 @@ OUTPUT FORMAT:
|
|||||||
highlightAgent(null);
|
highlightAgent(null);
|
||||||
|
|
||||||
termLog(`\n<span style="color:var(--purple);font-weight:bold">━━━ Valmis (${Object.keys(files).length} tiedostoa) ━━━</span>`);
|
termLog(`\n<span style="color:var(--purple);font-weight:bold">━━━ Valmis (${Object.keys(files).length} tiedostoa) ━━━</span>`);
|
||||||
explainStep('Tulos', `Projekti "${task}" generoitu ${Object.keys(files).length} tiedostoon. Klikkaa "Avaa editorissa" tutkiaksesi koodia. Aja: uv run uvicorn main:app --reload`);
|
explainStep('Tulos', `Projekti "${task}" generoitu ${Object.keys(files).length} tiedostoon. Klikkaa "Avaa editorissa" tutkiaksesi koodia ja README:tä.`);
|
||||||
renderProjectCard(files, task);
|
renderProjectCard(files, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user