@botpress/adk-cli 1.19.0-beta.3 → 1.19.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/ui-dist/assets/{index-CSTz-oTK.js → index-B3b7PPgV.js} +4 -4
- package/{dist/index-DNqXHLNi-27nvpkee.js → assets/ui-dist/assets/index-BESZeTO5.js} +2 -2
- package/{dist/index-DAztRXeA-vr85xnxs.css → assets/ui-dist/assets/index-DIFGtVmI.css} +1 -1
- package/{dist/index-DfjXY3Oo-szsanhnt.js → assets/ui-dist/assets/index-a3ZL0_Jr.js} +2 -2
- package/assets/ui-dist/index.html +2 -2
- package/dist/{README-wjb7z7f0.md → README-824wa4jj.md} +1 -1
- package/dist/SKILL-75ym6tcj.md +257 -0
- package/dist/SKILL-chnwzmt1.md +548 -0
- package/dist/SKILL-d4bs53y3.md +244 -0
- package/dist/SKILL-h4b2f1n9.md +114 -0
- package/dist/SKILL-hbw5nt95.md +111 -0
- package/dist/actions-h7hxxvxr.md +823 -0
- package/dist/adk-build-emhwd0tg.md +39 -0
- package/dist/adk-debug-yrrdtpmb.md +23 -0
- package/dist/adk-dev-console-7z9rtjpy.md +17 -0
- package/dist/adk-document-ras6zzzh.md +68 -0
- package/dist/adk-eval-vx76dwq0.md +17 -0
- package/dist/adk-explain-fcsaw852.md +22 -0
- package/dist/adk-init-9kmxmbbe.md +30 -0
- package/dist/adk-ship-dybzn884.md +29 -0
- package/dist/adk-test-xq67savs.md +27 -0
- package/dist/adk-validate-1p4skv4m.md +31 -0
- package/dist/advanced-patterns-z86m9h1a.md +669 -0
- package/dist/agent-config-1aqvkrgf.md +450 -0
- package/dist/agent-steps-zj4c1n9t.md +115 -0
- package/dist/agent0-assets/skills/adk/SKILL.md +5 -5
- package/dist/agent0-assets/skills/adk/references/cli.md +265 -24
- package/dist/agent0-assets/skills/adk-debugger/SKILL.md +5 -5
- package/dist/agent0-assets/skills/adk-debugger/references/common-failures.md +1 -1
- package/dist/agent0-assets/skills/adk-debugger/references/debug-workflow.md +3 -3
- package/dist/agent0-assets/skills/adk-debugger/references/traces-and-logs.md +15 -7
- package/dist/assets-q7jt8r2q.md +237 -0
- package/dist/autonomous-execution-fymc12e5.md +747 -0
- package/dist/cli-c31e06yr.md +1334 -0
- package/dist/cli.js +963 -548
- package/dist/commands.json +24 -3
- package/dist/common-failures-ht29w2db.md +231 -0
- package/dist/component-registry-bbpw0see.md +43 -0
- package/dist/context-api-760cvh0h.md +461 -0
- package/dist/conversation-analysis-8ka4nrm4.md +420 -0
- package/dist/conversation-lifecycle-4seqqjc1.md +311 -0
- package/dist/conversations-gwfvxaee.md +1111 -0
- package/dist/custom-components-y5wdgpey.md +167 -0
- package/dist/debug-workflow-vz84q80v.md +239 -0
- package/dist/desk-k54ktvsd.md +852 -0
- package/dist/doc-standards-ck6ax2jd.md +124 -0
- package/dist/eval-format-7n9brja4.md +354 -0
- package/dist/evals-y1zcr1mc.md +11 -0
- package/dist/explain-config-1yaq3zzd.md +424 -0
- package/dist/files-dzt0wxn3.md +918 -0
- package/dist/{index-gqxgqnyz.html → index-3t354nbw.html} +2 -2
- package/dist/{index-CSTz-oTK-mdfh47r8.js → index-B3b7PPgV-zetkb01w.js} +4 -4
- package/{assets/ui-dist/assets/index-DNqXHLNi.js → dist/index-BESZeTO5-2rpmcefa.js} +2 -2
- package/{assets/ui-dist/assets/index-DAztRXeA.css → dist/index-DIFGtVmI-d4dhjg97.css} +1 -1
- package/{assets/ui-dist/assets/index-DfjXY3Oo.js → dist/index-a3ZL0_Jr-q145h35p.js} +2 -2
- package/dist/integration-actions-xang7tma.md +659 -0
- package/dist/integrations-k5ss07f4.md +266 -0
- package/dist/interfaces-6t0bpxs4.md +97 -0
- package/dist/knowledge-bases-20rg8p5c.md +456 -0
- package/dist/llm-debugging-76ng8rzm.md +209 -0
- package/dist/mcp-server-n1asyzhv.md +112 -0
- package/dist/messages-gkkg0b54.md +769 -0
- package/dist/model-configuration-f273kgd0.md +201 -0
- package/dist/multi-agent-dashboard-1mdfjdts.md +70 -0
- package/dist/pages-xn18xn73.md +273 -0
- package/dist/patterns-mistakes-5vb99dhf.md +469 -0
- package/dist/plugins-ttnx8f49.md +280 -0
- package/dist/tables-x45t36dd.md +1136 -0
- package/dist/tags-46td3qrg.md +516 -0
- package/dist/test-patterns-hj47w4nc.md +355 -0
- package/dist/testing-workflow-2vkp932f.md +225 -0
- package/dist/tools-wk7bq24z.md +581 -0
- package/dist/trace-summarization-hdyx1c2e.md +313 -0
- package/dist/traces-and-logs-f2kjfh19.md +203 -0
- package/dist/triggers-4j2cc86x.md +719 -0
- package/dist/ui-server-entry.js +977 -162
- package/dist/workflow-steps-mrdrf1c5.md +851 -0
- package/dist/workflows-gadx3s69.md +1408 -0
- package/dist/zai-agent-reference-e6644aad.md +454 -0
- package/dist/zai-complete-guide-mnna5d6f.md +1408 -0
- package/package.json +4 -4
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
# Conversation Analysis
|
|
2
|
+
|
|
3
|
+
How to summarize and explain full conversations using the `adk conversations` command. A conversation spans multiple turns (traces), so this is a higher-level view than single-trace analysis.
|
|
4
|
+
|
|
5
|
+
For single-trace summaries, see `trace-summarization.md`. This document covers multi-turn conversation-level analysis.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## CLI Commands
|
|
10
|
+
|
|
11
|
+
### List recent conversations
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
adk conversations --format json
|
|
15
|
+
adk conversations list limit=5 --format json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Output** (JSON): Array of objects, each with:
|
|
19
|
+
|
|
20
|
+
| Field | Type | Description |
|
|
21
|
+
|-------|------|-------------|
|
|
22
|
+
| `conversationId` | string | Unique conversation identifier |
|
|
23
|
+
| `firstSeen` | string | ISO timestamp of the first recorded turn |
|
|
24
|
+
| `lastSeen` | string | ISO timestamp of the most recent turn |
|
|
25
|
+
| `traceCount` | number | Total number of turns in the conversation |
|
|
26
|
+
| `integration` | string | Which integration the conversation came from (e.g., `slack`, `webchat`) |
|
|
27
|
+
| `channel` | string | Which channel within the integration (e.g., `dm`, `thread`) |
|
|
28
|
+
| `hasErrors` | boolean | Whether any turn in the conversation had errors |
|
|
29
|
+
|
|
30
|
+
### Show a conversation's timeline
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Standard view
|
|
34
|
+
adk conversations show <conversation-id> --format json
|
|
35
|
+
|
|
36
|
+
# With LLM reasoning included
|
|
37
|
+
adk conversations show <conversation-id> --include-llm --format json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Output** (JSON): Object with:
|
|
41
|
+
|
|
42
|
+
| Field | Type | Description |
|
|
43
|
+
|-------|------|-------------|
|
|
44
|
+
| `conversationId` | string | The conversation ID |
|
|
45
|
+
| `turnCount` | number | Total number of turns |
|
|
46
|
+
| `turns` | array | Ordered list of turn objects |
|
|
47
|
+
|
|
48
|
+
Each turn object contains:
|
|
49
|
+
|
|
50
|
+
| Field | Type | Description |
|
|
51
|
+
|-------|------|-------------|
|
|
52
|
+
| `traceId` | string | Trace ID for this turn (use for drill-down) |
|
|
53
|
+
| `startedAt` | string | ISO timestamp when the turn started |
|
|
54
|
+
| `duration` | string | How long the turn took (e.g., `"2.3s"`) |
|
|
55
|
+
| `status` | string | `"ok"` or `"error"` |
|
|
56
|
+
| `trigger` | string | What started this turn (e.g., user message, event, workflow) |
|
|
57
|
+
| `toolCalls` | array | Tools invoked during this turn |
|
|
58
|
+
| `errors` | array | Error strings, if any |
|
|
59
|
+
| `llmContent` | array | LLM reasoning data (only with `--include-llm`) |
|
|
60
|
+
|
|
61
|
+
Each `toolCalls` entry has: `name`, `status`, `duration`, `error?`
|
|
62
|
+
|
|
63
|
+
Each `llmContent` entry has: `name`, `data`
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Two Modes of Analysis
|
|
68
|
+
|
|
69
|
+
### 1. Summarize a Conversation
|
|
70
|
+
|
|
71
|
+
**Purpose:** Give a concise overview of what happened -- a paragraph or two covering the full conversation arc.
|
|
72
|
+
|
|
73
|
+
**When to use:** The developer asks "What happened in this conversation?", "Summarize conversation X", or wants a quick picture before diving deeper.
|
|
74
|
+
|
|
75
|
+
**Data source:**
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
adk conversations show <conversation-id> --format json
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
No need for `--include-llm` -- the standard view has enough for a summary.
|
|
82
|
+
|
|
83
|
+
**What to cover:**
|
|
84
|
+
|
|
85
|
+
1. **Who and where** -- integration, channel, how many turns, time span
|
|
86
|
+
2. **The flow** -- what the user asked for, what the agent did, how the conversation progressed
|
|
87
|
+
3. **Tools used** -- which tools were called and how often
|
|
88
|
+
4. **Outcome** -- did the conversation succeed? Were there errors? How did it end?
|
|
89
|
+
5. **Red flags** -- only if present: errors, long durations, many turns for a simple task
|
|
90
|
+
|
|
91
|
+
**How to write it:**
|
|
92
|
+
|
|
93
|
+
Write a natural-language paragraph, not a list or template. Synthesize the turn data into a narrative.
|
|
94
|
+
|
|
95
|
+
#### Example
|
|
96
|
+
|
|
97
|
+
Given this conversation data:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"conversationId": "conv_abc123",
|
|
102
|
+
"turnCount": 4,
|
|
103
|
+
"turns": [
|
|
104
|
+
{
|
|
105
|
+
"traceId": "tr_001",
|
|
106
|
+
"startedAt": "2026-04-21T14:00:00.000Z",
|
|
107
|
+
"duration": "1.8s",
|
|
108
|
+
"status": "ok",
|
|
109
|
+
"trigger": "User message via slack/dm",
|
|
110
|
+
"toolCalls": [],
|
|
111
|
+
"errors": []
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"traceId": "tr_002",
|
|
115
|
+
"startedAt": "2026-04-21T14:00:05.000Z",
|
|
116
|
+
"duration": "3.2s",
|
|
117
|
+
"status": "ok",
|
|
118
|
+
"trigger": "User message via slack/dm",
|
|
119
|
+
"toolCalls": [
|
|
120
|
+
{ "name": "lookupOrder", "status": "ok", "duration": "0.9s" }
|
|
121
|
+
],
|
|
122
|
+
"errors": []
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"traceId": "tr_003",
|
|
126
|
+
"startedAt": "2026-04-21T14:00:15.000Z",
|
|
127
|
+
"duration": "4.1s",
|
|
128
|
+
"status": "error",
|
|
129
|
+
"trigger": "User message via slack/dm",
|
|
130
|
+
"toolCalls": [
|
|
131
|
+
{ "name": "cancelOrder", "status": "error", "duration": "1.2s", "error": "Cannot cancel shipped order" }
|
|
132
|
+
],
|
|
133
|
+
"errors": ["Cannot cancel shipped order"]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"traceId": "tr_004",
|
|
137
|
+
"startedAt": "2026-04-21T14:00:25.000Z",
|
|
138
|
+
"duration": "2.0s",
|
|
139
|
+
"status": "ok",
|
|
140
|
+
"trigger": "User message via slack/dm",
|
|
141
|
+
"toolCalls": [],
|
|
142
|
+
"errors": []
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Good summary:**
|
|
149
|
+
|
|
150
|
+
> A 4-turn Slack DM conversation over about 30 seconds. The user started with a greeting, then asked about an order -- the agent looked it up with `lookupOrder`. The user then asked to cancel the order, but `cancelOrder` failed because the order was already shipped. The agent recovered in the final turn without needing more tools, likely explaining the situation to the user. One error occurred (`cancelOrder` failure) but it was handled gracefully.
|
|
151
|
+
|
|
152
|
+
**Bad summary:**
|
|
153
|
+
|
|
154
|
+
> Turn 1: traceId tr_001, status ok, no tools. Turn 2: traceId tr_002, called lookupOrder, status ok. Turn 3: traceId tr_003, called cancelOrder, status error, error "Cannot cancel shipped order". Turn 4: traceId tr_004, status ok, no tools.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### 2. Explain a Conversation
|
|
159
|
+
|
|
160
|
+
**Purpose:** Provide a detailed, step-by-step breakdown where the developer understands every decision the agent made.
|
|
161
|
+
|
|
162
|
+
**When to use:** The developer asks "Walk me through this conversation", "Explain what happened", "Why did the bot respond that way?", or is investigating a specific behavior.
|
|
163
|
+
|
|
164
|
+
**Data source:**
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
adk conversations show <conversation-id> --include-llm --format json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Always use `--include-llm`** for explanations. Without it, you lose the LLM's reasoning, which is essential for explaining *why* the agent did what it did.
|
|
171
|
+
|
|
172
|
+
**What to cover for each turn:**
|
|
173
|
+
|
|
174
|
+
1. **The trigger** -- what started this turn (user message, event, workflow continuation)
|
|
175
|
+
2. **LLM reasoning** -- what the agent decided to do and why (from `llmContent`)
|
|
176
|
+
3. **Tool calls** -- what was called, with what inputs, what happened
|
|
177
|
+
4. **Errors** -- what went wrong and how the agent responded
|
|
178
|
+
5. **The response** -- what the agent said back (infer from context if not explicit)
|
|
179
|
+
6. **Transitions** -- how one turn's outcome led to the next
|
|
180
|
+
|
|
181
|
+
**How to write it:**
|
|
182
|
+
|
|
183
|
+
Walk through turns chronologically. For each turn, narrate what happened as a coherent paragraph. Use tool names in backticks, quote key values, and explain the agent's reasoning when `llmContent` provides it.
|
|
184
|
+
|
|
185
|
+
#### Example
|
|
186
|
+
|
|
187
|
+
Given the same conversation with `--include-llm`:
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"conversationId": "conv_abc123",
|
|
192
|
+
"turnCount": 4,
|
|
193
|
+
"turns": [
|
|
194
|
+
{
|
|
195
|
+
"traceId": "tr_001",
|
|
196
|
+
"startedAt": "2026-04-21T14:00:00.000Z",
|
|
197
|
+
"duration": "1.8s",
|
|
198
|
+
"status": "ok",
|
|
199
|
+
"trigger": "User message via slack/dm",
|
|
200
|
+
"toolCalls": [],
|
|
201
|
+
"errors": [],
|
|
202
|
+
"llmContent": [
|
|
203
|
+
{ "name": "cognitive.iteration", "data": "The user said 'Hi, I need help with an order'. This is a greeting with intent to discuss an order. I'll respond and ask for the order number." }
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"traceId": "tr_002",
|
|
208
|
+
"startedAt": "2026-04-21T14:00:05.000Z",
|
|
209
|
+
"duration": "3.2s",
|
|
210
|
+
"status": "ok",
|
|
211
|
+
"trigger": "User message via slack/dm",
|
|
212
|
+
"toolCalls": [
|
|
213
|
+
{ "name": "lookupOrder", "status": "ok", "duration": "0.9s" }
|
|
214
|
+
],
|
|
215
|
+
"errors": [],
|
|
216
|
+
"llmContent": [
|
|
217
|
+
{ "name": "cognitive.iteration", "data": "The user provided order number #4521. I should look this up to get the details before responding." }
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"traceId": "tr_003",
|
|
222
|
+
"startedAt": "2026-04-21T14:00:15.000Z",
|
|
223
|
+
"duration": "4.1s",
|
|
224
|
+
"status": "error",
|
|
225
|
+
"trigger": "User message via slack/dm",
|
|
226
|
+
"toolCalls": [
|
|
227
|
+
{ "name": "cancelOrder", "status": "error", "duration": "1.2s", "error": "Cannot cancel shipped order" }
|
|
228
|
+
],
|
|
229
|
+
"errors": ["Cannot cancel shipped order"],
|
|
230
|
+
"llmContent": [
|
|
231
|
+
{ "name": "cognitive.iteration", "data": "The user wants to cancel order #4521. I'll use cancelOrder." },
|
|
232
|
+
{ "name": "cognitive.iteration", "data": "cancelOrder failed -- the order is already shipped. I need to tell the user and suggest a return instead." }
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"traceId": "tr_004",
|
|
237
|
+
"startedAt": "2026-04-21T14:00:25.000Z",
|
|
238
|
+
"duration": "2.0s",
|
|
239
|
+
"status": "ok",
|
|
240
|
+
"trigger": "User message via slack/dm",
|
|
241
|
+
"toolCalls": [],
|
|
242
|
+
"errors": [],
|
|
243
|
+
"llmContent": [
|
|
244
|
+
{ "name": "cognitive.iteration", "data": "The user asked how to start a return. I know the process from the instructions -- they need to go to the returns portal. No tool call needed." }
|
|
245
|
+
]
|
|
246
|
+
}
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Good explanation:**
|
|
252
|
+
|
|
253
|
+
> **Turn 1** (tr_001, 1.8s): The user opened the conversation in Slack DM with "Hi, I need help with an order." The agent recognized this as a greeting with order-related intent and responded by asking for the order number. No tools were needed.
|
|
254
|
+
>
|
|
255
|
+
> **Turn 2** (tr_002, 3.2s): The user provided order #4521. The agent called `lookupOrder` to retrieve the order details (completed in 0.9s). The lookup succeeded and the agent relayed the order information to the user.
|
|
256
|
+
>
|
|
257
|
+
> **Turn 3** (tr_003, 4.1s): The user asked to cancel the order. The agent called `cancelOrder`, which failed with "Cannot cancel shipped order" -- the order had already shipped. The agent's reasoning shows it recognized the failure and decided to suggest a return as an alternative. The turn is marked as `error` because of the tool failure, but the agent handled it gracefully.
|
|
258
|
+
>
|
|
259
|
+
> **Turn 4** (tr_004, 2.0s): The user asked how to start a return. The agent answered from its instructions without needing any tool calls, directing the user to the returns portal. The conversation ended successfully.
|
|
260
|
+
>
|
|
261
|
+
> **Overall:** The conversation followed a natural support flow -- greeting, order lookup, failed cancellation handled with a fallback suggestion, and resolution. The `cancelOrder` error is expected behavior for a shipped order, not a bug.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Picking Which Conversation to Analyze
|
|
266
|
+
|
|
267
|
+
When the developer doesn't specify a conversation ID, help them find the right one.
|
|
268
|
+
|
|
269
|
+
### Step 1: List conversations
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
adk conversations --format json
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Step 2: Narrow down
|
|
276
|
+
|
|
277
|
+
Use the list output to identify the conversation. Key signals:
|
|
278
|
+
|
|
279
|
+
| Signal | How to Use |
|
|
280
|
+
|--------|-----------|
|
|
281
|
+
| `lastSeen` | Most recent conversation is usually the one they're asking about |
|
|
282
|
+
| `hasErrors` | If they're debugging a failure, look for `hasErrors: true` |
|
|
283
|
+
| `integration` / `channel` | If they mention "the Slack conversation" or "the webchat issue", match on these |
|
|
284
|
+
| `traceCount` | High turn counts may indicate stuck loops or long interactions |
|
|
285
|
+
|
|
286
|
+
### Step 3: Show the conversation
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
adk conversations show <conversation-id> --format json
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
If the developer needs more detail, add `--include-llm`.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Correlating with Trace Data
|
|
297
|
+
|
|
298
|
+
Each turn in the conversation has a `traceId`. This is the bridge between conversation-level and trace-level analysis.
|
|
299
|
+
|
|
300
|
+
**When to drill into a trace:**
|
|
301
|
+
|
|
302
|
+
- A turn has `status: "error"` and you need the full span tree to understand why
|
|
303
|
+
- A tool call failed and you need the stack trace or detailed error
|
|
304
|
+
- The LLM reasoning (from `llmContent`) is surprising and you want to see the full `think` spans
|
|
305
|
+
- You need to see the exact inputs/outputs of a tool call
|
|
306
|
+
|
|
307
|
+
**How to drill down:**
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Get the full trace for a specific turn
|
|
311
|
+
adk traces trace=<trace-id> --include-llm --format json
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
Then use the trace-reading techniques from `trace-summarization.md` to analyze the individual trace.
|
|
315
|
+
|
|
316
|
+
**Flow:**
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
adk conversations list → find the conversation
|
|
320
|
+
adk conversations show <id> → see the timeline
|
|
321
|
+
adk traces trace=<trace-id> → drill into a specific turn
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Common Patterns to Highlight
|
|
327
|
+
|
|
328
|
+
When analyzing conversations, watch for these patterns and call them out.
|
|
329
|
+
|
|
330
|
+
### Long conversations
|
|
331
|
+
|
|
332
|
+
A conversation with many turns (10+) for what should be a simple task.
|
|
333
|
+
|
|
334
|
+
**What to say:** Flag the turn count, identify where the conversation got stuck or went off track, and suggest whether the issue is in the agent's instructions, tool design, or workflow logic.
|
|
335
|
+
|
|
336
|
+
### Error recovery
|
|
337
|
+
|
|
338
|
+
The agent encounters an error but recovers in a subsequent turn.
|
|
339
|
+
|
|
340
|
+
**What to say:** Note that the agent handled the error gracefully, explain the recovery path, and confirm whether the behavior is correct or accidental.
|
|
341
|
+
|
|
342
|
+
### Tool call chains
|
|
343
|
+
|
|
344
|
+
Multiple tools called in sequence within a single turn, or across turns, to accomplish a multi-step task.
|
|
345
|
+
|
|
346
|
+
**What to say:** Describe the chain, note whether each step depended on the previous one's output, and flag any unnecessary calls.
|
|
347
|
+
|
|
348
|
+
### Stuck loops
|
|
349
|
+
|
|
350
|
+
The agent calls the same tool repeatedly across multiple turns or within a single turn.
|
|
351
|
+
|
|
352
|
+
**What to say:** Identify the repeating pattern, explain why the agent is stuck (from `llmContent` if available), and suggest fixes (improve tool output, add `onBeforeTool` guard, set `maxIterations`). See `llm-debugging.md` for more on looping.
|
|
353
|
+
|
|
354
|
+
### Silent failures
|
|
355
|
+
|
|
356
|
+
A turn completes with `status: "ok"` but the agent didn't actually accomplish the task (e.g., returned a generic response without calling a tool).
|
|
357
|
+
|
|
358
|
+
**What to say:** Flag the gap between expected and actual behavior, and suggest investigating the LLM reasoning with `--include-llm`.
|
|
359
|
+
|
|
360
|
+
### Integration-specific patterns
|
|
361
|
+
|
|
362
|
+
Different integrations have different conversation patterns -- Slack threads vs webchat sessions vs API calls.
|
|
363
|
+
|
|
364
|
+
**What to say:** Note the integration and channel, and flag anything unusual for that context (e.g., a webchat conversation with 50 turns might indicate the user is stuck in a loop, while a Slack thread with 50 turns might be a busy channel).
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## Patterns
|
|
369
|
+
|
|
370
|
+
✅ **Summarize first, explain on request**
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
Developer: "What happened in conv_abc123?"
|
|
374
|
+
→ Start with a summary (no --include-llm needed)
|
|
375
|
+
→ Only drill into explanation if they ask for more detail
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
✅ **Use the conversation timeline as a map**
|
|
379
|
+
|
|
380
|
+
```
|
|
381
|
+
Good: "The conversation had 4 turns. Turn 3 is where the error occurred. Let me drill into that trace."
|
|
382
|
+
Bad: Immediately fetching all traces for all turns and dumping everything.
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
✅ **Name the integration and channel**
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
Good: "A 4-turn Slack DM conversation..."
|
|
389
|
+
Bad: "A conversation with 4 turns..."
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
✅ **Connect turns to each other**
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
Good: "The user asked about the order in turn 2, then tried to cancel it in turn 3 -- the cancellation failed because the lookup in turn 2 showed the order was already shipped."
|
|
396
|
+
Bad: "Turn 2: lookupOrder called. Turn 3: cancelOrder failed."
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
✅ **Suggest drill-down when appropriate**
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
Good: "Turn 3 failed with a cancelOrder error. To see the full stack trace, run: adk traces trace=tr_003 --include-llm --format json"
|
|
403
|
+
Bad: Automatically fetching and dumping the full trace without being asked.
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
❌ **Don't dump raw JSON in the analysis**
|
|
407
|
+
|
|
408
|
+
The developer already has the JSON. Your job is to synthesize it into understanding.
|
|
409
|
+
|
|
410
|
+
❌ **Don't speculate about what the user said**
|
|
411
|
+
|
|
412
|
+
The conversation timeline shows what the agent did, not the exact user messages. Use `trigger` and `llmContent` to infer context, but be clear when you're inferring vs. when you have direct evidence.
|
|
413
|
+
|
|
414
|
+
❌ **Don't re-explain tool behavior the developer already knows**
|
|
415
|
+
|
|
416
|
+
If the developer built the tools, they know what `lookupOrder` does. Focus on *what happened* and *why*, not what the tool is for.
|
|
417
|
+
|
|
418
|
+
❌ **Don't ignore the overall arc**
|
|
419
|
+
|
|
420
|
+
Even in a detailed explanation, start and end with the big picture. A list of turns without a conclusion is incomplete.
|