@duckmind/dm-darwin-x64 0.48.5 → 0.49.6

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 (97) hide show
  1. package/dm +0 -0
  2. package/extensions/.dm-extensions.json +159 -220
  3. package/extensions/dm-9router-ext/package.json +0 -6
  4. package/extensions/dm-9router-ext/src/index.js +1 -1
  5. package/extensions/dm-ask-user/package.json +0 -4
  6. package/extensions/dm-caveman/extensions/caveman.js +29 -0
  7. package/extensions/dm-caveman/package.json +20 -0
  8. package/extensions/dm-cli-anything/index.js +5 -5
  9. package/extensions/dm-cli-anything/package.json +0 -7
  10. package/extensions/dm-cli-anything/skills/cli-anything/SKILL.md +1 -3
  11. package/extensions/dm-context/package.json +0 -1
  12. package/extensions/dm-cua/package.json +0 -7
  13. package/extensions/dm-fff/package.json +0 -6
  14. package/extensions/dm-goal/package.json +0 -8
  15. package/extensions/dm-grill-me/index.js +2 -2
  16. package/extensions/dm-grill-me/package.json +0 -7
  17. package/extensions/dm-image2/package.json +0 -8
  18. package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783845384621_9cf9262bf674.txt +1336 -0
  19. package/extensions/dm-subagents/.m/artifacts/shell/shell_output_1783846154938_6a41cefee0bf.txt +1336 -0
  20. package/extensions/dm-subagents/package.json +0 -11
  21. package/extensions/dm-subagents/src/extension/doctor.js +10 -10
  22. package/extensions/dm-subagents/src/extension/fanout-child.js +97 -97
  23. package/extensions/dm-subagents/src/extension/index.js +121 -121
  24. package/extensions/dm-subagents/src/extension/rpc.js +5 -5
  25. package/extensions/dm-subagents/src/extension/schemas.js +1 -1
  26. package/extensions/dm-subagents/src/extension/tool-description.js +2 -2
  27. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +5 -5
  28. package/extensions/dm-subagents/src/runs/background/async-execution.js +19 -19
  29. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +9 -9
  30. package/extensions/dm-subagents/src/runs/background/async-resume.js +5 -5
  31. package/extensions/dm-subagents/src/runs/background/async-status.js +8 -8
  32. package/extensions/dm-subagents/src/runs/background/fleet-view.js +13 -13
  33. package/extensions/dm-subagents/src/runs/background/result-watcher.js +5 -5
  34. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +3 -3
  35. package/extensions/dm-subagents/src/runs/background/run-status.js +19 -19
  36. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +7 -7
  37. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +35 -35
  38. package/extensions/dm-subagents/src/runs/background/wait.js +7 -7
  39. package/extensions/dm-subagents/src/runs/foreground/chain-execution.js +32 -32
  40. package/extensions/dm-subagents/src/runs/foreground/execution.js +26 -26
  41. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +96 -96
  42. package/extensions/dm-subagents/src/runs/shared/dm-args.js +1 -1
  43. package/extensions/dm-subagents/src/runs/shared/nested-events.js +6 -6
  44. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -13
  45. package/extensions/dm-subagents/src/shared/fork-context.js +4 -4
  46. package/extensions/dm-tasks/package.json +0 -7
  47. package/extensions/dm-usage/package.json +0 -7
  48. package/extensions/greedysearch-dm/bin/cdp-greedy.mjs +1 -8
  49. package/extensions/greedysearch-dm/bin/gschrome.mjs +3 -3
  50. package/extensions/greedysearch-dm/bin/launch-visible.mjs +3 -3
  51. package/extensions/greedysearch-dm/bin/launch.mjs +4 -4
  52. package/extensions/greedysearch-dm/bin/search.mjs +103 -103
  53. package/extensions/greedysearch-dm/extractors/consensus.mjs +35 -35
  54. package/extensions/greedysearch-dm/extractors/gemini.mjs +38 -38
  55. package/extensions/greedysearch-dm/extractors/logically.mjs +35 -35
  56. package/extensions/greedysearch-dm/package.json +0 -10
  57. package/extensions/greedysearch-dm/src/search/chrome.mjs +23 -23
  58. package/extensions/greedysearch-dm/src/search/fetch-source.mjs +35 -35
  59. package/extensions/greedysearch-dm/src/search/research.mjs +61 -61
  60. package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +4 -4
  61. package/package.json +1 -1
  62. package/extensions/dm-9router-ext/README.md +0 -142
  63. package/extensions/dm-9router-ext/tsconfig.json +0 -17
  64. package/extensions/dm-ask-user/README.md +0 -226
  65. package/extensions/dm-cli-anything/LICENSE +0 -201
  66. package/extensions/dm-cli-anything/README.md +0 -33
  67. package/extensions/dm-cli-anything/vendor/UPSTREAM.md +0 -14
  68. package/extensions/dm-context/AGENTS.md +0 -41
  69. package/extensions/dm-context/README.md +0 -18
  70. package/extensions/dm-context/tsconfig.json +0 -16
  71. package/extensions/dm-cua/README.md +0 -24
  72. package/extensions/dm-fff/README.md +0 -36
  73. package/extensions/dm-fff/tsconfig.json +0 -13
  74. package/extensions/dm-goal/CHANGELOG.md +0 -12
  75. package/extensions/dm-goal/LICENSE +0 -21
  76. package/extensions/dm-goal/README.md +0 -29
  77. package/extensions/dm-goal/tsconfig.json +0 -15
  78. package/extensions/dm-grill-me/DESIGN.md +0 -301
  79. package/extensions/dm-grill-me/LICENSE +0 -21
  80. package/extensions/dm-grill-me/README.md +0 -82
  81. package/extensions/dm-grill-me/tsconfig.json +0 -17
  82. package/extensions/dm-image2/README.md +0 -33
  83. package/extensions/dm-subagents/CHANGELOG.md +0 -1211
  84. package/extensions/dm-subagents/README.md +0 -29
  85. package/extensions/dm-subagents/banner.png +0 -0
  86. package/extensions/dm-subagents/biome.json +0 -26
  87. package/extensions/dm-subagents/tsconfig.json +0 -18
  88. package/extensions/dm-tasks/LICENSE +0 -21
  89. package/extensions/dm-tasks/README.md +0 -30
  90. package/extensions/dm-tasks/biome.json +0 -26
  91. package/extensions/dm-tasks/tsconfig.json +0 -14
  92. package/extensions/dm-usage/LICENSE +0 -21
  93. package/extensions/dm-usage/README.md +0 -29
  94. package/extensions/dm-usage/insights-screenshot.png +0 -0
  95. package/extensions/dm-usage/screenshot.png +0 -0
  96. package/extensions/greedysearch-dm/LICENSE +0 -21
  97. package/extensions/greedysearch-dm/README.md +0 -222
