This commit is contained in:
2026-05-16 15:03:33 -07:00
parent 717cb13dda
commit 5048729b0c
10 changed files with 1646 additions and 241 deletions
+51 -12
View File
@@ -3174,7 +3174,9 @@ class PipelineExecutor:
pipe_idx = pipe_index_by_stage.get(stage_index)
overlay_table: Any | None = None
output_table: Any | None = None
pre_stage_table: Any | None = None
pre_last_result_table: Any | None = None
session = _worker().WorkerStages.begin_stage(
worker_manager,
cmd_name=cmd_name,
@@ -3204,6 +3206,22 @@ class PipelineExecutor:
# should call begin_pipe themselves with the actual count.
progress_ui.begin_pipe(pipe_idx, total_items=1)
if stage_index + 1 >= len(stages):
try:
pre_stage_table = (
ctx.get_current_stage_table()
if hasattr(ctx, "get_current_stage_table") else None
)
except Exception:
pre_stage_table = None
try:
pre_last_result_table = (
ctx.get_last_result_table()
if hasattr(ctx, "get_last_result_table") else None
)
except Exception:
pre_last_result_table = None
# RUN THE CMDLET
ret_code = cmd_fn(piped_result, stage_args, config)
if ret_code is not None:
@@ -3216,20 +3234,41 @@ class PipelineExecutor:
pipeline_error = f"Stage '{cmd_name}' failed with exit code {normalized_ret}"
return
# Pipeline overlay tables (e.g., get-url detail views) need to be
# rendered when running inside a pipeline because the CLI path
# normally handles rendering. The overlay is only useful when
# we're at the terminal stage of the pipeline. Save the table so
# it can be printed after the pipe finishes.
overlay_table = None
# Terminal pipeline stages need to render overlay tables and also
# newly produced standard result tables from row actions like
# `.config -browse ...`, because there is no outer CLI render pass.
output_table = None
if stage_index + 1 >= len(stages):
try:
overlay_table = (
output_table = (
ctx.get_display_table()
if hasattr(ctx, "get_display_table") else None
)
except Exception:
overlay_table = None
output_table = None
if output_table is None:
current_stage_table = None
last_result_table = None
try:
current_stage_table = (
ctx.get_current_stage_table()
if hasattr(ctx, "get_current_stage_table") else None
)
except Exception:
current_stage_table = None
try:
last_result_table = (
ctx.get_last_result_table()
if hasattr(ctx, "get_last_result_table") else None
)
except Exception:
last_result_table = None
if current_stage_table is not None and current_stage_table is not pre_stage_table:
output_table = current_stage_table
elif last_result_table is not None and last_result_table is not pre_last_result_table:
output_table = last_result_table
# Update piped_result for next stage from emitted items
stage_emits = list(stage_ctx.emits)
@@ -3240,14 +3279,14 @@ class PipelineExecutor:
finally:
if progress_ui is not None and pipe_idx is not None:
progress_ui.finish_pipe(pipe_idx)
if overlay_table is not None:
if output_table is not None:
try:
from SYS.rich_display import stdout_console
stdout_console().print()
stdout_console().print(overlay_table)
stdout_console().print(output_table)
except Exception:
logger.exception("Failed to render overlay_table to stdout_console")
logger.exception("Failed to render output_table to stdout_console")
if session:
try:
session.close()