@agenticmail/enterprise 0.5.442 → 0.5.443

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 (244) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +3 -2
  3. package/dist/agent-tools-3MD7EPO6.js +14629 -0
  4. package/dist/agent-tools-62HGQYDL.js +14629 -0
  5. package/dist/agent-tools-BTUVVOWT.js +14629 -0
  6. package/dist/agent-tools-BV3JMJPN.js +14629 -0
  7. package/dist/agent-tools-JVNQ4RPM.js +14629 -0
  8. package/dist/agent-tools-LD7LELVT.js +14629 -0
  9. package/dist/agent-tools-NRKQ5NMW.js +14629 -0
  10. package/dist/agent-tools-OXZJOD4D.js +14629 -0
  11. package/dist/agent-tools-PT2ES6G5.js +14629 -0
  12. package/dist/agent-tools-SS335E2E.js +14629 -0
  13. package/dist/chunk-2ACTQSPC.js +1728 -0
  14. package/dist/chunk-2XZE5NT3.js +5387 -0
  15. package/dist/chunk-325NTNE6.js +2180 -0
  16. package/dist/chunk-3AHKVWCO.js +5387 -0
  17. package/dist/chunk-3L2N6LR2.js +7517 -0
  18. package/dist/chunk-3ZD3XOV6.js +1728 -0
  19. package/dist/chunk-44VXWYPE.js +2570 -0
  20. package/dist/chunk-4UOSUXFR.js +7529 -0
  21. package/dist/chunk-54SHHX2S.js +2180 -0
  22. package/dist/chunk-5DVY3CNK.js +1728 -0
  23. package/dist/chunk-5F5DGV63.js +5596 -0
  24. package/dist/chunk-6IUUOWZY.js +7526 -0
  25. package/dist/chunk-77LFFLQX.js +7526 -0
  26. package/dist/chunk-7BKNDBSA.js +2191 -0
  27. package/dist/chunk-7BS2XPLW.js +5359 -0
  28. package/dist/chunk-7GCSGDXQ.js +1636 -0
  29. package/dist/chunk-7IAI45PR.js +4735 -0
  30. package/dist/chunk-7QPZGO27.js +4976 -0
  31. package/dist/chunk-7S5XAXRD.js +4747 -0
  32. package/dist/chunk-AD6ZR3QD.js +5357 -0
  33. package/dist/chunk-AO556OXZ.js +2570 -0
  34. package/dist/chunk-APUWQHXC.js +7437 -0
  35. package/dist/chunk-BKSSHV6C.js +1728 -0
  36. package/dist/chunk-BMUNQHLU.js +1208 -0
  37. package/dist/chunk-BPF5DKUM.js +392 -0
  38. package/dist/chunk-CFR5OSMI.js +1220 -0
  39. package/dist/chunk-CM4GUHXP.js +1728 -0
  40. package/dist/chunk-CVFIM72Q.js +501 -0
  41. package/dist/chunk-DFXVJNKW.js +4734 -0
  42. package/dist/chunk-DJ7LHRL7.js +2214 -0
  43. package/dist/chunk-DJFI6NR6.js +1624 -0
  44. package/dist/chunk-DJHYV5VY.js +1624 -0
  45. package/dist/chunk-DYM4PQO3.js +4727 -0
  46. package/dist/chunk-DZ75RF35.js +1728 -0
  47. package/dist/chunk-E5H64U5H.js +472 -0
  48. package/dist/chunk-EOD4EGFI.js +1728 -0
  49. package/dist/chunk-EP74QR5B.js +4980 -0
  50. package/dist/chunk-FE2M4FV5.js +5273 -0
  51. package/dist/chunk-FUH6NWIX.js +7540 -0
  52. package/dist/chunk-G5ADHHAD.js +1728 -0
  53. package/dist/chunk-GAYLPSM7.js +7529 -0
  54. package/dist/chunk-GDAFZJTJ.js +7540 -0
  55. package/dist/chunk-GLAN2JBA.js +1636 -0
  56. package/dist/chunk-GNAEBGU7.js +4812 -0
  57. package/dist/chunk-HDDA2Q3Q.js +1728 -0
  58. package/dist/chunk-HG62FWWQ.js +7437 -0
  59. package/dist/chunk-HV5VIS5K.js +1624 -0
  60. package/dist/chunk-IEVA23WK.js +4976 -0
  61. package/dist/chunk-IFMZ2IYC.js +7540 -0
  62. package/dist/chunk-IN7VIORK.js +2641 -0
  63. package/dist/chunk-KAX3ZDP2.js +7529 -0
  64. package/dist/chunk-KECO53GP.js +1728 -0
  65. package/dist/chunk-KGZ74UMA.js +1728 -0
  66. package/dist/chunk-M2ZLRUMX.js +7540 -0
  67. package/dist/chunk-MKQWC6KF.js +5374 -0
  68. package/dist/chunk-MQ3JBGLU.js +1636 -0
  69. package/dist/chunk-MVB6JARX.js +7529 -0
  70. package/dist/chunk-N37MOOFE.js +2210 -0
  71. package/dist/chunk-NELCAZUQ.js +5357 -0
  72. package/dist/chunk-OPAO5QQS.js +1728 -0
  73. package/dist/chunk-OUHU3VW6.js +1728 -0
  74. package/dist/chunk-OWEXZVZ6.js +1728 -0
  75. package/dist/chunk-P4DHSJJY.js +7437 -0
  76. package/dist/chunk-Q7QA6MNJ.js +1728 -0
  77. package/dist/chunk-QKKTNPGV.js +7592 -0
  78. package/dist/chunk-REMMXZVU.js +7529 -0
  79. package/dist/chunk-RK3KATD4.js +4756 -0
  80. package/dist/chunk-RQ33L5T3.js +5374 -0
  81. package/dist/chunk-RU77F65Q.js +1728 -0
  82. package/dist/chunk-SAM3CVIU.js +5374 -0
  83. package/dist/chunk-SFMXIKWZ.js +1728 -0
  84. package/dist/chunk-SPZ5JBGW.js +1624 -0
  85. package/dist/chunk-TDOC6WSK.js +7529 -0
  86. package/dist/chunk-TPMT5WTW.js +5357 -0
  87. package/dist/chunk-TVXUR3PB.js +2180 -0
  88. package/dist/chunk-TZEEVEKG.js +5343 -0
  89. package/dist/chunk-U327O3ZR.js +7540 -0
  90. package/dist/chunk-ULD6C5DB.js +2180 -0
  91. package/dist/chunk-ULVRCJZV.js +5374 -0
  92. package/dist/chunk-UOCDOM2S.js +1624 -0
  93. package/dist/chunk-VINDZLLX.js +1636 -0
  94. package/dist/chunk-VODW5GJL.js +2180 -0
  95. package/dist/chunk-WEWL7Z3C.js +2180 -0
  96. package/dist/chunk-WG2MEMS6.js +5343 -0
  97. package/dist/chunk-WYV6QWOJ.js +1188 -0
  98. package/dist/chunk-X5AIAD77.js +1636 -0
  99. package/dist/chunk-XUETIRDV.js +2214 -0
  100. package/dist/chunk-XWSMX7RK.js +7529 -0
  101. package/dist/chunk-YUSYXHKB.js +1728 -0
  102. package/dist/chunk-ZC2RMHQD.js +5374 -0
  103. package/dist/chunk-ZDZQQGFG.js +5374 -0
  104. package/dist/chunk-ZJ2HCWKF.js +1728 -0
  105. package/dist/chunk-ZMKVEJKR.js +392 -0
  106. package/dist/cli-agent-2UFGFO24.js +2761 -0
  107. package/dist/cli-agent-5FPUCFPG.js +2761 -0
  108. package/dist/cli-agent-7AB6NIYQ.js +2761 -0
  109. package/dist/cli-agent-7CAFSYOM.js +2761 -0
  110. package/dist/cli-agent-7OVOINHR.js +2757 -0
  111. package/dist/cli-agent-AWKBFIRS.js +2761 -0
  112. package/dist/cli-agent-ES3XOPHJ.js +2757 -0
  113. package/dist/cli-agent-KPXZN5JK.js +2761 -0
  114. package/dist/cli-agent-LGTCFHGS.js +2757 -0
  115. package/dist/cli-agent-LLUYUHHF.js +2757 -0
  116. package/dist/cli-agent-NHZWYX5Q.js +2761 -0
  117. package/dist/cli-agent-TYUOTYCO.js +2757 -0
  118. package/dist/cli-agent-VQO6HI65.js +2757 -0
  119. package/dist/cli-agent-VV5JWRU7.js +2757 -0
  120. package/dist/cli-agent-Z5B23XED.js +2757 -0
  121. package/dist/cli-serve-2FLQXJW7.js +322 -0
  122. package/dist/cli-serve-34YFCCUX.js +322 -0
  123. package/dist/cli-serve-3NS6MNUS.js +322 -0
  124. package/dist/cli-serve-4PWFEPNA.js +322 -0
  125. package/dist/cli-serve-4VIBMXMT.js +322 -0
  126. package/dist/cli-serve-5ZUF5MGH.js +322 -0
  127. package/dist/cli-serve-6HGL56GB.js +322 -0
  128. package/dist/cli-serve-BBBWEKKW.js +322 -0
  129. package/dist/cli-serve-D2HQC4SB.js +322 -0
  130. package/dist/cli-serve-IKCMNUNM.js +322 -0
  131. package/dist/cli-serve-LTUKYMEF.js +322 -0
  132. package/dist/cli-serve-MIWI5PBE.js +322 -0
  133. package/dist/cli-serve-R6K4SZ3L.js +322 -0
  134. package/dist/cli-serve-RQIOBQGF.js +322 -0
  135. package/dist/cli-serve-S57ROYQ6.js +322 -0
  136. package/dist/cli-serve-WVSLOISY.js +322 -0
  137. package/dist/cli-serve-YKZSNR3P.js +322 -0
  138. package/dist/cli-serve-ZGKXWDMZ.js +322 -0
  139. package/dist/cli-serve-ZZOJWREY.js +322 -0
  140. package/dist/cli.js +3 -3
  141. package/dist/dashboard/components/utils.js +1 -1
  142. package/dist/dashboard/docs/polymarket.html +1 -1
  143. package/dist/dashboard/pages/polymarket.js +222 -80
  144. package/dist/index.js +10 -10
  145. package/dist/pipeline-C4C3ZF4X.js +15 -0
  146. package/dist/pipeline-DAF3EV7Q.js +15 -0
  147. package/dist/pipeline-MMESLRQG.js +15 -0
  148. package/dist/polymarket-3LGJSQZK.js +17 -0
  149. package/dist/polymarket-4OIWQFBO.js +17 -0
  150. package/dist/polymarket-AZEV7C6E.js +17 -0
  151. package/dist/polymarket-DBQYJC57.js +7 -0
  152. package/dist/polymarket-EVTKWLUO.js +7 -0
  153. package/dist/polymarket-GMKDVVQH.js +17 -0
  154. package/dist/polymarket-HZOAD4W4.js +17 -0
  155. package/dist/polymarket-PKGRF7ID.js +17 -0
  156. package/dist/polymarket-QUNR2H7U.js +17 -0
  157. package/dist/polymarket-TM624BN5.js +17 -0
  158. package/dist/polymarket-VT2EDGD7.js +17 -0
  159. package/dist/polymarket-W7B4TLP3.js +17 -0
  160. package/dist/polymarket-WS4VE6U7.js +7 -0
  161. package/dist/polymarket-runtime-772ADZJW.js +108 -0
  162. package/dist/polymarket-runtime-AIYHQKYQ.js +108 -0
  163. package/dist/polymarket-runtime-APJ5HW4Y.js +108 -0
  164. package/dist/polymarket-runtime-BX3ODZZD.js +108 -0
  165. package/dist/polymarket-runtime-ISD4CKKL.js +108 -0
  166. package/dist/polymarket-runtime-JU4PQZGJ.js +108 -0
  167. package/dist/polymarket-runtime-OFLBSPCK.js +108 -0
  168. package/dist/polymarket-runtime-POJRRWFS.js +108 -0
  169. package/dist/polymarket-runtime-XN5TVHU5.js +108 -0
  170. package/dist/polymarket-runtime-ZYFTKEJ4.js +108 -0
  171. package/dist/polymarket-watcher-2CKLTIXI.js +23 -0
  172. package/dist/polymarket-watcher-3C72X36B.js +23 -0
  173. package/dist/polymarket-watcher-IHRZ2URM.js +23 -0
  174. package/dist/polymarket-watcher-J7UWIN7I.js +23 -0
  175. package/dist/polymarket-watcher-M6CDW63Y.js +23 -0
  176. package/dist/polymarket-watcher-OSI73EDX.js +23 -0
  177. package/dist/polymarket-watcher-PN4JJV3V.js +23 -0
  178. package/dist/polymarket-watcher-PXK4NS5F.js +23 -0
  179. package/dist/polymarket-watcher-VDJ4SVHP.js +23 -0
  180. package/dist/polymarket-watcher-W4BV6JTG.js +23 -0
  181. package/dist/runtime-22E2WCL6.js +46 -0
  182. package/dist/runtime-7GYS4FQU.js +46 -0
  183. package/dist/runtime-BR6K3Q3N.js +46 -0
  184. package/dist/runtime-CTTRDVJ6.js +46 -0
  185. package/dist/runtime-GIIPTHK5.js +46 -0
  186. package/dist/runtime-HYAKLZWI.js +46 -0
  187. package/dist/runtime-IQ2KIV2L.js +50 -0
  188. package/dist/runtime-ISXECIAB.js +46 -0
  189. package/dist/runtime-IV4BY7S4.js +46 -0
  190. package/dist/runtime-O65GGHL2.js +46 -0
  191. package/dist/runtime-PKHEGQYK.js +50 -0
  192. package/dist/runtime-RFKPIFK4.js +46 -0
  193. package/dist/runtime-S35B6PIY.js +46 -0
  194. package/dist/runtime-WEZJ4YRK.js +46 -0
  195. package/dist/runtime-WLWB62ZI.js +46 -0
  196. package/dist/screener-FB47G4YX.js +26 -0
  197. package/dist/screener-WQVQO4WF.js +26 -0
  198. package/dist/server-6GWGIGBH.js +36 -0
  199. package/dist/server-7VZ6XXBC.js +36 -0
  200. package/dist/server-7XBTD3FW.js +36 -0
  201. package/dist/server-BN56IMC4.js +36 -0
  202. package/dist/server-GD6SPDER.js +36 -0
  203. package/dist/server-IJHU2FIK.js +36 -0
  204. package/dist/server-J5WZGZX3.js +36 -0
  205. package/dist/server-JVUH2E3H.js +36 -0
  206. package/dist/server-MYXWTXSE.js +36 -0
  207. package/dist/server-ORGV7O7L.js +36 -0
  208. package/dist/server-QPE3WVUQ.js +36 -0
  209. package/dist/server-SUBGS5BJ.js +36 -0
  210. package/dist/server-SWAYJTFF.js +36 -0
  211. package/dist/server-TFIWDU2H.js +36 -0
  212. package/dist/server-VH4W6LWW.js +36 -0
  213. package/dist/server-X5UMJJ3J.js +36 -0
  214. package/dist/server-XOK5LHNU.js +36 -0
  215. package/dist/server-ZLK24KFY.js +36 -0
  216. package/dist/server-ZNSQGCRM.js +36 -0
  217. package/dist/setup-32ZRMW7R.js +20 -0
  218. package/dist/setup-3WF7PBIS.js +20 -0
  219. package/dist/setup-4TM64QG4.js +20 -0
  220. package/dist/setup-5SGUMKN7.js +20 -0
  221. package/dist/setup-AGYKOCIU.js +20 -0
  222. package/dist/setup-EIP4IHZN.js +20 -0
  223. package/dist/setup-F5SAGQJJ.js +20 -0
  224. package/dist/setup-LMF76UUM.js +20 -0
  225. package/dist/setup-MA5QR3J4.js +20 -0
  226. package/dist/setup-MLIPR2U3.js +20 -0
  227. package/dist/setup-MLIZYTT6.js +20 -0
  228. package/dist/setup-OPVZ3GM7.js +20 -0
  229. package/dist/setup-PWFHUXOK.js +20 -0
  230. package/dist/setup-QF5GCTPE.js +20 -0
  231. package/dist/setup-SGF4OX3A.js +20 -0
  232. package/dist/setup-TLWKGWC6.js +20 -0
  233. package/dist/setup-TYCRH63P.js +20 -0
  234. package/dist/setup-USUBKTVX.js +20 -0
  235. package/dist/setup-VMNTNEB4.js +20 -0
  236. package/dist/shared-S5ROHYCX.js +69 -0
  237. package/dist/shared-TLWZZZSK.js +69 -0
  238. package/dist/system-prompts-7ZRL27FN.js +69 -0
  239. package/dist/system-prompts-CNXUF2AV.js +69 -0
  240. package/dist/system-prompts-SYGQRBRG.js +69 -0
  241. package/logs/cloudflared-error.log +4 -89
  242. package/logs/cloudflared-error__2026-03-11_00-00-00.log +289 -0
  243. package/package.json +1 -1
  244. package/logs/cloudflared-error__2026-03-06_00-00-00.log +0 -245
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  All notable changes to AgenticMail Enterprise are documented here.
4
4
 
