wizardflow 0.4.0__tar.gz → 0.5.0__tar.gz

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 (85) hide show
  1. {wizardflow-0.4.0 → wizardflow-0.5.0}/CONTRIBUTING.md +19 -0
  2. {wizardflow-0.4.0 → wizardflow-0.5.0}/PKG-INFO +17 -6
  3. {wizardflow-0.4.0 → wizardflow-0.5.0}/README.md +16 -5
  4. wizardflow-0.5.0/assets/demo.gif +0 -0
  5. {wizardflow-0.4.0 → wizardflow-0.5.0}/pyproject.toml +1 -1
  6. wizardflow-0.5.0/scripts/live_trace_demo.py +211 -0
  7. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/404.html +1 -1
  8. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/__next.__PAGE__.txt +2 -2
  9. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/__next._full.txt +2 -2
  10. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/__next._head.txt +1 -1
  11. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/__next._index.txt +1 -1
  12. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/__next._tree.txt +1 -1
  13. wizardflow-0.5.0/src/wizardflow/_ui/_next/static/chunks/1fb6xczxpe9s3.js +260 -0
  14. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._full.txt +1 -1
  15. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._head.txt +1 -1
  16. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._index.txt +1 -1
  17. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._not-found/__PAGE__.txt +1 -1
  18. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._not-found.txt +1 -1
  19. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found/__next._tree.txt +1 -1
  20. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found.html +1 -1
  21. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_not-found.txt +1 -1
  22. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/index.html +2 -2
  23. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/index.txt +2 -2
  24. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/sitemap.xml +1 -1
  25. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/cli.py +102 -8
  26. wizardflow-0.5.0/tests/test_cli.py +311 -0
  27. wizardflow-0.4.0/assets/demo.gif +0 -0
  28. wizardflow-0.4.0/src/wizardflow/_ui/_next/static/chunks/35wrz4n1txs_o.js +0 -265
  29. wizardflow-0.4.0/tests/test_cli.py +0 -158
  30. {wizardflow-0.4.0 → wizardflow-0.5.0}/.gitignore +0 -0
  31. {wizardflow-0.4.0 → wizardflow-0.5.0}/LICENSE +0 -0
  32. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/data_types.py +0 -0
  33. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/multibranch.html +0 -0
  34. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/multibranch.md +0 -0
  35. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/multibranch.py +0 -0
  36. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/quickstart.html +0 -0
  37. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/quickstart.md +0 -0
  38. {wizardflow-0.4.0 → wizardflow-0.5.0}/examples/quickstart.py +0 -0
  39. {wizardflow-0.4.0 → wizardflow-0.5.0}/scripts/build_ui.py +0 -0
  40. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/__init__.py +0 -0
  41. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_render.py +0 -0
  42. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/05-c3ty_6dwfk.js +0 -0
  43. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/07ur0v9hb4ida.js +0 -0
  44. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/09s72r58ijxwx.js +0 -0
  45. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/0cz1d0mv5g_q7.js +0 -0
  46. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/14mrh2-p_w84d.js +0 -0
  47. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/18clj6xsyhc_j.css +0 -0
  48. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/1_way7swvumpv.js +0 -0
  49. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/2-j1b74l3lxxu.css +0 -0
  50. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/221oy04d3f6t2.js +0 -0
  51. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/27jktro2p5rq9.js +0 -0
  52. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/2gj5bmeov-r8f.js +0 -0
  53. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/310vm2bl3xxpt.js +0 -0
  54. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/3lt2ss7dftc2n.css +0 -0
  55. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/3n7dm2ojtyzwn.js +0 -0
  56. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/chunks/turbopack-2fblmukzx7kws.js +0 -0
  57. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2 +0 -0
  58. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/53b9e256198e5412-s.390ncx5urfkfu.woff2 +0 -0
  59. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/5ce348bf30bf5439-s.31988l_ccedte.woff2 +0 -0
  60. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2 +0 -0
  61. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/7178b3e590c64307-s.21jp631_3pja2.woff2 +0 -0
  62. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2 +0 -0
  63. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2 +0 -0
  64. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/8a480f0b521d4e75-s.1qq4vpdcun5oj.woff2 +0 -0
  65. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2 +0 -0
  66. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2 +0 -0
  67. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/fef07dbb0973bf53-s.3p2_lha1f2xer.woff2 +0 -0
  68. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/_next/static/media/icon.09qublg69ek7b.svg +0 -0
  69. {wizardflow-0.4.0/src/wizardflow/_ui/_next/static/hZT2Q8C4grDYd_BRHVtw0 → wizardflow-0.5.0/src/wizardflow/_ui/_next/static/ncaFVj6v0NRTp4NatoEBp}/_buildManifest.js +0 -0
  70. {wizardflow-0.4.0/src/wizardflow/_ui/_next/static/hZT2Q8C4grDYd_BRHVtw0 → wizardflow-0.5.0/src/wizardflow/_ui/_next/static/ncaFVj6v0NRTp4NatoEBp}/_clientMiddlewareManifest.js +0 -0
  71. {wizardflow-0.4.0/src/wizardflow/_ui/_next/static/hZT2Q8C4grDYd_BRHVtw0 → wizardflow-0.5.0/src/wizardflow/_ui/_next/static/ncaFVj6v0NRTp4NatoEBp}/_ssgManifest.js +0 -0
  72. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/icon.svg +0 -0
  73. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/opengraph-image +0 -0
  74. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/_ui/robots.txt +0 -0
  75. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/client.py +0 -0
  76. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/constants.py +0 -0
  77. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/html.py +0 -0
  78. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/markdown.py +0 -0
  79. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/py.typed +0 -0
  80. {wizardflow-0.4.0 → wizardflow-0.5.0}/src/wizardflow/reader.py +0 -0
  81. {wizardflow-0.4.0 → wizardflow-0.5.0}/tests/conftest.py +0 -0
  82. {wizardflow-0.4.0 → wizardflow-0.5.0}/tests/test_html.py +0 -0
  83. {wizardflow-0.4.0 → wizardflow-0.5.0}/tests/test_markdown.py +0 -0
  84. {wizardflow-0.4.0 → wizardflow-0.5.0}/tests/test_reader.py +0 -0
  85. {wizardflow-0.4.0 → wizardflow-0.5.0}/tests/test_trace.py +0 -0
