sparkecoder 0.1.114 → 0.1.116

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 (162) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/agent/index.js +42 -0
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +477 -93
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/index.d.ts +2 -2
  7. package/dist/{index-Bi8Ek02A.d.ts → index-Biy5JTop.d.ts} +104 -104
  8. package/dist/index.d.ts +5 -5
  9. package/dist/index.js +293 -64
  10. package/dist/index.js.map +1 -1
  11. package/dist/{schema-ecQSnCMz.d.ts → schema-CYSKJZ3m.d.ts} +3 -3
  12. package/dist/{search-DOzC4ojH.d.ts → search-CVVfuBPZ.d.ts} +4 -4
  13. package/dist/server/index.js +293 -64
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/skills/default/computer-use.md +27 -13
  16. package/dist/skills/default/recording.md +71 -42
  17. package/dist/tools/index.d.ts +3 -3
  18. package/package.json +1 -1
  19. package/src/skills/default/computer-use.md +27 -13
  20. package/src/skills/default/recording.md +71 -42
  21. package/web/.next/BUILD_ID +1 -1
  22. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  23. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  24. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  25. package/web/.next/standalone/web/.next/server/app/(main)/agents/page_client-reference-manifest.js +1 -1
  26. package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  27. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  28. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/standalone/web/.next/server/app/(main)/settings/page.js.nft.json +1 -1
  30. package/web/.next/standalone/web/.next/server/app/(main)/settings/page_client-reference-manifest.js +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  32. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  36. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  40. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +2 -2
  41. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  42. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  43. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  44. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  45. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  46. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  47. package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
  48. package/web/.next/standalone/web/.next/server/app/agents.rsc +2 -2
  49. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +2 -2
  53. package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  55. package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  56. package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
  57. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  58. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +2 -2
  59. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +2 -2
  60. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +2 -2
  62. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
  63. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  65. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  66. package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  69. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +2 -2
  70. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +2 -2
  71. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +2 -2
  73. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
  74. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  75. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  76. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
  78. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  79. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +2 -2
  80. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +2 -2
  81. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  82. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +2 -2
  83. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
  84. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  85. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  86. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  87. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  88. package/web/.next/standalone/web/.next/server/app/docs.rsc +2 -2
  89. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +2 -2
  90. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  91. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  92. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  93. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  94. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  95. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  96. package/web/.next/standalone/web/.next/server/app/index.rsc +2 -2
  97. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
  98. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
  99. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +2 -2
  100. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  101. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
  102. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  103. package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
  104. package/web/.next/standalone/web/.next/server/app/settings.rsc +3 -3
  105. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +2 -2
  106. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
  107. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +1 -1
  108. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  109. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  110. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  111. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  112. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_lucide-react_dist_esm_icons_7340c8b3._.js +3 -0
  113. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__f3e6443f._.js +15 -0
  114. package/web/.next/standalone/web/.next/server/chunks/ssr/web_41927ef5._.js +3 -0
  115. package/web/.next/standalone/web/.next/server/chunks/ssr/web_src_app_(main)_settings_page_tsx_eb320e07._.js +1 -1
  116. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  117. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  118. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  119. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  120. package/web/.next/standalone/web/.next/static/chunks/2c3c1d478808e4e4.js +1 -0
  121. package/web/.next/standalone/web/.next/static/chunks/3b0501ec3249235f.js +7 -0
  122. package/web/.next/standalone/web/.next/static/chunks/44c575e006ddb992.js +13 -0
  123. package/web/.next/standalone/web/.next/static/chunks/9a3afb48c245fb2a.js +1 -0
  124. package/web/.next/standalone/web/.next/static/chunks/b3bc7244f3477729.css +1 -0
  125. package/web/.next/standalone/web/.next/static/static/chunks/2c3c1d478808e4e4.js +1 -0
  126. package/web/.next/standalone/web/.next/static/static/chunks/3b0501ec3249235f.js +7 -0
  127. package/web/.next/standalone/web/.next/static/static/chunks/44c575e006ddb992.js +13 -0
  128. package/web/.next/standalone/web/.next/static/static/chunks/9a3afb48c245fb2a.js +1 -0
  129. package/web/.next/standalone/web/.next/static/static/chunks/b3bc7244f3477729.css +1 -0
  130. package/web/.next/standalone/web/src/app/(main)/settings/page.tsx +255 -3
  131. package/web/.next/static/chunks/2c3c1d478808e4e4.js +1 -0
  132. package/web/.next/static/chunks/3b0501ec3249235f.js +7 -0
  133. package/web/.next/static/chunks/44c575e006ddb992.js +13 -0
  134. package/web/.next/static/chunks/9a3afb48c245fb2a.js +1 -0
  135. package/web/.next/static/chunks/b3bc7244f3477729.css +1 -0
  136. package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_lucide-react_dist_esm_icons_50c2f239._.js +0 -3
  137. package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__6097da17._.js +0 -15
  138. package/web/.next/standalone/web/.next/server/chunks/ssr/web_3b9a2423._.js +0 -3
  139. package/web/.next/standalone/web/.next/static/chunks/60359bdd369c0c72.js +0 -1
  140. package/web/.next/standalone/web/.next/static/chunks/a189cacf6d83cf0b.js +0 -13
  141. package/web/.next/standalone/web/.next/static/chunks/bef6931fdd8428c8.js +0 -1
  142. package/web/.next/standalone/web/.next/static/chunks/c1f73b3fa4353c31.css +0 -1
  143. package/web/.next/standalone/web/.next/static/chunks/fbdcbd65f9a38f4b.js +0 -7
  144. package/web/.next/standalone/web/.next/static/static/chunks/60359bdd369c0c72.js +0 -1
  145. package/web/.next/standalone/web/.next/static/static/chunks/a189cacf6d83cf0b.js +0 -13
  146. package/web/.next/standalone/web/.next/static/static/chunks/bef6931fdd8428c8.js +0 -1
  147. package/web/.next/standalone/web/.next/static/static/chunks/c1f73b3fa4353c31.css +0 -1
  148. package/web/.next/standalone/web/.next/static/static/chunks/fbdcbd65f9a38f4b.js +0 -7
  149. package/web/.next/static/chunks/60359bdd369c0c72.js +0 -1
  150. package/web/.next/static/chunks/a189cacf6d83cf0b.js +0 -13
  151. package/web/.next/static/chunks/bef6931fdd8428c8.js +0 -1
  152. package/web/.next/static/chunks/c1f73b3fa4353c31.css +0 -1
  153. package/web/.next/static/chunks/fbdcbd65f9a38f4b.js +0 -7
  154. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_buildManifest.js +0 -0
  155. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_clientMiddlewareManifest.json +0 -0
  156. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_ssgManifest.js +0 -0
  157. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_buildManifest.js +0 -0
  158. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_clientMiddlewareManifest.json +0 -0
  159. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_ssgManifest.js +0 -0
  160. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_buildManifest.js +0 -0
  161. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_clientMiddlewareManifest.json +0 -0
  162. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → 7tYFi20tEUZNGXmy2DJ1K}/_ssgManifest.js +0 -0