@@ -1,46 +1,46 @@
1
- import{createRequire as Ie}from"node:module";var Re=Ie(import.meta.url);import{Readability as je}from"@mozilla/readability";import{JSDOM as Ce}from"jsdom";import Le from"turndown";var ee=new Le({headingStyle:"atx",bulletListMarker:"-",codeBlockStyle:"fenced"});ee.addRule("removeDataUrls",{filter:(e)=>e.tagName==="IMG"&&e.getAttribute("src")?.startsWith("data:"),replacement:()=>""});var te="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",re={"user-agent":te,accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","accept-encoding":"gzip, deflate, br","cache-control":"no-cache",pragma:"no-cache","sec-ch-ua":'"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"none","sec-fetch-user":"?1","upgrade-insecure-requests":"1"},Oe=[/^localhost$/i,/^127\.\d+\.\d+\.\d+$/,/^0\.0\.0\.0$/,/^\[::1\]$/,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^fc00:/i,/^fe80:/i,/\.local$/i,/\.internal$/i,/\.localhost$/i];function ne(e={}){return{...re,...e}}function O(e){try{let t=new URL(e),r=t.hostname.toLowerCase();for(let n of Oe)if(n.test(r))return{blocked:!0,reason:`Private/internal address: ${r}`};if(t.protocol==="file:")return{blocked:!0,reason:"File protocol not allowed"};return{blocked:!1}}catch(t){return{blocked:!0,reason:`Invalid URL: ${t.message}`}}}function Te(e){try{let t=new URL(e);if(!(t.hostname==="github.com"||t.hostname.endsWith(".github.com")))return e;let r=t.pathname.split("/").filter(Boolean);if(r.length<5)return e;let[n,i,o,a,...s]=r;if(o!=="blob")return e;let c=s.join("/");return`https://raw.githubusercontent.com/${n}/${i}/${a}/${c}`}catch{return e}}async function ie(e,t={}){let r=O(e);if(r.blocked)return{ok:!1,url:e,finalUrl:e,status:403,error:`Blocked: ${r.reason}`,needsBrowser:!1};let n=e;if(e=Te(e),e!==n)console.error(`[fetcher] Rewrote GitHub URL: ${n.slice(0,60)}... → raw.githubusercontent.com`);let{timeoutMs:i=15000,userAgent:o,signal:a}=t,s=new AbortController,c=setTimeout(()=>s.abort(),i);if(a)a.addEventListener("abort",()=>s.abort(),{once:!0});try{let l=await fetch(e,{method:"GET",headers:{...re,"user-agent":o||te},redirect:"follow",signal:s.signal});clearTimeout(c);let f=l.headers.get("content-type")||"",u=l.url,m=l.headers.get("last-modified")||"",g=!1;try{g=new URL(u).hostname.toLowerCase()==="raw.githubusercontent.com"}catch{}if(f.includes("text/plain")&&g){let L=await l.text();return{ok:!0,url:n,finalUrl:u,status:l.status,title:u.split("/").pop()||"GitHub File",byline:"",siteName:"GitHub",lang:"",publishedTime:m,lastModified:m,markdown:L,contentLength:L.length,excerpt:L.slice(0,300).replaceAll(/\n/g," "),needsBrowser:!1}}if(!f.includes("text/html")&&!f.includes("application/xhtml"))return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Unsupported content type: ${f}`,needsBrowser:!1};let h=await l.text(),y=T(l.status,h,u,e);if(y.blocked)return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Blocked: ${y.reason}`,needsBrowser:!0};let p=F(h,u),_=x(p);if(!_.ok)return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Low quality content: ${_.reason}`,needsBrowser:!0};return{ok:!0,url:e,finalUrl:u,status:l.status,title:p.title,byline:p.byline,siteName:p.siteName,lang:p.lang,publishedTime:p.publishedTime||m,lastModified:m,markdown:p.markdown,excerpt:p.excerpt,contentLength:p.markdown.length,needsBrowser:!1}}catch(l){clearTimeout(c);let f=Me(l);return{ok:!1,url:e,finalUrl:e,status:0,error:l.message,needsBrowser:f}}}function T(e,t,r,n){let i=t.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.toLowerCase()||"",o=t.slice(0,30000).toLowerCase(),a=`${i} ${o}`;if(e===403||e===429||e===503)return{blocked:!0,reason:`HTTP ${e}`};let s=[{pattern:/class=["'][^"']*captcha["']|<div[^>]*id=["']captcha/i,reason:"captcha"},{pattern:/g-recaptcha|data-sitekey|i['"]m not a robot/i,reason:"captcha"},{pattern:/checking your browser.{0,100}please wait|cf-browser-verification/i,reason:"cloudflare challenge"},{pattern:/just a moment.{0,50}security check|ddos protection by cloudflare/i,reason:"cloudflare challenge"},{pattern:/unusual traffic.{0,50}from your computer network/i,reason:"unusual traffic"},{pattern:/bot detected|automated.{0,20}request/i,reason:"bot detection"},{pattern:/enable\s+javascript\s+to\s+view|javascript\s+is\s+required.{0,50}enabled/i,reason:"requires javascript"},{pattern:/access denied|accessdenied/i,reason:"access denied"},{pattern:/protected by anubis|anubis uses a proof-of-work/i,reason:"anubis challenge"}];for(let l of s)if(l.pattern.test(a))return{blocked:!0,reason:l.reason};let c=We(n,r,t);if(c)return{blocked:!0,reason:c};return{blocked:!1}}var Fe=["accounts.google.com","login.microsoftonline.com","login.live.com","auth0.com","okta.com","auth.mozilla.auth0.com","id.atlassian.com"],xe=["login.","signin.","auth.","sso.","accounts.","idp."],Ge=["sign in to continue","log in to continue","authentication required","create an account to continue","subscribe to continue reading","members only"];function We(e,t,r){try{let n=new URL(e),i=new URL(t);if(n.hostname.toLowerCase()===i.hostname.toLowerCase())return;let o=i.hostname.toLowerCase();if(Fe.some((s)=>o===s||o.endsWith(`.${s}`)))return`redirected to login (${i.hostname})`;if(xe.some((s)=>o.startsWith(s)))return`redirected to login (${i.hostname})`;let a=r.slice(0,20000).toLowerCase();if(Ge.some((s)=>a.includes(s)))return`redirected to login page (${i.hostname})`}catch{}return}function Me(e){let t=e.message.toLowerCase();return t.includes("fetch failed")||t.includes("unable to verify")||t.includes("certificate")||t.includes("timeout")}function z(e){let t=['meta[property="article:published_time"]','meta[name="article:published_time"]','meta[property="og:published_time"]','meta[name="publication_date"]','meta[name="date"]','meta[itemprop="datePublished"]','time[itemprop="datePublished"]','meta[name="DC.date"]'];for(let r of t){let n=e.querySelector(r),i=n?.getAttribute("content")||n?.getAttribute("datetime")||"";if(i)return i}return""}function F(e,t){let r=new Ce(e,{url:t}).window.document,n=new je(r).parse();if(n&&n.content){let o=ee.turndown(n.content).replaceAll(/\n{3,}/g,`
1
+ import{createRequire as Ie}from"node:module";var Re=Ie(import.meta.url);import{Readability as je}from"@mozilla/readability";import{JSDOM as Ce}from"jsdom";import Le from"turndown";var ee=new Le({headingStyle:"atx",bulletListMarker:"-",codeBlockStyle:"fenced"});ee.addRule("removeDataUrls",{filter:(e)=>e.tagName==="IMG"&&e.getAttribute("src")?.startsWith("data:"),replacement:()=>""});var te="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",re={"user-agent":te,accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8","accept-language":"en-US,en;q=0.9","accept-encoding":"gzip, deflate, br","cache-control":"no-cache",pragma:"no-cache","sec-ch-ua":'"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',"sec-ch-ua-mobile":"?0","sec-ch-ua-platform":'"Windows"',"sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"none","sec-fetch-user":"?1","upgrade-insecure-requests":"1"},Oe=[/^localhost$/i,/^127\.\d+\.\d+\.\d+$/,/^0\.0\.0\.0$/,/^\[::1\]$/,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^fc00:/i,/^fe80:/i,/\.local$/i,/\.internal$/i,/\.localhost$/i];function ie(e={}){return{...re,...e}}function O(e){try{let t=new URL(e),r=t.hostname.toLowerCase();for(let i of Oe)if(i.test(r))return{blocked:!0,reason:`Private/internal address: ${r}`};if(t.protocol==="file:")return{blocked:!0,reason:"File protocol not allowed"};return{blocked:!1}}catch(t){return{blocked:!0,reason:`Invalid URL: ${t.message}`}}}function Te(e){try{let t=new URL(e);if(!(t.hostname==="github.com"||t.hostname.endsWith(".github.com")))return e;let r=t.pathname.split("/").filter(Boolean);if(r.length<5)return e;let[i,n,o,a,...s]=r;if(o!=="blob")return e;let c=s.join("/");return`https://raw.githubusercontent.com/${i}/${n}/${a}/${c}`}catch{return e}}async function ne(e,t={}){let r=O(e);if(r.blocked)return{ok:!1,url:e,finalUrl:e,status:403,error:`Blocked: ${r.reason}`,needsBrowser:!1};let i=e;if(e=Te(e),e!==i)console.error(`[fetcher] Rewrote GitHub URL: ${i.slice(0,60)}... → raw.githubusercontent.com`);let{timeoutMs:n=15000,userAgent:o,signal:a}=t,s=new AbortController,c=setTimeout(()=>s.abort(),n);if(a)a.addEventListener("abort",()=>s.abort(),{once:!0});try{let l=await fetch(e,{method:"GET",headers:{...re,"user-agent":o||te},redirect:"follow",signal:s.signal});clearTimeout(c);let f=l.headers.get("content-type")||"",u=l.url,m=l.headers.get("last-modified")||"",g=!1;try{g=new URL(u).hostname.toLowerCase()==="raw.githubusercontent.com"}catch{}if(f.includes("text/plain")&&g){let L=await l.text();return{ok:!0,url:i,finalUrl:u,status:l.status,title:u.split("/").pop()||"GitHub File",byline:"",siteName:"GitHub",lang:"",publishedTime:m,lastModified:m,markdown:L,contentLength:L.length,excerpt:L.slice(0,300).replaceAll(/\n/g," "),needsBrowser:!1}}if(!f.includes("text/html")&&!f.includes("application/xhtml"))return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Unsupported content type: ${f}`,needsBrowser:!1};let h=await l.text(),y=T(l.status,h,u,e);if(y.blocked)return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Blocked: ${y.reason}`,needsBrowser:!0};let p=F(h,u),_=x(p);if(!_.ok)return{ok:!1,url:e,finalUrl:u,status:l.status,error:`Low quality content: ${_.reason}`,needsBrowser:!0};return{ok:!0,url:e,finalUrl:u,status:l.status,title:p.title,byline:p.byline,siteName:p.siteName,lang:p.lang,publishedTime:p.publishedTime||m,lastModified:m,markdown:p.markdown,excerpt:p.excerpt,contentLength:p.markdown.length,needsBrowser:!1}}catch(l){clearTimeout(c);let f=Me(l);return{ok:!1,url:e,finalUrl:e,status:0,error:l.message,needsBrowser:f}}}function T(e,t,r,i){let n=t.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.toLowerCase()||"",o=t.slice(0,30000).toLowerCase(),a=`${n} ${o}`;if(e===403||e===429||e===503)return{blocked:!0,reason:`HTTP ${e}`};let s=[{pattern:/class=["'][^"']*captcha["']|<div[^>]*id=["']captcha/i,reason:"captcha"},{pattern:/g-recaptcha|data-sitekey|i['"]m not a robot/i,reason:"captcha"},{pattern:/checking your browser.{0,100}please wait|cf-browser-verification/i,reason:"cloudflare challenge"},{pattern:/just a moment.{0,50}security check|ddos protection by cloudflare/i,reason:"cloudflare challenge"},{pattern:/unusual traffic.{0,50}from your computer network/i,reason:"unusual traffic"},{pattern:/bot detected|automated.{0,20}request/i,reason:"bot detection"},{pattern:/enable\s+javascript\s+to\s+view|javascript\s+is\s+required.{0,50}enabled/i,reason:"requires javascript"},{pattern:/access denied|accessdenied/i,reason:"access denied"},{pattern:/protected by anubis|anubis uses a proof-of-work/i,reason:"anubis challenge"}];for(let l of s)if(l.pattern.test(a))return{blocked:!0,reason:l.reason};let c=We(i,r,t);if(c)return{blocked:!0,reason:c};return{blocked:!1}}var Fe=["accounts.google.com","login.microsoftonline.com","login.live.com","auth0.com","okta.com","auth.mozilla.auth0.com","id.atlassian.com"],xe=["login.","signin.","auth.","sso.","accounts.","idp."],Ge=["sign in to continue","log in to continue","authentication required","create an account to continue","subscribe to continue reading","members only"];function We(e,t,r){try{let i=new URL(e),n=new URL(t);if(i.hostname.toLowerCase()===n.hostname.toLowerCase())return;let o=n.hostname.toLowerCase();if(Fe.some((s)=>o===s||o.endsWith(`.${s}`)))return`redirected to login (${n.hostname})`;if(xe.some((s)=>o.startsWith(s)))return`redirected to login (${n.hostname})`;let a=r.slice(0,20000).toLowerCase();if(Ge.some((s)=>a.includes(s)))return`redirected to login page (${n.hostname})`}catch{}return}function Me(e){let t=e.message.toLowerCase();return t.includes("fetch failed")||t.includes("unable to verify")||t.includes("certificate")||t.includes("timeout")}function z(e){let t=['meta[property="article:published_time"]','meta[name="article:published_time"]','meta[property="og:published_time"]','meta[name="publication_date"]','meta[name="date"]','meta[itemprop="datePublished"]','time[itemprop="datePublished"]','meta[name="DC.date"]'];for(let r of t){let i=e.querySelector(r),n=i?.getAttribute("content")||i?.getAttribute("datetime")||"";if(n)return n}return""}function F(e,t){let r=new Ce(e,{url:t}).window.document,i=new je(r).parse();if(i&&i.content){let o=ee.turndown(i.content).replaceAll(/\n{3,}/g,`
2
2
 
3
- `).trim(),a=n.publishedTime||z(r)||"";return{title:n.title||r.title||t,byline:n.byline||"",siteName:n.siteName||"",lang:n.lang||"",publishedTime:a,markdown:o,excerpt:o.slice(0,300).replaceAll(/\n/g," ")}}let i=r.body;if(i){let o=i.cloneNode(!0);o.querySelectorAll("script, style, nav, footer, header, aside").forEach((s)=>s.remove());let a=(o.textContent||"").replaceAll(/\s+/g," ").trim();return{title:r.title||t,byline:"",siteName:"",lang:"",publishedTime:z(r),markdown:a,excerpt:a.slice(0,300)}}return{title:t,byline:"",siteName:"",lang:"",publishedTime:"",markdown:"",excerpt:""}}function x(e){let t=e.markdown.trim().toLowerCase(),r=(e.title||"").toLowerCase();if(e.markdown.trim().length<100)return{ok:!1,reason:"content too short (< 100 chars)"};let n=t.toLowerCase(),i=[{check:()=>n.includes("loading")&&n.includes("please wait"),desc:"loading page"},{check:()=>n.includes("please ensure javascript is enabled"),desc:"requires javascript"},{check:()=>n.includes("enable javascript to view"),desc:"requires javascript"},{check:()=>n.includes("just a moment"),desc:"cloudflare challenge detected in content"},{check:()=>n.includes("verify you are human"),desc:"human verification"},{check:()=>n.includes("captcha required"),desc:"captcha in extracted content"},{check:()=>n.includes("access denied"),desc:"access denied in content"},{check:()=>/^\s{0,10}sign\s{1,5}in\s{0,10}$|^\s{0,10}log\s{1,5}in\s{0,10}$/im.test(t),desc:"login form only"}];for(let{check:o,desc:a}of i)if(o())return{ok:!1,reason:a};if(r.includes("just a moment")||r.includes("checking your browser"))return{ok:!1,reason:"cloudflare challenge page detected in title"};return{ok:!0}}var ae={"user-agent":"GreedySearch/1.0",accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"};function D(e){try{let t=new URL(e);if(!(t.hostname==="github.com"||t.hostname.endsWith(".github.com")))return null;let r=t.pathname.split("/").filter(Boolean);if(r.length<2)return null;let[n,i]=r;if(r.length===2)return{owner:n,repo:i,type:"root"};if(r.length>=4&&(r[2]==="blob"||r[2]==="tree")){let o=r[2],a=r[3],s=r.slice(4).join("/");return{owner:n,repo:i,type:o,ref:a,path:s}}return null}catch{return null}}async function $(e,t=1e4){let r=new AbortController,n=setTimeout(()=>r.abort(),t);try{let i=await fetch(`https://api.github.com${e}`,{headers:ae,signal:r.signal});if(clearTimeout(n),!i.ok)throw Error(`GitHub API ${i.status}: ${e}`);return await i.json()}catch(i){throw clearTimeout(n),i}}async function Ue(e,t){try{let r=await $(`/repos/${e}/${t}/readme`);if(r.content&&r.encoding==="base64")return Buffer.from(r.content,"base64").toString("utf8");return""}catch{return""}}async function oe(e,t,r="HEAD",n=""){try{let i=await $(`/repos/${e}/${t}/git/ref/heads/${r==="HEAD"?"main":r}`).catch(()=>$(`/repos/${e}/${t}/git/ref/heads/master`).catch(()=>null)),o;if(i?.object?.sha)o=(await $(`/repos/${e}/${t}/git/commits/${i.object.sha}`)).tree.sha;else{let s=await $(`/repos/${e}/${t}`);o=(await $(`/repos/${e}/${t}/branches/${s.default_branch}`)).commit.commit.tree.sha}let a=(await $(`/repos/${e}/${t}/git/trees/${o}`)).tree||[];if(n)a=a.filter((s)=>s.path.startsWith(n));return a.slice(0,50).map((s)=>({path:s.path,type:s.type==="tree"?"dir":"file",size:s.size}))}catch{return[]}}async function He(e,t,r,n,i=1e4){let o=[`https://raw.githubusercontent.com/${e}/${t}/${r&&r!=="HEAD"?r:"main"}/${n}`,`https://raw.githubusercontent.com/${e}/${t}/master/${n}`];for(let a of o){let s=new AbortController,c=setTimeout(()=>s.abort(),i);try{let l=await fetch(a,{headers:{"user-agent":ae["user-agent"]},signal:s.signal});if(clearTimeout(c),l.ok)return await l.text()}catch{clearTimeout(c)}}return null}async function se(e){let t=D(e);if(!t)return{ok:!1,error:"Not a valid GitHub URL"};let{owner:r,repo:n,type:i,ref:o,path:a}=t;try{if(i==="root"||i==="tree"&&!a){let[s,c,l]=await Promise.allSettled([$(`/repos/${r}/${n}`),Ue(r,n),oe(r,n,o||"HEAD")]);if(s.status==="rejected")return{ok:!1,error:s.reason?.message||"Repo not found"};let f=s.value,u=c.status==="fulfilled"?c.value:"",m=l.status==="fulfilled"?l.value:[],g=f?.description?`
3
+ `).trim(),a=i.publishedTime||z(r)||"";return{title:i.title||r.title||t,byline:i.byline||"",siteName:i.siteName||"",lang:i.lang||"",publishedTime:a,markdown:o,excerpt:o.slice(0,300).replaceAll(/\n/g," ")}}let n=r.body;if(n){let o=n.cloneNode(!0);o.querySelectorAll("script, style, nav, footer, header, aside").forEach((s)=>s.remove());let a=(o.textContent||"").replaceAll(/\s+/g," ").trim();return{title:r.title||t,byline:"",siteName:"",lang:"",publishedTime:z(r),markdown:a,excerpt:a.slice(0,300)}}return{title:t,byline:"",siteName:"",lang:"",publishedTime:"",markdown:"",excerpt:""}}function x(e){let t=e.markdown.trim().toLowerCase(),r=(e.title||"").toLowerCase();if(e.markdown.trim().length<100)return{ok:!1,reason:"content too short (< 100 chars)"};let i=t.toLowerCase(),n=[{check:()=>i.includes("loading")&&i.includes("please wait"),desc:"loading page"},{check:()=>i.includes("please ensure javascript is enabled"),desc:"requires javascript"},{check:()=>i.includes("enable javascript to view"),desc:"requires javascript"},{check:()=>i.includes("just a moment"),desc:"cloudflare challenge detected in content"},{check:()=>i.includes("verify you are human"),desc:"human verification"},{check:()=>i.includes("captcha required"),desc:"captcha in extracted content"},{check:()=>i.includes("access denied"),desc:"access denied in content"},{check:()=>/^\s{0,10}sign\s{1,5}in\s{0,10}$|^\s{0,10}log\s{1,5}in\s{0,10}$/im.test(t),desc:"login form only"}];for(let{check:o,desc:a}of n)if(o())return{ok:!1,reason:a};if(r.includes("just a moment")||r.includes("checking your browser"))return{ok:!1,reason:"cloudflare challenge page detected in title"};return{ok:!0}}var ae={"user-agent":"GreedySearch/1.0",accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"};function D(e){try{let t=new URL(e);if(!(t.hostname==="github.com"||t.hostname.endsWith(".github.com")))return null;let r=t.pathname.split("/").filter(Boolean);if(r.length<2)return null;let[i,n]=r;if(r.length===2)return{owner:i,repo:n,type:"root"};if(r.length>=4&&(r[2]==="blob"||r[2]==="tree")){let o=r[2],a=r[3],s=r.slice(4).join("/");return{owner:i,repo:n,type:o,ref:a,path:s}}return null}catch{return null}}async function $(e,t=1e4){let r=new AbortController,i=setTimeout(()=>r.abort(),t);try{let n=await fetch(`https://api.github.com${e}`,{headers:ae,signal:r.signal});if(clearTimeout(i),!n.ok)throw Error(`GitHub API ${n.status}: ${e}`);return await n.json()}catch(n){throw clearTimeout(i),n}}async function Ue(e,t){try{let r=await $(`/repos/${e}/${t}/readme`);if(r.content&&r.encoding==="base64")return Buffer.from(r.content,"base64").toString("utf8");return""}catch{return""}}async function oe(e,t,r="HEAD",i=""){try{let n=await $(`/repos/${e}/${t}/git/ref/heads/${r==="HEAD"?"main":r}`).catch(()=>$(`/repos/${e}/${t}/git/ref/heads/master`).catch(()=>null)),o;if(n?.object?.sha)o=(await $(`/repos/${e}/${t}/git/commits/${n.object.sha}`)).tree.sha;else{let s=await $(`/repos/${e}/${t}`);o=(await $(`/repos/${e}/${t}/branches/${s.default_branch}`)).commit.commit.tree.sha}let a=(await $(`/repos/${e}/${t}/git/trees/${o}`)).tree||[];if(i)a=a.filter((s)=>s.path.startsWith(i));return a.slice(0,50).map((s)=>({path:s.path,type:s.type==="tree"?"dir":"file",size:s.size}))}catch{return[]}}async function Je(e,t,r,i,n=1e4){let o=[`https://raw.githubusercontent.com/${e}/${t}/${r&&r!=="HEAD"?r:"main"}/${i}`,`https://raw.githubusercontent.com/${e}/${t}/master/${i}`];for(let a of o){let s=new AbortController,c=setTimeout(()=>s.abort(),n);try{let l=await fetch(a,{headers:{"user-agent":ae["user-agent"]},signal:s.signal});if(clearTimeout(c),l.ok)return await l.text()}catch{clearTimeout(c)}}return null}async function se(e){let t=D(e);if(!t)return{ok:!1,error:"Not a valid GitHub URL"};let{owner:r,repo:i,type:n,ref:o,path:a}=t;try{if(n==="root"||n==="tree"&&!a){let[s,c,l]=await Promise.allSettled([$(`/repos/${r}/${i}`),Ue(r,i),oe(r,i,o||"HEAD")]);if(s.status==="rejected")return{ok:!1,error:s.reason?.message||"Repo not found"};let f=s.value,u=c.status==="fulfilled"?c.value:"",m=l.status==="fulfilled"?l.value:[],g=f?.description?`
4
4
 
5
- > ${f.description}`:"",h=f?.stargazers_count==null?"":` ⭐ ${f.stargazers_count}`,y=f?.language?` · ${f.language}`:"",p=`# ${r}/${n}${h}${y}${g}
5
+ > ${f.description}`:"",h=f?.stargazers_count==null?"":` ⭐ ${f.stargazers_count}`,y=f?.language?` · ${f.language}`:"",p=`# ${r}/${i}${h}${y}${g}
6
6
 
7
7
  `;if(u)p+=u.slice(0,6000);else p+=`[No README found]
8
8
 
9
9
  Files:
10
10
  ${m.map((_)=>` ${_.type==="dir"?"\uD83D\uDCC1":"\uD83D\uDCC4"} ${_.path}`).join(`
11
- `)}`;return{ok:!0,title:`${r}/${n}`,content:p,tree:m.slice(0,30)}}if(i==="blob"&&a){let s=await He(r,n,o,a);if(s===null)return{ok:!1,error:`File not found: ${a}`};return{ok:!0,title:`${r}/${n}: ${a}`,content:s}}if(i==="tree"&&a){let s=await oe(r,n,o||"HEAD",a),c=s.map((l)=>` ${l.type==="dir"?"\uD83D\uDCC1":"\uD83D\uDCC4"} ${l.path}`).join(`
12
- `);return{ok:!0,title:`${r}/${n}/${a}`,content:`[Directory: ${a}]
11
+ `)}`;return{ok:!0,title:`${r}/${i}`,content:p,tree:m.slice(0,30)}}if(n==="blob"&&a){let s=await Je(r,i,o,a);if(s===null)return{ok:!1,error:`File not found: ${a}`};return{ok:!0,title:`${r}/${i}: ${a}`,content:s}}if(n==="tree"&&a){let s=await oe(r,i,o||"HEAD",a),c=s.map((l)=>` ${l.type==="dir"?"\uD83D\uDCC1":"\uD83D\uDCC4"} ${l.path}`).join(`
12
+ `);return{ok:!0,title:`${r}/${i}/${a}`,content:`[Directory: ${a}]
13
13
 
14
14
  Files:
15
- ${c}`,tree:s}}return{ok:!1,error:"Unsupported GitHub URL type"}}catch(s){return{ok:!1,error:s.message}}}var Je={"user-agent":"GreedySearch/1.0 (Research Bot)",accept:"application/json"};function ce(e){try{let t=new URL(e),r=t.hostname.toLowerCase();if(!(r==="reddit.com"||r.endsWith(".reddit.com")))return null;let n=t.pathname;if(n.match(/^\/(u|user)\/[^/]+\/?$/i))return{type:"user",cleanUrl:le(e)};if(n.match(/^\/r\/[^/]+\/comments\/[^/]+/i))return{type:"post",cleanUrl:le(e)};return null}catch{return null}}function le(e){try{let t=new URL(e);return`${t.protocol}//${t.hostname}${t.pathname}`}catch{return e}}async function ue(e,t=8000){let r=Date.now();try{let n=e.replaceAll(/\/?$/g,".json"),i=new AbortController,o=setTimeout(()=>i.abort(),15000),a=await fetch(n,{headers:Je,signal:i.signal});if(clearTimeout(o),!a.ok)throw Error(`Reddit API ${a.status}`);let s=await a.json();if(!Array.isArray(s)||s.length<1)throw Error("Invalid Reddit API response structure");let c=s[0],l=s[1],f=c?.data?.children?.[0]?.data;if(!f)throw Error("No post data in Reddit response");let u=Be(f,l,t);return{ok:!0,url:e,finalUrl:e,status:200,contentType:"text/markdown",lastModified:"",title:f.title||"Reddit Post",byline:`u/${f.author}`,siteName:`r/${f.subreddit}`,lang:"en",publishedTime:new Date(f.created_utc*1000).toISOString(),excerpt:f.selftext?.slice(0,300).replace(/\n/g," ")||"",markdown:u,contentLength:u.length,needsBrowser:!1,duration:Date.now()-r}}catch(n){return{ok:!1,url:e,finalUrl:e,status:0,error:`Reddit fetch failed: ${n.message}`,needsBrowser:!1,duration:Date.now()-r}}}function Be(e,t,r){let n="";if(n+=`# ${e.title}
15
+ ${c}`,tree:s}}return{ok:!1,error:"Unsupported GitHub URL type"}}catch(s){return{ok:!1,error:s.message}}}var He={"user-agent":"GreedySearch/1.0 (Research Bot)",accept:"application/json"};function ce(e){try{let t=new URL(e),r=t.hostname.toLowerCase();if(!(r==="reddit.com"||r.endsWith(".reddit.com")))return null;let i=t.pathname;if(i.match(/^\/(u|user)\/[^/]+\/?$/i))return{type:"user",cleanUrl:le(e)};if(i.match(/^\/r\/[^/]+\/comments\/[^/]+/i))return{type:"post",cleanUrl:le(e)};return null}catch{return null}}function le(e){try{let t=new URL(e);return`${t.protocol}//${t.hostname}${t.pathname}`}catch{return e}}async function ue(e,t=8000){let r=Date.now();try{let i=e.replaceAll(/\/?$/g,".json"),n=new AbortController,o=setTimeout(()=>n.abort(),15000),a=await fetch(i,{headers:He,signal:n.signal});if(clearTimeout(o),!a.ok)throw Error(`Reddit API ${a.status}`);let s=await a.json();if(!Array.isArray(s)||s.length<1)throw Error("Invalid Reddit API response structure");let c=s[0],l=s[1],f=c?.data?.children?.[0]?.data;if(!f)throw Error("No post data in Reddit response");let u=Be(f,l,t);return{ok:!0,url:e,finalUrl:e,status:200,contentType:"text/markdown",lastModified:"",title:f.title||"Reddit Post",byline:`u/${f.author}`,siteName:`r/${f.subreddit}`,lang:"en",publishedTime:new Date(f.created_utc*1000).toISOString(),excerpt:f.selftext?.slice(0,300).replace(/\n/g," ")||"",markdown:u,contentLength:u.length,needsBrowser:!1,duration:Date.now()-r}}catch(i){return{ok:!1,url:e,finalUrl:e,status:0,error:`Reddit fetch failed: ${i.message}`,needsBrowser:!1,duration:Date.now()-r}}}function Be(e,t,r){let i="";if(i+=`# ${e.title}
16
16
 
17
- `,n+=`**Subreddit:** r/${e.subreddit} | **Author:** u/${e.author} | **Score:** ${e.score}
17
+ `,i+=`**Subreddit:** r/${e.subreddit} | **Author:** u/${e.author} | **Score:** ${e.score}
18
18
 
19
- `,e.selftext)n+=e.selftext,n+=`
19
+ `,e.selftext)i+=e.selftext,i+=`
20
20
 
21
- `;else if(e.url)try{let i=new URL(e.url).hostname.toLowerCase();if(i!=="reddit.com"&&!i.endsWith(".reddit.com"))n+=`**Link:** ${e.url}
21
+ `;else if(e.url)try{let n=new URL(e.url).hostname.toLowerCase();if(n!=="reddit.com"&&!n.endsWith(".reddit.com"))i+=`**Link:** ${e.url}
22
22
 
23
- `}catch{n+=`**Link:** ${e.url}
23
+ `}catch{i+=`**Link:** ${e.url}
24
24
 
25
- `}if(t?.data?.children?.length>0){n+=`---
25
+ `}if(t?.data?.children?.length>0){i+=`---
26
26
 
27
27
  ## Comments
28
28
 
29
- `;let i=t.data.children.filter((o)=>o.kind==="t1").slice(0,10);for(let o of i)n+=fe(o.data,0),n+=`
30
- `}if(n.length>r)n=n.slice(0,r).trim()+`
29
+ `;let n=t.data.children.filter((o)=>o.kind==="t1").slice(0,10);for(let o of n)i+=fe(o.data,0),i+=`
30
+ `}if(i.length>r)i=i.slice(0,r).trim()+`
31
31
 
32
- ... (truncated)`;return n}function fe(e,t){if(!e||e.body==="[deleted]"||e.body==="[removed]")return"";let r="> ".repeat(t),n="";if(n+=`${r}**u/${e.author}** (${e.score} pts)
33
- `,n+=`${r}${e.body.replaceAll(`
32
+ ... (truncated)`;return i}function fe(e,t){if(!e||e.body==="[deleted]"||e.body==="[removed]")return"";let r="> ".repeat(t),i="";if(i+=`${r}**u/${e.author}** (${e.score} pts)
33
+ `,i+=`${r}${e.body.replaceAll(`
34
34
  `,`
35
35
  `+r)}
36
- `,t<3&&e.replies?.data?.children){let i=e.replies.data.children.filter((o)=>o.kind==="t1");for(let o of i.slice(0,5))n+=`
37
- `+fe(o.data,t+1)}return n}function P(e,t=8000){if(!e||e.length<=t)return e;let r=`
36
+ `,t<3&&e.replies?.data?.children){let n=e.replies.data.children.filter((o)=>o.kind==="t1");for(let o of n.slice(0,5))i+=`
37
+ `+fe(o.data,t+1)}return i}function P(e,t=8000){if(!e||e.length<=t)return e;let r=`
38
38
 
39
39
  [...content trimmed...]
40
40
 
41
- `,n=t-r.length,i=Math.floor(n*0.75),o=n-i,a=i;while(a>i-100&&e[a]!==`
42
- `)a--;if(a<=i-100)a=i;let s=e.length-o;while(s<e.length-o+100&&e[s]!==`
43
- `)s++;if(s>=e.length-o+100)s=e.length-o;let c=e.slice(0,a).trimEnd(),l=e.slice(s).trimStart();return`${c}${r}${l}`}import{platform as Ft,tmpdir as Ye}from"node:os";import{spawn as Ve}from"node:child_process";import{dirname as qe,join as Ke}from"node:path";import{fileURLToPath as Xe}from"node:url";import{basename as Ze}from"node:path";import{existsSync as S,mkdirSync as rt,readFileSync as he,writeFileSync as nt}from"node:fs";import{homedir as it}from"node:os";import{join as ye}from"node:path";import{tmpdir as k}from"node:os";import{platform as er,tmpdir as lt}from"node:os";import{existsSync as N,mkdirSync as ct,readFileSync as ve,writeFileSync as ut}from"node:fs";import{homedir as ft}from"node:os";import{join as be}from"node:path";import{tmpdir as A}from"node:os";function Qe(e=process.env,t=process.execPath){let r=e.GREEDY_SEARCH_NODE||e.NODE_BINARY||e.NODE;if(r?.trim())return r.trim();let n=Ze(t||"").toLowerCase();if(n==="node"||n==="node.exe")return t;return"node"}var ze=qe(Xe(import.meta.url)),et=Ke(ze,"..","bin","cdp.mjs");function me(e,t=30000){return tt(e,null,t)}function tt(e,t=null,r=30000){return new Promise((n,i)=>{let o=Ve(Qe(),[et,...e],{stdio:[t==null?"ignore":"pipe","pipe","pipe"]});if(t!=null)o.stdin.write(t),o.stdin.end();let a="",s="";o.stdout.on("data",(l)=>a+=l),o.stderr.on("data",(l)=>s+=l);let c=setTimeout(()=>{o.kill(),i(Error(`cdp timeout: ${e[0]}`))},r);o.on("close",(l)=>{if(clearTimeout(c),l===0)n(a.trim());else i(Error(s.trim()||`cdp exit ${l}`))})})}async function pe(e){await me(["evalraw",e,"Page.addScriptToEvaluateOnNewDocument",JSON.stringify({source:`
41
+ `,i=t-r.length,n=Math.floor(i*0.75),o=i-n,a=n;while(a>n-100&&e[a]!==`
42
+ `)a--;if(a<=n-100)a=n;let s=e.length-o;while(s<e.length-o+100&&e[s]!==`
43
+ `)s++;if(s>=e.length-o+100)s=e.length-o;let c=e.slice(0,a).trimEnd(),l=e.slice(s).trimStart();return`${c}${r}${l}`}import{platform as Ft,tmpdir as Ye}from"node:os";import{spawn as Ve}from"node:child_process";import{dirname as qe,join as Ke}from"node:path";import{fileURLToPath as Xe}from"node:url";import{basename as Ze}from"node:path";import{existsSync as S,mkdirSync as rt,readFileSync as he,writeFileSync as it}from"node:fs";import{homedir as nt}from"node:os";import{join as ye}from"node:path";import{tmpdir as k}from"node:os";import{platform as er,tmpdir as lt}from"node:os";import{existsSync as N,mkdirSync as ct,readFileSync as ve,writeFileSync as ut}from"node:fs";import{homedir as ft}from"node:os";import{join as be}from"node:path";import{tmpdir as A}from"node:os";function Qe(e=process.env,t=process.execPath){let r=e.GREEDY_SEARCH_NODE||e.NODE_BINARY||e.NODE;if(r?.trim())return r.trim();let i=Ze(t||"").toLowerCase();if(i==="node"||i==="node.exe")return t;return"node"}var ze=qe(Xe(import.meta.url)),et=Ke(ze,"..","bin","cdp.mjs");function me(e,t=30000){return tt(e,null,t)}function tt(e,t=null,r=30000){return new Promise((i,n)=>{let o=Ve(Qe(),[et,...e],{stdio:[t==null?"ignore":"pipe","pipe","pipe"]});if(t!=null)o.stdin.write(t),o.stdin.end();let a="",s="";o.stdout.on("data",(l)=>a+=l),o.stderr.on("data",(l)=>s+=l);let c=setTimeout(()=>{o.kill(),n(Error(`cdp timeout: ${e[0]}`))},r);o.on("close",(l)=>{if(clearTimeout(c),l===0)i(a.trim());else n(Error(s.trim()||`cdp exit ${l}`))})})}async function pe(e){await me(["evalraw",e,"Page.addScriptToEvaluateOnNewDocument",JSON.stringify({source:`
44
44
  (function() {
45
45
  // ── Runtime.enable / CDP detection masking ──────────────
46
46
  try { delete window.__REBROWSER_RUNTIME_ENABLE; } catch(_) {}
@@ -248,35 +248,35 @@ ${c}`,tree:s}}return{ok:!1,error:"Unsupported GitHub URL type"}}catch(s){return{
248
248
  };
249
249
  } catch(_) {}
250
250
  })();
251
- `})])}var we=`${k().replaceAll("\\","/")}/greedysearch-chrome-profile`,Yt=`${we}/DevToolsActivePort`,Vt=`${k().replaceAll("\\","/")}/cdp-pages.json`,qt=`${k().replaceAll("\\","/")}/greedysearch-chrome-mode`,Kt=`${k().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,M=ye(it(),".dm"),w=ye(M,"greedyconfig"),U=["perplexity","google","chatgpt"],H="gemini";function ot(){try{if(S(w)){let e=he(w,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((i)=>G[i]),n=t.engines.filter((i)=>!G[i]);if(n.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${w}: ${n.join(", ")}
251
+ `})])}var we=`${k().replaceAll("\\","/")}/greedysearch-chrome-profile`,Yt=`${we}/DevToolsActivePort`,Vt=`${k().replaceAll("\\","/")}/cdp-pages.json`,qt=`${k().replaceAll("\\","/")}/greedysearch-chrome-mode`,Kt=`${k().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,M=ye(nt(),".dm"),w=ye(M,"greedyconfig"),U=["perplexity","google","chatgpt"],J="gemini";function ot(){try{if(S(w)){let e=he(w,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((n)=>G[n]),i=t.engines.filter((n)=>!G[n]);if(i.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${w}: ${i.join(", ")}
252
252
  [greedysearch] Available engines: ${Object.keys(G).join(", ")}
253
253
  `);if(r.length>0)return r;process.stderr.write(`[greedysearch] Warning: no valid engines in ${w}, falling back to defaults: ${U.join(", ")}
254
- `)}}}catch{}return U}function at(){try{if(!S(M))rt(M,{recursive:!0});if(!S(w))nt(w,JSON.stringify({engines:U,synthesizer:H},null,2)+`
254
+ `)}}}catch{}return U}function at(){try{if(!S(M))rt(M,{recursive:!0});if(!S(w))it(w,JSON.stringify({engines:U,synthesizer:J},null,2)+`
255
255
  `,"utf8")}catch{}}at();var ge=["gemini","chatgpt"];function st(){try{if(S(w)){let e=he(w,"utf8"),t=JSON.parse(e);if(typeof t.synthesizer==="string"){let r=t.synthesizer.toLowerCase();if(ge.includes(r))return r;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${t.synthesizer}" in ${w}
256
256
  [greedysearch] Available synthesizers: ${ge.join(", ")}
257
- [greedysearch] Falling back to default: ${H}
258
- `)}}}catch{}return H}var G={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},Xt=ot(),Zt=st(),Qt=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=we;var $e=`${A().replaceAll("\\","/")}/greedysearch-chrome-profile`,or=`${$e}/DevToolsActivePort`,ar=`${A().replaceAll("\\","/")}/cdp-pages.json`,sr=`${A().replaceAll("\\","/")}/greedysearch-chrome-mode`,lr=`${A().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,J=be(ft(),".dm"),v=be(J,"greedyconfig"),B=["perplexity","google","chatgpt"],Y="gemini";function pt(){try{if(N(v)){let e=ve(v,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((i)=>W[i]),n=t.engines.filter((i)=>!W[i]);if(n.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${v}: ${n.join(", ")}
257
+ [greedysearch] Falling back to default: ${J}
258
+ `)}}}catch{}return J}var G={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},Xt=ot(),Zt=st(),Qt=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=we;var $e=`${A().replaceAll("\\","/")}/greedysearch-chrome-profile`,or=`${$e}/DevToolsActivePort`,ar=`${A().replaceAll("\\","/")}/cdp-pages.json`,sr=`${A().replaceAll("\\","/")}/greedysearch-chrome-mode`,lr=`${A().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,H=be(ft(),".dm"),v=be(H,"greedyconfig"),B=["perplexity","google","chatgpt"],Y="gemini";function pt(){try{if(N(v)){let e=ve(v,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((n)=>W[n]),i=t.engines.filter((n)=>!W[n]);if(i.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${v}: ${i.join(", ")}
259
259
  [greedysearch] Available engines: ${Object.keys(W).join(", ")}
260
260
  `);if(r.length>0)return r;process.stderr.write(`[greedysearch] Warning: no valid engines in ${v}, falling back to defaults: ${B.join(", ")}
261
- `)}}}catch{}return B}function gt(){try{if(!N(J))ct(J,{recursive:!0});if(!N(v))ut(v,JSON.stringify({engines:B,synthesizer:Y},null,2)+`
261
+ `)}}}catch{}return B}function gt(){try{if(!N(H))ct(H,{recursive:!0});if(!N(v))ut(v,JSON.stringify({engines:B,synthesizer:Y},null,2)+`
262
262
  `,"utf8")}catch{}}gt();var de=["gemini","chatgpt"];function dt(){try{if(N(v)){let e=ve(v,"utf8"),t=JSON.parse(e);if(typeof t.synthesizer==="string"){let r=t.synthesizer.toLowerCase();if(de.includes(r))return r;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${t.synthesizer}" in ${v}
263
263
  [greedysearch] Available synthesizers: ${de.join(", ")}
264
264
  [greedysearch] Falling back to default: ${Y}
265
- `)}}}catch{}return Y}var W={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},cr=pt(),ur=dt(),fr=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=$e;var E=lt().replaceAll("\\","/"),pr=`${E}/greedysearch-chrome-metadata.json`,gr=`${E}/greedysearch-chrome-launch.lock`;var dr=`${E}/greedysearch-chrome.pid`,mr=`${E}/greedysearch-chrome-mode`,hr=`${E}/greedysearch-chrome-last-activity`;var yr=Number.parseInt(process.env.GREEDY_SEARCH_IDLE_TIMEOUT_MINUTES||"5",10)||5;var wr=import.meta.dirname||new URL(".",import.meta.url).pathname.replace(/^\/([A-Z]:)/,"$1");var _e=Ye().replaceAll("\\","/"),vr=`${_e}/greedysearch-chrome.pid`,br=`${_e}/greedysearch-chrome-last-activity`,$r=Number.parseInt(process.env.GREEDY_SEARCH_IDLE_TIMEOUT_MINUTES||"5",10)||5,_r=Number.parseInt(process.env.GREEDY_SEARCH_VISIBLE_IDLE_TIMEOUT_MINUTES||"60",10)||60;var d=me;async function Pe(){let e=(await d(["list"])).split(`
266
- `)[0];if(!e)throw Error("No Chrome tabs found");return e.slice(0,8)}async function I(e="about:blank"){let t=await Pe(),r=new URL(e).hostname;if(r==="copilot.microsoft.com"||r==="www.perplexity.ai"||r==="perplexity.ai"||r.endsWith(".perplexity.ai")){let o=await d(["evalraw",t,"Target.createTarget",JSON.stringify({url:"about:blank"})]),{targetId:a}=JSON.parse(o),s=a.slice(0,8);if(await d(["list"]).catch(()=>null),r==="copilot.microsoft.com")await pe(s);else pe(s).catch(()=>{});return await d(["list"]).catch(()=>null),a}let n=await d(["evalraw",t,"Target.createTarget",JSON.stringify({url:e})]),{targetId:i}=JSON.parse(n);return await d(["list"]).catch(()=>null),i}async function R(e){try{let t=await Pe();await d(["evalraw",t,"Target.closeTarget",JSON.stringify({targetId:e})])}catch{}}import{existsSync as j,mkdirSync as mt,readFileSync as De,writeFileSync as ht}from"node:fs";import{homedir as yt}from"node:os";import{join as Se}from"node:path";import{tmpdir as C}from"node:os";var Ne=`${C().replaceAll("\\","/")}/greedysearch-chrome-profile`,kr=`${Ne}/DevToolsActivePort`,Ar=`${C().replaceAll("\\","/")}/cdp-pages.json`,Ir=`${C().replaceAll("\\","/")}/greedysearch-chrome-mode`,Rr=`${C().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,q=Se(yt(),".dm"),b=Se(q,"greedyconfig"),K=["perplexity","google","chatgpt"],X="gemini";function wt(){try{if(j(b)){let e=De(b,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((i)=>V[i]),n=t.engines.filter((i)=>!V[i]);if(n.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${b}: ${n.join(", ")}
265
+ `)}}}catch{}return Y}var W={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},cr=pt(),ur=dt(),fr=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=$e;var E=lt().replaceAll("\\","/"),pr=`${E}/greedysearch-chrome-metadata.json`,gr=`${E}/greedysearch-chrome-launch.lock`;var dr=`${E}/greedysearch-chrome.pid`,mr=`${E}/greedysearch-chrome-mode`,hr=`${E}/greedysearch-chrome-last-activity`;var yr=Number.parseInt(process.env.GREEDY_SEARCH_IDLE_TIMEOUT_MINUTES||"5",10)||5;var wr=import.meta.dirname||new URL(".",import.meta.url).pathname.replace(/^\/([A-Z]:)/,"$1"),_e=Ye().replaceAll("\\","/"),vr=`${_e}/greedysearch-chrome.pid`,br=`${_e}/greedysearch-chrome-last-activity`,$r=Number.parseInt(process.env.GREEDY_SEARCH_IDLE_TIMEOUT_MINUTES||"5",10)||5,_r=Number.parseInt(process.env.GREEDY_SEARCH_VISIBLE_IDLE_TIMEOUT_MINUTES||"60",10)||60;var d=me;async function Pe(){let e=(await d(["list"])).split(`
266
+ `)[0];if(!e)throw Error("No Chrome tabs found");return e.slice(0,8)}async function I(e="about:blank"){let t=await Pe(),r=new URL(e).hostname;if(r==="copilot.microsoft.com"||r==="www.perplexity.ai"||r==="perplexity.ai"||r.endsWith(".perplexity.ai")){let o=await d(["evalraw",t,"Target.createTarget",JSON.stringify({url:"about:blank"})]),{targetId:a}=JSON.parse(o),s=a.slice(0,8);if(await d(["list"]).catch(()=>null),r==="copilot.microsoft.com")await pe(s);else pe(s).catch(()=>{});return await d(["list"]).catch(()=>null),a}let i=await d(["evalraw",t,"Target.createTarget",JSON.stringify({url:e})]),{targetId:n}=JSON.parse(i);return await d(["list"]).catch(()=>null),n}async function R(e){try{let t=await Pe();await d(["evalraw",t,"Target.closeTarget",JSON.stringify({targetId:e})])}catch{}}import{existsSync as j,mkdirSync as mt,readFileSync as De,writeFileSync as ht}from"node:fs";import{homedir as yt}from"node:os";import{join as Se}from"node:path";import{tmpdir as C}from"node:os";var Ne=`${C().replaceAll("\\","/")}/greedysearch-chrome-profile`,kr=`${Ne}/DevToolsActivePort`,Ar=`${C().replaceAll("\\","/")}/cdp-pages.json`,Ir=`${C().replaceAll("\\","/")}/greedysearch-chrome-mode`,Rr=`${C().replaceAll("\\","/")}/greedysearch-visible-recovery.jsonl`,q=Se(yt(),".dm"),b=Se(q,"greedyconfig"),K=["perplexity","google","chatgpt"],X="gemini";function wt(){try{if(j(b)){let e=De(b,"utf8"),t=JSON.parse(e);if(Array.isArray(t.engines)&&t.engines.length>0&&t.engines.every((r)=>typeof r==="string")){let r=t.engines.filter((n)=>V[n]),i=t.engines.filter((n)=>!V[n]);if(i.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${b}: ${i.join(", ")}
267
267
  [greedysearch] Available engines: ${Object.keys(V).join(", ")}
268
268
  `);if(r.length>0)return r;process.stderr.write(`[greedysearch] Warning: no valid engines in ${b}, falling back to defaults: ${K.join(", ")}
269
269
  `)}}}catch{}return K}function vt(){try{if(!j(q))mt(q,{recursive:!0});if(!j(b))ht(b,JSON.stringify({engines:K,synthesizer:X},null,2)+`
270
270
  `,"utf8")}catch{}}vt();var Ee=["gemini","chatgpt"];function bt(){try{if(j(b)){let e=De(b,"utf8"),t=JSON.parse(e);if(typeof t.synthesizer==="string"){let r=t.synthesizer.toLowerCase();if(Ee.includes(r))return r;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${t.synthesizer}" in ${b}
271
271
  [greedysearch] Available synthesizers: ${Ee.join(", ")}
272
272
  [greedysearch] Falling back to default: ${X}
273
- `)}}}catch{}return X}var V={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},jr=wt();var Cr=bt(),Z=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=Ne;function $t(){if(typeof globalThis.DOMMatrix>"u")globalThis.DOMMatrix=class{constructor(t=void 0){}multiplySelf(){return this}preMultiplySelf(){return this}translateSelf(){return this}scaleSelf(){return this}rotateSelf(){return this}};if(typeof globalThis.ImageData>"u")globalThis.ImageData=class{constructor(t=void 0,r=0,n=0){this.data=t,this.width=r,this.height=n}};if(typeof globalThis.Path2D>"u")globalThis.Path2D=class{constructor(t=void 0){}}}async function _t(){$t();let e=await import("pdf-parse"),t=e.PDFParse??e.default;if(!t)throw Error("pdf-parse did not export PDFParse");return t}async function ke(e,t){try{let n=new(await _t())({data:new Uint8Array(e)});await n.load();let i=await n.getText(),o=i.text?.trim();if(!o)return null;return{title:new URL(t).pathname.split("/").pop()||"Document.pdf",content:`## PDF Content (${i.total} pages)
273
+ `)}}}catch{}return X}var V={perplexity:"perplexity.mjs",p:"perplexity.mjs",bing:"bing-copilot.mjs",b:"bing-copilot.mjs",google:"google-ai.mjs",g:"google-ai.mjs",gemini:"gemini.mjs",gem:"gemini.mjs",chatgpt:"chatgpt.mjs",gpt:"chatgpt.mjs","semantic-scholar":"semantic-scholar.mjs",semanticscholar:"semantic-scholar.mjs",s2:"semantic-scholar.mjs",logically:"logically.mjs",log:"logically.mjs"},jr=wt();var Cr=bt(),Z=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=Ne;function $t(){if(typeof globalThis.DOMMatrix>"u")globalThis.DOMMatrix=class{constructor(t=void 0){}multiplySelf(){return this}preMultiplySelf(){return this}translateSelf(){return this}scaleSelf(){return this}rotateSelf(){return this}};if(typeof globalThis.ImageData>"u")globalThis.ImageData=class{constructor(t=void 0,r=0,i=0){this.data=t,this.width=r,this.height=i}};if(typeof globalThis.Path2D>"u")globalThis.Path2D=class{constructor(t=void 0){}}}async function _t(){$t();let e=await import("pdf-parse"),t=e.PDFParse??e.default;if(!t)throw Error("pdf-parse did not export PDFParse");return t}async function ke(e,t){try{let i=new(await _t())({data:new Uint8Array(e)});await i.load();let n=await i.getText(),o=n.text?.trim();if(!o)return null;return{title:new URL(t).pathname.split("/").pop()||"Document.pdf",content:`## PDF Content (${n.total} pages)
274
274
 
275
- ${o}`,pages:i.total}}catch(r){return{error:r.message||String(r)}}}function Q(e="",t=240){let r=String(e).replaceAll(/\s+/g," ").trim();if(r.length<=t)return r;let n=r.slice(0,t),i=n.lastIndexOf(" ");return i>0?`${n.slice(0,i)}...`:`${n}...`}async function Pt(e,t,r=8000){let n=Date.now();try{let o=(await d(["evalraw",e,"Page.getFrameTree","{}"]).then((h)=>JSON.parse(h)).catch(()=>null))?.frameTree?.frame?.id||void 0,a=await d(["evalraw",e,"Network.loadNetworkResource",JSON.stringify({frameId:o,url:t,options:{disableCache:!0,includeCredentials:!1}})],20000),c=JSON.parse(a).resource;if(!c?.success||!c.httpStatusCode)return{url:t,error:c?.netErrorName||c?.netError||"loadNetworkResource failed",source:"chrome",duration:Date.now()-n,needsFallback:!0};let l="";if(c.stream)try{let h=await d(["evalraw",e,"IO.read",JSON.stringify({handle:c.stream})],1e4);l=JSON.parse(h).data||"",await d(["evalraw",e,"IO.close",JSON.stringify({handle:c.stream})]).catch(()=>{})}catch{}if(!l||l.length<100)return{url:t,error:"Empty response body from Network.loadNetworkResource",source:"chrome",duration:Date.now()-n,needsFallback:!0};let f=T(c.httpStatusCode,l,t,t);if(f.blocked)return{url:t,status:c.httpStatusCode,error:`Blocked: ${f.reason}`,source:"chrome",duration:Date.now()-n,needsBrowser:!0};let u=F(l,t),m=x(u);if(!m.ok)return{url:t,status:c.httpStatusCode,error:`Low quality: ${m.reason}`,source:"chrome",duration:Date.now()-n,needsBrowser:!0};let g=P(u.markdown,r);return{url:t,finalUrl:t,status:c.httpStatusCode,contentType:"text/markdown",lastModified:"",publishedTime:u.publishedTime||"",byline:u.byline||"",siteName:u.siteName||"",lang:u.lang||"",title:u.title||t,snippet:u.excerpt,content:g,contentChars:g.length,source:"chrome",duration:Date.now()-n}}catch(i){return{url:t,error:i.message,source:"chrome",duration:Date.now()-n,needsFallback:!0}}}function Ae(e){try{return new URL(e).pathname.toLowerCase().endsWith(".pdf")}catch{return!1}}async function Et(e,t=8000){let r=O(e);if(r.blocked)return{url:e,finalUrl:e,status:403,error:`Blocked: ${r.reason}`,source:"pdf-http"};let n=new AbortController,i=setTimeout(()=>n.abort(),20000),o=Date.now();try{let a=await fetch(e,{method:"GET",redirect:"follow",signal:n.signal,headers:ne({accept:"application/pdf,application/octet-stream;q=0.9,*/*;q=0.5"})});clearTimeout(i);let s=a.headers.get("content-type")||"",c=a.url||e,l=Number.parseInt(a.headers.get("content-length")||"0",10);if(a.status>=400)return{url:e,finalUrl:c,status:a.status,error:`HTTP ${a.status}`,source:"pdf-http",duration:Date.now()-o};if(!s.toLowerCase().includes("application/pdf")&&!Ae(c))return null;if(l>31457280)return{url:e,finalUrl:c,status:a.status,error:`PDF too large: ${l} bytes`,source:"pdf-http",duration:Date.now()-o};let f=Buffer.from(await a.arrayBuffer()),u=await ke(f,c);if(!u||u.error)return{url:e,finalUrl:c,status:a.status,error:u?.error||"PDF text extraction failed",source:"pdf-http",duration:Date.now()-o};let m=P(u.content,t);return{url:e,finalUrl:c,status:a.status,contentType:"application/pdf",lastModified:a.headers.get("last-modified")||"",title:u.title,snippet:Q(m,320),content:m,contentChars:m.length,pages:u.pages,source:"pdf-http",duration:Date.now()-o}}catch(a){return clearTimeout(i),{url:e,finalUrl:e,error:a.message||String(a),source:"pdf-http",duration:Date.now()-o}}}async function Dt(e,t=8000){let r=Date.now();if(Ae(e)){let o=await Et(e,t);if(o?.content||o?.status===403)return o}if(D(e)){let o=D(e);if(o&&(o.type==="root"||o.type==="tree"||o.type==="blob"&&!o.path?.includes("."))){let a=await se(e);if(a.ok){let s=P(a.content,t);return{url:e,finalUrl:e,status:200,contentType:"text/markdown",lastModified:"",title:a.title,snippet:s.slice(0,320),content:s,contentChars:s.length,source:"github-api",...a.tree&&{tree:a.tree},duration:Date.now()-r}}process.stderr.write(`[greedysearch] GitHub API fetch failed, trying HTTP: ${a.error}
275
+ ${o}`,pages:n.total}}catch(r){return{error:r.message||String(r)}}}function Q(e="",t=240){let r=String(e).replaceAll(/\s+/g," ").trim();if(r.length<=t)return r;let i=r.slice(0,t),n=i.lastIndexOf(" ");return n>0?`${i.slice(0,n)}...`:`${i}...`}async function Pt(e,t,r=8000){let i=Date.now();try{let o=(await d(["evalraw",e,"Page.getFrameTree","{}"]).then((h)=>JSON.parse(h)).catch(()=>null))?.frameTree?.frame?.id||void 0,a=await d(["evalraw",e,"Network.loadNetworkResource",JSON.stringify({frameId:o,url:t,options:{disableCache:!0,includeCredentials:!1}})],20000),c=JSON.parse(a).resource;if(!c?.success||!c.httpStatusCode)return{url:t,error:c?.netErrorName||c?.netError||"loadNetworkResource failed",source:"chrome",duration:Date.now()-i,needsFallback:!0};let l="";if(c.stream)try{let h=await d(["evalraw",e,"IO.read",JSON.stringify({handle:c.stream})],1e4);l=JSON.parse(h).data||"",await d(["evalraw",e,"IO.close",JSON.stringify({handle:c.stream})]).catch(()=>{})}catch{}if(!l||l.length<100)return{url:t,error:"Empty response body from Network.loadNetworkResource",source:"chrome",duration:Date.now()-i,needsFallback:!0};let f=T(c.httpStatusCode,l,t,t);if(f.blocked)return{url:t,status:c.httpStatusCode,error:`Blocked: ${f.reason}`,source:"chrome",duration:Date.now()-i,needsBrowser:!0};let u=F(l,t),m=x(u);if(!m.ok)return{url:t,status:c.httpStatusCode,error:`Low quality: ${m.reason}`,source:"chrome",duration:Date.now()-i,needsBrowser:!0};let g=P(u.markdown,r);return{url:t,finalUrl:t,status:c.httpStatusCode,contentType:"text/markdown",lastModified:"",publishedTime:u.publishedTime||"",byline:u.byline||"",siteName:u.siteName||"",lang:u.lang||"",title:u.title||t,snippet:u.excerpt,content:g,contentChars:g.length,source:"chrome",duration:Date.now()-i}}catch(n){return{url:t,error:n.message,source:"chrome",duration:Date.now()-i,needsFallback:!0}}}function Ae(e){try{return new URL(e).pathname.toLowerCase().endsWith(".pdf")}catch{return!1}}async function Et(e,t=8000){let r=O(e);if(r.blocked)return{url:e,finalUrl:e,status:403,error:`Blocked: ${r.reason}`,source:"pdf-http"};let i=new AbortController,n=setTimeout(()=>i.abort(),20000),o=Date.now();try{let a=await fetch(e,{method:"GET",redirect:"follow",signal:i.signal,headers:ie({accept:"application/pdf,application/octet-stream;q=0.9,*/*;q=0.5"})});clearTimeout(n);let s=a.headers.get("content-type")||"",c=a.url||e,l=Number.parseInt(a.headers.get("content-length")||"0",10);if(a.status>=400)return{url:e,finalUrl:c,status:a.status,error:`HTTP ${a.status}`,source:"pdf-http",duration:Date.now()-o};if(!s.toLowerCase().includes("application/pdf")&&!Ae(c))return null;if(l>31457280)return{url:e,finalUrl:c,status:a.status,error:`PDF too large: ${l} bytes`,source:"pdf-http",duration:Date.now()-o};let f=Buffer.from(await a.arrayBuffer()),u=await ke(f,c);if(!u||u.error)return{url:e,finalUrl:c,status:a.status,error:u?.error||"PDF text extraction failed",source:"pdf-http",duration:Date.now()-o};let m=P(u.content,t);return{url:e,finalUrl:c,status:a.status,contentType:"application/pdf",lastModified:a.headers.get("last-modified")||"",title:u.title,snippet:Q(m,320),content:m,contentChars:m.length,pages:u.pages,source:"pdf-http",duration:Date.now()-o}}catch(a){return clearTimeout(n),{url:e,finalUrl:e,error:a.message||String(a),source:"pdf-http",duration:Date.now()-o}}}async function Dt(e,t=8000){let r=Date.now();if(Ae(e)){let o=await Et(e,t);if(o?.content||o?.status===403)return o}if(D(e)){let o=D(e);if(o&&(o.type==="root"||o.type==="tree"||o.type==="blob"&&!o.path?.includes("."))){let a=await se(e);if(a.ok){let s=P(a.content,t);return{url:e,finalUrl:e,status:200,contentType:"text/markdown",lastModified:"",title:a.title,snippet:s.slice(0,320),content:s,contentChars:s.length,source:"github-api",...a.tree&&{tree:a.tree},duration:Date.now()-r}}process.stderr.write(`[greedysearch] GitHub API fetch failed, trying HTTP: ${a.error}
276
276
  `)}}if(ce(e)?.type==="post"){process.stderr.write(`[greedysearch] Using Reddit JSON API for: ${e.slice(0,60)}...
277
277
  `);let o=await ue(e,t);if(o.ok){let a=P(o.markdown,t);return{url:e,finalUrl:o.finalUrl,status:o.status,contentType:"text/markdown",lastModified:o.lastModified||"",publishedTime:o.publishedTime||"",byline:o.byline||"",siteName:o.siteName||"",lang:o.lang||"",title:o.title,snippet:o.excerpt,content:a,contentChars:a.length,source:"reddit-api",duration:Date.now()-r}}process.stderr.write(`[greedysearch] Reddit API fetch failed, falling back to HTTP: ${o.error}
278
- `)}let i=await ie(e,{timeoutMs:1e4});if(i.ok){let o=P(i.markdown,t);return{url:e,finalUrl:i.finalUrl,status:i.status,contentType:"text/markdown",lastModified:i.lastModified||"",publishedTime:i.publishedTime||"",byline:i.byline||"",siteName:i.siteName||"",lang:i.lang||"",title:i.title,snippet:i.excerpt,content:o,contentChars:o.length,source:"http",duration:Date.now()-r}}if(i.needsBrowser)try{let o=await I();try{let a=await Pt(o,e,t);if(a.content&&a.content.length>100)return a}finally{await R(o)}}catch{}return process.stderr.write(`[greedysearch] HTTP failed for ${e.slice(0,60)}, trying browser...
279
- `),await St(e,t)}async function St(e,t=8000){let r=Date.now(),n;try{n=await I()}catch(i){return{url:e,title:"",content:null,snippet:"",contentChars:0,error:`openNewTab failed: ${i.message}`,source:"browser",duration:Date.now()-r}}try{await d(["nav",n,e],30000),await new Promise((s)=>setTimeout(s,800));let i=await d(["eval",n,String.raw`
278
+ `)}let n=await ne(e,{timeoutMs:1e4});if(n.ok){let o=P(n.markdown,t);return{url:e,finalUrl:n.finalUrl,status:n.status,contentType:"text/markdown",lastModified:n.lastModified||"",publishedTime:n.publishedTime||"",byline:n.byline||"",siteName:n.siteName||"",lang:n.lang||"",title:n.title,snippet:n.excerpt,content:o,contentChars:o.length,source:"http",duration:Date.now()-r}}if(n.needsBrowser)try{let o=await I();try{let a=await Pt(o,e,t);if(a.content&&a.content.length>100)return a}finally{await R(o)}}catch{}return process.stderr.write(`[greedysearch] HTTP failed for ${e.slice(0,60)}, trying browser...
279
+ `),await St(e,t)}async function St(e,t=8000){let r=Date.now(),i;try{i=await I()}catch(n){return{url:e,title:"",content:null,snippet:"",contentChars:0,error:`openNewTab failed: ${n.message}`,source:"browser",duration:Date.now()-r}}try{await d(["nav",i,e],30000),await new Promise((s)=>setTimeout(s,800));let n=await d(["eval",i,String.raw`
280
280
  (function(){
281
281
  var el = document.querySelector('article, [role="main"], main, .post-content, .article-body, #content, .content');
282
282
  var text = (el || document.body).innerText;
@@ -286,13 +286,13 @@ ${o}`,pages:i.total}}catch(r){return{error:r.message||String(r)}}}function Q(e="
286
286
  url: location.href
287
287
  });
288
288
  })()
289
- `]),o=JSON.parse(i),a=P(o.content,t);return{url:e,finalUrl:o.url||e,status:200,contentType:"text/plain",lastModified:"",title:o.title,snippet:Q(a,320),content:a,contentChars:a.length,source:"browser",duration:Date.now()-r}}catch(i){return{url:e,title:"",content:null,snippet:"",contentChars:0,error:i.message,source:"browser",duration:Date.now()-r}}finally{await R(n)}}async function Br(e,t=5,r=8000,n=Z){let i=e.slice(0,t);if(i.length===0)return[];let o=Math.min(i.length,Math.max(1,Number.parseInt(String(n),10)||Z));process.stderr.write(`[greedysearch] Fetching content from ${i.length} sources via HTTP (concurrency ${o})...
290
- `);let a=Array(i.length),s=0,c=0;async function l(){while(!0){let g=s++;if(g>=i.length)return;let h=i[g],y=h.canonicalUrl||h.url;process.stderr.write(`[greedysearch] [${g+1}/${i.length}] Fetching: ${y.slice(0,60)}...
289
+ `]),o=JSON.parse(n),a=P(o.content,t);return{url:e,finalUrl:o.url||e,status:200,contentType:"text/plain",lastModified:"",title:o.title,snippet:Q(a,320),content:a,contentChars:a.length,source:"browser",duration:Date.now()-r}}catch(n){return{url:e,title:"",content:null,snippet:"",contentChars:0,error:n.message,source:"browser",duration:Date.now()-r}}finally{await R(i)}}async function Br(e,t=5,r=8000,i=Z){let n=e.slice(0,t);if(n.length===0)return[];let o=Math.min(n.length,Math.max(1,Number.parseInt(String(i),10)||Z));process.stderr.write(`[greedysearch] Fetching content from ${n.length} sources via HTTP (concurrency ${o})...
290
+ `);let a=Array(n.length),s=0,c=0;async function l(){while(!0){let g=s++;if(g>=n.length)return;let h=n[g],y=h.canonicalUrl||h.url;process.stderr.write(`[greedysearch] [${g+1}/${n.length}] Fetching: ${y.slice(0,60)}...
291
291
  `);let p=await Dt(y,r).catch((_)=>({url:y,title:"",content:null,snippet:"",contentChars:0,error:_.message,source:"error",duration:0}));if(a[g]={id:h.id,...p},p.content&&p.content.length>100)process.stderr.write(`[greedysearch] ✓ ${p.source}: ${p.content.length} chars
292
292
  `);else if(p.error)process.stderr.write(`[greedysearch] ✗ ${p.error.slice(0,80)}
293
- `);c+=1,process.stderr.write(`PROGRESS:fetch:${c}/${i.length}
293
+ `);c+=1,process.stderr.write(`PROGRESS:fetch:${c}/${n.length}
294
294
  `)}}await Promise.all(Array.from({length:o},()=>l()));let f=a.filter((g)=>g.content&&g.content.length>100),u=a.filter((g)=>g.source==="http").length,m=a.filter((g)=>g.source==="browser").length;return process.stderr.write(`[greedysearch] Fetched ${f.length}/${a.length} sources (HTTP: ${u}, Browser: ${m})
295
- `),a}async function Yr(e){let t=await I();await d(["list"]);try{await d(["nav",t,e],30000),await new Promise((n)=>setTimeout(n,800));let r=await d(["eval",t,String.raw`
295
+ `),a}async function Yr(e){let t=await I();await d(["list"]);try{await d(["nav",t,e],30000),await new Promise((i)=>setTimeout(i,800));let r=await d(["eval",t,String.raw`
296
296
  (function(){
297
297
  var el = document.querySelector('article, [role="main"], main, .post-content, .article-body, #content, .content');
298
298
  var text = (el || document.body).innerText;