ag-ui-validate 0.2.0 → 0.4.0

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.
Files changed (168) hide show
  1. package/README.md +82 -23
  2. package/dist/{catalog-BglXBNbL.js → catalog-3e6INLCp.js} +122 -4
  3. package/dist/catalog-3e6INLCp.js.map +1 -0
  4. package/dist/{catalog-Ci9dqc1a.cjs → catalog-DH5gDIbo.cjs} +122 -4
  5. package/dist/catalog-DH5gDIbo.cjs.map +1 -0
  6. package/dist/cli.js +641 -63
  7. package/dist/cli.js.map +1 -1
  8. package/dist/{index-Hmqj3r_r.d.cts → index-Cydfs-rB.d.ts} +4 -4
  9. package/dist/{index-oNG1kOp9.d.ts → index-DsVmjcLO.d.cts} +4 -4
  10. package/dist/index.cjs +2 -2
  11. package/dist/index.d.cts +2 -2
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +2 -2
  14. package/dist/report.cjs +11 -2
  15. package/dist/report.cjs.map +1 -1
  16. package/dist/report.d.cts +21 -12
  17. package/dist/report.d.ts +21 -12
  18. package/dist/report.js +11 -2
  19. package/dist/report.js.map +1 -1
  20. package/dist/{src-rGZ2G4qA.js → src-CezZ73Mm.js} +494 -59
  21. package/dist/src-CezZ73Mm.js.map +1 -0
  22. package/dist/{src-HmI-kxef.cjs → src-CyugLoks.cjs} +494 -59
  23. package/dist/src-CyugLoks.cjs.map +1 -0
  24. package/dist/transport.cjs +1 -1
  25. package/dist/transport.cjs.map +1 -1
  26. package/dist/transport.d.cts +1 -1
  27. package/dist/transport.d.ts +1 -1
  28. package/dist/transport.js +1 -1
  29. package/dist/transport.js.map +1 -1
  30. package/dist/{types-oH_QTnn2.d.ts → types-CUIgyj2N.d.cts} +3 -1
  31. package/dist/{types-oH_QTnn2.d.cts → types-CUIgyj2N.d.ts} +3 -1
  32. package/dist/vitest.js +616 -61
  33. package/dist/vitest.js.map +1 -1
  34. package/{src → js/src}/cli-args.ts +16 -0
  35. package/{src → js/src}/cli.ts +1 -1
  36. package/{src → js/src}/index.ts +5 -0
  37. package/{src → js/src}/protocol/event-table.ts +93 -2
  38. package/js/src/report/json.ts +31 -0
  39. package/{src → js/src}/report/sarif.ts +3 -6
  40. package/{src → js/src}/rules/catalog.ts +5 -1
  41. package/{src → js/src}/rules/checks/context.ts +48 -3
  42. package/{src → js/src}/rules/checks/lifecycle.ts +5 -2
  43. package/js/src/rules/checks/subagents.ts +78 -0
  44. package/{src → js/src}/rules/checks/text.ts +11 -3
  45. package/{src → js/src}/rules/checks/toolcalls.ts +8 -2
  46. package/{src → js/src}/transport/index.ts +1 -1
  47. package/package.json +15 -14
  48. package/{src/rules → spec}/catalog.json +109 -2
  49. package/spec/event-categories.json +60 -0
  50. package/spec/fixtures/README.md +91 -0
  51. package/spec/fixtures/invalid/AGUI001-first-event-not-run-started/expected.json +10 -0
  52. package/spec/fixtures/invalid/AGUI001-first-event-not-run-started/stream.jsonl +4 -0
  53. package/spec/fixtures/invalid/AGUI002-duplicate-run-started/expected.json +11 -0
  54. package/spec/fixtures/invalid/AGUI002-duplicate-run-started/stream.jsonl +3 -0
  55. package/spec/fixtures/invalid/AGUI003-run-never-terminated/expected.json +10 -0
  56. package/spec/fixtures/invalid/AGUI003-run-never-terminated/stream.jsonl +4 -0
  57. package/spec/fixtures/invalid/AGUI004-event-after-terminal/expected.json +11 -0
  58. package/spec/fixtures/invalid/AGUI004-event-after-terminal/stream.jsonl +3 -0
  59. package/spec/fixtures/invalid/AGUI005-finished-and-error/expected.json +11 -0
  60. package/spec/fixtures/invalid/AGUI005-finished-and-error/stream.jsonl +3 -0
  61. package/spec/fixtures/invalid/AGUI006-step-finished-unmatched/expected.json +11 -0
  62. package/spec/fixtures/invalid/AGUI006-step-finished-unmatched/stream.jsonl +3 -0
  63. package/spec/fixtures/invalid/AGUI007-step-unterminated/expected.json +10 -0
  64. package/spec/fixtures/invalid/AGUI007-step-unterminated/stream.jsonl +3 -0
  65. package/spec/fixtures/invalid/AGUI008-unstable-run-ids/expected.json +12 -0
  66. package/spec/fixtures/invalid/AGUI008-unstable-run-ids/stream.jsonl +2 -0
  67. package/spec/fixtures/invalid/AGUI101-content-without-start/expected.json +11 -0
  68. package/spec/fixtures/invalid/AGUI101-content-without-start/stream.jsonl +3 -0
  69. package/spec/fixtures/invalid/AGUI102-end-without-start/expected.json +11 -0
  70. package/spec/fixtures/invalid/AGUI102-end-without-start/stream.jsonl +3 -0
  71. package/spec/fixtures/invalid/AGUI103-message-unterminated/expected.json +10 -0
  72. package/spec/fixtures/invalid/AGUI103-message-unterminated/stream.jsonl +4 -0
  73. package/spec/fixtures/invalid/AGUI104-duplicate-message-id/expected.json +12 -0
  74. package/spec/fixtures/invalid/AGUI104-duplicate-message-id/stream.jsonl +6 -0
  75. package/spec/fixtures/invalid/AGUI105-empty-content-delta/expected.json +12 -0
  76. package/spec/fixtures/invalid/AGUI105-empty-content-delta/stream.jsonl +5 -0
  77. package/spec/fixtures/invalid/AGUI106-interleaved-same-message-id/expected.json +12 -0
  78. package/spec/fixtures/invalid/AGUI106-interleaved-same-message-id/stream.jsonl +5 -0
  79. package/spec/fixtures/invalid/AGUI201-args-without-start/expected.json +11 -0
  80. package/spec/fixtures/invalid/AGUI201-args-without-start/stream.jsonl +3 -0
  81. package/spec/fixtures/invalid/AGUI202-end-without-start/expected.json +11 -0
  82. package/spec/fixtures/invalid/AGUI202-end-without-start/stream.jsonl +3 -0
  83. package/spec/fixtures/invalid/AGUI203-unterminated-tool-call/expected.json +10 -0
  84. package/spec/fixtures/invalid/AGUI203-unterminated-tool-call/stream.jsonl +4 -0
  85. package/spec/fixtures/invalid/AGUI204-args-not-json/expected.json +10 -0
  86. package/spec/fixtures/invalid/AGUI204-args-not-json/stream.jsonl +6 -0
  87. package/spec/fixtures/invalid/AGUI205-duplicate-tool-call-id/expected.json +12 -0
  88. package/spec/fixtures/invalid/AGUI205-duplicate-tool-call-id/stream.jsonl +5 -0
  89. package/spec/fixtures/invalid/AGUI206-result-before-end/expected.json +12 -0
  90. package/spec/fixtures/invalid/AGUI206-result-before-end/stream.jsonl +5 -0
  91. package/spec/fixtures/invalid/AGUI207-result-unknown-id/expected.json +11 -0
  92. package/spec/fixtures/invalid/AGUI207-result-unknown-id/stream.jsonl +3 -0
  93. package/spec/fixtures/invalid/AGUI208-unknown-parent-message-id/expected.json +11 -0
  94. package/spec/fixtures/invalid/AGUI208-unknown-parent-message-id/stream.jsonl +4 -0
  95. package/spec/fixtures/invalid/AGUI301-delta-before-snapshot/expected.json +10 -0
  96. package/spec/fixtures/invalid/AGUI301-delta-before-snapshot/stream.jsonl +3 -0
  97. package/spec/fixtures/invalid/AGUI302-delta-failed-to-apply/expected.json +11 -0
  98. package/spec/fixtures/invalid/AGUI302-delta-failed-to-apply/stream.jsonl +4 -0
  99. package/spec/fixtures/invalid/AGUI303-invalid-patch-document/expected.json +11 -0
  100. package/spec/fixtures/invalid/AGUI303-invalid-patch-document/stream.jsonl +4 -0
  101. package/spec/fixtures/invalid/AGUI304-midrun-snapshot-discards-deltas/expected.json +10 -0
  102. package/spec/fixtures/invalid/AGUI304-midrun-snapshot-discards-deltas/stream.jsonl +5 -0
  103. package/spec/fixtures/invalid/AGUI305-shared-state-never-established/expected.json +9 -0
  104. package/spec/fixtures/invalid/AGUI305-shared-state-never-established/options.json +5 -0
  105. package/spec/fixtures/invalid/AGUI305-shared-state-never-established/stream.jsonl +5 -0
  106. package/spec/fixtures/invalid/AGUI401-reasoning-content-without-start/expected.json +11 -0
  107. package/spec/fixtures/invalid/AGUI401-reasoning-content-without-start/stream.jsonl +3 -0
  108. package/spec/fixtures/invalid/AGUI402-reasoning-unterminated/expected.json +10 -0
  109. package/spec/fixtures/invalid/AGUI402-reasoning-unterminated/stream.jsonl +3 -0
  110. package/spec/fixtures/invalid/AGUI501-missing-data-prefix/expected.json +9 -0
  111. package/spec/fixtures/invalid/AGUI501-missing-data-prefix/scenario.json +17 -0
  112. package/spec/fixtures/invalid/AGUI502-payload-not-json/expected.json +10 -0
  113. package/spec/fixtures/invalid/AGUI502-payload-not-json/stream.jsonl +3 -0
  114. package/spec/fixtures/invalid/AGUI503-unknown-event-type/expected.json +10 -0
  115. package/spec/fixtures/invalid/AGUI503-unknown-event-type/stream.jsonl +3 -0
  116. package/spec/fixtures/invalid/AGUI504-schema-violation/expected.json +11 -0
  117. package/spec/fixtures/invalid/AGUI504-schema-violation/stream.jsonl +4 -0
  118. package/spec/fixtures/invalid/AGUI505-unexpected-content-type/expected.json +9 -0
  119. package/spec/fixtures/invalid/AGUI505-unexpected-content-type/scenario.json +25 -0
  120. package/spec/fixtures/invalid/AGUI506-keepalive-gap/expected.json +9 -0
  121. package/spec/fixtures/invalid/AGUI506-keepalive-gap/scenario.json +25 -0
  122. package/spec/fixtures/invalid/AGUI507-buffered-response/expected.json +9 -0
  123. package/spec/fixtures/invalid/AGUI507-buffered-response/scenario.json +9 -0
  124. package/spec/fixtures/invalid/AGUI508-connection-dropped/expected.json +17 -0
  125. package/spec/fixtures/invalid/AGUI508-connection-dropped/scenario.json +10 -0
  126. package/spec/fixtures/invalid/AGUI601-duplicate-subagent-started/expected.json +12 -0
  127. package/spec/fixtures/invalid/AGUI601-duplicate-subagent-started/stream.jsonl +5 -0
  128. package/spec/fixtures/invalid/AGUI602-finished-without-start/expected.json +11 -0
  129. package/spec/fixtures/invalid/AGUI602-finished-without-start/stream.jsonl +3 -0
  130. package/spec/fixtures/invalid/AGUI603-error-without-start/expected.json +11 -0
  131. package/spec/fixtures/invalid/AGUI603-error-without-start/stream.jsonl +3 -0
  132. package/spec/fixtures/invalid/AGUI604-subagent-unterminated/expected.json +10 -0
  133. package/spec/fixtures/invalid/AGUI604-subagent-unterminated/stream.jsonl +3 -0
  134. package/spec/fixtures/invalid/AGUI605-unknown-parent-subagent-run-id/expected.json +11 -0
  135. package/spec/fixtures/invalid/AGUI605-unknown-parent-subagent-run-id/stream.jsonl +4 -0
  136. package/spec/fixtures/invalid/AGUI606-continuation-owner-mismatch/expected.json +11 -0
  137. package/spec/fixtures/invalid/AGUI606-continuation-owner-mismatch/stream.jsonl +6 -0
  138. package/spec/fixtures/invalid/AGUI901-raw-wraps-typed-event/expected.json +11 -0
  139. package/spec/fixtures/invalid/AGUI901-raw-wraps-typed-event/stream.jsonl +3 -0
  140. package/spec/fixtures/invalid/AGUI902-no-timestamps/expected.json +9 -0
  141. package/spec/fixtures/invalid/AGUI902-no-timestamps/stream.jsonl +2 -0
  142. package/spec/fixtures/invalid/AGUI903-custom-name-not-namespaced/expected.json +11 -0
  143. package/spec/fixtures/invalid/AGUI903-custom-name-not-namespaced/stream.jsonl +3 -0
  144. package/spec/fixtures/valid/agentic-chat.jsonl +14 -0
  145. package/spec/fixtures/valid/agentic-generative-ui.jsonl +13 -0
  146. package/spec/fixtures/valid/backend-tool-rendering.jsonl +14 -0
  147. package/spec/fixtures/valid/human-in-the-loop.jsonl +13 -0
  148. package/spec/fixtures/valid/predictive-state-updates.expected.json +11 -0
  149. package/spec/fixtures/valid/predictive-state-updates.jsonl +11 -0
  150. package/spec/fixtures/valid/shared-state.jsonl +8 -0
  151. package/spec/fixtures/valid/tool-based-generative-ui.jsonl +5 -0
  152. package/dist/catalog-BglXBNbL.js.map +0 -1
  153. package/dist/catalog-Ci9dqc1a.cjs.map +0 -1
  154. package/dist/src-HmI-kxef.cjs.map +0 -1
  155. package/dist/src-rGZ2G4qA.js.map +0 -1
  156. package/src/report/json.ts +0 -20
  157. /package/{src → js/src}/protocol/jsonpatch.ts +0 -0
  158. /package/{src → js/src}/report/index.ts +0 -0
  159. /package/{src → js/src}/report/junit.ts +0 -0
  160. /package/{src → js/src}/report/pretty.ts +0 -0
  161. /package/{src → js/src}/rules/checks/reasoning.ts +0 -0
  162. /package/{src → js/src}/rules/checks/state.ts +0 -0
  163. /package/{src → js/src}/rules/checks/transport.ts +0 -0
  164. /package/{src → js/src}/transport/ndjson.ts +0 -0
  165. /package/{src → js/src}/transport/sse.ts +0 -0
  166. /package/{src → js/src}/types.ts +0 -0
  167. /package/{src → js/src}/vitest/index.ts +0 -0
  168. /package/{src → js/src}/vitest/matcher.ts +0 -0
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI303",
4
+ "severity": "error",
5
+ "message": "STATE_DELTA is not a valid RFC 6902 patch document: operation 0 has invalid op 'merge'",
6
+ "eventIndex": 2,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#statedelta",
8
+ "eventType": "STATE_DELTA",
9
+ "pointer": "/delta/0/op"
10
+ }
11
+ ]
@@ -0,0 +1,4 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300017000}
2
+ {"type":"STATE_SNAPSHOT","snapshot":{},"timestamp":1755300017100}
3
+ {"type":"STATE_DELTA","delta":[{"op":"merge","path":"/a","value":1}],"timestamp":1755300017200}
4
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300017300}
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "rule": "AGUI304",
4
+ "severity": "info",
5
+ "message": "STATE_SNAPSHOT replaces state previously built from 1 delta(s)",
6
+ "eventIndex": 3,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#statesnapshot",
8
+ "eventType": "STATE_SNAPSHOT"
9
+ }
10
+ ]
@@ -0,0 +1,5 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300017400}
2
+ {"type":"STATE_SNAPSHOT","snapshot":{"a":1},"timestamp":1755300017500}
3
+ {"type":"STATE_DELTA","delta":[{"op":"replace","path":"/a","value":2}],"timestamp":1755300017600}
4
+ {"type":"STATE_SNAPSHOT","snapshot":{"a":99},"timestamp":1755300017700}
5
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300017800}
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI305",
4
+ "severity": "warning",
5
+ "message": "features include 'shared-state' but no STATE_SNAPSHOT was emitted",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#state-management-events"
8
+ }
9
+ ]
@@ -0,0 +1,5 @@
1
+ {
2
+ "features": [
3
+ "shared-state"
4
+ ]
5
+ }
@@ -0,0 +1,5 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300017900}
2
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300018000}
3
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"No state events at all.","timestamp":1755300018100}
4
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300018200}
5
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300018300}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI401",
4
+ "severity": "error",
5
+ "message": "REASONING_MESSAGE_CONTENT for messageId 'rmsg_ghost' with no open REASONING_MESSAGE_START",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#reasoningmessagecontent",
8
+ "eventType": "REASONING_MESSAGE_CONTENT",
9
+ "pointer": "/messageId"
10
+ }
11
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300018400}
2
+ {"type":"REASONING_MESSAGE_CONTENT","messageId":"rmsg_ghost","delta":"orphan","timestamp":1755300018500}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300018600}
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "rule": "AGUI402",
4
+ "severity": "warning",
5
+ "message": "REASONING_START messageId 'rsn_001' never ended",
6
+ "eventIndex": 2,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#reasoning-events",
8
+ "relatedEventIndex": 1
9
+ }
10
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300018700}
2
+ {"type":"REASONING_START","messageId":"rsn_001","timestamp":1755300018800}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300018900}
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI501",
4
+ "severity": "error",
5
+ "message": "Malformed SSE framing: line '{\"type\":\"CUSTOM\",\"name\":\"acme.ping\",\"value\":1,\"timestamp\":17…' looks like a JSON payload but lacks the 'data:' field prefix, so SSE clients silently drop it",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation"
8
+ }
9
+ ]
@@ -0,0 +1,17 @@
1
+ {
2
+ "contentType": "text/event-stream",
3
+ "chunks": [
4
+ {
5
+ "gapMs": 0,
6
+ "text": "data: {\"type\":\"RUN_STARTED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"timestamp\":1755300022900}\n\n"
7
+ },
8
+ {
9
+ "gapMs": 0,
10
+ "text": "{\"type\":\"CUSTOM\",\"name\":\"acme.ping\",\"value\":1,\"timestamp\":1755300023000}\n\n"
11
+ },
12
+ {
13
+ "gapMs": 0,
14
+ "text": "data: {\"type\":\"RUN_FINISHED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"outcome\":{\"type\":\"success\"},\"timestamp\":1755300023100}\n\n"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "rule": "AGUI502",
4
+ "severity": "error",
5
+ "message": "Event payload is not valid JSON: Unexpected token 'b', \"{\"type\": broken json\" is not valid JSON",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#base-event-properties",
8
+ "eventType": ""
9
+ }
10
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300021400}
2
+ {"type": broken json
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300021500}
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "rule": "AGUI503",
4
+ "severity": "error",
5
+ "message": "Unknown event type 'AGUI_PING' (not in the installed AG-UI SDK v0.0.59, and not RAW or CUSTOM)",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#event-types-overview",
8
+ "eventType": "AGUI_PING"
9
+ }
10
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300021600}
2
+ {"type":"AGUI_PING","timestamp":1755300021700}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300021800}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI504",
4
+ "severity": "error",
5
+ "message": "TOOL_CALL_START: missing required field 'toolCallName' (string)",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#base-event-properties",
8
+ "eventType": "TOOL_CALL_START",
9
+ "pointer": "/toolCallName"
10
+ }
11
+ ]
@@ -0,0 +1,4 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300021900}
2
+ {"type":"TOOL_CALL_START","toolCallId":"call_001","timestamp":1755300022000}
3
+ {"type":"TOOL_CALL_END","toolCallId":"call_001","timestamp":1755300022100}
4
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300022200}
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI505",
4
+ "severity": "warning",
5
+ "message": "Content-Type 'application/json' is neither text/event-stream nor application/x-ndjson",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model"
8
+ }
9
+ ]
@@ -0,0 +1,25 @@
1
+ {
2
+ "contentType": "application/json",
3
+ "chunks": [
4
+ {
5
+ "gapMs": 0,
6
+ "text": "data: {\"type\":\"RUN_STARTED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"timestamp\":1755300023200}\n\n"
7
+ },
8
+ {
9
+ "gapMs": 0,
10
+ "text": "data: {\"type\":\"TEXT_MESSAGE_START\",\"messageId\":\"msg_001\",\"role\":\"assistant\",\"timestamp\":1755300023300}\n\n"
11
+ },
12
+ {
13
+ "gapMs": 0,
14
+ "text": "data: {\"type\":\"TEXT_MESSAGE_CONTENT\",\"messageId\":\"msg_001\",\"delta\":\"All good here.\",\"timestamp\":1755300023400}\n\n"
15
+ },
16
+ {
17
+ "gapMs": 0,
18
+ "text": "data: {\"type\":\"TEXT_MESSAGE_END\",\"messageId\":\"msg_001\",\"timestamp\":1755300023500}\n\n"
19
+ },
20
+ {
21
+ "gapMs": 0,
22
+ "text": "data: {\"type\":\"RUN_FINISHED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"outcome\":{\"type\":\"success\"},\"timestamp\":1755300023600}\n\n"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI506",
4
+ "severity": "info",
5
+ "message": "No event or keepalive frame for 47s",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/architecture#standard-http-client"
8
+ }
9
+ ]
@@ -0,0 +1,25 @@
1
+ {
2
+ "contentType": "text/event-stream",
3
+ "chunks": [
4
+ {
5
+ "gapMs": 0,
6
+ "text": "data: {\"type\":\"RUN_STARTED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"timestamp\":1755300023700}\n\n"
7
+ },
8
+ {
9
+ "gapMs": 0,
10
+ "text": "data: {\"type\":\"TEXT_MESSAGE_START\",\"messageId\":\"msg_001\",\"role\":\"assistant\",\"timestamp\":1755300023800}\n\n"
11
+ },
12
+ {
13
+ "gapMs": 0,
14
+ "text": "data: {\"type\":\"TEXT_MESSAGE_CONTENT\",\"messageId\":\"msg_001\",\"delta\":\"Thinking very hard…\",\"timestamp\":1755300023900}\n\n"
15
+ },
16
+ {
17
+ "gapMs": 0,
18
+ "text": "data: {\"type\":\"TEXT_MESSAGE_END\",\"messageId\":\"msg_001\",\"timestamp\":1755300024000}\n\n"
19
+ },
20
+ {
21
+ "gapMs": 47000,
22
+ "text": "data: {\"type\":\"RUN_FINISHED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"outcome\":{\"type\":\"success\"},\"timestamp\":1755300024100}\n\n"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI507",
4
+ "severity": "info",
5
+ "message": "Response appears buffered: entire body (5 events) arrived in a single chunk",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/architecture#standard-http-client"
8
+ }
9
+ ]
@@ -0,0 +1,9 @@
1
+ {
2
+ "contentType": "text/event-stream",
3
+ "chunks": [
4
+ {
5
+ "gapMs": 0,
6
+ "text": "data: {\"type\":\"RUN_STARTED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"timestamp\":1755300024200}\n\ndata: {\"type\":\"TEXT_MESSAGE_START\",\"messageId\":\"msg_001\",\"role\":\"assistant\",\"timestamp\":1755300024300}\n\ndata: {\"type\":\"TEXT_MESSAGE_CONTENT\",\"messageId\":\"msg_001\",\"delta\":\"All good here.\",\"timestamp\":1755300024400}\n\ndata: {\"type\":\"TEXT_MESSAGE_END\",\"messageId\":\"msg_001\",\"timestamp\":1755300024500}\n\ndata: {\"type\":\"RUN_FINISHED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"outcome\":{\"type\":\"success\"},\"timestamp\":1755300024600}\n\n"
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "rule": "AGUI508",
4
+ "severity": "error",
5
+ "message": "Connection ended mid-run 'run_001' without RUN_FINISHED or RUN_ERROR",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#runfinished"
8
+ },
9
+ {
10
+ "rule": "AGUI003",
11
+ "severity": "error",
12
+ "message": "Run 'run_001' ended without RUN_FINISHED or RUN_ERROR",
13
+ "eventIndex": -1,
14
+ "specUrl": "https://docs.ag-ui.com/concepts/events#runfinished",
15
+ "relatedEventIndex": 0
16
+ }
17
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "contentType": "text/event-stream",
3
+ "chunks": [
4
+ {
5
+ "gapMs": 0,
6
+ "text": "data: {\"type\":\"RUN_STARTED\",\"threadId\":\"thread_001\",\"runId\":\"run_001\",\"timestamp\":1755300024700}\n\n"
7
+ }
8
+ ],
9
+ "abnormalEof": true
10
+ }
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "rule": "AGUI601",
4
+ "severity": "error",
5
+ "message": "SUBAGENT_STARTED reuses subagentRunId 'sub_001', which is already in use this run",
6
+ "eventIndex": 2,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#rules-clients-enforce",
8
+ "eventType": "SUBAGENT_STARTED",
9
+ "pointer": "/subagentRunId",
10
+ "relatedEventIndex": 1
11
+ }
12
+ ]
@@ -0,0 +1,5 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300019000}
2
+ {"type":"SUBAGENT_STARTED","subagentRunId":"sub_001","name":"researcher","timestamp":1755300019100}
3
+ {"type":"SUBAGENT_STARTED","subagentRunId":"sub_001","name":"researcher","timestamp":1755300019200}
4
+ {"type":"SUBAGENT_FINISHED","subagentRunId":"sub_001","timestamp":1755300019300}
5
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300019400}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI602",
4
+ "severity": "error",
5
+ "message": "SUBAGENT_FINISHED for subagentRunId 'sub_ghost' with no open SUBAGENT_STARTED",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#rules-clients-enforce",
8
+ "eventType": "SUBAGENT_FINISHED",
9
+ "pointer": "/subagentRunId"
10
+ }
11
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300019500}
2
+ {"type":"SUBAGENT_FINISHED","subagentRunId":"sub_ghost","timestamp":1755300019600}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300019700}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI603",
4
+ "severity": "error",
5
+ "message": "SUBAGENT_ERROR for subagentRunId 'sub_ghost' with no open SUBAGENT_STARTED",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#rules-clients-enforce",
8
+ "eventType": "SUBAGENT_ERROR",
9
+ "pointer": "/subagentRunId"
10
+ }
11
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300019800}
2
+ {"type":"SUBAGENT_ERROR","subagentRunId":"sub_ghost","message":"boom","timestamp":1755300019900}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300020000}
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "rule": "AGUI604",
4
+ "severity": "error",
5
+ "message": "SUBAGENT_STARTED subagentRunId 'sub_001' never closed with SUBAGENT_FINISHED or SUBAGENT_ERROR",
6
+ "eventIndex": 2,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#rules-clients-enforce",
8
+ "relatedEventIndex": 1
9
+ }
10
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300020100}
2
+ {"type":"SUBAGENT_STARTED","subagentRunId":"sub_001","name":"researcher","timestamp":1755300020200}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300020300}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI605",
4
+ "severity": "warning",
5
+ "message": "SUBAGENT_STARTED parentSubagentRunId 'sub_ghost' matches no subagent observed in this stream",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#nesting-and-concurrency",
8
+ "eventType": "SUBAGENT_STARTED",
9
+ "pointer": "/parentSubagentRunId"
10
+ }
11
+ ]
@@ -0,0 +1,4 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300020400}
2
+ {"type":"SUBAGENT_STARTED","subagentRunId":"sub_001","name":"researcher","parentSubagentRunId":"sub_ghost","timestamp":1755300020500}
3
+ {"type":"SUBAGENT_FINISHED","subagentRunId":"sub_001","timestamp":1755300020600}
4
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300020700}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI606",
4
+ "severity": "warning",
5
+ "message": "TEXT_MESSAGE_END declares subagentRunId 'sub_2', but messageId 'msg_1' was opened under 'sub_1'",
6
+ "eventIndex": 3,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/subagents#rules-clients-enforce",
8
+ "eventType": "TEXT_MESSAGE_END",
9
+ "pointer": "/subagentRunId"
10
+ }
11
+ ]
@@ -0,0 +1,6 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300020800}
2
+ {"type":"SUBAGENT_STARTED","subagentRunId":"sub_1","name":"researcher","timestamp":1755300020900}
3
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_1","role":"assistant","subagentRunId":"sub_1","timestamp":1755300021000}
4
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_1","subagentRunId":"sub_2","timestamp":1755300021100}
5
+ {"type":"SUBAGENT_FINISHED","subagentRunId":"sub_1","timestamp":1755300021200}
6
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300021300}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI901",
4
+ "severity": "info",
5
+ "message": "RAW event wraps an event of type 'TOOL_CALL_RESULT', which has a typed AG-UI equivalent",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#raw",
8
+ "eventType": "RAW",
9
+ "pointer": "/event/type"
10
+ }
11
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300022300}
2
+ {"type":"RAW","event":{"type":"TOOL_CALL_RESULT","toolCallId":"call_001","content":"wrapped"},"timestamp":1755300022400}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300022500}
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "rule": "AGUI902",
4
+ "severity": "info",
5
+ "message": "None of the 2 events carry the optional timestamp property",
6
+ "eventIndex": -1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#base-event-properties"
8
+ }
9
+ ]
@@ -0,0 +1,2 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001"}
2
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001"}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI903",
4
+ "severity": "info",
5
+ "message": "CUSTOM event name 'update' has no namespace prefix (e.g. 'vendor.event')",
6
+ "eventIndex": 1,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#custom",
8
+ "eventType": "CUSTOM",
9
+ "pointer": "/name"
10
+ }
11
+ ]
@@ -0,0 +1,3 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_001","runId":"run_001","timestamp":1755300022600}
2
+ {"type":"CUSTOM","name":"update","value":{"x":1},"timestamp":1755300022700}
3
+ {"type":"RUN_FINISHED","threadId":"thread_001","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300022800}
@@ -0,0 +1,14 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_chat","runId":"run_001","timestamp":1755300000100}
2
+ {"type":"REASONING_START","messageId":"rsn_001","timestamp":1755300000200}
3
+ {"type":"REASONING_MESSAGE_START","messageId":"rmsg_001","role":"reasoning","timestamp":1755300000300}
4
+ {"type":"REASONING_MESSAGE_CONTENT","messageId":"rmsg_001","delta":"The user greeted me; respond warmly.","timestamp":1755300000400}
5
+ {"type":"REASONING_MESSAGE_END","messageId":"rmsg_001","timestamp":1755300000500}
6
+ {"type":"REASONING_END","messageId":"rsn_001","timestamp":1755300000600}
7
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300000700}
8
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"Hello! ","timestamp":1755300000800}
9
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"How can I help ","timestamp":1755300000900}
10
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"you today?","timestamp":1755300001000}
11
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300001100}
12
+ {"type":"TEXT_MESSAGE_CHUNK","messageId":"msg_002","delta":"Chunked messages ","timestamp":1755300001200}
13
+ {"type":"TEXT_MESSAGE_CHUNK","delta":"work too.","timestamp":1755300001300}
14
+ {"type":"RUN_FINISHED","threadId":"thread_chat","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300001400}
@@ -0,0 +1,13 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_genui","runId":"run_001","timestamp":1755300004200}
2
+ {"type":"STATE_SNAPSHOT","snapshot":{"steps":[{"name":"plan","status":"pending"},{"name":"execute","status":"pending"}]},"timestamp":1755300004300}
3
+ {"type":"STEP_STARTED","stepName":"plan","timestamp":1755300004400}
4
+ {"type":"STATE_DELTA","delta":[{"op":"replace","path":"/steps/0/status","value":"in_progress"}],"timestamp":1755300004500}
5
+ {"type":"STATE_DELTA","delta":[{"op":"replace","path":"/steps/0/status","value":"done"}],"timestamp":1755300004600}
6
+ {"type":"STEP_FINISHED","stepName":"plan","timestamp":1755300004700}
7
+ {"type":"STEP_STARTED","stepName":"execute","timestamp":1755300004800}
8
+ {"type":"STATE_DELTA","delta":[{"op":"replace","path":"/steps/1/status","value":"done"}],"timestamp":1755300004900}
9
+ {"type":"STEP_FINISHED","stepName":"execute","timestamp":1755300005000}
10
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300005100}
11
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"All steps complete.","timestamp":1755300005200}
12
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300005300}
13
+ {"type":"RUN_FINISHED","threadId":"thread_genui","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300005400}
@@ -0,0 +1,14 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_tools","runId":"run_001","timestamp":1755300001500}
2
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300001600}
3
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"Checking the weather…","timestamp":1755300001700}
4
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300001800}
5
+ {"type":"TOOL_CALL_START","toolCallId":"call_001","toolCallName":"get_weather","parentMessageId":"msg_001","timestamp":1755300001900}
6
+ {"type":"TOOL_CALL_ARGS","toolCallId":"call_001","delta":"{\"city\":\"Ber","timestamp":1755300002000}
7
+ {"type":"TOOL_CALL_ARGS","toolCallId":"call_001","delta":"lin\"}","timestamp":1755300002100}
8
+ {"type":"TOOL_CALL_END","toolCallId":"call_001","timestamp":1755300002200}
9
+ {"type":"TOOL_CALL_RESULT","messageId":"msg_002","toolCallId":"call_001","content":"{\"tempC\":21}","role":"tool","timestamp":1755300002300}
10
+ {"type":"RAW","event":{"kind":"langgraph_checkpoint","checkpoint_id":"ckpt_42"},"source":"langgraph","timestamp":1755300002400}
11
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_003","role":"assistant","timestamp":1755300002500}
12
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_003","delta":"It is 21°C in Berlin.","timestamp":1755300002600}
13
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_003","timestamp":1755300002700}
14
+ {"type":"RUN_FINISHED","threadId":"thread_tools","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300002800}
@@ -0,0 +1,13 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_hitl","runId":"run_001","timestamp":1755300002900}
2
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300003000}
3
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"I need your approval to delete 3 files.","timestamp":1755300003100}
4
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300003200}
5
+ {"type":"TOOL_CALL_START","toolCallId":"call_001","toolCallName":"confirm_action","parentMessageId":"msg_001","timestamp":1755300003300}
6
+ {"type":"TOOL_CALL_ARGS","toolCallId":"call_001","delta":"{\"action\":\"delete\",\"count\":3}","timestamp":1755300003400}
7
+ {"type":"TOOL_CALL_END","toolCallId":"call_001","timestamp":1755300003500}
8
+ {"type":"RUN_FINISHED","threadId":"thread_hitl","runId":"run_001","outcome":{"type":"interrupt","interrupts":[{"id":"int_001","reason":"approval_required","toolCallId":"call_001"}]},"timestamp":1755300003600}
9
+ {"type":"RUN_STARTED","threadId":"thread_hitl","runId":"run_002","timestamp":1755300003700,"parentRunId":"run_001"}
10
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_002","role":"assistant","timestamp":1755300003800}
11
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_002","delta":"Done — 3 files deleted.","timestamp":1755300003900}
12
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_002","timestamp":1755300004000}
13
+ {"type":"RUN_FINISHED","threadId":"thread_hitl","runId":"run_002","outcome":{"type":"success"},"timestamp":1755300004100}
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "rule": "AGUI903",
4
+ "severity": "info",
5
+ "message": "CUSTOM event name 'PredictState' has no namespace prefix (e.g. 'vendor.event')",
6
+ "eventIndex": 2,
7
+ "specUrl": "https://docs.ag-ui.com/concepts/events#custom",
8
+ "eventType": "CUSTOM",
9
+ "pointer": "/name"
10
+ }
11
+ ]
@@ -0,0 +1,11 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_predict","runId":"run_001","timestamp":1755300006800}
2
+ {"type":"STATE_SNAPSHOT","snapshot":{"document":""},"timestamp":1755300006900}
3
+ {"type":"CUSTOM","name":"PredictState","value":[{"state_key":"document","tool":"write_document","tool_argument":"document"}],"timestamp":1755300007000}
4
+ {"type":"TOOL_CALL_START","toolCallId":"call_001","toolCallName":"write_document","timestamp":1755300007100}
5
+ {"type":"TOOL_CALL_ARGS","toolCallId":"call_001","delta":"{\"document\":\"Hello world.\"}","timestamp":1755300007200}
6
+ {"type":"TOOL_CALL_END","toolCallId":"call_001","timestamp":1755300007300}
7
+ {"type":"STATE_DELTA","delta":[{"op":"replace","path":"/document","value":"Hello world."}],"timestamp":1755300007400}
8
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300007500}
9
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"Written.","timestamp":1755300007600}
10
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300007700}
11
+ {"type":"RUN_FINISHED","threadId":"thread_predict","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300007800}
@@ -0,0 +1,8 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_state","runId":"run_001","timestamp":1755300006000}
2
+ {"type":"STATE_SNAPSHOT","snapshot":{"recipe":{"title":"Pasta","ingredients":["tomato"]}},"timestamp":1755300006100}
3
+ {"type":"TEXT_MESSAGE_START","messageId":"msg_001","role":"assistant","timestamp":1755300006200}
4
+ {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_001","delta":"Adding garlic to the recipe.","timestamp":1755300006300}
5
+ {"type":"TEXT_MESSAGE_END","messageId":"msg_001","timestamp":1755300006400}
6
+ {"type":"STATE_DELTA","delta":[{"op":"add","path":"/recipe/ingredients/-","value":"garlic"}],"timestamp":1755300006500}
7
+ {"type":"STATE_DELTA","delta":[{"op":"test","path":"/recipe/title","value":"Pasta"},{"op":"replace","path":"/recipe/title","value":"Garlic Pasta"}],"timestamp":1755300006600}
8
+ {"type":"RUN_FINISHED","threadId":"thread_state","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300006700}
@@ -0,0 +1,5 @@
1
+ {"type":"RUN_STARTED","threadId":"thread_fe_tools","runId":"run_001","timestamp":1755300005500}
2
+ {"type":"TOOL_CALL_START","toolCallId":"call_001","toolCallName":"generate_haiku","timestamp":1755300005600}
3
+ {"type":"TOOL_CALL_ARGS","toolCallId":"call_001","delta":"{\"topic\":\"conformance\"}","timestamp":1755300005700}
4
+ {"type":"TOOL_CALL_END","toolCallId":"call_001","timestamp":1755300005800}
5
+ {"type":"RUN_FINISHED","threadId":"thread_fe_tools","runId":"run_001","outcome":{"type":"success"},"timestamp":1755300005900}