Skip to content

Commit b6776f1

Browse files
committed
feat(ci): show full orchestration for each E2E scenario
- Display complete workflow execution for every sample - Show prompts, AI responses, tool calls, and intermediate steps - Preserve full context of what each agent actually does - ASCII-safe labels for inputs, outputs, and processing stages
1 parent c014c04 commit b6776f1

1 file changed

Lines changed: 34 additions & 48 deletions

File tree

scripts/run_agent_scenarios.py

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -105,41 +105,33 @@ def clean_text(text: str) -> str:
105105
'❌': '[FAIL]',
106106
'✗': '[FAIL]',
107107
'⚠️': '[WARN]',
108-
'🤖': '',
109-
'📝': '',
110-
'📋': '',
111-
'🧪': '',
112-
'🔄': '',
113-
'🔧': '',
114-
'📄': '',
115-
'📊': '',
116-
'⚙️': '',
117-
'🌐': '',
118-
'🎯': '',
119-
'🔐': '',
120-
'📍': '',
121-
'🎲': '',
122-
'🔢': '',
108+
'🤖': '[AI]',
109+
'📝': '[INPUT]',
110+
'📋': '[INFO]',
111+
'🧪': '[TEST]',
112+
'🔄': '[PROCESS]',
113+
'🔧': '[TOOL]',
114+
'📄': '[FILE]',
115+
'📊': '[DATA]',
116+
'⚙️': '[CONFIG]',
117+
'🌐': '[WEB]',
118+
'🎯': '[TARGET]',
119+
'🔐': '[AUTH]',
120+
'📍': '[LOCATION]',
121+
'🎲': '[GEN]',
122+
'🔢': '[NUM]',
123123
}
124124
for old, new in replacements.items():
125125
text = text.replace(old, new)
126126
# Remove any remaining non-ASCII
127127
return ''.join(c if ord(c) < 128 else '' for c in text)
128128

129-
# Return first meaningful line or summary
129+
# Return full output (cleaned)
130130
if output:
131-
output = clean_text(output)
132-
lines = [l.strip() for l in output.split('\n') if l.strip()]
133-
# Get the last substantial line (often the result)
134-
meaningful = [l for l in lines if not l.startswith(('Running', 'Loading', 'Connecting'))]
135-
if meaningful:
136-
detail = meaningful[-1][:120]
137-
else:
138-
detail = lines[-1][:120] if lines else "Completed"
131+
full_output = clean_text(output.strip())
132+
return ScenarioResult(name, True, full_output)
139133
else:
140-
detail = "Completed successfully"
141-
142-
return ScenarioResult(name, True, detail)
134+
return ScenarioResult(name, True, "Completed successfully (no output)")
143135
else:
144136
return ScenarioResult(name, False, "No main() function found")
145137
finally:
@@ -158,7 +150,7 @@ def clean_text(text: str) -> str:
158150
return ScenarioResult(name, True, "Completed")
159151
return ScenarioResult(name, False, f"Exit code {e.code}")
160152
except Exception as e:
161-
error_msg = str(e)[:80]
153+
error_msg = str(e)[:200]
162154
return ScenarioResult(name, False, error_msg)
163155

164156

@@ -237,7 +229,7 @@ async def run(provider: str, model: str) -> int:
237229
# Print summary
238230
print()
239231
print("=" * 80)
240-
print("SCENARIO RESULTS")
232+
print("SCENARIO EXECUTION RESULTS")
241233
print("=" * 80)
242234
print()
243235

@@ -247,27 +239,21 @@ async def run(provider: str, model: str) -> int:
247239
status = "PASS" if r.ok else "FAIL"
248240
marker = "+" if r.ok else "!"
249241

250-
# Print scenario with details
251-
print(f"{marker} {r.name}")
242+
# Print scenario header
243+
print(f"{marker} {r.name.upper()}")
252244
print(f" Status: {status}")
245+
print()
246+
253247
if r.details and r.details != r.name:
254-
# Wrap long details
255-
detail_lines = []
256-
current_line = ""
257-
words = r.details.split()
258-
for word in words:
259-
if len(current_line) + len(word) + 1 <= 74:
260-
current_line += (" " if current_line else "") + word
261-
else:
262-
if current_line:
263-
detail_lines.append(current_line)
264-
current_line = word
265-
if current_line:
266-
detail_lines.append(current_line)
267-
268-
print(f" Result: {detail_lines[0]}")
269-
for line in detail_lines[1:]:
270-
print(f" {line}")
248+
# Print full execution details with indentation
249+
lines = r.details.split('\n')
250+
for line in lines:
251+
# Indent each line for readability
252+
if line.strip():
253+
print(f" {line}")
254+
print()
255+
256+
print("-" * 80)
271257
print()
272258

273259
if r.ok:

0 commit comments

Comments
 (0)