screenhand 0.2.0 → 0.3.1

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 (212) hide show
  1. package/README.md +165 -446
  2. package/bin/darwin-arm64/macos-bridge +0 -0
  3. package/dist/mcp-desktop.js +3615 -400
  4. package/dist/scripts/export-help-center.js +112 -0
  5. package/dist/scripts/marketing-loop.js +117 -0
  6. package/dist/scripts/observer-daemon.js +288 -0
  7. package/dist/scripts/orchestrator-daemon.js +399 -0
  8. package/dist/scripts/threads-campaign.js +208 -0
  9. package/dist/src/community/fetcher.js +109 -0
  10. package/dist/src/community/index.js +6 -0
  11. package/dist/src/community/publisher.js +191 -0
  12. package/dist/src/community/remote-api.js +121 -0
  13. package/dist/src/community/types.js +3 -0
  14. package/dist/src/community/validator.js +95 -0
  15. package/dist/src/context-tracker.js +489 -0
  16. package/dist/src/ingestion/coverage-auditor.js +233 -0
  17. package/dist/src/ingestion/doc-parser.js +164 -0
  18. package/dist/src/ingestion/index.js +8 -0
  19. package/dist/src/ingestion/menu-scanner.js +152 -0
  20. package/dist/src/ingestion/reference-merger.js +186 -0
  21. package/dist/src/ingestion/shortcut-extractor.js +180 -0
  22. package/dist/src/ingestion/tutorial-extractor.js +170 -0
  23. package/dist/src/ingestion/types.js +3 -0
  24. package/dist/src/jobs/manager.js +82 -14
  25. package/dist/src/jobs/runner.js +138 -15
  26. package/dist/src/learning/engine.js +356 -0
  27. package/dist/src/learning/index.js +9 -0
  28. package/dist/src/learning/locator-policy.js +120 -0
  29. package/dist/src/learning/pattern-policy.js +89 -0
  30. package/dist/src/learning/recovery-policy.js +116 -0
  31. package/dist/src/learning/sensor-policy.js +115 -0
  32. package/dist/src/learning/timing-model.js +204 -0
  33. package/dist/src/learning/topology-policy.js +90 -0
  34. package/dist/src/learning/types.js +9 -0
  35. package/dist/src/logging/timeline-logger.js +4 -1
  36. package/dist/src/memory/playbook-seeds.js +200 -0
  37. package/dist/src/memory/recall.js +60 -8
  38. package/dist/src/memory/service.js +30 -5
  39. package/dist/src/memory/store.js +34 -5
  40. package/dist/src/native/bridge-client.js +253 -31
  41. package/dist/src/observer/state.js +199 -0
  42. package/dist/src/observer/types.js +43 -0
  43. package/dist/src/orchestrator/state.js +68 -0
  44. package/dist/src/orchestrator/types.js +22 -0
  45. package/dist/src/perception/ax-source.js +162 -0
  46. package/dist/src/perception/cdp-source.js +162 -0
  47. package/dist/src/perception/coordinator.js +771 -0
  48. package/dist/src/perception/frame-differ.js +287 -0
  49. package/dist/src/perception/index.js +22 -0
  50. package/dist/src/perception/manager.js +199 -0
  51. package/dist/src/perception/types.js +47 -0
  52. package/dist/src/perception/vision-source.js +399 -0
  53. package/dist/src/planner/deterministic.js +298 -0
  54. package/dist/src/planner/executor.js +870 -0
  55. package/dist/src/planner/goal-store.js +92 -0
  56. package/dist/src/planner/index.js +21 -0
  57. package/dist/src/planner/planner.js +520 -0
  58. package/dist/src/planner/tool-registry.js +71 -0
  59. package/dist/src/planner/types.js +22 -0
  60. package/dist/src/platform/explorer.js +213 -0
  61. package/dist/src/platform/help-center-markdown.js +527 -0
  62. package/dist/src/platform/learner.js +257 -0
  63. package/dist/src/playbook/engine.js +296 -11
  64. package/dist/src/playbook/mcp-recorder.js +204 -0
  65. package/dist/src/playbook/recorder.js +3 -2
  66. package/dist/src/playbook/runner.js +1 -1
  67. package/dist/src/playbook/store.js +139 -10
  68. package/dist/src/recovery/detectors.js +156 -0
  69. package/dist/src/recovery/engine.js +327 -0
  70. package/dist/src/recovery/index.js +20 -0
  71. package/dist/src/recovery/strategies.js +274 -0
  72. package/dist/src/recovery/types.js +20 -0
  73. package/dist/src/runtime/accessibility-adapter.js +55 -18
  74. package/dist/src/runtime/applescript-adapter.js +8 -2
  75. package/dist/src/runtime/cdp-chrome-adapter.js +1 -1
  76. package/dist/src/runtime/executor.js +23 -3
  77. package/dist/src/runtime/locator-cache.js +24 -2
  78. package/dist/src/runtime/service.js +59 -15
  79. package/dist/src/runtime/session-manager.js +4 -1
  80. package/dist/src/runtime/vision-adapter.js +2 -1
  81. package/dist/src/state/app-map-types.js +72 -0
  82. package/dist/src/state/app-map.js +1974 -0
  83. package/dist/src/state/entity-tracker.js +108 -0
  84. package/dist/src/state/fusion.js +96 -0
  85. package/dist/src/state/index.js +21 -0
  86. package/dist/src/state/ladder-generator.js +236 -0
  87. package/dist/src/state/persistence.js +156 -0
  88. package/dist/src/state/types.js +17 -0
  89. package/dist/src/state/world-model.js +1456 -0
  90. package/dist/src/util/atomic-write.js +19 -4
  91. package/dist/src/util/sanitize.js +146 -0
  92. package/dist-app-maps/com.figma.Desktop.json +959 -0
  93. package/dist-app-maps/com.hnc.Discord.json +1146 -0
  94. package/dist-app-maps/notion.id.json +2831 -0
  95. package/dist-playbooks/canva-screenhand-carousel.json +445 -0
  96. package/dist-playbooks/codex-desktop.json +76 -0
  97. package/dist-playbooks/competitor-research-stack.json +122 -0
  98. package/dist-playbooks/davinci-color-grade.json +153 -0
  99. package/dist-playbooks/davinci-edit-timeline.json +162 -0
  100. package/dist-playbooks/davinci-render.json +114 -0
  101. package/dist-playbooks/devto.json +52 -0
  102. package/dist-playbooks/discord.json +41 -0
  103. package/dist-playbooks/google-flow-create-project.json +59 -0
  104. package/dist-playbooks/google-flow-edit-image.json +90 -0
  105. package/dist-playbooks/google-flow-edit-video.json +90 -0
  106. package/dist-playbooks/google-flow-generate-image.json +68 -0
  107. package/dist-playbooks/google-flow-generate-video.json +191 -0
  108. package/dist-playbooks/google-flow-open-project.json +48 -0
  109. package/dist-playbooks/google-flow-open-scenebuilder.json +64 -0
  110. package/dist-playbooks/google-flow-search-assets.json +64 -0
  111. package/dist-playbooks/instagram.json +57 -0
  112. package/dist-playbooks/linkedin.json +52 -0
  113. package/dist-playbooks/n8n.json +43 -0
  114. package/dist-playbooks/reddit.json +52 -0
  115. package/dist-playbooks/threads.json +59 -0
  116. package/dist-playbooks/x-twitter.json +59 -0
  117. package/dist-playbooks/youtube.json +59 -0
  118. package/dist-references/canva.json +646 -0
  119. package/dist-references/codex-desktop.json +305 -0
  120. package/dist-references/davinci-resolve-keyboard.json +594 -0
  121. package/dist-references/davinci-resolve-menu-map.json +1139 -0
  122. package/dist-references/davinci-resolve-menus-batch1.json +116 -0
  123. package/dist-references/davinci-resolve-menus-batch2.json +372 -0
  124. package/dist-references/davinci-resolve-menus-batch3.json +330 -0
  125. package/dist-references/davinci-resolve-menus-batch4.json +297 -0
  126. package/dist-references/davinci-resolve-shortcuts.json +333 -0
  127. package/dist-references/devpost.json +186 -0
  128. package/dist-references/devto.json +317 -0
  129. package/dist-references/discord.json +549 -0
  130. package/dist-references/figma.json +1186 -0
  131. package/dist-references/finder.json +146 -0
  132. package/dist-references/google-ads-transparency.json +95 -0
  133. package/dist-references/google-flow.json +649 -0
  134. package/dist-references/instagram.json +341 -0
  135. package/dist-references/linkedin.json +324 -0
  136. package/dist-references/meta-ad-library.json +86 -0
  137. package/dist-references/n8n.json +387 -0
  138. package/dist-references/notes.json +27 -0
  139. package/dist-references/notion.json +163 -0
  140. package/dist-references/reddit.json +341 -0
  141. package/dist-references/threads.json +337 -0
  142. package/dist-references/x-twitter.json +403 -0
  143. package/dist-references/youtube.json +373 -0
  144. package/native/macos-bridge/Package.swift +22 -0
  145. package/native/macos-bridge/Sources/AccessibilityBridge.swift +482 -0
  146. package/native/macos-bridge/Sources/AppManagement.swift +339 -0
  147. package/native/macos-bridge/Sources/CoreGraphicsBridge.swift +537 -0
  148. package/native/macos-bridge/Sources/ObserverBridge.swift +120 -0
  149. package/native/macos-bridge/Sources/StreamCapture.swift +136 -0
  150. package/native/macos-bridge/Sources/VisionBridge.swift +238 -0
  151. package/native/macos-bridge/Sources/main.swift +498 -0
  152. package/native/windows-bridge/AppManagement.cs +234 -0
  153. package/native/windows-bridge/InputBridge.cs +436 -0
  154. package/native/windows-bridge/Program.cs +270 -0
  155. package/native/windows-bridge/ScreenCapture.cs +453 -0
  156. package/native/windows-bridge/UIAutomationBridge.cs +571 -0
  157. package/native/windows-bridge/WindowsBridge.csproj +17 -0
  158. package/package.json +12 -1
  159. package/scripts/postinstall.cjs +127 -0
  160. package/dist/.audit-log.jsonl +0 -55
  161. package/dist/.screenhand/memory/.lock +0 -1
  162. package/dist/.screenhand/memory/actions.jsonl +0 -85
  163. package/dist/.screenhand/memory/errors.jsonl +0 -5
  164. package/dist/.screenhand/memory/errors.jsonl.bak +0 -4
  165. package/dist/.screenhand/memory/state.json +0 -35
  166. package/dist/.screenhand/memory/state.json.bak +0 -35
  167. package/dist/.screenhand/memory/strategies.jsonl +0 -12
  168. package/dist/agent/cli.js +0 -73
  169. package/dist/agent/loop.js +0 -258
  170. package/dist/config.js +0 -9
  171. package/dist/index.js +0 -56
  172. package/dist/logging/timeline-logger.js +0 -29
  173. package/dist/mcp/mcp-stdio-server.js +0 -448
  174. package/dist/mcp/server.js +0 -347
  175. package/dist/mcp-entry.js +0 -59
  176. package/dist/memory/recall.js +0 -160
  177. package/dist/memory/research.js +0 -98
  178. package/dist/memory/seeds.js +0 -89
  179. package/dist/memory/session.js +0 -161
  180. package/dist/memory/store.js +0 -391
  181. package/dist/memory/types.js +0 -4
  182. package/dist/monitor/codex-monitor.js +0 -377
  183. package/dist/monitor/task-queue.js +0 -84
  184. package/dist/monitor/types.js +0 -49
  185. package/dist/native/bridge-client.js +0 -174
  186. package/dist/native/macos-bridge-client.js +0 -5
  187. package/dist/npm-publish-helper.js +0 -117
  188. package/dist/npm-token-cdp.js +0 -113
  189. package/dist/npm-token-create.js +0 -135
  190. package/dist/npm-token-finish.js +0 -126
  191. package/dist/playbook/engine.js +0 -193
  192. package/dist/playbook/index.js +0 -4
  193. package/dist/playbook/recorder.js +0 -519
  194. package/dist/playbook/runner.js +0 -392
  195. package/dist/playbook/store.js +0 -166
  196. package/dist/playbook/types.js +0 -4
  197. package/dist/runtime/accessibility-adapter.js +0 -377
  198. package/dist/runtime/app-adapter.js +0 -48
  199. package/dist/runtime/applescript-adapter.js +0 -283
  200. package/dist/runtime/ax-role-map.js +0 -80
  201. package/dist/runtime/browser-adapter.js +0 -36
  202. package/dist/runtime/cdp-chrome-adapter.js +0 -505
  203. package/dist/runtime/composite-adapter.js +0 -205
  204. package/dist/runtime/executor.js +0 -250
  205. package/dist/runtime/locator-cache.js +0 -12
  206. package/dist/runtime/planning-loop.js +0 -47
  207. package/dist/runtime/service.js +0 -372
  208. package/dist/runtime/session-manager.js +0 -28
  209. package/dist/runtime/state-observer.js +0 -105
  210. package/dist/runtime/vision-adapter.js +0 -208
  211. package/dist/test-mcp-protocol.js +0 -138
  212. package/dist/types.js +0 -1
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ /**
5
+ * postinstall script — copies the correct prebuilt native bridge binary
6
+ * into bin/ so the MCP server can find it at runtime.
7
+ *
8
+ * If no prebuilt binary exists for this platform+arch, falls back to
9
+ * building from source (requires Swift on macOS / .NET on Windows).
10
+ */
11
+
12
+ const { execSync } = require("child_process");
13
+ const fs = require("fs");
14
+ const path = require("path");
15
+
16
+ const platform = process.platform; // "darwin" | "win32" | "linux"
17
+ const arch = process.arch; // "arm64" | "x64"
18
+ const root = path.resolve(__dirname, "..");
19
+
20
+ // Where prebuilt binaries live in the npm package
21
+ const prebuiltDir = path.join(root, "bin", `${platform}-${arch}`);
22
+
23
+ // Where the bridge-client expects to find the binary at runtime
24
+ const runtimeDir = path.join(root, "bin");
25
+
26
+ function log(msg) {
27
+ console.log(`[screenhand] ${msg}`);
28
+ }
29
+
30
+ function hasBinary() {
31
+ if (platform === "win32") {
32
+ return fs.existsSync(path.join(prebuiltDir, "windows-bridge.exe"));
33
+ }
34
+ return fs.existsSync(path.join(prebuiltDir, "macos-bridge"));
35
+ }
36
+
37
+ function buildFromSource() {
38
+ if (platform === "darwin") {
39
+ const swiftProject = path.join(root, "native", "macos-bridge");
40
+ if (!fs.existsSync(path.join(swiftProject, "Package.swift"))) {
41
+ log("No Swift source found — skipping native build.");
42
+ log("Desktop automation tools will not be available.");
43
+ return false;
44
+ }
45
+ log("Building native bridge from source (Swift)...");
46
+ try {
47
+ execSync("swift build -c release", {
48
+ cwd: swiftProject,
49
+ stdio: "inherit",
50
+ timeout: 120_000,
51
+ });
52
+ // Copy built binary to bin/
53
+ const built = path.join(
54
+ swiftProject,
55
+ ".build",
56
+ `${arch}-apple-macosx`,
57
+ "release",
58
+ "macos-bridge"
59
+ );
60
+ if (!fs.existsSync(built)) {
61
+ // Try the generic release path
62
+ const genericBuilt = path.join(swiftProject, ".build", "release", "macos-bridge");
63
+ if (fs.existsSync(genericBuilt)) {
64
+ fs.mkdirSync(prebuiltDir, { recursive: true });
65
+ fs.copyFileSync(genericBuilt, path.join(prebuiltDir, "macos-bridge"));
66
+ return true;
67
+ }
68
+ log("Build succeeded but binary not found at expected path.");
69
+ return false;
70
+ }
71
+ fs.mkdirSync(prebuiltDir, { recursive: true });
72
+ fs.copyFileSync(built, path.join(prebuiltDir, "macos-bridge"));
73
+ return true;
74
+ } catch {
75
+ log("Swift build failed. Install Xcode Command Line Tools: xcode-select --install");
76
+ return false;
77
+ }
78
+ }
79
+
80
+ if (platform === "win32") {
81
+ const dotnetProject = path.join(root, "native", "windows-bridge");
82
+ if (!fs.existsSync(path.join(dotnetProject, "windows-bridge.csproj"))) {
83
+ log("No .NET source found — skipping native build.");
84
+ return false;
85
+ }
86
+ log("Building native bridge from source (.NET)...");
87
+ try {
88
+ execSync("dotnet build -c Release", {
89
+ cwd: dotnetProject,
90
+ stdio: "inherit",
91
+ timeout: 120_000,
92
+ });
93
+ const built = path.join(
94
+ dotnetProject,
95
+ "bin",
96
+ "Release",
97
+ "net8.0-windows",
98
+ "windows-bridge.exe"
99
+ );
100
+ if (fs.existsSync(built)) {
101
+ fs.mkdirSync(prebuiltDir, { recursive: true });
102
+ fs.copyFileSync(built, path.join(prebuiltDir, "windows-bridge.exe"));
103
+ return true;
104
+ }
105
+ return false;
106
+ } catch {
107
+ log(".NET build failed. Install .NET 8 SDK: https://dotnet.microsoft.com/download/dotnet/8.0");
108
+ return false;
109
+ }
110
+ }
111
+
112
+ log(`Unsupported platform: ${platform}. ScreenHand supports macOS and Windows.`);
113
+ return false;
114
+ }
115
+
116
+ // Main
117
+ if (hasBinary()) {
118
+ log(`Prebuilt binary found for ${platform}-${arch}.`);
119
+ } else {
120
+ log(`No prebuilt binary for ${platform}-${arch}. Attempting build from source...`);
121
+ if (buildFromSource()) {
122
+ log("Native bridge built successfully.");
123
+ } else {
124
+ log("Could not build native bridge. Some tools will be unavailable.");
125
+ log("You can build manually: npm run build:native");
126
+ }
127
+ }
@@ -1,55 +0,0 @@
1
- {"timestamp":"2026-03-06T14:27:11.635Z","tool":"browser_js","params":{"code":"(async () => {\n const queries = [{\"category\":\"AI Agents\",\"term\":\"ai\"},{\"category\":\"AI Agents\",\"term\":\"ai agents\"},{\"category\":\"AI Agents\",\"term\":\"mcp\"},{\"category\":\"AI Agents\",\"term\":\"llm\"},{\"category\":\"AI Agents\",\"term\":\"chatgpt\"},{\"category\":\"AI Agents\",\"term\":\"openai\"},{\"category\":\"AI Agents\",\"term\":\"anthropic\"},{\"category\":\"AI Agents\",\"term\":\"claude\"},{\"category\":\"AI Agents\",\"term\":\"cursor\"},{\"category\":\"AI Agents\",\"term\":\"codex\"},{\"category\":\"Automation\",\"term\":\"automation\"},{\"category","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":37887}
2
- {"timestamp":"2026-03-06T14:28:23.008Z","tool":"browser_js","params":{"code":"(async () => {\n const queries = [{\"category\":\"AI Agents\",\"term\":\"ai\"},{\"category\":\"AI Agents\",\"term\":\"ai agents\"},{\"category\":\"AI Agents\",\"term\":\"agentic ai\"},{\"category\":\"AI Agents\",\"term\":\"mcp\"},{\"category\":\"AI Agents\",\"term\":\"llm\"},{\"category\":\"AI Agents\",\"term\":\"chatgpt\"},{\"category\":\"AI Agents\",\"term\":\"openai\"},{\"category\":\"AI Agents\",\"term\":\"anthropic\"},{\"category\":\"AI Agents\",\"term\":\"claude\"},{\"category\":\"AI Agents\",\"term\":\"cursor\"},{\"category\":\"AI Agents\",\"term\":\"codex\"},{\"category\"","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38091}
3
- {"timestamp":"2026-03-06T14:30:01.255Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"ai\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const us","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
4
- {"timestamp":"2026-03-06T14:30:02.874Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"ai agents\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n c","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
5
- {"timestamp":"2026-03-06T14:30:03.877Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"agentic ai\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
6
- {"timestamp":"2026-03-06T14:30:04.675Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"mcp\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const u","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
7
- {"timestamp":"2026-03-06T14:30:05.747Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"llm\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const u","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
8
- {"timestamp":"2026-03-06T14:30:07.033Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"chatgpt\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n con","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
9
- {"timestamp":"2026-03-06T14:30:08.047Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"openai\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
10
- {"timestamp":"2026-03-06T14:30:09.523Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"anthropic\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n c","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
11
- {"timestamp":"2026-03-06T14:30:10.564Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"claude\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
12
- {"timestamp":"2026-03-06T14:30:11.680Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"cursor\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
13
- {"timestamp":"2026-03-06T14:30:12.719Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"codex\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
14
- {"timestamp":"2026-03-06T14:30:13.794Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"genai\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
15
- {"timestamp":"2026-03-06T14:30:14.797Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
16
- {"timestamp":"2026-03-06T14:30:15.685Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"browser automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
17
- {"timestamp":"2026-03-06T14:30:16.505Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"desktop automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
18
- {"timestamp":"2026-03-06T14:30:17.787Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"workflow automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
19
- {"timestamp":"2026-03-06T14:30:18.698Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"no code automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
20
- {"timestamp":"2026-03-06T14:30:19.964Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"qa automation\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
21
- {"timestamp":"2026-03-06T14:30:20.919Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"automation engineer\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
22
- {"timestamp":"2026-03-06T14:30:21.911Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"selenium\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n co","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
23
- {"timestamp":"2026-03-06T14:30:22.940Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"playwright\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
24
- {"timestamp":"2026-03-06T14:30:24.157Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"zapier\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
25
- {"timestamp":"2026-03-06T14:30:25.252Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"developer\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n c","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
26
- {"timestamp":"2026-03-06T14:30:26.221Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"coding\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
27
- {"timestamp":"2026-03-06T14:30:27.442Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"programming\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
28
- {"timestamp":"2026-03-06T14:30:28.344Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"software engineer\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
29
- {"timestamp":"2026-03-06T14:30:29.592Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"devtools\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n co","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
30
- {"timestamp":"2026-03-06T14:30:30.615Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"developer tools\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
31
- {"timestamp":"2026-03-06T14:30:31.536Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"javascript\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
32
- {"timestamp":"2026-03-06T14:30:32.664Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"python\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
33
- {"timestamp":"2026-03-06T14:30:33.962Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"react\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
34
- {"timestamp":"2026-03-06T14:30:35.428Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"web development\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
35
- {"timestamp":"2026-03-06T14:30:36.452Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"app development\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
36
- {"timestamp":"2026-03-06T14:30:37.782Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"opensource\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
37
- {"timestamp":"2026-03-06T14:30:39.196Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"startup\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n con","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
38
- {"timestamp":"2026-03-06T14:30:40.343Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"startup founder\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
39
- {"timestamp":"2026-03-06T14:30:41.572Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"founder\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n con","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
40
- {"timestamp":"2026-03-06T14:30:42.596Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"saas\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n const ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
41
- {"timestamp":"2026-03-06T14:30:43.825Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"build in public\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
42
- {"timestamp":"2026-03-06T14:30:44.952Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"indie hacker\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
43
- {"timestamp":"2026-03-06T14:30:46.078Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"indie hackers\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
44
- {"timestamp":"2026-03-06T14:30:47.199Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"productivity\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
45
- {"timestamp":"2026-03-06T14:30:48.154Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"growth\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
46
- {"timestamp":"2026-03-06T14:30:49.356Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"product manager\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
47
- {"timestamp":"2026-03-06T14:30:50.451Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"ai tools\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n co","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
48
- {"timestamp":"2026-03-06T14:30:52.023Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"machine learning\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
49
- {"timestamp":"2026-03-06T14:30:53.144Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"generative ai\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
50
- {"timestamp":"2026-03-06T14:30:54.376Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"prompt engineering\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
51
- {"timestamp":"2026-03-06T14:30:55.232Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"automation tools\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
52
- {"timestamp":"2026-03-06T14:30:57.638Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"artificial intelligence\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
53
- {"timestamp":"2026-03-06T14:30:59.901Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"productivity tools\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n ","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
54
- {"timestamp":"2026-03-06T14:31:00.844Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"nocode\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n cons","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
55
- {"timestamp":"2026-03-06T14:31:01.949Z","tool":"browser_js","params":{"code":"(async () => {\n const term = \"low code\";\n const endpoints = [\n '/api/v1/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term),\n '/web/search/topsearch/?context=blended&count=50&query=' + encodeURIComponent(term)\n ];\n for (const url of endpoints) {\n try {\n const res = await fetch(url, { credentials: 'include' });\n if (!res.ok) continue;\n const data = await res.json();\n co","tabId":"50A0E3A47A679D689B43FDB9E35FF819"},"pid":38325}
@@ -1 +0,0 @@
1
- 16806