Abgleich mit dem Vault-Stand 22761eb
11 Datei(en) geändert. Erzeugt von .vault-tools/auto-push/werkzeuge_spiegel.py.
This commit is contained in:
1 parent
9e506ff588
commit
ae3ec3ca89
11 files changed
+1520
-65
No files matched your search
@@ -165,8 +165,16 @@ ${zusatz ? '\n' + zusatz + '\n' : ''}
|
||||
{ label, phase, schema: LAUF, model: 'haiku', effort: 'low' })
|
||||
}
|
||||
|
||||
// Ausgabe aller laeufe in ihrer Reihenfolge, mit Zeilenumbruch verbunden (seit 2026-11-02, wie
|
||||
// ausgabeAller in plankritik.js): Ein Hilfsagent darf die Ausgabe eines Befehls auf mehrere laeufe
|
||||
// verteilen (Echtlauf wf_9ab7fd8e-ad1). Mit laeufe[0] allein fehlte dann etwa "EXIT paket: 0" oder
|
||||
// "EXIT task: 0", und ein gestarteter Codex-Auftrag lief ungesehen weiter. Bewertet werden nur die
|
||||
// EXIT-Zeilen, die jeder Befehl selbst schreibt, nie das Feld exit.
|
||||
function ausgabe(r) {
|
||||
return r && r.laeufe && r.laeufe[0] ? String(r.laeufe[0].ausgabe || '') : ''
|
||||
return laufTexte(r).join('\n')
|
||||
}
|
||||
function laufTexte(r) {
|
||||
return (r && Array.isArray(r.laeufe) ? r.laeufe : []).map(l => String((l && l.ausgabe) || ''))
|
||||
}
|
||||
|
||||
function wurzel(a) {
|
||||
@@ -291,20 +299,45 @@ async function codexStimme(a, p) {
|
||||
return z
|
||||
}
|
||||
const P = q(wurzel(a))
|
||||
const start = ausgabe(await werkzeugAgent('codex:start', 'Stimmen',
|
||||
const startAntwort = await werkzeugAgent('codex:start', 'Stimmen',
|
||||
`node ${COMPANION} status --json --cwd ${P}; S=$?; echo "EXIT status: $S"; if [ "$S" -eq 0 ]; then node ${COMPANION} task --background --json --cwd ${P} --prompt-file ${q(p.ordner + '/codex-auftrag.md')}; echo "EXIT task: $?"; fi`,
|
||||
'den Codex-Status vor dem Lauf lesen und die Prüfung nur lesend im Hintergrund starten'))
|
||||
'den Codex-Status vor dem Lauf lesen und die Prüfung nur lesend im Hintergrund starten')
|
||||
const start = ausgabe(startAntwort)
|
||||
// Task beginnt mit jobId, Komma, status: queued (codex-companion.mjs 701-706; JSON: 91-100).
|
||||
// Nur innerhalb eines Laufs: Im Status folgt auf { nie jobId (job-control.mjs 161-181, 213-239;
|
||||
// lib/state.mjs 129-147; codex-companion.mjs 567-578); request hat kein status (604-613).
|
||||
// Einrückung allein belegt keine Herkunft; gleiche ID zählt einmal, die erste Fundstelle gilt.
|
||||
// echo setzt EXIT an den Zeilenanfang; Vorsätze zählen nicht für die Reihenfolgeprüfung.
|
||||
// Freie Umstellung innerhalb eines Laufs oder erfundene/geänderte Inhalte sind nicht abgesichert;
|
||||
// codexUngueltig() weist dann eine fremde Stimme über den Lesebeleg zurück.
|
||||
const taskOK = /EXIT task: 0(?!\d)/.test(start)
|
||||
if (!/EXIT status: 0(?!\d)/.test(start)) {
|
||||
z.grund = 'Status vor dem Lauf nicht gelesen'
|
||||
z.grund = 'Status vor dem Lauf nicht gelesen' + (taskOK ? '; Codex-Auftrag läuft womöglich ungesehen weiter' : '')
|
||||
return z
|
||||
}
|
||||
// Nur hinter "EXIT status:" suchen: status --json listet frühere Jobs derselben Sitzung samt
|
||||
// request.jobId (job-control.mjs 161-181); die erste Fundstelle wäre dann ein alter Job.
|
||||
const job = /"jobId": "([^"]+)"/.exec(start.slice(start.lastIndexOf('EXIT status:')))
|
||||
if (!/EXIT task: 0(?!\d)/.test(start) || !job) {
|
||||
z.grund = 'Codex-Auftrag nicht gestartet'
|
||||
const taskJobs = []
|
||||
let startIndex = 0
|
||||
for (const laufText of laufTexte(startAntwort)) {
|
||||
const laufJobs = [...laufText.matchAll(/\{\s*"jobId"\s*:\s*"([^"\\\r\n]+)"\s*,\s*"status"\s*:\s*"queued"/g)]
|
||||
for (const treffer of laufJobs) {
|
||||
treffer.index += startIndex
|
||||
taskJobs.push(treffer)
|
||||
}
|
||||
startIndex += laufText.length + 1
|
||||
}
|
||||
const taskIds = new Set(taskJobs.map(treffer => treffer[1]))
|
||||
const job = taskIds.size === 1 ? taskJobs[0] : null
|
||||
if (!taskOK || !job) {
|
||||
z.grund = taskOK
|
||||
? 'jobId nicht sicher bestimmbar; Codex-Auftrag läuft womöglich ungesehen weiter'
|
||||
: 'Codex-Auftrag nicht gestartet'
|
||||
return z
|
||||
}
|
||||
const statusEnde = start.search(/^EXIT status: 0(?!\d)/m)
|
||||
const taskEnde = start.search(/^EXIT task: 0(?!\d)/m)
|
||||
if (!(statusEnde < job.index && job.index < taskEnde)) {
|
||||
hinweis('Codex-Start: Ausgabe nicht in Befehlsreihenfolge; jobId aus der task-Ausgabe (' + job[1] + ')')
|
||||
}
|
||||
z.job = job[1]
|
||||
const runden = a.codex_runden || CODEX_RUNDEN
|
||||
let fertig = false
|
||||
|
||||
Reference in new issue
Block a user