/** * forgen dev probe-workflow — ADR-009 §1 결정적 미확인 변수 실측 도구. * * 질문: dynamic workflow **내부** 에이전트에 대해 SubagentStart/Stop·PostToolUse * 훅이 발화하는가? (워크플로우 런타임은 "대화와 분리된 격리 백그라운드"로 * 명시되어 있어 발화 여부가 문서로 미확인.) * * 이 답이 ADR-009 §2(훅 라우트로 워크플로우까지 검증 가능) vs §3(워크플로우 * 품질은 템플릿 라우트로만 도달)의 선택을 가른다. forgen 프로젝트 룰상 가정 * 위에 §2 를 구현할 수 없으므로, 실제 실행 증거를 먼저 수집한다. * * 신호원 (훅이 부작용으로 남기는 state 파일 — forgen 자체 timing 계측의 공백과 * 무관하게 직접 관측 가능): * - SubagentStart/Stop → ~/.forgen/state/active-agents-*.json (agents[]) * - PostToolUse → ~/.forgen/state/modified-files-*.json (mtime) * - (보조) hook-timing.jsonl 의 event 별 엔트리 * * 절차 (2단계 — 런타임이 격리되어 있어 단일 프로세스로는 트리거 불가): * 1. `forgen dev probe-workflow arm` → baseline 마커 기록 + 안내 출력 * 2. 사용자가 Claude Code 에서 워크플로우 1회 실행 (그 사이 다른 작업 금지) * 3. `forgen dev probe-workflow report` → baseline 이후 신호 수집 → verdict 박제 * * 가정 (detailed-communication): arm~report 사이에 사용자가 **워크플로우만** * 실행했다고 전제한다. 일반 Task-tool subagent 를 같이 돌리면 신호가 섞인다. */ export interface ProbeBaseline { armedAtMs: number; armedIso: string; } export interface AgentObservation { agentId: string; agentType?: string; model?: string; startedAtMs: number; stoppedAtMs?: number; } export interface ProbeObservations { agents: AgentObservation[]; /** baseline 이후 modified-files-*.json 이 갱신됨 (PostToolUse 발화 신호). */ postToolUseFired: boolean; /** hook-timing.jsonl 에서 baseline 이후 관측된 event 이름들. */ hookEvents: string[]; } export type ProbeOutcome = 'workflow-hooks-fire' | 'workflow-hooks-absent' | 'inconclusive'; export interface ProbeVerdict { subagentStartStopFired: boolean; postToolUseFired: boolean; agentCount: number; maxConcurrency: number; agentTypes: string[]; outcome: ProbeOutcome; recommendation: string; } /** * 구간 [start, stop) 들의 최대 동시 겹침 수. stoppedAt 미지정(진행 중) 은 +∞ 로 간주. * sweep-line: start 이벤트 +1, stop 이벤트 -1 을 시간순 정렬 후 누적 최대. * 동일 시각에서는 start(+1) 를 stop(-1) 보다 먼저 처리해 겹침을 과소평가하지 않는다. */ export declare function maxConcurrency(agents: AgentObservation[]): number; /** * Pure core — baseline + 관측치 → verdict. IO 없음 (단위 테스트 대상). * * 판정: * - 에이전트 0 → 'workflow-hooks-absent' (단 "워크플로우를 실제로 띄웠는가" * 확인 전제 — recommendation 에 명시). §2 는 워크플로우 내부에 도달 못 함. * - 에이전트 >0 → 'workflow-hooks-fire'. 동시 ≥11 이면 워크플로우 강한 신호. * §2(SubagentStop 검증)가 워크플로우까지 커버 가능. */ export declare function analyzeProbe(obs: ProbeObservations): ProbeVerdict; /** baseline 이후 신호 수집 (IO 셸). */ export declare function collectObservations(baselineMs: number): ProbeObservations; export declare function handleProbeWorkflow(args: string[]): Promise;