5
+ ## [0.5.443] - 2026-03-11
6
+
7
+ ### Added
8
+ - **Trading Optimizer Suite** — 6 new high-frequency trading tools (`polymarket-optimizer` skill):
9
+ - `poly_daily_scorecard` — Real-time P&L vs daily target, win rate, capital utilization, trading status (AHEAD/ON_TRACK/BEHIND/TARGET_HIT/STOP_TRADING)
10
+ - `poly_momentum_scanner` — Find markets with significant price movement in real-time; replaces static search for discovering active opportunities
11
+ - `poly_quick_edge` — One-call GO/NO-GO trade decision with edge %, Kelly size, and action (STRONG_BUY/BUY/MARGINAL/NO_TRADE/SELL); replaces 6+ separate tool calls
12
+ - `poly_position_heatmap` — All positions ranked by urgency (CRITICAL/HIGH/MEDIUM/LOW) with specific action needed for each
13
+ - `poly_profit_lock` — Auto-conservative mode after hitting daily target; returns adjusted position sizes and trading mode
14
+ - `poly_capital_recycler` — Redeploy freed capital to best opportunities after position closes; keeps capital working
15
+ - **Daily Scorecard Dashboard** — New section in Polymarket Overview tab showing real-time daily P&L progress bar, target tracking, realized/unrealized P&L, trade count, win rate, and available capital
16
+ - **Daily Scorecard API** — `GET /polymarket/:agentId/daily-scorecard` endpoint returning comprehensive daily trading metrics
17
+ - **Browser Market Discovery** — Agents can browse polymarket.com to find market IDs when API returns stale results (system prompt guidance, no login required)
18
+ - **Universal Message Trimmer** — Extracted stale aging + inline truncation into standalone `message-trimmer.ts` module; applies to ALL tools (web, browser, email, polymarket) not just polymarket
19
+ - **Market Freshness Tracking** — Per-agent tracking of recently-analyzed markets with 30-min TTL; prevents agents from repeatedly analyzing the same stale markets
20
+ - **Dead Market Filtering** — Markets with all-zero prices, zero liquidity, or resolved status are automatically filtered from search/screen results
21
+ - **CLOB Rate Limit Resilience** — Gamma API fallbacks for orderbook depth, whale tracking, flow analysis, and price discovery when CLOB API is rate-limited
22
+ - **Cross-DB Date Helpers** — `dateAgo()`, `dateAgoMin()`, `dateAhead()` for watcher SQL queries; replaces PostgreSQL-specific `::timestamptz`/`INTERVAL` syntax
23
+ - **Comprehensive Topic Extraction** — `extractTopics()` expanded from 6 patterns to 25+ groups covering US/global politics, crypto, sports, AI, regulation, and more
24
+
25
+ ### Fixed
26
+ - **PostgreSQL-only SQL in watcher** — Fixed 15+ queries using `::timestamptz`, `NOW()`, `INTERVAL` that failed on SQLite; all now use parameterized ISO date strings
27
+ - **PostgreSQL DDL in portfolio** — Fixed `SERIAL PRIMARY KEY` → `INTEGER PRIMARY KEY AUTOINCREMENT` and `TIMESTAMPTZ` → `TEXT`
28
+ - **Dead CLOB endpoints** — Replaced 3 dead `CLOB_API/markets/` calls with working `GAMMA_API/markets?clob_token_ids=` in watcher
29
+ - **`poly_approve_trade`** — Fixed trade fetching AFTER resolution (trade disappeared); now fetches BEFORE resolving
30
+ - **`poly_place_batch_orders`** — Fixed tool that validated but never executed orders; now creates pending trades and executes in autonomous mode
31
+ - **`poly_resolution_risk` "Market not found"** — Auto-detects 0x condition IDs passed as slug parameter; added Gamma search fallback
32
+ - **`poly_quick_analysis` null values** — Added fallback data when CLOB is rate-limited instead of returning null for orderbook/regime/kelly
33
+ - **`poly_get_open_orders` / `poly_get_order`** — Fixed to check database as fallback, not just in-memory Map
34
+ - **`poly_leaderboard` / `poly_top_holders`** — Fixed dead Gamma endpoints; now uses data-api fallback
35
+ - **Proactive wake channel routing** — Uses manager's configured communication channel (telegram/whatsapp/email) instead of hardcoded values
36
+ - **Hardcoded identity in proactive wake** — Replaced hardcoded `senderName: 'Ope'` with dynamic manager info
37
+ - **Unused code cleanup** — Removed `_TradingConfig`, `PriceAlert`, `PaperPosition` interfaces, `priceAlerts`/`paperPositions`/`autoApproveRules` Maps, `getConfig()`/`checkAutoApprove()` functions, `_pricingCache` from agent-loop
38
+
5
39
  ## [0.5.320] - 2026-03-05