@@ -50,3 +50,22 @@ That script runs the shared Next frontend with
50
50
  `NEXT_PUBLIC_WIZARDFLOW_TARGET=local`, copies the static export into
51
51
  `src/wizardflow/_ui/`, and removes hosted-only legal route artifacts (`Impressum`
52
52
  / `Datenschutz`). The SDK UI keeps the GitHub project link.
53
+
54
+ ## Checking live traces by hand
55
+
56
+ The viewer follows a trace file while it is still being written: it polls with
57
+ `If-None-Match`, extends the timeline without losing your place, and stops when
58
+ the part rotates away. None of that is covered by an automated test, so there is
59
+ a generator to watch it with:
60
+
61
+ ```bash
62
+ cd sdk/python
63
+ python scripts/live_trace_demo.py
64
+ ```
65
+
66
+ It records a synthetic run with the ordinary SDK calls, writing into the
67
+ monorepo's `web/public/` (so the trace is same-origin for `npm run dev` in
68
+ `web/`) and printing the viewer URL. It rotates after 18 messages, so the sealed
69
+ part, the part navigation, and the live pulse dot can all be seen in a couple of
70
+ minutes. Like `build_ui.py`, it needs the full monorepo checkout and is never
71
+ packaged.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wizardflow
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Python SDK for recording agent flows into the WizardFlow / AgentTrace file format.
5
5
  Project-URL: Homepage, https://getwizardflow.com
6
6
  Project-URL: Documentation, https://getwizardflow.com
@@ -57,7 +57,7 @@ runtime dependencies**, no daemon, no setup.
57
57
 
