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++;
|
||||
}
|
||||
|
||||
// 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];
|
||||
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');
|
||||
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 obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') + `Evaluate this project:\n\n${finalCode}`;
|
||||
await kpnRun(obs.model, obsPrompt);
|
||||
const obsPrompt = (obs.prompt ? obs.prompt+'\n\n' : '') +
|
||||
`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++;
|
||||
}
|
||||
|
||||
@@ -828,7 +856,7 @@ OUTPUT FORMAT:
|
||||
highlightAgent(null);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user