6
40
 
7
41
  ### Added
package/README.md CHANGED
@@ -575,11 +575,12 @@ Gmail · Calendar · Drive · Docs · Sheets · Slides · Forms · Meet · Chat
575
575
  ### Microsoft 365 Suite (13 services, 90+ tools)
576
576
  Outlook Mail (20 tools) · Outlook Calendar (7) · Teams (15) · OneDrive (12) · Excel (16) · SharePoint (10) · OneNote (6) · Planner (6) · To Do (6) · PowerPoint (5) · Power BI (8) · Contacts (5) · Each with dedicated system prompts and Graph API integration with retry, rate-limit handling, pagination, and batch support.
577
577
 
578
- ### Polymarket Trading Suite (9 skills, 108 tools)
578
+ ### Polymarket Trading Suite (10 skills, 114+ tools)
579
579
  Institutional-grade prediction market trading on [Polymarket](https://polymarket.com):
580
580
  - **polymarket** (63 tools) — Trading infrastructure, orders, wallet, risk controls, learning system
581
581
  - **polymarket-quant** (14) — Kelly criterion, Black-Scholes, Bayesian, Monte Carlo, RSI/MACD/Bollinger, VaR
582
582
  - **polymarket-onchain** (6) — Whale tracking, orderbook depth, on-chain flow, wallet profiling, liquidity mapping
583
+ - **polymarket-optimizer** (6) — Daily scorecard, momentum scanner, quick edge, position heatmap, profit lock, capital recycler
583
584
  - **polymarket-social** (5) — Twitter/Reddit/Telegram sentiment, Polymarket comments, social velocity
584
585
  - **polymarket-feeds** (5) — Event calendar, official sources (SCOTUS/SEC/Fed/ESPN), odds aggregation, breaking news
585
586
  - **polymarket-analytics** (5) — Market correlation, arbitrage scanning, regime detection, smart money index
@@ -587,7 +588,7 @@ Institutional-grade prediction market trading on [Polymarket](https://polymarket
587
588
  - **polymarket-counterintel** (3) — Manipulation detection, resolution risk scoring, counterparty analysis
588
589
  - **polymarket-portfolio** (3) — Portfolio optimization, drawdown monitoring, P&L attribution
589
590
 
590
- Full dashboard with 17 tabs, dedicated system prompt, auto-SDK install, 25+ DB tables, SSE real-time updates.
591
+ Full dashboard with daily scorecard, 22 tabs, dedicated system prompt, auto-SDK install, 25+ DB tables, SSE real-time updates.
591
592
 
592
593
  ### Enterprise Custom Suite (16+)
593
594
  Calendar · Code Sandbox · Database · Diff · Documents · Finance · HTTP · Knowledge Search · Logs · Notifications · Security Scan · Spreadsheet · Translation · Vision · Web Research · Workflow