Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified docs-site/assets/img/kagent-ui-chat-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs-site/assets/img/kagent-ui-chat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 10 additions & 5 deletions docs-site/content/kagent/1.x/observability/launch-ui.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,18 @@ Start at the **Agents** page to review the agents and their backing pairs of Age

Opening an agent and sending a message creates an {{< gloss "AgentInstance" >}}AgentInstance{{< /gloss >}}, which is one conversation scheduled onto a Substrate {{< gloss "Actor" >}}Actor{{< /gloss >}}. The conversation view shows the transcript, the tool calls the agent made along the way, and the controls that branch the conversation.

{{< reuse-image-light src="img/kagent-ui-chat.png" alt="A conversation with an agent, showing a tool call and a checkpoint" caption="Figure: A conversation with an agent" >}}
{{< reuse-image-dark srcDark="img/kagent-ui-chat-dark.png" alt="A conversation with an agent, showing a tool call and a checkpoint" caption="Figure: A conversation with an agent" >}}
{{< reuse-image-light src="img/kagent-ui-chat.png" alt="A conversation with an agent, showing a named snapshot and the controls on its mark" caption="Figure: A conversation with an agent" >}}
{{< reuse-image-dark srcDark="img/kagent-ui-chat-dark.png" alt="A conversation with an agent, showing a named snapshot and the controls on its mark" caption="Figure: A conversation with an agent" >}}

Two controls under the transcript branch the conversation rather than continue it.
The UI labels a {{< gloss "Checkpoint" >}}checkpoint{{< /gloss >}} **Snapshot**. The label names the pin, not the Agent Substrate {{< gloss "Snapshot" >}}snapshot{{< /gloss >}} beneath it. Agent Substrate writes a snapshot each time an Actor suspends, and a checkpoint pins one of those snapshots so that Agent Substrate does not collect it.

- **Checkpoint** pins the snapshot that the AgentInstance most recently suspended to, and records how far the transcript advanced. Agent Substrate does not collect a pinned snapshot, so the point stays available to return to. To understand how pinning works, and why a turn must be complete first, see [Checkpoints]({{< link path="substrate-runtime/suspend-and-resume#checkpoints" >}}).
- **Fork** creates a second AgentInstance from a checkpoint, continuing from the point that the checkpoint pinned. A {{< gloss "Fork" >}}fork{{< /gloss >}} inherits the checkpoint's {{< gloss "Revision" >}}Revision{{< /gloss >}}, so later edits to the AgentTemplate do not change what it runs, and new turns append only to the fork. For the same operation over the gRPC API, see [Fork the conversation into a second agent]({{< link path="examples/agent-substrate#fork-the-conversation-into-a-second-agent" >}}).
To take a checkpoint, select the save icon beside the message box. kagent pins the snapshot that the AgentInstance most recently suspended to, and records how far the transcript advanced. To understand how pinning works, and why a turn must be complete first, see [Checkpoints]({{< link path="substrate-runtime/suspend-and-resume#checkpoints" >}}).

A checkpoint appears in the transcript as a mark carrying the snapshot name and three controls. Select the mark to open the record behind it. The record holds the checkpoint's ID, turn, state, and age.

- **Fork** creates a second AgentInstance from the checkpoint, continuing from the point that the checkpoint pinned. A {{< gloss "Fork" >}}fork{{< /gloss >}} inherits the checkpoint's {{< gloss "Revision" >}}Revision{{< /gloss >}}, so later edits to the AgentTemplate do not change what it runs, and new turns append only to the fork. The fork takes the snapshot name as its own. For the same operation over the gRPC API, see [Fork the conversation into a second agent]({{< link path="examples/agent-substrate#fork-the-conversation-into-a-second-agent" >}}).
- **Rename** replaces the snapshot name that kagent generates on creation from the AgentInstance ID and the turn the checkpoint pins. Clearing the name restores that generated default.
- **Delete** removes the checkpoint and releases the snapshot it pinned. Agent Substrate is then free to collect that snapshot.

> [!NOTE]
> A checkpoint is always taken at the latest turn boundary, so the UI offers **Fork** on your own most recent message and not on earlier ones.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions docs-site/playwright/tests/chat.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ import { test, expect, gotoUI, pinClock, settle } from '../fixtures/test';
* seeded conversation has a fixed transcript, a checkpoint and a share
* (ui/src/mocks/state.ts), which is exactly the 1.0 chat surface this page needs to show.
*
* The chat labels that checkpoint "Snapshot" and carries Fork, Rename and Delete on its
* mark (kagent-dev/kagent#2847). That card is taller than the strip it replaced, so it
* pushes the transcript's tool call above the fold: `fullPage` does not recover it,
* because the transcript scrolls in its own container rather than with the page.
*
* Run it against a dev server from a kagent checkout, NOT against a cluster:
*
* cd <kagent>/ui && VITE_API_MODE=mock yarn dev --port 8101
Expand Down
Loading