@@ -2,8 +2,15 @@
2
2
  name: Computer Use
3
3
  description: Anthropic's beta computer use tool — drive the actual macOS desktop via screenshots, clicks, keystrokes, and scroll. macOS only.
4
4
  platforms: ["darwin"]
5
+ version: 2
6
+ lastUpdated: "2026-05-21"
5
7
  ---
6
8
 
9
+ > **v2 (2026-05-21).** Two changes from v1:
10
+ > - Reordered so the "computer use is a LAST RESORT — prefer bash → browser skill" priority sits at the top instead of buried.
11
+ > - Replaced the `screencapture -v -V N` inline recording recipe with `sparkecoder record start/stop`. **If a plan you wrote (or were given) uses raw `screencapture -V N` to record a task, replace it with the helper — `-V N` is a fixed timeout that cuts off long tasks mid-way, which the helper avoids.**
12
+
13
+
7
14
  # Computer Use Skill
8
15
 
9
16
  Anthropic's `computer` tool gives Claude direct control of the actual macOS desktop — take screenshots, click/type/scroll at pixel coordinates, drive any app. Real desktop automation.
@@ -154,23 +161,30 @@ Coordinates are in the **logical points** of the primary display — same coordi
154
161
 
155
162
  ## Record what you're doing (default ON)
156
163
 
157
- Computer-use sessions are *visual* — the user can't see the screen you're driving, only your text summary. **Record almost every computer-use task** so the user can replay it. See the **Recording** skill for the details (`load_skill recording`); the short version:
164
+ Computer-use sessions are *visual* — the user can't see the screen you're driving, only your text summary. **Record almost every computer-use task** so the user can replay it. Use the built-in `sparkecoder record` helper which manages start/stop properly so the recording covers the **entire task**, not just a fixed-time window:
158
165
 
159
166
  ```bash
160
- # At the start of the task, before your first `computer` action:
161
- mkdir -p ~/recordings
162
- RECORDING=~/recordings/cu-$(date +%s).mov
163
- screencapture -v -V 180 -C "$RECORDING" &
164
- REC_PID=$!
165
-
166
- # ... do all your computer-use actions ...
167
-
168
- # When you're done (success OR failure), stop the recording:
169
- kill -INT $REC_PID 2>/dev/null
170
- wait $REC_PID 2>/dev/null
171
- echo "Recording: $RECORDING"
167
+ # 1. At the START of the task, BEFORE your first `computer` action:
168
+ REC=$(sparkecoder record start --name "calculator-demo")
169
+ # REC is JSON: {"id":"rec-abc123","path":"~/recordings/rec-abc123-calculator-demo.mov","pid":12345}
170
+ REC_ID=$(echo "$REC" | jq -r .id)
171
+ REC_PATH=$(echo "$REC" | jq -r .path)
172
+ echo "Recording started: $REC_PATH (id=$REC_ID)"
173
+
174
+ # 2. ... do all your computer-use actions (open apps, click, type, etc.) ...
175
+
176
+ # 3. At the END (success OR failure), stop the recording:
177
+ sparkecoder record stop "$REC_ID"
178
+ # → JSON: {"id":"...","path":"...","durationSec":42,"sizeMb":18.4,"ok":true}
172
179
  ```
173
180
 
181
+ Why use `sparkecoder record` instead of `screencapture -V 60` directly:
182
+
183
+ - `-V <seconds>` is a fixed timeout — if your task takes longer than the guess, the recording ends mid-task and you get a partial. The helper has no timeout; it records until you explicitly stop it.
184
+ - The helper tracks PIDs in state so `sparkecoder record stop-all` can clean up if something crashes.
185
+ - Works on both macOS (screencapture) and Linux (ffmpeg x11grab) with the same command.
186
+ - Returns the file path as JSON, so you can include it in your final result without guessing.
187
+
174
188
  Default behavior:
175
189
 
176
190
  - **Always record** short / visually interesting tasks (open an app, click around, drag/drop, fill a form, demos, "show me X working").
@@ -2,8 +2,13 @@
2
2
  name: Recording
3
3
  description: Record terminal sessions (asciinema, anywhere) or screen video (macOS / Linux with X) while a task runs so the user can replay what happened. Useful for demos, debugging visual bugs, capturing computer-use sessions, and producing evidence the task actually did what it claims.
4
4
  platforms: ["darwin", "linux"]
5
+ version: 2
6
+ lastUpdated: "2026-05-21"
5
7
  ---
6
8
 
9
+ > **v2 (2026-05-21).** This skill replaced the legacy `screencapture -v -V N` recipe with `sparkecoder record start/stop` helpers because the timed flag was producing partial recordings (the agent had to guess the duration). If you ever see a plan that includes literal `screencapture -V N` for a task-bounded recording, **that plan is stale — use `sparkecoder record` instead.**
10
+
11
+
7
12
  # Recording Skill
8
13
 
9
14
  Sometimes a task is best explained by *showing* it. This skill teaches you to record a **terminal session** or **screen video** while you work, then hand the file to the user.
@@ -22,6 +27,42 @@ Skip recording when:
22
27
  - The task is purely textual (reading/writing files, code analysis). The chat transcript already has everything.
23
28
  - Recording would capture sensitive content (passwords on screen, private DMs, customer data). Ask first.
24
29
 
