| 135 | } |
| 136 | |
| 137 | function formatExperimentCodeUpdateInput(input: any) { |
| 138 | return ( |
| 139 | <div className="space-y-2"> |
| 140 | {input?.githubUrl && ( |
| 141 | <div className="flex items-start gap-2"> |
| 142 | <span className="text-sm text-gray-400 min-w-[120px]">GitHub URL:</span> |
| 143 | <a |
| 144 | href={input.githubUrl} |
| 145 | target="_blank" |
| 146 | rel="noopener noreferrer" |
| 147 | className="text-sm text-blue-400 hover:text-blue-300 underline break-all" |
| 148 | > |
| 149 | {input.githubUrl} |
| 150 | </a> |
| 151 | </div> |
| 152 | )} |
| 153 | {input?.featureFlagKey && ( |
| 154 | <div className="flex items-start gap-2"> |
| 155 | <span className="text-sm text-gray-400 min-w-[120px]">Feature Flag:</span> |
| 156 | <code className="text-sm text-gray-200 bg-[#1a1a1a] px-2 py-0.5 rounded"> |
| 157 | {input.featureFlagKey} |
| 158 | </code> |
| 159 | </div> |
| 160 | )} |
| 161 | {input?.hypothesis && ( |
| 162 | <div className="flex items-start gap-2"> |
| 163 | <span className="text-sm text-gray-400 min-w-[120px]">Hypothesis:</span> |
| 164 | <span className="text-sm text-gray-200">{input.hypothesis}</span> |
| 165 | </div> |
| 166 | )} |
| 167 | </div> |
| 168 | ); |
| 169 | } |
| 170 | |
| 171 | function formatExperimentCodeUpdateOutput(output: string) { |
| 172 | // Try to parse structured output |