(workDir, owner, repoName, repoUrl, transcript, args)
| 248 | } |
| 249 | |
| 250 | function collectProof(workDir, owner, repoName, repoUrl, transcript, args) { |
| 251 | const queue = readJson(path.join(workDir, '.agent-steward', 'queue.json')); |
| 252 | const events = parseJsonl(path.join(workDir, '.agent-steward', 'events.jsonl')); |
| 253 | const deploys = parseJsonl(path.join(workDir, '.agent-steward', 'live-deploys.jsonl')); |
| 254 | const prs = JSON.parse(gh(['pr', 'list', '--repo', `${owner}/${repoName}`, '--state', 'all', '--json', 'number,state,mergedAt,headRefName,url'])); |
| 255 | const proof = { |
| 256 | generatedAt: new Date().toISOString(), |
| 257 | repo: `${owner}/${repoName}`, |
| 258 | repoUrl, |
| 259 | localWorkDir: workDir, |
| 260 | settings: args, |
| 261 | summary: { |
| 262 | prs: prs.length, |
| 263 | mergedPrs: prs.filter((pr) => pr.state === 'MERGED').length, |
| 264 | landedQueueItems: queue.filter((item) => item.status === 'landed').length, |
| 265 | deploys: deploys.length, |
| 266 | updatedBranchEvents: events.filter((event) => event.type === 'updated-branch').length, |
| 267 | waitingEvents: events.filter((event) => event.type === 'waiting-for-checks').length, |
| 268 | repairEvents: events.filter((event) => event.type === 'repair-needed').length, |
| 269 | }, |
| 270 | prs, |
| 271 | queue, |
| 272 | events, |
| 273 | deploys, |
| 274 | transcript, |
| 275 | }; |
| 276 | const outDir = path.join(PROJECT_ROOT, '.planning', 'live-proof'); |
| 277 | fs.mkdirSync(outDir, { recursive: true }); |
| 278 | const outPath = path.join(outDir, `${repoName}.json`); |
| 279 | fs.writeFileSync(outPath, `${JSON.stringify(proof, null, 2)}\n`, 'utf8'); |
| 280 | return { proof, outPath }; |
| 281 | } |
| 282 | |
| 283 | async function main() { |
| 284 | const args = parseArgs(process.argv.slice(2)); |
no test coverage detected