(runId)
| 48 | } |
| 49 | |
| 50 | function buildRunDetail(runId) { |
| 51 | const paths = getObserverPaths(); |
| 52 | const solidify = readJsonSafe(paths.solidifyStatePath, null); |
| 53 | const last = solidify && solidify.last_run; |
| 54 | if (!last || String(last.run_id) !== String(runId)) return null; |
| 55 | const safe = redactValue(last); |
| 56 | return { |
| 57 | parentEventId: safe.parent_event_id || null, |
| 58 | selectedCapsuleId: safe.selected_capsule_id || null, |
| 59 | signals: safe.signals || [], |
| 60 | initialUserPrompt: safe.initial_user_prompt || null, |
| 61 | activeTaskId: safe.active_task_id || null, |
| 62 | activeTaskTitle: safe.active_task_title || null, |
| 63 | blastRadius: safe.blast_radius_estimate || null, |
| 64 | selector: safe.selector || null, |
| 65 | mutation: safe.mutation ? simplifyMutation(safe.mutation) : null, |
| 66 | personalityState: safe.personality_state || null, |
| 67 | drift: safe.drift || null, |
| 68 | appliedLessons: safe.applied_lessons || [], |
| 69 | hubLessons: safe.hub_lessons || [], |
| 70 | sourceType: safe.source_type || null, |
| 71 | reusedAssetId: safe.reused_asset_id || null, |
| 72 | baselineGitHead: safe.baseline_git_head || null, |
| 73 | }; |
| 74 | } |
| 75 | |
| 76 | function simplifyMutation(mutation) { |
| 77 | if (!mutation || typeof mutation !== 'object') return null; |
no test coverage detected