From 8fd9acce28efe3b0e2a0aa9f167e81967b29c02d Mon Sep 17 00:00:00 2001 From: giles Date: Sun, 11 Jan 2026 08:12:39 +0000 Subject: [PATCH] Add step list with cache links and Plan JSON to plan page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Show numbered step list with cache_id links for each completed step - Add collapsible "Show Plan JSON" section with full plan data - Steps show type, name, status badge, and clickable output link 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- server.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/server.py b/server.py index e32d40a..866a6cf 100644 --- a/server.py +++ b/server.py @@ -1531,6 +1531,77 @@ async def run_plan_visualization(run_id: str, request: Request): {dag_html} + + +
+

Execution Steps

+
+ ''' + + # Build steps list with cache_id links + for i, step in enumerate(steps): + step_id = step.get("step_id", "") + step_name = step.get("name", step_id[:20]) + node_type = step.get("node_type", "EFFECT") + cache_id = step.get("cache_id", "") + has_cached = cache_manager.has_content(cache_id) if cache_id else False + color = NODE_COLORS.get(node_type, NODE_COLORS["default"]) + + status_badge = "" + if has_cached: + status_badge = 'cached' + elif run.status == "completed": + status_badge = 'completed' + + cache_link = "" + if cache_id: + if has_cached: + cache_link = f''' +
+ Output: + {cache_id} +
''' + else: + cache_link = f''' +
+ {cache_id[:32]}... +
''' + + content += f''' +
+
+
+ {i + 1} + {step_name} + {node_type} +
+
+ {status_badge} +
+
+ {cache_link} +
+ ''' + + content += ''' +
+
+ ''' + + # Add collapsible Plan JSON section + plan_json_str = json.dumps(plan_data, indent=2) + # Escape HTML entities in JSON + plan_json_str = plan_json_str.replace("&", "&").replace("<", "<").replace(">", ">") + content += f''' + +
+ + Show Plan JSON + +
+
{plan_json_str}
+
+
'''