| 3 | import { execSync } from 'node:child_process'; |
| 4 | |
| 5 | export interface LoopSignals { |
| 6 | stateFile: { present: boolean; paths: string[] }; |
| 7 | loopConfig: { present: boolean; path?: string }; |
| 8 | skills: { count: number; loopSkills: string[] }; |
| 9 | verifier: { present: boolean }; |
| 10 | triage: { present: boolean }; |
| 11 | agentsMd: { present: boolean }; |
| 12 | patterns: { documented: boolean }; |
| 13 | safety: { loopMdMentionsSafety: boolean; safetyDocPresent: boolean }; |
| 14 | starters: { used: boolean }; |
| 15 | github: { present: boolean; workflows: boolean }; |
| 16 | mcp: { present: boolean }; |
| 17 | worktreeEvidence: { present: boolean }; |
| 18 | registry: { present: boolean }; |
| 19 | cost: { |
| 20 | budgetDoc: boolean; |
| 21 | runLog: boolean; |
| 22 | loopMdBudget: boolean; |
| 23 | budgetSkill: boolean; |
| 24 | }; |
| 25 | constraints: { present: boolean; hasConstraintsSkill: boolean }; |
| 26 | loopActivity: { present: boolean; evidence: string[] }; |
| 27 | } |
| 28 | |
| 29 | export interface Finding { |
| 30 | level: 'ok' | 'warn' | 'fail'; |
nothing calls this directly
no outgoing calls
no test coverage detected