This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 8a76348c18bf CAMEL-23672: TUI - Update demo tapes and add route
topology demo (#23810)
8a76348c18bf is described below
commit 8a76348c18bf1184e2143f822c195726f244b503
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Jun 6 23:33:02 2026 +0200
CAMEL-23672: TUI - Update demo tapes and add route topology demo (#23810)
* CAMEL-23672: TUI - Add documentation page
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Update hello demo tape and add route topology demo
Fix tab key numbering in hello world tape (tabs were renumbered).
Add new route-topology tape demonstrating diagram, drill-down,
external endpoints, errors, and multi-route statistics.
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Re-record hello demo and add topology demo recordings
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Convert demo recordings to animated GIF
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Rewrite documentation page with AI/MCP focus
Rewrite the TUI doc page to focus on why users should care rather than
being a reference guide (F1 in-app help covers that). Expanded the
AI/MCP section significantly with tool categories, usage examples,
and annotation workflow. Updated screenshots with fresh recordings.
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Refine doc page messaging: dev tool, not production
monitor
Emphasize that TUI is for development and prototyping. Frame around
making Camel visible (not a black box), fast prototyping, and optional
AI integration. Expand MCP section with depth-of-information paragraph.
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Longer overview pause in demo tapes
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Re-record demos with longer overview and stub kafka
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Convert screenshots from SVG to real PNG
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* Revert "CAMEL-23672: TUI - Convert screenshots from SVG to real PNG"
This reverts commit 65aaac1f532eed08bcbc19996c653aa346763dd8.
* CAMEL-23672: TUI - Use .svg extension for screenshots (they are SVG
content)
TamboUI's ExportRequest.toFile() defaults to SVG format for unknown
extensions, so screenshot files were SVG content with .png names.
Rename all screenshots to .svg and update tape files and doc references.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
* CAMEL-23672: TUI - Save SVG screenshot from F2 Take Screenshot action
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
---------
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../ROOT/images/jbang/camel-tui-hello-diagram.svg | 1 +
.../ROOT/images/jbang/camel-tui-hello-log.svg | 1 +
.../ROOT/images/jbang/camel-tui-hello-overview.svg | 1 +
.../jbang/camel-tui-topology-diagram-drilldown.svg | 1 +
.../jbang/camel-tui-topology-diagram-external.svg | 1 +
.../images/jbang/camel-tui-topology-diagram.svg | 1 +
.../images/jbang/camel-tui-topology-errors.svg | 1 +
.../images/jbang/camel-tui-topology-overview.svg | 1 +
.../images/jbang/camel-tui-topology-routes.svg | 1 +
docs/user-manual/modules/ROOT/nav.adoc | 1 +
.../modules/ROOT/pages/camel-jbang-tui.adoc | 262 +++++++++++++++++++++
.../docs/video/camel-tui-hello.cast | 99 ++++----
.../docs/video/camel-tui-hello.gif | Bin 685576 -> 569957 bytes
.../docs/video/camel-tui-hello.tape | 40 ++--
.../docs/video/camel-tui-topology.cast | 66 ++++++
.../docs/video/camel-tui-topology.gif | Bin 0 -> 1225838 bytes
.../docs/video/camel-tui-topology.tape | 92 ++++++++
.../camel-jbang-plugin-tui/docs/video/readme.md | 3 +-
.../video/screenshots/camel-tui-hello-diagram.png | 1 -
.../video/screenshots/camel-tui-hello-diagram.svg | 1 +
.../screenshots/camel-tui-hello-endpoints.png | 1 -
.../screenshots/camel-tui-hello-endpoints.svg | 1 +
.../video/screenshots/camel-tui-hello-health.png | 1 -
.../video/screenshots/camel-tui-hello-health.svg | 1 +
.../docs/video/screenshots/camel-tui-hello-log.png | 1 -
.../docs/video/screenshots/camel-tui-hello-log.svg | 1 +
.../video/screenshots/camel-tui-hello-overview.png | 1 -
.../video/screenshots/camel-tui-hello-overview.svg | 1 +
.../video/screenshots/camel-tui-hello-routes.png | 1 -
.../video/screenshots/camel-tui-hello-routes.svg | 1 +
.../camel-tui-topology-diagram-drilldown.svg | 1 +
.../camel-tui-topology-diagram-external.svg | 1 +
.../camel-tui-topology-diagram-navigate.svg | 1 +
.../screenshots/camel-tui-topology-diagram.svg | 1 +
.../screenshots/camel-tui-topology-endpoints.svg | 1 +
.../screenshots/camel-tui-topology-errors.svg | 1 +
.../video/screenshots/camel-tui-topology-final.svg | 1 +
.../screenshots/camel-tui-topology-health.svg | 1 +
.../video/screenshots/camel-tui-topology-log.svg | 1 +
.../screenshots/camel-tui-topology-overview.svg | 1 +
.../screenshots/camel-tui-topology-routes.svg | 1 +
.../dsl/jbang/core/commands/tui/CamelMonitor.java | 4 +-
42 files changed, 511 insertions(+), 88 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-diagram.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-diagram.svg
new file mode 100644
index 000000000000..c5bb4ec046b6
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-diagram.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-log.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-log.svg
new file mode 100644
index 000000000000..2c26b1f987ef
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-log.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-overview.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-overview.svg
new file mode 100644
index 000000000000..13c145d5585c
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-hello-overview.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-drilldown.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-drilldown.svg
new file mode 100644
index 000000000000..feb2806ffc5f
--- /dev/null
+++
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-drilldown.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-external.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-external.svg
new file mode 100644
index 000000000000..09a04ee544ab
--- /dev/null
+++
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram-external.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram.svg
new file mode 100644
index 000000000000..f562293f6b57
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-diagram.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-errors.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-errors.svg
new file mode 100644
index 000000000000..f4ed81b20432
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-errors.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-overview.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-overview.svg
new file mode 100644
index 000000000000..df52d1514bed
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-overview.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-routes.svg
b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-routes.svg
new file mode 100644
index 000000000000..5d4a86062512
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/images/jbang/camel-tui-topology-routes.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/nav.adoc
b/docs/user-manual/modules/ROOT/nav.adoc
index 83ae650487ec..9a7846cc9995 100644
--- a/docs/user-manual/modules/ROOT/nav.adoc
+++ b/docs/user-manual/modules/ROOT/nav.adoc
@@ -10,6 +10,7 @@
*** xref:camel-jbang-launcher.adoc[Camel JBang Launcher]
*** xref:camel-jbang-kubernetes.adoc[Camel JBang Kubernetes Plugin]
*** xref:camel-jbang-test.adoc[Camel JBang Testing Plugin]
+*** xref:camel-jbang-tui.adoc[Camel TUI]
*** xref:camel-jbang-mcp.adoc[Camel MCP Server]
** xref:camel-maven-plugin.adoc[Camel Maven Plugin]
*** xref:camel-component-maven-plugin.adoc[Camel Component Maven Plugin]
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-tui.adoc
b/docs/user-manual/modules/ROOT/pages/camel-jbang-tui.adoc
new file mode 100644
index 000000000000..9913586a5cbc
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-tui.adoc
@@ -0,0 +1,262 @@
+= Camel TUI
+
+*Available as of Camel 4.21*
+
+Camel TUI is a terminal dashboard for developing, prototyping, and
understanding Camel integrations.
+It opens up the world of Camel with visual feedback -- you can see your route
topology, watch messages
+flow through processors, inspect exchange state at every step, and understand
what Camel actually does
+with your routes. No more black box.
+
+image::jbang/camel-tui-topology-overview.svg[TUI Overview showing multiple
routes]
+
+NOTE: This module is in *Preview* status. The TUI is designed for development
and prototyping,
+not production monitoring.
+
+== Why Use the TUI?
+
+Most integration frameworks give you "run and log" -- you write routes, start
the app, and stare at
+log output hoping to understand what happens. Camel TUI takes a different
approach: it makes your
+integration visible and interactive.
+
+*Camel is not a black box.*
+The interactive route topology diagram shows how your routes connect -- which
endpoints feed into which routes,
+where messages fan out, and where failures happen. Drill into individual
routes to see every processor
+and EIP in the chain. Watch message counts update in real time. This is the
architecture you designed,
+rendered live in your terminal.
+
+image::jbang/camel-tui-topology-diagram.svg[Diagram topology view]
+
+*Understand what happens to your messages.*
+Message tracing shows the exact path each exchange takes through your routes,
with the message body,
+headers, properties, and variables at every processing step. The errors tab
collects failures with full
+stack traces. No more grepping through log files -- the TUI organizes this
information for you.
+
+*Prototype fast.*
+Run built-in examples directly from the TUI, send test messages to any
endpoint, restart routes
+on the fly, and see the effect immediately. The TUI auto-discovers every
running Camel integration
+with zero configuration.
+
+*AI and humans working together.*
+The built-in MCP server lets AI coding assistants (like Claude Code) see
everything you see in the TUI --
+and more. The AI can read structured route data, inspect message traces, send
test messages,
+and annotate the diagram with highlights and labels. You get an AI
pair-programmer that truly
+understands your running integration, not just your source code.
+
+== Getting Started
+
+Start a Camel integration:
+
+[source,bash]
+----
+camel run my-route.yaml
+----
+
+Open the TUI in another terminal:
+
+[source,bash]
+----
+camel tui
+----
+
+Or try the built-in examples directly from the TUI: press *F2* and select _Run
an example_.
+
+TIP: Press *F1* on any screen for context-sensitive help.
+The TUI is designed to be self-discoverable -- keyboard shortcuts are shown in
the footer,
+and help pages explain every tab and feature.
+
+== Route Topology Diagram
+
+The Diagram tab renders the route topology as interactive ASCII art. It shows
how routes
+connect to each other through shared endpoints (direct, seda, kafka, etc.).
+
+* Navigate between routes with arrow keys, drill into a route with *Enter*
+* Toggle external endpoints (kafka brokers, HTTP endpoints) with *e*
+* Toggle metrics overlay (message counts) with *m*
+* View route source code with *c*
+
+image::jbang/camel-tui-topology-diagram-external.svg[Diagram with external
endpoints visible]
+
+image::jbang/camel-tui-topology-diagram-drilldown.svg[Drill-down showing
internal processors]
+
+== AI Integration (MCP) -- Optional
+
+The TUI includes an embedded https://modelcontextprotocol.io/[MCP] (Model
Context Protocol) server
+that lets AI coding assistants interact with the dashboard programmatically.
This turns the TUI
+into a bridge between your running Camel integration and an AI agent.
+
+The TUI is fully functional on its own -- AI integration is entirely optional.
You get the complete
+dashboard experience with just `camel tui`. The MCP server adds a layer on top
for AI-assisted
+workflows when you want it.
+
+An AI agent connected to the TUI has access to a remarkable amount of
information: the complete
+route topology as a structured graph, every route's statistics and throughput,
message traces with
+body/headers/properties at each step, error details with stack traces,
endpoint usage, health checks,
+log entries, JVM metrics, and even the integration's source files. This is far
more context than
+an AI gets from reading source code alone -- it sees your integration
*running*.
+
+=== Enabling MCP
+
+[source,bash]
+----
+camel tui --mcp
+----
+
+This starts an MCP server on `localhost:8123` (configurable with `--mcp-port`).
+The server is bound to `127.0.0.1` only -- it never listens on external
interfaces.
+
+When MCP is active, the TUI footer shows the connection status (e.g., `MCP
:8123 (claude-code)`).
+Use *F2* → _MCP Info_ to see server details and _MCP Log_ to view the tool
call history.
+
+=== Connecting an AI Agent
+
+To connect Claude Code to the TUI, add the MCP server to your project
configuration
+(`.mcp.json` in your project root):
+
+[source,json]
+----
+{
+ "mcpServers": {
+ "camel-tui": {
+ "type": "url",
+ "url": "http://localhost:8123/mcp"
+ }
+ }
+}
+----
+
+Once connected, the AI agent can see and interact with the TUI just as you do.
+
+=== What AI Agents Can Do
+
+The MCP server exposes a comprehensive set of tools organized by purpose:
+
+==== Observe
+
+* *tui_get_screen* -- Read the current screen content (exactly what you see)
+* *tui_get_state* -- Get structured state: active tab, selected integration,
footer actions
+* *tui_get_table* -- Read table data as structured JSON (routes, endpoints,
health, etc.)
+* *tui_get_log* -- Query recent log entries with level and text filtering
+* *tui_get_errors* -- Get structured error data with stack traces and exchange
details
+* *tui_get_history* -- Read trace data: message body, headers, properties at
each processing step
+* *tui_get_topology* -- Get the route graph as JSON (nodes and edges)
+* *tui_get_diagram* -- Get the topology diagram as text art
+* *tui_get_readme* -- Read the integration's README documentation
+* *tui_get_files* -- List and read the integration's source files
+
+==== Navigate
+
+* *tui_navigate* -- Switch tabs, select integrations, select routes in the
topology
+* *tui_send_keys* -- Send keystrokes to navigate like a human would
+* *tui_filter* -- Apply text filters on tabs that support it
+
+==== Act
+
+* *tui_send_message* -- Send a test message to any Camel endpoint
+* *tui_control* -- Start/stop/restart routes or the integration itself
+* *tui_set_log_level* -- Change the runtime log level (DEBUG, INFO, WARN, etc.)
+
+==== Annotate
+
+* *tui_locate* -- Find exact screen coordinates of text or diagram nodes
+* *tui_draw_shape* -- Draw shapes on the screen: boxes, highlights, arrows,
underlines, text labels
+* *tui_draw* -- Draw individual characters at specific coordinates
+* *tui_draw_clear* -- Clear all annotations
+* *tui_show_caption* -- Display a text message with typewriter animation
+
+==== Present
+
+* *tui_action* -- Invoke actions (screenshot, tape recording, reset stats,
etc.)
+* *tui_tape_start* / *tui_tape_stop* -- Record interactions as a `.tape` file
+* *tui_sleep* -- Pace demo sequences
+* *tui_toggle_trace_display* -- Control which sections show in trace views
+
+=== Example: AI-Assisted Debugging
+
+With MCP connected, you can ask the AI agent natural-language questions like:
+
+* _"What routes are failing and why?"_ -- The agent reads the errors tab,
correlates with route statistics, and explains the failures.
+* _"Show me the message flow for the last exchange"_ -- The agent reads the
trace history and walks you through each processing step.
+* _"Highlight the failing routes on the diagram"_ -- The agent locates the
routes on the topology, draws red boxes around them, and annotates with failure
counts.
+* _"Send a test order to the API endpoint"_ -- The agent sends a message to
`platform-http:/api/orders` and watches the result flow through the routes.
+
+=== Drawing and Annotations
+
+The AI agent can annotate the TUI screen with visual overlays. This is useful
for
+highlighting areas of interest, pointing out problems, or creating annotated
screenshots
+for documentation.
+
+The typical workflow is:
+
+1. *tui_locate* to find exact coordinates (by text search or diagram node ID)
+2. *tui_draw_shape* to draw the annotation (box, highlight, arrow, text)
+
+Available shapes:
+
+* *box* -- Rectangle border around an area (e.g., highlight a route node)
+* *highlight* -- Background color on existing text, like a marker pen
+* *underline* -- Horizontal line under text
+* *arrow-down/up/left/right* -- Directional arrows for pointing at elements
+* *text* -- Text labels for explanations
+
+Multiple shapes can be composed using the `append` flag. Annotations can
auto-dismiss
+after a duration or stay until explicitly cleared.
+
+See xref:camel-jbang-mcp.adoc[Camel MCP Server] for more about MCP and AI
integration with Camel.
+
+== Recording Demos
+
+The TUI can record terminal sessions for demos and documentation.
+
+=== Live Recording
+
+Press *Ctrl+R* (or use the *F2* actions menu) to start recording your session
as a `.tape` file.
+Press *Ctrl+R* again to stop. The tape captures your keystrokes with timing,
producing a script
+that can be replayed or converted to an animated GIF.
+
+=== Scripted Recording
+
+Use the `--record` flag to replay a `.tape` file in headless mode and produce
an
+https://asciinema.org/[Asciinema] `.cast` recording:
+
+[source,bash]
+----
+camel tui --record=demo.tape
+----
+
+=== Converting to GIF
+
+Convert recordings using https://github.com/asciinema/agg[agg] (for `.cast`
files) or
+https://github.com/charmbracelet/vhs[VHS] (for `.tape` files):
+
+[source,bash]
+----
+agg recording.cast out.gif # .cast -> .gif
+vhs demo.tape # .tape -> .gif
+----
+
+== Command Line Options
+
+[cols="2,5,1",options="header"]
+|===
+| Option | Description | Default
+
+| `[name\|pid]`
+| Name or PID of the Camel integration to monitor. When omitted, the TUI
auto-discovers running integrations.
+|
+
+| `--mcp`
+| Enable the embedded MCP server for AI agent access to the TUI.
+| `false`
+
+| `--mcp-port`
+| Port for the embedded MCP server.
+| `8123`
+
+| `--refresh`
+| Screen refresh interval in milliseconds.
+| `100`
+
+| `--record`
+| Replay a `.tape` file and record the session to an Asciinema `.cast` file.
+|
+|===
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.cast
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.cast
index 4031c45820de..7ae2ac0bb7eb 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.cast
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.cast
@@ -1,59 +1,40 @@
-{"version": 2, "width": 200, "height": 50, "timestamp": 1779272014, "env":
{"TERM": "xterm-256color"}}
-[0.000000, "o", "\u001b[2J\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel
TUI\u001b[0m \u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1
integration(s)\u001b[0m
\u001b[2;1H
[...]
-[0.140000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[0.406000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[0.680000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[1.602000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[1.734000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[2.270000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[2.527000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[2.662000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[2.795000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[3.330000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[3.457000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[3.717000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
-[4.148000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[4.678000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[5.734000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[6.648000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[7.681000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[7.812000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[8.191000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[8.981000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[9.646000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[10.703000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[11.881000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[12.119000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[12.254000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[12.788000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[13.169000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[13.439000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[13.809000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[14.444000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[14.834000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[15.484000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[15.849000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[16.650000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[16.913000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[17.150000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[17.283000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[17.650000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[18.830000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[19.757000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[20.820000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[21.223000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[25.297000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[25.559000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[25.686000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[25.929000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[26.289000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[26.527000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[26.770000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[27.009000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[27.415000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[27.544000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[27.815000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[28.081000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[28.478000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[28.739000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
-[29.134000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+{"version": 2, "width": 200, "height": 50, "timestamp": 1780779683, "env":
{"TERM": "xterm-256color"}}
+[0.000000, "o", "\u001b[2J\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel
TUI\u001b[0m \u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m0
integration(s)\u001b[0m
\u001b[2;1H
[...]
+[1.968000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.206000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.733000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.261000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.646000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.193000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.322000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.726000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.260000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.392000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.787000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[6.042000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[7.236000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[8.006000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[8.256000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[9.173000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[9.301000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[10.092000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[10.226000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[10.361000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[11.128000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[11.376000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[12.201000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[13.125000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[13.261000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[14.193000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[14.299000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[15.230000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[16.128000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[16.238000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[17.128000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[17.346000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[18.268000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[19.166000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[20.174000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[21.206000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[21.474000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: timer-log\u001b[0m
\u001b[2;1H
[...]
+[22.125000, "o", ""]
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.gif
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.gif
index 8026062396cf..e5f3b4e72ede 100644
Binary files
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.gif and
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.gif differ
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.tape
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.tape
index a0de446c05fc..70c9514aa6fd 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.tape
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-hello.tape
@@ -16,39 +16,37 @@
#
# Overview tab shows running integrations
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-overview.png
+Sleep 6s
+Screenshot screenshots/camel-tui-hello-overview.svg
+
+# Log tab - see Hello World messages flowing
+Type "2"
+Sleep 3s
+Screenshot screenshots/camel-tui-hello-log.svg
# Routes tab - see the timer route
+Type "4"
+Sleep 3s
+Screenshot screenshots/camel-tui-hello-routes.svg
+
+# Diagram tab - route visualization
Type "3"
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-routes.png
-
-# Route diagram
-Type "D"
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-diagram.png
-Type "D"
-Sleep 1s
+Sleep 3s
+Screenshot screenshots/camel-tui-hello-diagram.svg
# Endpoints tab
Type "5"
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-endpoints.png
-
-# Log tab - see Hello World messages flowing
-Type "2"
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-log.png
+Sleep 3s
+Screenshot screenshots/camel-tui-hello-endpoints.svg
# Health tab
Type "7"
-Sleep 4s
-Screenshot screenshots/camel-tui-hello-health.png
+Sleep 3s
+Screenshot screenshots/camel-tui-hello-health.svg
# Back to overview
Type "1"
-Sleep 4s
+Sleep 1s
# Quit
Type "q"
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.cast
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.cast
new file mode 100644
index 000000000000..a6fc38e488f5
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.cast
@@ -0,0 +1,66 @@
+{"version": 2, "width": 200, "height": 50, "timestamp": 1780779749, "env":
{"TERM": "xterm-256color"}}
+[0.000000, "o", "\u001b[2J\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel
TUI\u001b[0m \u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m0
integration(s)\u001b[0m
\u001b[2;1H
[...]
+[1.965000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.206000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.327000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.566000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[2.687000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.221000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.352000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.487000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[3.746000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.277000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.412000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[4.807000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.327000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.446000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[5.811000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[6.478000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[6.741000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[7.367000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[7.619000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[7.727000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[2;1H
[...]
+[8.096000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[9.681000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[10.727000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[11.645000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[11.781000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[12.186000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[12.698000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[13.193000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[13.853000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[14.104000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[14.885000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[15.136000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[15.919000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[17.064000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[17.979000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[18.244000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[19.150000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[20.201000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[21.113000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[21.218000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[22.266000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[23.179000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[23.299000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[25.426000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[26.203000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[29.333000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[30.651000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[31.696000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[32.302000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[33.733000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[34.871000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[35.373000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[36.033000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[37.077000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[37.986000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[38.087000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[38.362000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[39.151000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[40.186000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[40.814000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[40.915000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[42.338000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[43.362000, "o", "\u001b[1;1H\u001b[0;38;2;246;145;35;1m Camel TUI\u001b[0m
\u001b[0;32mv4.21.0-SNAPSHOT\u001b[0m \u001b[0;36m1 integration(s)\u001b[0m
\u001b[0;33mselected: route-topology\u001b[0m
\u001b[2;1H
[...]
+[44.819000, "o", ""]
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.gif
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.gif
new file mode 100644
index 000000000000..4c75a9c86e57
Binary files /dev/null and
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.gif
differ
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.tape
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.tape
new file mode 100644
index 000000000000..e46128a8e977
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/camel-tui-topology.tape
@@ -0,0 +1,92 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Overview - 7 interconnected routes
+Sleep 8s
+Screenshot screenshots/camel-tui-topology-overview.svg
+
+# Diagram tab - topology view
+Type "3"
+Sleep 4s
+Screenshot screenshots/camel-tui-topology-diagram.svg
+
+# Navigate to different routes
+Down
+Sleep 1s
+Down
+Sleep 1s
+Down
+Sleep 1s
+Screenshot screenshots/camel-tui-topology-diagram-navigate.svg
+
+# Toggle external endpoints
+Type "e"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-diagram-external.svg
+
+# Drill into a route
+Enter
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-diagram-drilldown.svg
+
+# Back to topology
+Escape
+Sleep 1s
+
+# Toggle external off
+Type "e"
+Sleep 1s
+
+# Routes tab - all 7 routes with statistics
+Type "4"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-routes.svg
+
+# Errors tab - see failures
+Type "9"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-errors.svg
+
+# Log tab
+Type "2"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-log.svg
+
+# Health tab
+Type "7"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-health.svg
+
+# Endpoints tab
+Type "5"
+Sleep 3s
+Screenshot screenshots/camel-tui-topology-endpoints.svg
+
+# Back to overview
+Type "1"
+Sleep 2s
+
+# Fun caption to end the demo
+Ctrl+t
+Sleep 500ms
+Type "Thanks for watching! Happy integrating with Apache Camel!"
+Enter
+Sleep 4s
+Screenshot screenshots/camel-tui-topology-final.svg
+
+# Quit
+Type "q"
diff --git a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/readme.md
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/readme.md
index 5300152022be..ec063023a99d 100644
--- a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/readme.md
+++ b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/readme.md
@@ -139,7 +139,8 @@ terminal interactions (`Type`, `Sleep`, `Screenshot`, etc.).
| File | Description |
|------|-------------|
-| `camel-tui-hello.tape` | First impression — basic Hello World tour across
all main tabs |
+| `camel-tui-hello.tape` | Quick tour (~25s) — Hello World timer-log across
main tabs |
+| `camel-tui-topology.tape` | Full demo (~2 min) — Route topology with 7
routes, diagram drill-down, errors, and more |
## Output
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.png
deleted file mode 100644
index cbf6e2c6d33f..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.svg
new file mode 100644
index 000000000000..19491ec28921
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-diagram.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.png
deleted file mode 100644
index 06d77b8b04de..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.svg
new file mode 100644
index 000000000000..d0096f2ed8a5
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-endpoints.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.png
deleted file mode 100644
index c482d7f802d0..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.svg
new file mode 100644
index 000000000000..c2d423715583
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-health.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.png
deleted file mode 100644
index 8d26ea7c1c0d..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.svg
new file mode 100644
index 000000000000..85f1274ca54b
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-log.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.png
deleted file mode 100644
index a4c4e63ba82b..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.svg
new file mode 100644
index 000000000000..035530fa7909
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-overview.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.png
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.png
deleted file mode 100644
index c42cc6af06b3..000000000000
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.png
+++ /dev/null
@@ -1 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.svg
new file mode 100644
index 000000000000..f58469b714da
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-hello-routes.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-drilldown.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-drilldown.svg
new file mode 100644
index 000000000000..f443afbcf690
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-drilldown.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-external.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-external.svg
new file mode 100644
index 000000000000..9431ee81eceb
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-external.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-navigate.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-navigate.svg
new file mode 100644
index 000000000000..15aede0283f1
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram-navigate.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram.svg
new file mode 100644
index 000000000000..f3d49249373d
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-diagram.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-endpoints.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-endpoints.svg
new file mode 100644
index 000000000000..9c3fd0da023b
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-endpoints.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-errors.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-errors.svg
new file mode 100644
index 000000000000..a582e987073b
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-errors.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-final.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-final.svg
new file mode 100644
index 000000000000..1102680caa26
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-final.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-health.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-health.svg
new file mode 100644
index 000000000000..5fbfe3d7b03f
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-health.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-log.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-log.svg
new file mode 100644
index 000000000000..31ef9dc696b2
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-log.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-overview.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-overview.svg
new file mode 100644
index 000000000000..bf963e7867aa
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-overview.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-routes.svg
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-routes.svg
new file mode 100644
index 000000000000..62221afa6ab3
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/docs/video/screenshots/camel-tui-topology-routes.svg
@@ -0,0 +1 @@
+<svg class="rich-terminal" viewBox="0 0 2458 1270"
xmlns="http://www.w3.org/2000/svg"> <!-- Generated with TamboUI -->
<style> @font-face { font-family: "Fira Code"; src:
local("FiraCode-Regular"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2")
format("woff2"),
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff")
format("woff"); font-style: normal; [...]
\ No newline at end of file
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
index 1f935cbe9020..a53e2f560922 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
@@ -2185,11 +2185,13 @@ public class CamelMonitor extends CamelCommand {
try {
String timestamp =
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss"));
String baseName = "camel-tui-screenshot-" + timestamp;
+ Path svgPath = Path.of(baseName + ".svg");
Path txtPath = Path.of(baseName + ".txt");
Path ansPath = Path.of(baseName + ".ans");
+ ExportRequest.export(buf).svg().toFile(svgPath);
ExportRequest.export(buf).text().toFile(txtPath);
ExportRequest.export(buf).text().options(o ->
o.styles(true)).toFile(ansPath);
- screenshotMessage = "Screenshot saved to " +
txtPath.toAbsolutePath() + " (and .ans with colors)";
+ screenshotMessage = "Screenshot saved to " +
svgPath.toAbsolutePath() + " (and .txt, .ans)";
screenshotMessageTime = System.currentTimeMillis();
} catch (IOException e) {
screenshotMessage = "Screenshot failed: " + e.getMessage();