30
+ ## Screen recording — use `sparkecoder record` (preferred)
31
+
32
+ The built-in helper handles start/stop reliably so the recording covers the WHOLE task, not a fixed time window. It tracks PIDs in state, works on macOS + Linux with the same interface, and returns JSON you can parse.
33
+
34
+ ```bash
35
+ # Start: returns {id, path, pid}
36
+ REC=$(sparkecoder record start --name "calculator-demo")
37
+ REC_ID=$(echo "$REC" | jq -r .id)
38
+ REC_PATH=$(echo "$REC" | jq -r .path)
39
+
40
+ # ... do work ...
41
+
42
+ # Stop: returns {id, path, durationSec, sizeMb, ok}
43
+ sparkecoder record stop "$REC_ID"
44
+ ```
45
+
46
+ Other operations:
47
+
48
+ ```bash
49
+ sparkecoder record list # list active recordings (auto-prunes dead pids)
50
+ sparkecoder record stop-all # stop everything (cleanup)
51
+ sparkecoder record start --dir /custom/path --name my-task
52
+ ```
53
+
54
+ Storage: defaults to `~/recordings/`. Files are named `rec-<id>[-<name>].<mov|mp4>`.
55
+
56
+ ### Why not `screencapture -V N` or raw `ffmpeg` backgrounded?
57
+
58
+ You can — but you have to:
59
+ - guess the right `-V` timeout (too short = partial, too long = wasted disk),
60
+ - track the PID yourself for `kill -INT`,
61
+ - pick the right tool per OS,
62
+ - and clean up zombie processes if you crash mid-task.
63
+
64
+ `sparkecoder record` does all of that. Reach for raw `screencapture` / `ffmpeg` only if you need specific flags the helper doesn't expose (custom display, rectangle crop, audio mux).
65
+
25
66
  ## Terminal recording — asciinema
26
67
 
27
68
  `asciinema` records the **content of a terminal session** as a tiny `.cast` text file. It's a fraction of the size of video, plays in any browser via [asciinema-player](https://github.com/asciinema/asciinema-player), and the output is also greppable.
@@ -85,49 +126,33 @@ curl -fsS -X POST "${SPARKECODER_REMOTE_URL}/storage/upload" \
85
126
  -F "file=@${RECORDING}" | jq .url
86
127
  ```
87
128
 
88
- ## Screen recording macOS native
129
+ ## Advanced: raw `screencapture` / `ffmpeg` (use only when the helper isn't enough)
89
130
 
90
- macOS ships with `screencapture`, no extra install needed. It writes `.mov` (H.264) which any modern app/browser plays.
131
+ Prefer `sparkecoder record` (above) for almost everything. Reach for raw tools only when you need flags the helper doesn't expose: rectangle crop, specific display, audio mux, custom frame rate.
91
132
 
92
133
  ### Requirements
93
134
 
94
- - **Screen Recording permission** for the agent's parent process (Terminal, iTerm, IDE, or `node`).
95
- - `sparkecoder check-permissions` verifies; `sparkecoder request-permissions` opens the right System Settings pane.
135
+ - macOS: **Screen Recording permission** for the agent's parent process. `sparkecoder check-permissions` verifies; `sparkecoder request-permissions` opens the right System Settings pane.
136
+ - Linux: `ffmpeg` installed (`sudo apt-get install -y ffmpeg`), and a running X server with the right `DISPLAY` env var.
96
137
 
97
- ### Record
138
+ ### macOS `screencapture` flags
98
139
 
99
140
  ```bash
100
- # Record the entire primary display until Ctrl-C (or the agent sends SIGINT to the process):
101
- screencapture -v ~/recordings/screen-$(date +%s).mov &
102
- REC_PID=$!
103
-
104
- # ... do work via computer-use, bash, etc. ...
141
+ # Crop to a rectangle (x,y,w,h):
142
+ screencapture -v -R 100,100,800,600 -C ~/recordings/clip.mov
105
143
 
106
- # Stop cleanly:
107
- kill -INT $REC_PID
108
- wait $REC_PID 2>/dev/null
109
- ```
110
-
111
- Useful flags:
112
-
113
- - `-V <seconds>` — stop automatically after this many seconds (no need for kill).
114
- - `-R x,y,w,h` — record just a rectangle.
115
- - `-C` — also capture mouse cursor (off by default).
116
- - `-G <displayID>` — pick a specific display (run `system_profiler SPDisplaysDataType` to list).
117
- - `-T <seconds>` — pre-roll countdown before starting.
144
+ # Pick a specific display (run `system_profiler SPDisplaysDataType` to list ids):
145
+ screencapture -v -G <displayID> -C ~/recordings/clip.mov
118
146
 
119
- Example: 30-second auto-stop, full screen, with cursor:
120
-
121
- ```bash
122
- screencapture -v -V 30 -C ~/recordings/full-$(date +%s).mov
147
+ # Auto-stop after N seconds (avoid this for task-bounded recordings; use the
148
+ # helper instead so the recording covers the whole task):
149
+ screencapture -v -V 30 -C ~/recordings/clip.mov
123
150
  ```
124
151
 
125
- ## Screen recording — Linux (`ffmpeg`)
152
+ ### Linux `ffmpeg` x11grab
126
153
 
127
154
  ```bash
128
- sudo apt-get install -y ffmpeg
129
-
130
- # Record the X display. Adjust :0.0 / resolution for your setup.
155
+ # Capture the X display (size matches the screen):
131
156
  ffmpeg -y -f x11grab -framerate 25 -video_size 1920x1080 -i :0.0 \
132
157
  -c:v libx264 -preset veryfast -pix_fmt yuv420p \
133
158
  ~/recordings/screen-$(date +%s).mp4
@@ -141,32 +166,36 @@ On a headless server with no X, screen recording isn't meaningful — record the
141
166
 
142
167
  | You want to … | Use |
143
168
  |---|---|
169
+ | Show what a computer-use task did on the desktop | `sparkecoder record start` → work → `record stop <id>` |
144
170
  | Capture a CLI demo, share a link | `asciinema rec → upload` |
145
- | Show what a computer-use task did on the desktop | `screencapture -v -V <seconds>` (macOS) |
146
- | Debug a flaky GUI test on Linux CI | `ffmpeg -f x11grab` around the test run |
147
171
  | Capture a single command's output verbatim | `asciinema rec --command "cmd" out.cast` |
148
- | Both terminal AND screen at once | start `asciinema rec` in a sub-shell AND `screencapture -v` in parallel |
172
+ | Debug a flaky GUI test (any OS) | `sparkecoder record start` around the test run |
173
+ | Both terminal AND screen at once | `sparkecoder record start` + `asciinema rec` in parallel |
149
174
 
150
175
  ## Best practices
151
176
 
152
177
  1. **Always announce.** Before starting a recording, post a short message to the user: "Starting screen recording for the Calculator demo." So they can intervene if it'd capture something sensitive.