58
58
  ![WizardFlow replaying an agent run](https://raw.githubusercontent.com/lkleonk/wizardflow/main/sdk/python/assets/demo.gif)
59
59
 
60
- ▶ **[Watch this exact run live](https://getwizardflow.com/?example=university-consultant)** —
60
+ ▶ **[Watch this exact run live](https://getwizardflow.com/?example=doctor-consultation)** —
61
61
  the flow from the GIF, replaying in your browser right now. No install, and
62
62
  nothing is uploaded.
63
63
 
@@ -451,6 +451,11 @@ wizardflow html run.jsonl
451
451
  wizardflow json run.jsonl
452
452
  # --path is equivalent everywhere:
453
453
  wizardflow ui --path run.jsonl
454
+ # --latest: treat the path as a directory (default: the current directory) and
455
+ # open its most recently modified *.jsonl / *.json file — handy right after a
456
+ # run, or to attach to the trace an agent is writing right now:
457
+ wizardflow ui --latest
458
+ wizardflow ui --latest traces/
454
459
  ```
455
460
 
456
461
  The SDK only ever **writes** JSONL, but these commands **read** either framing —
@@ -460,16 +465,22 @@ they stay at parity with the web viewer, which also accepts both.
460
465
  ### `wizardflow ui` — local viewer
461
466
 
462
467
  ```bash
463
- wizardflow ui run.jsonl [--host 127.0.0.1] [--port 0] [--no-open]
468
+ wizardflow ui run.jsonl [--latest] [--host 127.0.0.1] [--port 0] [--no-open]
464
469
  ```
465
470
 
466
471
  Binds a stdlib HTTP server, serves the static WizardFlow UI bundled in the SDK
467
- package, and opens the selected trace in your browser (the JSONL is assembled
468
- server-side and served to the UI as one JSON document, re-read on refresh — so
469
- you can watch a still-running trace grow).
472
+ package, and opens the selected trace in your browser. The JSONL is assembled
473
+ server-side and served to the UI as one JSON document, re-read on every fetch —
474
+ and the UI **follows a still-running trace live**: it polls the file (cheap
475
+ ETag revalidation; an unchanged file is a single `stat()` on the server) and
476
+ extends the view in place without resetting your selection, playback position,
477
+ or arranged node layout. A pulse dot in the header shows the watch is active;
478
+ messages that arrive while you're inspecting an older one appear as a
479
+ "+N new" chip in the timeline.
470
480
 
471
481
  | flag | default | meaning |
472
482
  | --- | --- | --- |
483
+ | `--latest` | off | treat the path as a directory (default: cwd) and open its most recently modified `*.jsonl` / `*.json` |
473
484
  | `--host` | `127.0.0.1` | interface to bind |
474
485
  | `--port` | `0` | port to bind; `0` asks the OS for a free port |
475
486
  | `--no-open` | off | print the local URL instead of launching a browser |
@@ -10,7 +10,7 @@ runtime dependencies**, no daemon, no setup.
10
10
 
11
11
  ![WizardFlow replaying an agent run](https://raw.githubusercontent.com/lkleonk/wizardflow/main/sdk/python/assets/demo.gif)
12
12
 
13
- ▶ **[Watch this exact run live](https://getwizardflow.com/?example=university-consultant)** —
13
+ ▶ **[Watch this exact run live](https://getwizardflow.com/?example=doctor-consultation)** —
14
14
  the flow from the GIF, replaying in your browser right now. No install, and
15
15
  nothing is uploaded.
16
16
 
@@ -404,6 +404,11 @@ wizardflow html run.jsonl
404
404
  wizardflow json run.jsonl
405
405
  # --path is equivalent everywhere:
406
406
  wizardflow ui --path run.jsonl
407
+ # --latest: treat the path as a directory (default: the current directory) and
408
+ # open its most recently modified *.jsonl / *.json file — handy right after a
409
+ # run, or to attach to the trace an agent is writing right now:
410
+ wizardflow ui --latest
411
+ wizardflow ui --latest traces/
407
412
  ```
408
413
 
409
414
  The SDK only ever **writes** JSONL, but these commands **read** either framing —
@@ -413,16 +418,22 @@ they stay at parity with the web viewer, which also accepts both.
413
418
  ### `wizardflow ui` — local viewer
414
419
 
415
420
  ```bash
416
- wizardflow ui run.jsonl [--host 127.0.0.1] [--port 0] [--no-open]
421
+ wizardflow ui run.jsonl [--latest] [--host 127.0.0.1] [--port 0] [--no-open]
417
422
  ```
418
423
 
419
424
  Binds a stdlib HTTP server, serves the static WizardFlow UI bundled in the SDK
420
- package, and opens the selected trace in your browser (the JSONL is assembled
421
- server-side and served to the UI as one JSON document, re-read on refresh — so
422
- you can watch a still-running trace grow).
425
+ package, and opens the selected trace in your browser. The JSONL is assembled
426
+ server-side and served to the UI as one JSON document, re-read on every fetch —
427
+ and the UI **follows a still-running trace live**: it polls the file (cheap
428
+ ETag revalidation; an unchanged file is a single `stat()` on the server) and
429
+ extends the view in place without resetting your selection, playback position,
430
+ or arranged node layout. A pulse dot in the header shows the watch is active;
431
+ messages that arrive while you're inspecting an older one appear as a
432
+ "+N new" chip in the timeline.
423
433
 
424
434
  | flag | default | meaning |
425
435
  | --- | --- | --- |
436
+ | `--latest` | off | treat the path as a directory (default: cwd) and open its most recently modified `*.jsonl` / `*.json` |
426
437
  | `--host` | `127.0.0.1` | interface to bind |
427
438
  | `--port` | `0` | port to bind; `0` asks the OS for a free port |
428
439
  | `--no-open` | off | print the local URL instead of launching a browser |
Binary file
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "wizardflow"
7
- version = "0.4.0"
7
+ version = "0.5.0"
8
8
  description = "Python SDK for recording agent flows into the WizardFlow / AgentTrace file format."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -0,0 +1,211 @@
1
+ """Driver for eyeballing the live-trace UI by hand.
2
+
3
+ Writes a trace with the real SDK and keeps appending messages, so the viewer has
4
+ something that actually grows while you watch it — the only end-to-end exercise
5
+ of live updates and part rotation, neither of which has an automated test.
6
+
7
+ # 1. start the generator (writes a timestamped trace into web/public,
8
+ # clearing the previous run's files first)
9
+ cd "C:\\Users\\Leon Koch\\Desktop\\code_Freizeit\\react_projects\\wizardflow\\wizardflow-mui\\sdk\\python"
10
+ python scripts/live_trace_demo.py
11
+
12
+ # 2. in another terminal
13
+ cd "C:\\Users\\Leon Koch\\Desktop\\code_Freizeit\\react_projects\\wizardflow\\wizardflow-mui\\web"
14
+ npm run dev
15
+ # open the URL the generator printed
16
+
17
+ Why `npm run dev` and not `wizardflow ui`: the CLI serves the *bundled* viewer in
18
+ src/wizardflow/_ui/, which is a stale export without the polling code. To test
19
+ the CLI path (real ETag/304 server) instead, refresh the bundle first with
20
+ `python scripts/build_ui.py`, then `wizardflow ui --latest <dir>`.
21
+
22
+ Maintainer-only, like build_ui.py next to it: needs the monorepo checkout (it
23
+ writes into web/) and never ships — the wheel packages src/wizardflow alone.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import argparse
29
+ import random
30
+ import sys
31
+ import time
32
+ from pathlib import Path
33
+
34
+ SDK_ROOT = Path(__file__).resolve().parents[1]
35
+ REPO_ROOT = SDK_ROOT.parents[1]
36
+ sys.path.insert(0, str(SDK_ROOT / "src"))
37
+
38
+ import wizardflow # noqa: E402 (path shim above must run first)
39
+
40
+ # web/public is what the Next dev server serves at /, so the trace lands on a
41
+ # same-origin URL the viewer's `?trace=` launcher will accept.
42
+ OUT_DIR = REPO_ROOT / "web" / "public"
43
+ PREFIX = "live-demo"
44
+ # Seeded before the loop, so the viewer opens on a non-empty trace.
45
+ INITIAL_MESSAGES = 3
46
+ # Between steps within one message, so the recorded timings aren't all zero.
47
+ STEP_DELAY = 0.15
48
+ # Absurdly low on purpose (the real default is 2000): message 19 seals part 1
49
+ # with a `nextPart` seal record and opens __part2, so the rotation path is
50
+ # reachable in a couple of minutes instead of never.
51
+ MESSAGES_PER_PART = 18
52
+
53
+ NODES = ["intake", "router", "retriever", "calculator", "responder"]
54
+ EDGES = [
55
+ ("intake", "router"),
56
+ # The router picks one branch at runtime — dashed in the viewer.
57
+ {"source": "router", "target": "retriever", "conditional": True},
58
+ {"source": "router", "target": "calculator", "conditional": True},
59
+ ("retriever", "responder"),
60
+ ("calculator", "responder"),
61
+ ]
62
+
63
+ QUESTIONS = [
64
+ "What did we ship last quarter?",
65
+ "How many seats are left on the team plan?",
66
+ "Summarize the incident from Tuesday.",
67
+ "What's the refund policy for annual plans?",
68
+ "Which customers churned in June?",
69
+ "How much runway is left at the current burn?",
70
+ "Who owns the billing service now?",
71
+ "What changed in the pricing page last week?",
72
+ ]
73
+
74
+
75
+ def announce(trace_path: Path) -> None:
76
+ """Print the viewer URL for a part.
77
+
78
+ Port 3000 is just Next's dev default — nothing here checks it. If
79
+ `npm run dev` fell back to 3001, fix the port by hand.
80
+ """
81
+ print(f"Open: http://localhost:3000/?trace=/{trace_path.name}")
82
+
83
+
84
+ def emit_message(index: int) -> None:
85
+ """One run through the graph: intake → router → branch → responder."""
86
+ message_id = f"msg-{index:03d}"
87
+ question = random.choice(QUESTIONS)
88
+
89
+ wizardflow.log(message_id, "intake", "user_question", question)
90
+ time.sleep(STEP_DELAY)
91
+
92
+ branch = random.choice(["retriever", "calculator"])
93
+ wizardflow.log(message_id, "router", "chosen_branch", branch)
94
+ wizardflow.log(message_id, "router", "confidence", round(random.uniform(0.6, 0.99), 2))
95
+ time.sleep(STEP_DELAY)
96
+
97
+ if branch == "retriever":
98
+ wizardflow.log(
99
+ message_id,
100
+ "retriever",
101
+ "documents",
102
+ [
103
+ {"id": f"doc-{random.randint(100, 999)}", "score": round(random.random(), 3)}
104
+ for _ in range(3)
105
+ ],
106
+ )
107
+ else:
108
+ operands = [random.randint(2, 40) for _ in range(3)]
109
+ wizardflow.log(message_id, "calculator", "operands", operands)
110
+ wizardflow.log(message_id, "calculator", "result", sum(operands))
111
+ time.sleep(STEP_DELAY)
112
+
113
+ wizardflow.log(
114
+ message_id,
115
+ "responder",
116
+ "answer",
117
+ f"[{index}] Answer assembled via {branch} for: {question}",
118
+ )
119
+ # end_message is the call that appends the line — this is the moment the
120
+ # file grows and the viewer's next poll sees a new message.
121
+ wizardflow.end_message(
122
+ message_id,
123
+ title=question,
124
+ meta={"branch": branch, "seq": index},
125
+ )
126
+
127
+
128
+ def main() -> int:
129
+ parser = argparse.ArgumentParser(description=__doc__)
130
+ parser.add_argument(
131
+ "--interval",
132
+ type=float,
133
+ default=6.0,
134
+ help="Seconds between appended messages (default: 6).",
135
+ )
136
+ parser.add_argument(
137
+ "--count",
138
+ type=int,
139
+ default=40,
140
+ help="How many messages to append before exiting (default: 40).",
141
+ )
142
+ args = parser.parse_args()
143
+
144
+ OUT_DIR.mkdir(parents=True, exist_ok=True)
145
+
146
+ # Every run writes a new timestamped file, so clear the previous ones —
147
+ # unconditionally, because this directory is only ever demo scratch.
148
+ for stale in OUT_DIR.glob(f"{PREFIX}__*.jsonl"):
149
+ stale.unlink()
150
+ print(f"Removed: {stale.name}")
151
+
152
+ client = wizardflow.init(
153
+ output_dir=str(OUT_DIR),
154
+ file_prefix=PREFIX,
155
+ max_messages=MESSAGES_PER_PART,
156
+ name="Live demo run",
157
+ description="Synthetic run that keeps appending, for testing live updates.",
158
+ nodes=NODES,
159
+ edges=EDGES,
160
+ node_descriptions={
161
+ "intake": "Receives the user question.",
162
+ "router": "Picks the branch that can answer it.",
163
+ "retriever": "Looks up supporting documents.",
164
+ "calculator": "Runs the arithmetic path.",
165
+ "responder": "Writes the final answer.",
166
+ },
167
+ )
168
+
169
+ trace_path = Path(client.current_path)
170
+ print(f"Writing: {trace_path}")
171
+ announce(trace_path)
172
+ print()
173
+
174
+ index = 0
175
+ for _ in range(INITIAL_MESSAGES):
176
+ index += 1
177
+ emit_message(index)
178
+ print(f"Seeded {index} messages — open the viewer now, then watch it grow.")
179
+ print(
180
+ f"Part rotates after message {MESSAGES_PER_PART} — the viewer stops "
181
+ "following there; step to the new part with the › control in the "
182
+ "header (its URL is printed below too)."
183
+ )
184
+ print("Ctrl+C to stop.\n")
185
+
186
+ try:
187
+ while index < INITIAL_MESSAGES + args.count:
188
+ time.sleep(args.interval)
189
+ index += 1
190
+ emit_message(index)
191
+ print(f" appended message {index}")
192
+ # A rotation seals the part the viewer is watching (adding the
193
+ # `nextPart` record that switches its pulse dot off) and moves
194
+ # writing to a new file, which is a different URL.
195
+ if Path(client.current_path) != trace_path:
196
+ trace_path = Path(client.current_path)
197
+ print(f"\n ── rotated. Sealed part done; now writing {trace_path.name}")
198
+ announce(trace_path)
199
+ print()
200
+ except KeyboardInterrupt:
201
+ print("\nStopped.")
202
+
203
+ # No seal record is written here — a normally-finished run just stops, which
204
+ # is exactly why the viewer can't tell "done" from "idle" and keeps polling
205
+ # slowly instead of stopping.
206
+ print(f"\nDone. {index} messages in {trace_path}")
207
+ return 0
208
+
209
+
210
+ if __name__ == "__main__":
211
+ sys.exit(main())
@@ -4,4 +4,4 @@ var scheme='';
4
4
  if(mode==='system'){scheme=window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';}
5
5
  else if(mode==='light'||mode==='dark'){scheme=mode;}
6
6
  if(scheme){document.documentElement.setAttribute('data-mui-color-scheme',scheme);}
7
- }catch(e){}})();</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/310vm2bl3xxpt.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[52599,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\"]\n3:I[44636,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\"]\n4:I[39756,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n5:I[37457,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n6:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\nc:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\ne:I[68027,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/18clj6xsyhc_j.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/18clj6xsyhc_j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/221oy04d3f6t2.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/07ur0v9hb4ida.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable\",\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/18clj6xsyhc_j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"hZT2Q8C4grDYd_BRHVtw0\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"IconMark\"]\n8:null\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"title\",\"0\",{\"children\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"WizardFlow\"}],[\"$\",\"link\",\"3\",{\"rel\":\"author\",\"href\":\"https://github.com/lkleonk\"}],[\"$\",\"meta\",\"4\",{\"name\":\"author\",\"content\":\"Leon Koch\"}],[\"$\",\"meta\",\"5\",{\"name\":\"keywords\",\"content\":\"agent flow,LLM agent,agent visualization,agent debugging,agent observability,LangGraph,agent trace viewer,flow replay,node graph,payload inspection\"}],[\"$\",\"meta\",\"6\",{\"name\":\"creator\",\"content\":\"Leon Koch\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"9\",{\"rel\":\"canonical\",\"href\":\"https://getwizardflow.com\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:title\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:url\",\"content\":\"https://getwizardflow.com\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:site_name\",\"content\":\"WizardFlow\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image\",\"content\":\"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:alt\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:title\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image\",\"content\":\"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:alt\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.09qublg69ek7b.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L10\",\"30\",{}]]\n"])</script></body></html>
7
+ }catch(e){}})();</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/310vm2bl3xxpt.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[52599,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\"]\n3:I[44636,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\"]\n4:I[39756,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n5:I[37457,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"default\"]\n6:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"ViewportBoundary\"]\nc:I[97367,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"MetadataBoundary\"]\ne:I[68027,[\"/_next/static/chunks/221oy04d3f6t2.js\",\"/_next/static/chunks/07ur0v9hb4ida.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/18clj6xsyhc_j.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/18clj6xsyhc_j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/221oy04d3f6t2.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/07ur0v9hb4ida.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable\",\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/18clj6xsyhc_j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ncaFVj6v0NRTp4NatoEBp\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/_next/static/chunks/05-c3ty_6dwfk.js\",\"/_next/static/chunks/14mrh2-p_w84d.js\"],\"IconMark\"]\n8:null\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"title\",\"0\",{\"children\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"WizardFlow\"}],[\"$\",\"link\",\"3\",{\"rel\":\"author\",\"href\":\"https://github.com/lkleonk\"}],[\"$\",\"meta\",\"4\",{\"name\":\"author\",\"content\":\"Leon Koch\"}],[\"$\",\"meta\",\"5\",{\"name\":\"keywords\",\"content\":\"agent flow,LLM agent,agent visualization,agent debugging,agent observability,LangGraph,agent trace viewer,flow replay,node graph,payload inspection\"}],[\"$\",\"meta\",\"6\",{\"name\":\"creator\",\"content\":\"Leon Koch\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"9\",{\"rel\":\"canonical\",\"href\":\"https://getwizardflow.com\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:title\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:url\",\"content\":\"https://getwizardflow.com\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:site_name\",\"content\":\"WizardFlow\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image\",\"content\":\"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:alt\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:title\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:description\",\"content\":\"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser.\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image\",\"content\":\"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:alt\",\"content\":\"WizardFlow — Replay and inspect agent flows\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.09qublg69ek7b.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L10\",\"30\",{}]]\n"])</script></body></html>
@@ -1,10 +1,10 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[47257,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"ClientPageRoot"]
3
- 3:I[52683,["/_next/static/chunks/221oy04d3f6t2.js","/_next/static/chunks/07ur0v9hb4ida.js","/_next/static/chunks/35wrz4n1txs_o.js"],"default"]
3
+ 3:I[52683,["/_next/static/chunks/221oy04d3f6t2.js","/_next/static/chunks/07ur0v9hb4ida.js","/_next/static/chunks/1fb6xczxpe9s3.js"],"default"]
4
4
  6:I[97367,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"OutletBoundary"]
5
5
  7:"$Sreact.suspense"
6
6
  :HL["/_next/static/chunks/3lt2ss7dftc2n.css","style"]
7
- 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3lt2ss7dftc2n.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/35wrz4n1txs_o.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"hZT2Q8C4grDYd_BRHVtw0"}
7
+ 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3lt2ss7dftc2n.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/1fb6xczxpe9s3.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ncaFVj6v0NRTp4NatoEBp"}
8
8
  4:{}
9
9
  5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
10
10
  8:null
@@ -4,7 +4,7 @@
4
4
  4:I[39756,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"default"]
5
5
  5:I[37457,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"default"]
6
6
  6:I[47257,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"ClientPageRoot"]
7
- 7:I[52683,["/_next/static/chunks/221oy04d3f6t2.js","/_next/static/chunks/07ur0v9hb4ida.js","/_next/static/chunks/35wrz4n1txs_o.js"],"default"]
7
+ 7:I[52683,["/_next/static/chunks/221oy04d3f6t2.js","/_next/static/chunks/07ur0v9hb4ida.js","/_next/static/chunks/1fb6xczxpe9s3.js"],"default"]
8
8
  a:I[97367,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"OutletBoundary"]
9
9
  b:"$Sreact.suspense"
10
10
  d:I[97367,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"ViewportBoundary"]
@@ -14,7 +14,7 @@ f:I[97367,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-
14
14
  :HL["/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
15
15
  :HL["/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
16
16
  :HL["/_next/static/chunks/3lt2ss7dftc2n.css","style"]
17
- 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/221oy04d3f6t2.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/07ur0v9hb4ida.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable","children":["$","body",null,{"children":[["$","$L2",null,{}],["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3lt2ss7dftc2n.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/35wrz4n1txs_o.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"hZT2Q8C4grDYd_BRHVtw0"}
17
+ 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/221oy04d3f6t2.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/07ur0v9hb4ida.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable","children":["$","body",null,{"children":[["$","$L2",null,{}],["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3lt2ss7dftc2n.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/1fb6xczxpe9s3.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ncaFVj6v0NRTp4NatoEBp"}
18
18
  8:{}
19
19
  9:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
20
20
  e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -3,4 +3,4 @@
3
3
  3:I[97367,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[27201,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"WizardFlow — Replay and inspect agent flows"}],["$","meta","1",{"name":"description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","2",{"name":"application-name","content":"WizardFlow"}],["$","link","3",{"rel":"author","href":"https://github.com/lkleonk"}],["$","meta","4",{"name":"author","content":"Leon Koch"}],["$","meta","5",{"name":"keywords","content":"agent flow,LLM agent,agent visualization,agent debugging,agent observability,LangGraph,agent trace viewer,flow replay,node graph,payload inspection"}],["$","meta","6",{"name":"creator","content":"Leon Koch"}],["$","meta","7",{"name":"robots","content":"index, follow"}],["$","meta","8",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","9",{"rel":"canonical","href":"https://getwizardflow.com"}],["$","meta","10",{"property":"og:title","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","11",{"property":"og:description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","12",{"property":"og:url","content":"https://getwizardflow.com"}],["$","meta","13",{"property":"og:site_name","content":"WizardFlow"}],["$","meta","14",{"property":"og:locale","content":"en_US"}],["$","meta","15",{"property":"og:image","content":"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d"}],["$","meta","16",{"property":"og:image:type","content":"image/png"}],["$","meta","17",{"property":"og:image:width","content":"1200"}],["$","meta","18",{"property":"og:image:height","content":"630"}],["$","meta","19",{"property":"og:image:alt","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","20",{"property":"og:type","content":"website"}],["$","meta","21",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","22",{"name":"twitter:title","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","23",{"name":"twitter:description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","24",{"name":"twitter:image","content":"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d"}],["$","meta","25",{"name":"twitter:image:alt","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","26",{"name":"twitter:image:type","content":"image/png"}],["$","meta","27",{"name":"twitter:image:width","content":"1200"}],["$","meta","28",{"name":"twitter:image:height","content":"630"}],["$","link","29",{"rel":"icon","href":"/icon.svg?icon.09qublg69ek7b.svg","sizes":"any","type":"image/svg+xml"}],["$","$L5","30",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"hZT2Q8C4grDYd_BRHVtw0"}
6
+ 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"WizardFlow — Replay and inspect agent flows"}],["$","meta","1",{"name":"description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","2",{"name":"application-name","content":"WizardFlow"}],["$","link","3",{"rel":"author","href":"https://github.com/lkleonk"}],["$","meta","4",{"name":"author","content":"Leon Koch"}],["$","meta","5",{"name":"keywords","content":"agent flow,LLM agent,agent visualization,agent debugging,agent observability,LangGraph,agent trace viewer,flow replay,node graph,payload inspection"}],["$","meta","6",{"name":"creator","content":"Leon Koch"}],["$","meta","7",{"name":"robots","content":"index, follow"}],["$","meta","8",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","9",{"rel":"canonical","href":"https://getwizardflow.com"}],["$","meta","10",{"property":"og:title","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","11",{"property":"og:description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","12",{"property":"og:url","content":"https://getwizardflow.com"}],["$","meta","13",{"property":"og:site_name","content":"WizardFlow"}],["$","meta","14",{"property":"og:locale","content":"en_US"}],["$","meta","15",{"property":"og:image","content":"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d"}],["$","meta","16",{"property":"og:image:type","content":"image/png"}],["$","meta","17",{"property":"og:image:width","content":"1200"}],["$","meta","18",{"property":"og:image:height","content":"630"}],["$","meta","19",{"property":"og:image:alt","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","20",{"property":"og:type","content":"website"}],["$","meta","21",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","22",{"name":"twitter:title","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","23",{"name":"twitter:description","content":"WizardFlow is a browser-based viewer for agent runs. Upload a trace file to replay an agent flow step by step — message timeline, ordered node execution, live graph activity, and full payload inspection. Everything runs locally; no data leaves your browser."}],["$","meta","24",{"name":"twitter:image","content":"https://getwizardflow.com/opengraph-image?c0f3b66bb21d844d"}],["$","meta","25",{"name":"twitter:image:alt","content":"WizardFlow — Replay and inspect agent flows"}],["$","meta","26",{"name":"twitter:image:type","content":"image/png"}],["$","meta","27",{"name":"twitter:image:width","content":"1200"}],["$","meta","28",{"name":"twitter:image:height","content":"630"}],["$","link","29",{"rel":"icon","href":"/icon.svg?icon.09qublg69ek7b.svg","sizes":"any","type":"image/svg+xml"}],["$","$L5","30",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ncaFVj6v0NRTp4NatoEBp"}
@@ -4,4 +4,4 @@
4
4
  4:I[39756,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"default"]
5
5
  5:I[37457,["/_next/static/chunks/05-c3ty_6dwfk.js","/_next/static/chunks/14mrh2-p_w84d.js"],"default"]
6
6
  :HL["/_next/static/chunks/18clj6xsyhc_j.css","style"]
7
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/221oy04d3f6t2.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/07ur0v9hb4ida.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable","children":["$","body",null,{"children":[["$","$L2",null,{}],["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"hZT2Q8C4grDYd_BRHVtw0"}
7
+ 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/18clj6xsyhc_j.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/221oy04d3f6t2.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/07ur0v9hb4ida.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable","children":["$","body",null,{"children":[["$","$L2",null,{}],["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ncaFVj6v0NRTp4NatoEBp"}
@@ -2,4 +2,4 @@
2
2
  :HL["/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
3
  :HL["/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
4
4
  :HL["/_next/static/chunks/3lt2ss7dftc2n.css","style"]
5
- 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"hZT2Q8C4grDYd_BRHVtw0"}
5
+ 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"ncaFVj6v0NRTp4NatoEBp"}