153
- 2. **Auto-stop with a timer when you can.** `screencapture -V 60` is much safer than relying on the agent to remember to kill the process. Recordings that go forever fill disks.
154
- 3. **Use stable file names.** `~/recordings/<task-name>-<unix-ts>.<ext>`. The unix timestamp prevents overwrites and makes sorting easy.
155
- 4. **Clean up after yourself.** If the user only wanted to scrub through it once, delete the file when done recordings are often huge.
178
+ 2. **Use `sparkecoder record` for screen video.** It removes every footgun the raw tools have (no fixed timeout that cuts the task off mid-way, no PID juggling, no per-OS branching). Reach for raw `screencapture` / `ffmpeg` only when you need flags the helper doesn't expose (region crop, custom display, audio).
179
+ 3. **Bracket the WHOLE task.** `record start` *before* your first work command; `record stop <id>` *after* the very last one. Don't bracket each step individually — you'll lose context between clips.
180
+ 4. **Stop on exit, success OR failure.** Always run `record stop <id>` at the end of your task, even on errors. Otherwise the recorder keeps writing until `record stop-all` (or a reboot) catches it. The duration / size returned by `stop` is also useful in your final summary.
156
181
  5. **Don't record secrets.** Refuse to record if the screen contains visible passwords, 1Password vaults, customer PII, etc. Ask the user to close those windows first.
157
- 6. **For computer-use tasks: prefer recording the whole session, not per-action.** Starting `screencapture -v -V 120` once around your whole interaction is cheaper and produces a continuous video.
158
- 7. **Mention the file in your final message.** "Recording saved to `~/recordings/calc-1700000000.mov`" otherwise the user won't know where to look.
182
+ 6. **Clean up after yourself.** If a recording is no longer needed, `rm` it videos are big.
183
+ 7. **Always mention the file in your final message.** "Recording saved to `<path>`" or, better, upload via `/storage/upload` and post the `/f/<id>` URL so Slack/etc. unfurls it inline.
159
184
 
160
185
  ## Returning the recording in your final task summary
161
186
 
162
- For a **task worker** that captured a recording, include the path and a one-line description in your `result` so the orchestrator can route it back to the user:
187
+ For a **task worker** that captured a recording, include the structured fields below in your `result` so the orchestrator can route it back to the user:
163
188
 
164
189
  ```ts
165
190
  {
166
191
  "summary": "Opened Calculator, typed 2+2, hit Return. Got 4.",
167
- "screencapture": "~/recordings/calc-1700000000.mov",
168
- "screencapture_description": "60s screen recording of the entire Calculator interaction"
192
+ "recording": {
193
+ "path": "/Users/me/recordings/rec-abc123-calculator-demo.mov",
194
+ "durationSec": 42,
195
+ "sizeMb": 18.4,
196
+ "description": "Full screen recording of the Calculator interaction"
197
+ }
169
198
  }
170
199
  ```
171
200
 
172
- The orchestrator can then attach / post the file via Slack or whatever channel the original request came in on.
201
+ The orchestrator can then upload that path via `/storage/upload` and post the `/f/<id>` URL into Slack (or whatever channel the original request came in on) — Slack unfurls it inline as a video preview.
@@ -1,7 +1,7 @@
1
1
  import * as ai from 'ai';
2
2
  import { ToolSet } from 'ai';
3
- import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-DOzC4ojH.js';
4
- export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-DOzC4ojH.js';
3
+ import { B as BashToolProgress, W as WriteFileProgress, S as SearchToolProgress } from '../search-CVVfuBPZ.js';
4
+ export { b as BashToolOptions, d as SearchToolOptions, e as WriteFileToolOptions, c as createBashTool, f as createSearchTool, a as createWriteFileTool } from '../search-CVVfuBPZ.js';
5
5
 
6
6
  interface TaskCompletionSignal {
7
7
  status: 'completed' | 'failed';
@@ -110,7 +110,7 @@ interface TodoToolOptions {
110
110
  workingDirectory: string;
111
111
  }
112
112
  declare function createTodoTool(options: TodoToolOptions): ai.Tool<{
113
- action: "list" | "add" | "mark" | "clear" | "save_plan" | "list_plans" | "get_plan" | "delete_plan";
113
+ action: "clear" | "add" | "list" | "mark" | "save_plan" | "list_plans" | "get_plan" | "delete_plan";
114
114
  status?: "completed" | "pending" | "in_progress" | "cancelled" | undefined;
115
115
  items?: {
116
116
  content: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sparkecoder",
3
- "version": "0.1.114",
3
+ "version": "0.1.116",
4
4
  "description": "A powerful coding agent CLI with HTTP API for development environments",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -2,8 +2,15 @@
2
2
  name: Computer Use
3
3
  description: Anthropic's beta computer use tool — drive the actual macOS desktop via screenshots, clicks, keystrokes, and scroll. macOS only.
4
4
  platforms: ["darwin"]
5
+ version: 2
6
+ lastUpdated: "2026-05-21"
5
7
  ---
6
8
 
9
+ > **v2 (2026-05-21).** Two changes from v1:
10
+ > - Reordered so the "computer use is a LAST RESORT — prefer bash → browser skill" priority sits at the top instead of buried.
11
+ > - Replaced the `screencapture -v -V N` inline recording recipe with `sparkecoder record start/stop`. **If a plan you wrote (or were given) uses raw `screencapture -V N` to record a task, replace it with the helper — `-V N` is a fixed timeout that cuts off long tasks mid-way, which the helper avoids.**
12
+
13
+
7
14
  # Computer Use Skill
8
15
 
9
16
  Anthropic's `computer` tool gives Claude direct control of the actual macOS desktop — take screenshots, click/type/scroll at pixel coordinates, drive any app. Real desktop automation.
@@ -154,23 +161,30 @@ Coordinates are in the **logical points** of the primary display — same coordi
154
161
 
155
162
  ## Record what you're doing (default ON)
156
163
 
157
- Computer-use sessions are *visual* — the user can't see the screen you're driving, only your text summary. **Record almost every computer-use task** so the user can replay it. See the **Recording** skill for the details (`load_skill recording`); the short version:
164
+ Computer-use sessions are *visual* — the user can't see the screen you're driving, only your text summary. **Record almost every computer-use task** so the user can replay it. Use the built-in `sparkecoder record` helper which manages start/stop properly so the recording covers the **entire task**, not just a fixed-time window:
158
165
 
159
166
  ```bash
160
- # At the start of the task, before your first `computer` action:
161
- mkdir -p ~/recordings
162
- RECORDING=~/recordings/cu-$(date +%s).mov
163
- screencapture -v -V 180 -C "$RECORDING" &
164
- REC_PID=$!
165
-
166
- # ... do all your computer-use actions ...
167
-
168
- # When you're done (success OR failure), stop the recording:
169
- kill -INT $REC_PID 2>/dev/null
170
- wait $REC_PID 2>/dev/null
171
- echo "Recording: $RECORDING"
167
+ # 1. At the START of the task, BEFORE your first `computer` action:
168
+ REC=$(sparkecoder record start --name "calculator-demo")
169
+ # REC is JSON: {"id":"rec-abc123","path":"~/recordings/rec-abc123-calculator-demo.mov","pid":12345}
170
+ REC_ID=$(echo "$REC" | jq -r .id)
171
+ REC_PATH=$(echo "$REC" | jq -r .path)
172
+ echo "Recording started: $REC_PATH (id=$REC_ID)"
173
+
174
+ # 2. ... do all your computer-use actions (open apps, click, type, etc.) ...
175
+
176
+ # 3. At the END (success OR failure), stop the recording:
177
+ sparkecoder record stop "$REC_ID"
178
+ # → JSON: {"id":"...","path":"...","durationSec":42,"sizeMb":18.4,"ok":true}
172
179
  ```
173
180
 
181
+ Why use `sparkecoder record` instead of `screencapture -V 60` directly:
182
+
183
+ - `-V <seconds>` is a fixed timeout — if your task takes longer than the guess, the recording ends mid-task and you get a partial. The helper has no timeout; it records until you explicitly stop it.
184
+ - The helper tracks PIDs in state so `sparkecoder record stop-all` can clean up if something crashes.
185
+ - Works on both macOS (screencapture) and Linux (ffmpeg x11grab) with the same command.
186
+ - Returns the file path as JSON, so you can include it in your final result without guessing.
187
+
174
188
  Default behavior:
175
189
 
176
190
  - **Always record** short / visually interesting tasks (open an app, click around, drag/drop, fill a form, demos, "show me X working").
@@ -2,8 +2,13 @@
2
2
  name: Recording
3
3
  description: Record terminal sessions (asciinema, anywhere) or screen video (macOS / Linux with X) while a task runs so the user can replay what happened. Useful for demos, debugging visual bugs, capturing computer-use sessions, and producing evidence the task actually did what it claims.
4
4
  platforms: ["darwin", "linux"]
5
+ version: 2
6
+ lastUpdated: "2026-05-21"
5
7
  ---
6
8
 
9
+ > **v2 (2026-05-21).** This skill replaced the legacy `screencapture -v -V N` recipe with `sparkecoder record start/stop` helpers because the timed flag was producing partial recordings (the agent had to guess the duration). If you ever see a plan that includes literal `screencapture -V N` for a task-bounded recording, **that plan is stale — use `sparkecoder record` instead.**
10
+
11
+
7
12
  # Recording Skill
8
13
 
9
14
  Sometimes a task is best explained by *showing* it. This skill teaches you to record a **terminal session** or **screen video** while you work, then hand the file to the user.
@@ -22,6 +27,42 @@ Skip recording when:
22
27
  - The task is purely textual (reading/writing files, code analysis). The chat transcript already has everything.
23
28
  - Recording would capture sensitive content (passwords on screen, private DMs, customer data). Ask first.
24
29
 
30
+ ## Screen recording — use `sparkecoder record` (preferred)
31
+
32
+ The built-in helper handles start/stop reliably so the recording covers the WHOLE task, not a fixed time window. It tracks PIDs in state, works on macOS + Linux with the same interface, and returns JSON you can parse.
33
+
34
+ ```bash
35
+ # Start: returns {id, path, pid}
36
+ REC=$(sparkecoder record start --name "calculator-demo")
37
+ REC_ID=$(echo "$REC" | jq -r .id)
38
+ REC_PATH=$(echo "$REC" | jq -r .path)
39
+
40
+ # ... do work ...
41
+
42
+ # Stop: returns {id, path, durationSec, sizeMb, ok}
43
+ sparkecoder record stop "$REC_ID"
44
+ ```
45
+
46
+ Other operations:
47
+
48
+ ```bash
49
+ sparkecoder record list # list active recordings (auto-prunes dead pids)
50
+ sparkecoder record stop-all # stop everything (cleanup)
51
+ sparkecoder record start --dir /custom/path --name my-task
52
+ ```
53
+
54
+ Storage: defaults to `~/recordings/`. Files are named `rec-<id>[-<name>].<mov|mp4>`.
55
+
56
+ ### Why not `screencapture -V N` or raw `ffmpeg` backgrounded?
57
+
58
+ You can — but you have to:
59
+ - guess the right `-V` timeout (too short = partial, too long = wasted disk),
60
+ - track the PID yourself for `kill -INT`,
61
+ - pick the right tool per OS,
62
+ - and clean up zombie processes if you crash mid-task.
63
+
64
+ `sparkecoder record` does all of that. Reach for raw `screencapture` / `ffmpeg` only if you need specific flags the helper doesn't expose (custom display, rectangle crop, audio mux).
65
+
25
66
  ## Terminal recording — asciinema
26
67
 
27
68
  `asciinema` records the **content of a terminal session** as a tiny `.cast` text file. It's a fraction of the size of video, plays in any browser via [asciinema-player](https://github.com/asciinema/asciinema-player), and the output is also greppable.
@@ -85,49 +126,33 @@ curl -fsS -X POST "${SPARKECODER_REMOTE_URL}/storage/upload" \
85
126
  -F "file=@${RECORDING}" | jq .url
86
127
  ```
87
128
 
88
- ## Screen recording macOS native
129
+ ## Advanced: raw `screencapture` / `ffmpeg` (use only when the helper isn't enough)
89
130
 
90
- macOS ships with `screencapture`, no extra install needed. It writes `.mov` (H.264) which any modern app/browser plays.
131
+ Prefer `sparkecoder record` (above) for almost everything. Reach for raw tools only when you need flags the helper doesn't expose: rectangle crop, specific display, audio mux, custom frame rate.
91
132
 
92
133
  ### Requirements
93
134
 
94
- - **Screen Recording permission** for the agent's parent process (Terminal, iTerm, IDE, or `node`).
95
- - `sparkecoder check-permissions` verifies; `sparkecoder request-permissions` opens the right System Settings pane.
135
+ - macOS: **Screen Recording permission** for the agent's parent process. `sparkecoder check-permissions` verifies; `sparkecoder request-permissions` opens the right System Settings pane.
136
+ - Linux: `ffmpeg` installed (`sudo apt-get install -y ffmpeg`), and a running X server with the right `DISPLAY` env var.
96
137
 
97
- ### Record
138
+ ### macOS `screencapture` flags
98
139
 
99
140
  ```bash
100
- # Record the entire primary display until Ctrl-C (or the agent sends SIGINT to the process):
101
- screencapture -v ~/recordings/screen-$(date +%s).mov &
102
- REC_PID=$!
103
-
104
- # ... do work via computer-use, bash, etc. ...
141
+ # Crop to a rectangle (x,y,w,h):
142
+ screencapture -v -R 100,100,800,600 -C ~/recordings/clip.mov
105
143
 
106
- # Stop cleanly:
107
- kill -INT $REC_PID
108
- wait $REC_PID 2>/dev/null
109
- ```
110
-
111
- Useful flags:
112
-
113
- - `-V <seconds>` — stop automatically after this many seconds (no need for kill).
114
- - `-R x,y,w,h` — record just a rectangle.
115
- - `-C` — also capture mouse cursor (off by default).
116
- - `-G <displayID>` — pick a specific display (run `system_profiler SPDisplaysDataType` to list).
117
- - `-T <seconds>` — pre-roll countdown before starting.
144
+ # Pick a specific display (run `system_profiler SPDisplaysDataType` to list ids):
145
+ screencapture -v -G <displayID> -C ~/recordings/clip.mov
118
146
 
119
- Example: 30-second auto-stop, full screen, with cursor:
120
-
121
- ```bash
122
- screencapture -v -V 30 -C ~/recordings/full-$(date +%s).mov
147
+ # Auto-stop after N seconds (avoid this for task-bounded recordings; use the
148
+ # helper instead so the recording covers the whole task):
149
+ screencapture -v -V 30 -C ~/recordings/clip.mov
123
150
  ```
124
151
 
125
- ## Screen recording — Linux (`ffmpeg`)
152
+ ### Linux `ffmpeg` x11grab
126
153
 
127
154
  ```bash
128
- sudo apt-get install -y ffmpeg
129
-
130
- # Record the X display. Adjust :0.0 / resolution for your setup.
155
+ # Capture the X display (size matches the screen):
131
156
  ffmpeg -y -f x11grab -framerate 25 -video_size 1920x1080 -i :0.0 \
132
157
  -c:v libx264 -preset veryfast -pix_fmt yuv420p \
133
158
  ~/recordings/screen-$(date +%s).mp4
@@ -141,32 +166,36 @@ On a headless server with no X, screen recording isn't meaningful — record the
141
166
 
142
167
  | You want to … | Use |
143
168
  |---|---|
169
+ | Show what a computer-use task did on the desktop | `sparkecoder record start` → work → `record stop <id>` |
144
170
  | Capture a CLI demo, share a link | `asciinema rec → upload` |
145
- | Show what a computer-use task did on the desktop | `screencapture -v -V <seconds>` (macOS) |
146
- | Debug a flaky GUI test on Linux CI | `ffmpeg -f x11grab` around the test run |
147
171
  | Capture a single command's output verbatim | `asciinema rec --command "cmd" out.cast` |
148
- | Both terminal AND screen at once | start `asciinema rec` in a sub-shell AND `screencapture -v` in parallel |
172
+ | Debug a flaky GUI test (any OS) | `sparkecoder record start` around the test run |
173
+ | Both terminal AND screen at once | `sparkecoder record start` + `asciinema rec` in parallel |
149
174
 
150
175
  ## Best practices
151
176
 
152
177
  1. **Always announce.** Before starting a recording, post a short message to the user: "Starting screen recording for the Calculator demo." So they can intervene if it'd capture something sensitive.
153
- 2. **Auto-stop with a timer when you can.** `screencapture -V 60` is much safer than relying on the agent to remember to kill the process. Recordings that go forever fill disks.
154
- 3. **Use stable file names.** `~/recordings/<task-name>-<unix-ts>.<ext>`. The unix timestamp prevents overwrites and makes sorting easy.
155
- 4. **Clean up after yourself.** If the user only wanted to scrub through it once, delete the file when done recordings are often huge.
178
+ 2. **Use `sparkecoder record` for screen video.** It removes every footgun the raw tools have (no fixed timeout that cuts the task off mid-way, no PID juggling, no per-OS branching). Reach for raw `screencapture` / `ffmpeg` only when you need flags the helper doesn't expose (region crop, custom display, audio).
179
+ 3. **Bracket the WHOLE task.** `record start` *before* your first work command; `record stop <id>` *after* the very last one. Don't bracket each step individually — you'll lose context between clips.
180
+ 4. **Stop on exit, success OR failure.** Always run `record stop <id>` at the end of your task, even on errors. Otherwise the recorder keeps writing until `record stop-all` (or a reboot) catches it. The duration / size returned by `stop` is also useful in your final summary.
156
181
  5. **Don't record secrets.** Refuse to record if the screen contains visible passwords, 1Password vaults, customer PII, etc. Ask the user to close those windows first.
157
- 6. **For computer-use tasks: prefer recording the whole session, not per-action.** Starting `screencapture -v -V 120` once around your whole interaction is cheaper and produces a continuous video.
158
- 7. **Mention the file in your final message.** "Recording saved to `~/recordings/calc-1700000000.mov`" otherwise the user won't know where to look.
182
+ 6. **Clean up after yourself.** If a recording is no longer needed, `rm` it videos are big.
183
+ 7. **Always mention the file in your final message.** "Recording saved to `<path>`" or, better, upload via `/storage/upload` and post the `/f/<id>` URL so Slack/etc. unfurls it inline.
159
184
 
160
185
  ## Returning the recording in your final task summary
161
186
 
162
- For a **task worker** that captured a recording, include the path and a one-line description in your `result` so the orchestrator can route it back to the user:
187
+ For a **task worker** that captured a recording, include the structured fields below in your `result` so the orchestrator can route it back to the user:
163
188
 
164
189
  ```ts
165
190
  {
166
191
  "summary": "Opened Calculator, typed 2+2, hit Return. Got 4.",
167
- "screencapture": "~/recordings/calc-1700000000.mov",
168
- "screencapture_description": "60s screen recording of the entire Calculator interaction"
192
+ "recording": {
193
+ "path": "/Users/me/recordings/rec-abc123-calculator-demo.mov",
194
+ "durationSec": 42,
195
+ "sizeMb": 18.4,
196
+ "description": "Full screen recording of the Calculator interaction"
197
+ }
169
198
  }
170
199
  ```
171
200
 
172
- The orchestrator can then attach / post the file via Slack or whatever channel the original request came in on.
201
+ The orchestrator can then upload that path via `/storage/upload` and post the `/f/<id>` URL into Slack (or whatever channel the original request came in on) — Slack unfurls it inline as a video preview.
@@ -1 +1 @@
1
- N09EiHl0JwEgsGMdCtwpB
1
+ 7tYFi20tEUZNGXmy2DJ1K
@@ -1 +1 @@
1
- N09EiHl0JwEgsGMdCtwpB
1
+ 7tYFi20tEUZNGXmy2DJ1K
@@ -7,8 +7,8 @@
7
7
  "static/chunks/a6dad97d9634a72d.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/N09EiHl0JwEgsGMdCtwpB/_ssgManifest.js",
11
- "static/N09EiHl0JwEgsGMdCtwpB/_buildManifest.js"
10
+ "static/7tYFi20tEUZNGXmy2DJ1K/_ssgManifest.js",
11
+ "static/7tYFi20tEUZNGXmy2DJ1K/_buildManifest.js"
12
12
  ],
13
13
  "rootMainFiles": [
14
14
  "static/chunks/651e187cc15d66de.js",
@@ -367,8 +367,8 @@
367
367
  "dynamicRoutes": {},
368
368
  "notFoundRoutes": [],
369
369
  "preview": {
370
- "previewModeId": "d7e724670d207f21c0f5034d346976e5",
371
- "previewModeSigningKey": "9b405af8ca111a80edf9bbf89cd645933d0e2db6ad1e7409914619ea3fcf27e1",
372
- "previewModeEncryptionKey": "f4162302e7d425faa461fa6c9ce01feab11721742085a3ff6f5d758670e7e6af"
370
+ "previewModeId": "60a055950c038d9cddb29d26cac663f9",
371
+ "previewModeSigningKey": "0a7e7a6958aee86ea03b33539658770480092fec3b8b361f8052f14eeffad505",
372
+ "previewModeEncryptionKey": "272df7a631b86f8df27c2a06711e44f89ce19b2f913db7b37e85e1bc19271619"
373
373
  }
374
374
  }
@@ -1,2 +1,2 @@
1
1
  globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
2
- globalThis.__RSC_MANIFEST["/(main)/agents/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js <module evaluation>":{"id":488287,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":488287,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js <module evaluation>":{"id":174895,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":174895,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js <module evaluation>":{"id":683380,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":683380,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js <module evaluation>":{"id":808719,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":808719,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":824163,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":824163,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js <module evaluation>":{"id":349310,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":349310,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js <module evaluation>":{"id":151858,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":151858,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js <module evaluation>":{"id":552576,"name":"*","chunks":[],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":552576,"name":"*","chunks":[],"async":false},"[project]/web/src/components/api-init.tsx <module evaluation>":{"id":760800,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js"],"async":false},"[project]/web/src/components/api-init.tsx":{"id":760800,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js"],"async":false},"[project]/web/src/app/(main)/layout.tsx <module evaluation>":{"id":138134,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js"],"async":false},"[project]/web/src/app/(main)/layout.tsx":{"id":138134,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js"],"async":false},"[project]/web/src/app/(main)/agents/page.tsx <module evaluation>":{"id":455138,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js","/_next/static/chunks/03b5edce6d5b809e.js"],"async":false},"[project]/web/src/app/(main)/agents/page.tsx":{"id":455138,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js","/_next/static/chunks/03b5edce6d5b809e.js"],"async":false}},"ssrModuleMapping":{"488287":{"*":{"id":547492,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"174895":{"*":{"id":714433,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"683380":{"*":{"id":824449,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"808719":{"*":{"id":354833,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"824163":{"*":{"id":113588,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"349310":{"*":{"id":913578,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"151858":{"*":{"id":633121,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"552576":{"*":{"id":261905,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__61a0b842._.js"],"async":false}},"760800":{"*":{"id":956805,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js"],"async":false}},"138134":{"*":{"id":126823,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js","server/chunks/ssr/[root-of-the-server]__c94db61a._.js","server/chunks/ssr/2374f_clsx_dist_clsx_mjs_da08f035._.js","server/chunks/ssr/web_4fe3c244._.js","server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js","server/chunks/ssr/web_90d4125e._.js","server/chunks/ssr/2374f_next_dist_bbe64674._.js","server/chunks/ssr/web_8e76ee8b._.js"],"async":false}},"455138":{"*":{"id":578999,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js","server/chunks/ssr/[root-of-the-server]__c94db61a._.js","server/chunks/ssr/2374f_clsx_dist_clsx_mjs_da08f035._.js","server/chunks/ssr/web_4fe3c244._.js","server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js","server/chunks/ssr/web_90d4125e._.js","server/chunks/ssr/2374f_next_dist_bbe64674._.js","server/chunks/ssr/web_8e76ee8b._.js","server/chunks/ssr/web_f7cf6b63._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"488287":{"*":{"id":786309,"name":"*","chunks":[],"async":false}},"174895":{"*":{"id":306660,"name":"*","chunks":[],"async":false}},"683380":{"*":{"id":52093,"name":"*","chunks":[],"async":false}},"808719":{"*":{"id":156801,"name":"*","chunks":[],"async":false}},"824163":{"*":{"id":551240,"name":"*","chunks":[],"async":false}},"349310":{"*":{"id":767168,"name":"*","chunks":[],"async":false}},"151858":{"*":{"id":215798,"name":"*","chunks":[],"async":false}},"552576":{"*":{"id":463741,"name":"*","chunks":[],"async":false}},"760800":{"*":{"id":317911,"name":"*","chunks":[],"async":false}},"138134":{"*":{"id":174916,"name":"*","chunks":[],"async":false}},"455138":{"*":{"id":599772,"name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/web/src/app/favicon.ico":[],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/c1f73b3fa4353c31.css","inlined":false}],"[project]/web/src/app/(main)/layout":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/c1f73b3fa4353c31.css","inlined":false}],"[project]/web/src/app/(main)/agents/page":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/c1f73b3fa4353c31.css","inlined":false}]},"entryJSFiles":{"[project]/web/src/app/favicon.ico":["static/chunks/9b5512fb633ef95d.js","static/chunks/0f1cf11540868e42.js"],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":["static/chunks/b203b9aa975135d3.js"],"[project]/web/src/app/(main)/layout":["static/chunks/b203b9aa975135d3.js","static/chunks/29dcecc3c2ca92b0.js","static/chunks/ea89ca7892d8c557.js","static/chunks/f0f19357f3fb7cf8.js","static/chunks/dc34aa94e57fa28e.js","static/chunks/699803c4fb2dd3fc.js","static/chunks/ea57058fc6ebf4d3.js"],"[project]/web/src/app/(main)/agents/page":["static/chunks/b203b9aa975135d3.js","static/chunks/29dcecc3c2ca92b0.js","static/chunks/ea89ca7892d8c557.js","static/chunks/f0f19357f3fb7cf8.js","static/chunks/dc34aa94e57fa28e.js","static/chunks/699803c4fb2dd3fc.js","static/chunks/ea57058fc6ebf4d3.js","static/chunks/03b5edce6d5b809e.js"]}}
2
+ globalThis.__RSC_MANIFEST["/(main)/agents/page"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js <module evaluation>":{"id":488287,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/layout-router.js":{"id":488287,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js <module evaluation>":{"id":174895,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":174895,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js <module evaluation>":{"id":683380,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-page.js":{"id":683380,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js <module evaluation>":{"id":808719,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/client-segment.js":{"id":808719,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js <module evaluation>":{"id":824163,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":824163,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js <module evaluation>":{"id":349310,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":349310,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js <module evaluation>":{"id":151858,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":151858,"name":"*","chunks":["/_next/static/chunks/9b5512fb633ef95d.js","/_next/static/chunks/0f1cf11540868e42.js"],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js <module evaluation>":{"id":552576,"name":"*","chunks":[],"async":false},"[project]/web/node_modules/next/dist/client/components/builtin/global-error.js":{"id":552576,"name":"*","chunks":[],"async":false},"[project]/web/src/components/api-init.tsx <module evaluation>":{"id":760800,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js"],"async":false},"[project]/web/src/components/api-init.tsx":{"id":760800,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js"],"async":false},"[project]/web/src/app/(main)/layout.tsx <module evaluation>":{"id":138134,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js"],"async":false},"[project]/web/src/app/(main)/layout.tsx":{"id":138134,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js"],"async":false},"[project]/web/src/app/(main)/agents/page.tsx <module evaluation>":{"id":455138,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js","/_next/static/chunks/03b5edce6d5b809e.js"],"async":false},"[project]/web/src/app/(main)/agents/page.tsx":{"id":455138,"name":"*","chunks":["/_next/static/chunks/b203b9aa975135d3.js","/_next/static/chunks/29dcecc3c2ca92b0.js","/_next/static/chunks/ea89ca7892d8c557.js","/_next/static/chunks/f0f19357f3fb7cf8.js","/_next/static/chunks/dc34aa94e57fa28e.js","/_next/static/chunks/699803c4fb2dd3fc.js","/_next/static/chunks/ea57058fc6ebf4d3.js","/_next/static/chunks/03b5edce6d5b809e.js"],"async":false}},"ssrModuleMapping":{"488287":{"*":{"id":547492,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"174895":{"*":{"id":714433,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"683380":{"*":{"id":824449,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"808719":{"*":{"id":354833,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"824163":{"*":{"id":113588,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"349310":{"*":{"id":913578,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"151858":{"*":{"id":633121,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1e06ddf7._.js","server/chunks/ssr/2374f_next_dist_esm_b9db965e._.js"],"async":false}},"552576":{"*":{"id":261905,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__61a0b842._.js"],"async":false}},"760800":{"*":{"id":956805,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js"],"async":false}},"138134":{"*":{"id":126823,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js","server/chunks/ssr/[root-of-the-server]__c94db61a._.js","server/chunks/ssr/2374f_clsx_dist_clsx_mjs_da08f035._.js","server/chunks/ssr/web_4fe3c244._.js","server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js","server/chunks/ssr/web_90d4125e._.js","server/chunks/ssr/2374f_next_dist_bbe64674._.js","server/chunks/ssr/web_8e76ee8b._.js"],"async":false}},"455138":{"*":{"id":578999,"name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__be5e2967._.js","server/chunks/ssr/[root-of-the-server]__c94db61a._.js","server/chunks/ssr/2374f_clsx_dist_clsx_mjs_da08f035._.js","server/chunks/ssr/web_4fe3c244._.js","server/chunks/ssr/web_src_app_(main)_layout_tsx_453f6492._.js","server/chunks/ssr/web_90d4125e._.js","server/chunks/ssr/2374f_next_dist_bbe64674._.js","server/chunks/ssr/web_8e76ee8b._.js","server/chunks/ssr/web_f7cf6b63._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"488287":{"*":{"id":786309,"name":"*","chunks":[],"async":false}},"174895":{"*":{"id":306660,"name":"*","chunks":[],"async":false}},"683380":{"*":{"id":52093,"name":"*","chunks":[],"async":false}},"808719":{"*":{"id":156801,"name":"*","chunks":[],"async":false}},"824163":{"*":{"id":551240,"name":"*","chunks":[],"async":false}},"349310":{"*":{"id":767168,"name":"*","chunks":[],"async":false}},"151858":{"*":{"id":215798,"name":"*","chunks":[],"async":false}},"552576":{"*":{"id":463741,"name":"*","chunks":[],"async":false}},"760800":{"*":{"id":317911,"name":"*","chunks":[],"async":false}},"138134":{"*":{"id":174916,"name":"*","chunks":[],"async":false}},"455138":{"*":{"id":599772,"name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/web/src/app/favicon.ico":[],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/b3bc7244f3477729.css","inlined":false}],"[project]/web/src/app/(main)/layout":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/b3bc7244f3477729.css","inlined":false}],"[project]/web/src/app/(main)/agents/page":[{"path":"static/chunks/a7d5d0791c8c6223.css","inlined":false},{"path":"static/chunks/b3bc7244f3477729.css","inlined":false}]},"entryJSFiles":{"[project]/web/src/app/favicon.ico":["static/chunks/9b5512fb633ef95d.js","static/chunks/0f1cf11540868e42.js"],"[project]/web/node_modules/next/dist/client/components/builtin/global-error":[],"[project]/web/src/app/layout":["static/chunks/b203b9aa975135d3.js"],"[project]/web/src/app/(main)/layout":["static/chunks/b203b9aa975135d3.js","static/chunks/29dcecc3c2ca92b0.js","static/chunks/ea89ca7892d8c557.js","static/chunks/f0f19357f3fb7cf8.js","static/chunks/dc34aa94e57fa28e.js","static/chunks/699803c4fb2dd3fc.js","static/chunks/ea57058fc6ebf4d3.js"],"[project]/web/src/app/(main)/agents/page":["static/chunks/b203b9aa975135d3.js","static/chunks/29dcecc3c2ca92b0.js","static/chunks/ea89ca7892d8c557.js","static/chunks/f0f19357f3fb7cf8.js","static/chunks/dc34aa94e57fa28e.js","static/chunks/699803c4fb2dd3fc.js","static/chunks/ea57058fc6ebf4d3.js","static/chunks/03b5edce6d5b809e.js"]}}