@duckmind/dm-windows-x64 0.59.3 → 0.60.2

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 (26) hide show
  1. package/dm.exe +0 -0
  2. package/extensions/.dm-extensions.json +11 -7
  3. package/extensions/dm-cliproxy/index.js +1 -1
  4. package/extensions/dm-cliproxy/src/apply.js +1 -1
  5. package/extensions/dm-cliproxy/src/commands.js +1 -1
  6. package/extensions/dm-cliproxy/src/fetch-models.js +1 -1
  7. package/extensions/dm-cliproxy/src/ui-hub/hub.js +1 -1
  8. package/extensions/dm-cliproxy/src/ui-hub/index.js +1 -1
  9. package/extensions/dm-cua/bin/browser-cua.mjs +4 -4
  10. package/extensions/dm-cua/index.js +3 -3
  11. package/extensions/dm-cua/src/browser-cua-lib.mjs +3 -3
  12. package/extensions/greedysearch-dm/bin/mcp.mjs +52 -52
  13. package/extensions/greedysearch-dm/bin/search.mjs +130 -131
  14. package/extensions/greedysearch-dm/extractors/consensus.mjs +42 -43
  15. package/extensions/greedysearch-dm/extractors/gemini.mjs +52 -53
  16. package/extensions/greedysearch-dm/extractors/logically.mjs +33 -34
  17. package/extensions/greedysearch-dm/src/search/browser-lifecycle.mjs +9 -10
  18. package/extensions/greedysearch-dm/src/search/chrome.mjs +21 -22
  19. package/extensions/greedysearch-dm/src/search/engines.mjs +7 -7
  20. package/extensions/greedysearch-dm/src/search/fetch-source.mjs +48 -48
  21. package/extensions/greedysearch-dm/src/search/paths.mjs +1 -1
  22. package/extensions/greedysearch-dm/src/search/research.mjs +119 -119
  23. package/extensions/greedysearch-dm/src/search/scale-aware.mjs +7 -7
  24. package/extensions/greedysearch-dm/src/search/simple-research.mjs +125 -125
  25. package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +11 -11
  26. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
- import{spawn as Ce}from"node:child_process";import{basename as X}from"node:path";function Y(t=process.env,e=process.execPath){let i=t.GREEDY_SEARCH_NODE||t.NODE_BINARY||t.NODE;if(i?.trim())return i.trim();let s=X(e||"").toLowerCase();if(s==="node"||s==="node.exe")return e;return"node"}import{existsSync as T,mkdirSync as V,readFileSync as G,writeFileSync as B}from"node:fs";import{homedir as F}from"node:os";import{join as H}from"node:path";import{tmpdir as z}from"node:os";function ee(t,e=9222){let i=Number.parseInt(String(t??""),10);return Number.isInteger(i)&&i>1024&&i<65535?i:e}var ie=z().replaceAll("\\","/"),Ne=ee(process.env.GREEDY_SEARCH_PORT),h=(process.env.GREEDY_SEARCH_PROFILE_DIR||process.env.CDP_PROFILE_DIR||`${ie}/greedysearch-chrome-profile`).replaceAll("\\","/"),Ae=`${h}/DevToolsActivePort`,Ye=process.env.GREEDY_SEARCH_PID_FILE||`${h}/browser.pid`,Ge=process.env.CDP_PAGES_CACHE||`${h}/cdp-pages.json`,He=process.env.GREEDY_SEARCH_MODE_FILE||`${h}/browser-mode`,Ue=process.env.GREEDY_SEARCH_METADATA_FILE||`${h}/browser-metadata.json`,ye=process.env.GREEDY_SEARCH_LAUNCH_LOCK_FILE||`${h}/browser-launch.lock`,Se=process.env.GREEDY_SEARCH_ACTIVITY_FILE||`${h}/browser-last-activity`,ke=(process.env.CDP_SOCKET_DIR||`${h}/cdp-sockets`).replaceAll("\\","/"),Pe=`${h}/visible-recovery.jsonl`,w=H(F(),".dm"),d=H(w,"greedyconfig"),b=["perplexity","google","chatgpt","gemini"],$="gemini";function te(){try{if(T(d)){let t=G(d,"utf8"),e=JSON.parse(t);if(Array.isArray(e.engines)&&e.engines.length>0&&e.engines.every((i)=>typeof i==="string")){let i=e.engines.filter((o)=>j[o]),s=e.engines.filter((o)=>!j[o]);if(s.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${d}: ${s.join(", ")}
2
- [greedysearch] Available engines: ${Object.keys(j).join(", ")}
3
- `);if(i.length>0)return i;process.stderr.write(`[greedysearch] Warning: no valid engines in ${d}, falling back to defaults: ${b.join(", ")}
4
- `)}}}catch{}return b}function ne(){try{if(!T(w))V(w,{recursive:!0});if(!T(d))B(d,JSON.stringify({engines:b,synthesizer:$},null,2)+`
5
- `,"utf8")}catch{}}ne();var R=["gemini","chatgpt"];function se(){try{if(T(d)){let t=G(d,"utf8"),e=JSON.parse(t);if(typeof e.synthesizer==="string"){let i=e.synthesizer.toLowerCase();if(R.includes(i))return i;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${e.synthesizer}" in ${d}
6
- [greedysearch] Available synthesizers: ${R.join(", ")}
7
- [greedysearch] Falling back to default: ${$}
8
- `)}}}catch{}return $}var j={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"},oe=te();var We=se(),Me=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=h;import{existsSync as U}from"node:fs";import{dirname as le,join as O}from"node:path";import{fileURLToPath as re}from"node:url";function y(t){return re(new URL(".",t)).replace(/^\/([A-Z]:)/,"$1")}function ce(t,e=U){let i=new Set;for(let s of t.filter(Boolean)){if(i.has(s))continue;if(i.add(s),e(s))return s}return t.filter(Boolean).at(-1)}function S(t,{moduleDir:e,entrypoint:i=process.argv[1],env:s=process.env,exists:o=U}={}){let c=i?le(i):null,f=s.GREEDY_SEARCH_EXTENSION_DIR?.trim()||null;return ce([e?O(e,"..","..","extractors",t):null,e?O(e,"..","extractors",t):null,f?O(f,"extractors",t):null,c?O(c,"..","extractors",t):null],o)}var ae=["fbclid","gclid","ref","ref_src","ref_url","source","utm_campaign","utm_content","utm_medium","utm_source","utm_term"],fe=["dev.to","hashnode.com","medium.com","reddit.com","stackoverflow.com","stackexchange.com","substack.com"],pe=["arstechnica.com","techcrunch.com","theverge.com","venturebeat.com","wired.com","zdnet.com"],W=["facebook.com","instagram.com","linkedin.com","pinterest.com","tiktok.com","twitter.com","x.com"];function v(t="",e=240){let i=String(t).replaceAll(/\s+/g," ").trim();if(i.length<=e)return i;let s=i.slice(0,e),o=s.lastIndexOf(" ");return o>0?`${s.slice(0,o)}...`:`${s}...`}function N(t=""){let e=v(t,180);if(!e)return"";if(/^https?:\/\//i.test(e))return"";let i=e.split(/\s+/).filter(Boolean).length,s=/[A-Z]/.test(e),o=/\d/.test(e);return e===e.toLowerCase()&&i<=4&&!s&&!o?"":e}function k(t="",e=""){let i=N(t),s=N(e);if(!s)return i;if(!i)return s;let o=/^https?:\/\//i.test(i),c=/^https?:\/\//i.test(s);if(o&&!c)return s;if(!o&&c)return i;return s.length>i.length?s:i}function ge(t){if(!t)return null;try{let e=new URL(t);if(!["http:","https:"].includes(e.protocol))return null;if(e.hash="",e.hostname=e.hostname.toLowerCase(),e.protocol==="https:"&&e.port==="443"||e.protocol==="http:"&&e.port==="80")e.port="";for(let o of[...e.searchParams.keys()]){let c=o.toLowerCase();if(ae.includes(c)||c.startsWith("utm_"))e.searchParams.delete(o)}e.searchParams.sort();let i=e.pathname.replace(/\/{1,10}$/,"")||"/";e.pathname=i;let s=e.toString();return i==="/"?s.replace(/\/$/,""):s}catch{return null}}function ue(t){try{return new URL(t).hostname.toLowerCase().replace(/^www\./,"")}catch{return""}}function D(t,e){return e.some((i)=>t===i||t.endsWith(`.${i}`))}function me(t,e="",i=""){let s=e.toLowerCase(),o=i.toLowerCase();if(t==="github.com"||t==="gitlab.com")return"repo";if(t==="arxiv.org"||t==="doi.org"||t==="semanticscholar.org"||t.endsWith(".semanticscholar.org")||o.includes("/paper/")||o.includes("/pdf/"))return"academic";if(D(t,W))return"social";if(D(t,fe))return"community";if(D(t,pe))return"news";if(t.startsWith("docs.")||t.startsWith("developer.")||t.startsWith("developers.")||t.startsWith("api.")||s.includes("documentation")||s.includes("docs")||s.includes("reference")||o.includes("/docs/")||o.includes("/reference/")||o.includes("/api/"))return"official-docs";if(t.startsWith("blog.")||o.includes("/blog/"))return"maintainer-blog";return"website"}function he(t){switch(t){case"official-docs":return 5;case"repo":return 4;case"academic":return 4;case"maintainer-blog":return 3;case"website":return 2;case"community":return 1;case"news":return 0;case"social":return-6;default:return 0}}function Ee(t){let e=Object.values(t.perEngine||{}).map((i)=>i?.rank||99);return e.length?Math.min(...e):99}var _e=["reddit.com","news.ycombinator.com","lobste.rs"];function I(t){return t.smartScore*3+t.engineCount*5+he(t.sourceType)*2+Math.max(0,7-Ee(t))}function de(t){let e=t.toLowerCase(),i=[];if(e.includes("openai")||e.includes("gpt")||e.includes("chatgpt"))i.push("openai.com","platform.openai.com","help.openai.com");if(e.includes("anthropic")||e.includes("claude"))i.push("anthropic.com","docs.anthropic.com");if(e.includes("bun"))i.push("bun.sh","bun.com");if(e.includes("next.js")||e.includes("nextjs"))i.push("nextjs.org","vercel.com");if(e.includes("playwright"))i.push("playwright.dev");if(e.includes("supabase"))i.push("supabase.com","supabase.io");if(e.includes("prisma"))i.push("prisma.io");if(e.includes("tailwind"))i.push("tailwindcss.com");if(e.includes("vite"))i.push("vitejs.dev","vite.dev");if(e.includes("astro"))i.push("astro.build");if(e.includes("svelte"))i.push("svelte.dev");if(e.includes("solid"))i.push("solidjs.com");if(e.includes("vue")||e.includes("nuxt"))i.push("vuejs.org","nuxt.com");if(e.includes("react")||e.includes("react native"))i.push("react.dev","reactnative.dev");if(e.includes("angular"))i.push("angular.io","angular.dev");if(e.includes("node.js")||e.includes("nodejs"))i.push("nodejs.org","nodejs.dev","npmjs.com");if(/\bgo\b/.test(e)||e.includes("golang"))i.push("go.dev","golang.org","pkg.go.dev");if(e.includes("deno"))i.push("deno.land","deno.com");if(e.includes("fresh"))i.push("fresh.deno.dev");if(e.includes("typescript")||e.includes("ts"))i.push("typescriptlang.org");if(e.includes("python"))i.push("python.org","docs.python.org");if(e.includes("rust"))i.push("rust-lang.org","docs.rs","crates.io");if(e.includes("zig"))i.push("ziglang.org");if(e.includes("docker"))i.push("docker.com","docs.docker.com","hub.docker.com");if(e.includes("kubernetes")||e.includes("k8s"))i.push("kubernetes.io","k8s.io");if(e.includes("postgres")||e.includes("postgresql"))i.push("postgresql.org","neon.tech","supabase.com");if(e.includes("redis"))i.push("redis.io");if(e.includes("sqlite"))i.push("sqlite.org");if(e.includes("cloudflare"))i.push("developers.cloudflare.com","cloudflare.com");if(e.includes("vercel"))i.push("vercel.com","nextjs.org");if(e.includes("netlify"))i.push("netlify.com","docs.netlify.com");if(e.includes("stripe"))i.push("stripe.com","docs.stripe.com");if(e.includes("github"))i.push("github.com","docs.github.com");if(e.includes("gitlab"))i.push("gitlab.com","docs.gitlab.com");if(e.includes("aws"))i.push("aws.amazon.com","docs.aws.amazon.com");if(e.includes("azure"))i.push("azure.microsoft.com","learn.microsoft.com");if(e.includes("gcp")||e.includes("google cloud"))i.push("cloud.google.com","developers.google.com");if(e.includes("gemini")||e.includes("google ai"))i.push("ai.google.dev","developers.google.com");for(let s of W){let o=s.replace(/\.com$/,"");if(e.includes(o))i.push(s)}return[...new Set(i)]}function P(t,e){return t===e||t.endsWith(`.${e}`)}function M(t,e=""){let i=new Map,s=Object.keys(t||{}).filter((n)=>!n.startsWith("_")),o=de(e);for(let n of s){let r=t[n];if(!r?.sources)continue;for(let a=0;a<r.sources.length;a++){let E=r.sources[a],p=ge(E.url);if(!p||p.length<10)continue;let C=N(E.title||""),u=ue(p),_=me(u,C,p),m=0;if(o.some((L)=>P(u,L)))m+=10;if(_==="official-docs")m+=3;let Q=p.toLowerCase();if(/\/docs\/|\/documentation\/|\.dev\/|\/api\/|\/reference\//.test(Q))m+=2;let q=o.some((L)=>P(u,L));if(_==="social"&&!q)m-=20;if(o.length>0){if(D(u,_e))m-=3;else if(_==="community"&&!D(u,["stackoverflow.com","stackexchange.com"]))m-=1}let g=i.get(p)||{id:"",canonicalUrl:p,displayUrl:E.url||p,domain:u,title:"",engines:[],engineCount:0,perEngine:{},sourceType:_,isOfficial:_==="official-docs",smartScore:0};if(g.title=k(g.title,C),g.displayUrl=g.displayUrl||E.url||p,g.sourceType=g.sourceType||_,g.isOfficial=g.isOfficial||_==="official-docs",g.smartScore=Math.max(g.smartScore,m),!g.engines.includes(n))g.engines.push(n);g.perEngine[n]={rank:a+1,title:k(g.perEngine[n]?.title||"",C)},i.set(p,g)}}let c=Array.from(i.values()).map((n)=>({...n,engineCount:n.engines.length})),f=c.filter((n)=>n.sourceType!=="social"),l=c.filter((n)=>n.sourceType==="social");return f.sort((n,r)=>{let a=I(r)-I(n);if(a!==0)return a;return n.domain.localeCompare(r.domain)}),l.sort((n,r)=>{let a=I(r)-I(n);if(a!==0)return a;return n.domain.localeCompare(r.domain)}),[...f,...l].slice(0,12).map((n,r)=>({...n,id:`S${r+1}`,title:n.title||n.domain||n.canonicalUrl}))}function ve(t){let e="",i=!1,s=!1;for(let o of String(t)){if(s){e+=o,s=!1;continue}if(o==="\\"){e+=o,s=!0;continue}if(o==='"'){i=!i,e+=o;continue}if(i&&o===`
9
- `)e+="\\n";else if(i&&o==="\r")e+="\\r";else if(i&&o==="\t")e+="\\t";else e+=o}return e}function J(t){if(!t)return null;let e=String(t).trim(),i=e.indexOf("BEGIN_JSON"),s=e.indexOf("END_JSON");if(i!==-1&&s!==-1&&i<s)e=e.slice(i+10,s).trim();else{let l=e.indexOf("{");if(l>0)e=e.slice(l)}let o=[e,e.replace(/^```json\s*/i,"").replace(/^```\s*/i,"").replace(/```$/i,"").trim()],c=e.indexOf("{"),f=e.lastIndexOf("}");if(c!==-1&&f!==-1&&c<f)o.push(e.slice(c,f+1));for(let l of[...o]){let n=ve(l);if(n!==l)o.push(n)}for(let l of o)try{return JSON.parse(l)}catch{}return null}function Z(t,e,i=""){let s=new Set(e.map((n)=>n.id)),o=["high","medium","low","mixed","conflicting"].includes(t?.agreement?.level)?t.agreement.level:"mixed",c=Array.isArray(t?.claims)?t.claims.map((n)=>({claim:v(n?.claim||"",260),support:["strong","moderate","weak","conflicting"].includes(n?.support)?n.support:"moderate",sourceIds:Array.isArray(n?.sourceIds)?n.sourceIds.filter((r)=>s.has(r)):[]})).filter((n)=>n.claim):[],f=Array.isArray(t?.recommendedSources)?t.recommendedSources.filter((n)=>s.has(n)).slice(0,6):[],l="";if(i){let n=i.indexOf("{"),r=i.lastIndexOf("}");if(n!==-1&&r!==-1&&n<r)l=i.slice(n,r+1);else l=i}return{answer:v(t?.answer||l||i,4000),agreement:{level:o,summary:v(t?.agreement?.summary||"",280)},differences:Array.isArray(t?.differences)?t.differences.map((n)=>v(n,220)).filter(Boolean).slice(0,5):[],caveats:Array.isArray(t?.caveats)?t.caveats.map((n)=>v(n,220)).filter(Boolean).slice(0,5):[],claims:c,recommendedSources:f}}function x(t,e,i,{grounded:s=!1}={}){let o={};for(let l of["perplexity","bing","google"]){let n=e[l];if(!n)continue;if(n.error){o[l]={status:"error",error:String(n.error)};continue}o[l]={status:"ok",answer:v(n.answer||"",s?4500:2200),sourceIds:i.filter((r)=>r.engines.includes(l)).sort((r,a)=>(r.perEngine[l]?.rank||99)-(a.perEngine[l]?.rank||99)).map((r)=>r.id).slice(0,6)}}let c=s?700:300,f=i.slice(0,s?10:8).map((l)=>({id:l.id,title:l.title,domain:l.domain,canonicalUrl:l.canonicalUrl,sourceType:l.sourceType,isOfficial:l.isOfficial,engines:l.engines,engineCount:l.engineCount,fetch:l.fetch?.attempted?{ok:l.fetch.ok,publishedTime:l.fetch.publishedTime||"",byline:l.fetch.byline||"",snippet:v(l.fetch.snippet||"",c)}:void 0}));return["You are a research synthesizer. Combine these search engine results into a single authoritative answer.","",`Query: ${t}`,"",`Engine summaries:
1
+ import{spawn as Re}from"node:child_process";import{basename as q}from"node:path";function G(t=process.env,e=process.execPath){let i=t.GREEDY_SEARCH_NODE||t.NODE_BINARY||t.NODE;if(i?.trim())return i.trim();let s=q(e||"").toLowerCase();if(s==="node"||s==="node.exe")return e;return"node"}import{existsSync as T,mkdirSync as V,readFileSync as S,writeFileSync as B}from"node:fs";import{homedir as F}from"node:os";import{join as Y}from"node:path";import{tmpdir as z}from"node:os";function ee(t,e=9222){let i=Number.parseInt(String(t??""),10);return Number.isInteger(i)&&i>1024&&i<65535?i:e}var ie=z().replaceAll("\\","/"),$e=ee(process.env.GREEDY_SEARCH_PORT),h=(process.env.GREEDY_SEARCH_PROFILE_DIR||process.env.CDP_PROFILE_DIR||`${ie}/greedysearch-chrome-profile`).replaceAll("\\","/"),Ae=`${h}/DevToolsActivePort`,Ge=process.env.GREEDY_SEARCH_PID_FILE||`${h}/browser.pid`,Se=process.env.CDP_PAGES_CACHE||`${h}/cdp-pages.json`,Ye=process.env.GREEDY_SEARCH_MODE_FILE||`${h}/browser-mode`,ye=process.env.GREEDY_SEARCH_METADATA_FILE||`${h}/browser-metadata.json`,He=process.env.GREEDY_SEARCH_LAUNCH_LOCK_FILE||`${h}/browser-launch.lock`,Ue=process.env.GREEDY_SEARCH_ACTIVITY_FILE||`${h}/browser-last-activity`,ke=(process.env.CDP_SOCKET_DIR||`${h}/cdp-sockets`).replaceAll("\\","/"),Pe=`${h}/visible-recovery.jsonl`,b=Y(F(),".dm"),d=Y(b,"greedyconfig"),w=["perplexity","google","chatgpt","gemini"],N="gemini";function te(){try{if(T(d)){let t=S(d,"utf8"),e=JSON.parse(t);if(Array.isArray(e.engines)&&e.engines.length>0&&e.engines.every((i)=>typeof i==="string")){let i=e.engines.filter((o)=>L[o]),s=e.engines.filter((o)=>!L[o]);if(s.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${d}: ${s.join(", ")}
2
+ [greedysearch] Available engines: ${Object.keys(L).join(", ")}
3
+ `);if(i.length>0)return i;process.stderr.write(`[greedysearch] Warning: no valid engines in ${d}, falling back to defaults: ${w.join(", ")}
4
+ `)}}}catch{}return w}function ne(){try{if(!T(b))V(b,{recursive:!0});if(!T(d))B(d,JSON.stringify({engines:w,synthesizer:N},null,2)+`
5
+ `,"utf8")}catch{}}ne();var C=["gemini","chatgpt"];function se(){try{if(T(d)){let t=S(d,"utf8"),e=JSON.parse(t);if(typeof e.synthesizer==="string"){let i=e.synthesizer.toLowerCase();if(C.includes(i))return i;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${e.synthesizer}" in ${d}
6
+ [greedysearch] Available synthesizers: ${C.join(", ")}
7
+ [greedysearch] Falling back to default: ${N}
8
+ `)}}}catch{}return N}var L={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"},oe=te();var We=se(),Me=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=h;import{existsSync as y}from"node:fs";import{dirname as le,join as O}from"node:path";import{fileURLToPath as re}from"node:url";function H(t){return re(new URL(".",t)).replace(/^\/([A-Z]:)/,"$1")}function ce(t,e=y){let i=new Set;for(let s of t.filter(Boolean)){if(i.has(s))continue;if(i.add(s),e(s))return s}return t.filter(Boolean).at(-1)}function U(t,{moduleDir:e,entrypoint:i=process.argv[1],env:s=process.env,exists:o=y}={}){let c=i?le(i):null,p=s.GREEDY_SEARCH_EXTENSION_DIR?.trim()||null;return ce([e?O(e,"..","..","extractors",t):null,e?O(e,"..","extractors",t):null,p?O(p,"extractors",t):null,c?O(c,"..","extractors",t):null],o)}var ae=["fbclid","gclid","ref","ref_src","ref_url","source","utm_campaign","utm_content","utm_medium","utm_source","utm_term"],pe=["dev.to","hashnode.com","medium.com","reddit.com","stackoverflow.com","stackexchange.com","substack.com"],fe=["arstechnica.com","techcrunch.com","theverge.com","venturebeat.com","wired.com","zdnet.com"],W=["facebook.com","instagram.com","linkedin.com","pinterest.com","tiktok.com","twitter.com","x.com"];function v(t="",e=240){let i=String(t).replaceAll(/\s+/g," ").trim();if(i.length<=e)return i;let s=i.slice(0,e),o=s.lastIndexOf(" ");return o>0?`${s.slice(0,o)}...`:`${s}...`}function $(t=""){let e=v(t,180);if(!e)return"";if(/^https?:\/\//i.test(e))return"";let i=e.split(/\s+/).filter(Boolean).length,s=/[A-Z]/.test(e),o=/\d/.test(e);return e===e.toLowerCase()&&i<=4&&!s&&!o?"":e}function k(t="",e=""){let i=$(t),s=$(e);if(!s)return i;if(!i)return s;let o=/^https?:\/\//i.test(i),c=/^https?:\/\//i.test(s);if(o&&!c)return s;if(!o&&c)return i;return s.length>i.length?s:i}function ue(t){if(!t)return null;try{let e=new URL(t);if(!["http:","https:"].includes(e.protocol))return null;if(e.hash="",e.hostname=e.hostname.toLowerCase(),e.protocol==="https:"&&e.port==="443"||e.protocol==="http:"&&e.port==="80")e.port="";for(let o of[...e.searchParams.keys()]){let c=o.toLowerCase();if(ae.includes(c)||c.startsWith("utm_"))e.searchParams.delete(o)}e.searchParams.sort();let i=e.pathname.replace(/\/{1,10}$/,"")||"/";e.pathname=i;let s=e.toString();return i==="/"?s.replace(/\/$/,""):s}catch{return null}}function ge(t){try{return new URL(t).hostname.toLowerCase().replace(/^www\./,"")}catch{return""}}function D(t,e){return e.some((i)=>t===i||t.endsWith(`.${i}`))}function me(t,e="",i=""){let s=e.toLowerCase(),o=i.toLowerCase();if(t==="github.com"||t==="gitlab.com")return"repo";if(t==="arxiv.org"||t==="doi.org"||t==="semanticscholar.org"||t.endsWith(".semanticscholar.org")||o.includes("/paper/")||o.includes("/pdf/"))return"academic";if(D(t,W))return"social";if(D(t,pe))return"community";if(D(t,fe))return"news";if(t.startsWith("docs.")||t.startsWith("developer.")||t.startsWith("developers.")||t.startsWith("api.")||s.includes("documentation")||s.includes("docs")||s.includes("reference")||o.includes("/docs/")||o.includes("/reference/")||o.includes("/api/"))return"official-docs";if(t.startsWith("blog.")||o.includes("/blog/"))return"maintainer-blog";return"website"}function he(t){switch(t){case"official-docs":return 5;case"repo":return 4;case"academic":return 4;case"maintainer-blog":return 3;case"website":return 2;case"community":return 1;case"news":return 0;case"social":return-6;default:return 0}}function Ee(t){let e=Object.values(t.perEngine||{}).map((i)=>i?.rank||99);return e.length?Math.min(...e):99}var _e=["reddit.com","news.ycombinator.com","lobste.rs"];function I(t){return t.smartScore*3+t.engineCount*5+he(t.sourceType)*2+Math.max(0,7-Ee(t))}function de(t){let e=t.toLowerCase(),i=[];if(e.includes("openai")||e.includes("gpt")||e.includes("chatgpt"))i.push("openai.com","platform.openai.com","help.openai.com");if(e.includes("anthropic")||e.includes("claude"))i.push("anthropic.com","docs.anthropic.com");if(e.includes("bun"))i.push("bun.sh","bun.com");if(e.includes("next.js")||e.includes("nextjs"))i.push("nextjs.org","vercel.com");if(e.includes("playwright"))i.push("playwright.dev");if(e.includes("supabase"))i.push("supabase.com","supabase.io");if(e.includes("prisma"))i.push("prisma.io");if(e.includes("tailwind"))i.push("tailwindcss.com");if(e.includes("vite"))i.push("vitejs.dev","vite.dev");if(e.includes("astro"))i.push("astro.build");if(e.includes("svelte"))i.push("svelte.dev");if(e.includes("solid"))i.push("solidjs.com");if(e.includes("vue")||e.includes("nuxt"))i.push("vuejs.org","nuxt.com");if(e.includes("react")||e.includes("react native"))i.push("react.dev","reactnative.dev");if(e.includes("angular"))i.push("angular.io","angular.dev");if(e.includes("node.js")||e.includes("nodejs"))i.push("nodejs.org","nodejs.dev","npmjs.com");if(/\bgo\b/.test(e)||e.includes("golang"))i.push("go.dev","golang.org","pkg.go.dev");if(e.includes("deno"))i.push("deno.land","deno.com");if(e.includes("fresh"))i.push("fresh.deno.dev");if(e.includes("typescript")||e.includes("ts"))i.push("typescriptlang.org");if(e.includes("python"))i.push("python.org","docs.python.org");if(e.includes("rust"))i.push("rust-lang.org","docs.rs","crates.io");if(e.includes("zig"))i.push("ziglang.org");if(e.includes("docker"))i.push("docker.com","docs.docker.com","hub.docker.com");if(e.includes("kubernetes")||e.includes("k8s"))i.push("kubernetes.io","k8s.io");if(e.includes("postgres")||e.includes("postgresql"))i.push("postgresql.org","neon.tech","supabase.com");if(e.includes("redis"))i.push("redis.io");if(e.includes("sqlite"))i.push("sqlite.org");if(e.includes("cloudflare"))i.push("developers.cloudflare.com","cloudflare.com");if(e.includes("vercel"))i.push("vercel.com","nextjs.org");if(e.includes("netlify"))i.push("netlify.com","docs.netlify.com");if(e.includes("stripe"))i.push("stripe.com","docs.stripe.com");if(e.includes("github"))i.push("github.com","docs.github.com");if(e.includes("gitlab"))i.push("gitlab.com","docs.gitlab.com");if(e.includes("aws"))i.push("aws.amazon.com","docs.aws.amazon.com");if(e.includes("azure"))i.push("azure.microsoft.com","learn.microsoft.com");if(e.includes("gcp")||e.includes("google cloud"))i.push("cloud.google.com","developers.google.com");if(e.includes("gemini")||e.includes("google ai"))i.push("ai.google.dev","developers.google.com");for(let s of W){let o=s.replace(/\.com$/,"");if(e.includes(o))i.push(s)}return[...new Set(i)]}function P(t,e){return t===e||t.endsWith(`.${e}`)}function M(t,e=""){let i=new Map,s=Object.keys(t||{}).filter((n)=>!n.startsWith("_")),o=de(e);for(let n of s){let r=t[n];if(!r?.sources)continue;for(let a=0;a<r.sources.length;a++){let E=r.sources[a],f=ue(E.url);if(!f||f.length<10)continue;let R=$(E.title||""),g=ge(f),_=me(g,R,f),m=0;if(o.some((j)=>P(g,j)))m+=10;if(_==="official-docs")m+=3;let Q=f.toLowerCase();if(/\/docs\/|\/documentation\/|\.dev\/|\/api\/|\/reference\//.test(Q))m+=2;let X=o.some((j)=>P(g,j));if(_==="social"&&!X)m-=20;if(o.length>0){if(D(g,_e))m-=3;else if(_==="community"&&!D(g,["stackoverflow.com","stackexchange.com"]))m-=1}let u=i.get(f)||{id:"",canonicalUrl:f,displayUrl:E.url||f,domain:g,title:"",engines:[],engineCount:0,perEngine:{},sourceType:_,isOfficial:_==="official-docs",smartScore:0};if(u.title=k(u.title,R),u.displayUrl=u.displayUrl||E.url||f,u.sourceType=u.sourceType||_,u.isOfficial=u.isOfficial||_==="official-docs",u.smartScore=Math.max(u.smartScore,m),!u.engines.includes(n))u.engines.push(n);u.perEngine[n]={rank:a+1,title:k(u.perEngine[n]?.title||"",R)},i.set(f,u)}}let c=Array.from(i.values()).map((n)=>({...n,engineCount:n.engines.length})),p=c.filter((n)=>n.sourceType!=="social"),l=c.filter((n)=>n.sourceType==="social");return p.sort((n,r)=>{let a=I(r)-I(n);if(a!==0)return a;return n.domain.localeCompare(r.domain)}),l.sort((n,r)=>{let a=I(r)-I(n);if(a!==0)return a;return n.domain.localeCompare(r.domain)}),[...p,...l].slice(0,12).map((n,r)=>({...n,id:`S${r+1}`,title:n.title||n.domain||n.canonicalUrl}))}function ve(t){let e="",i=!1,s=!1;for(let o of String(t)){if(s){e+=o,s=!1;continue}if(o==="\\"){e+=o,s=!0;continue}if(o==='"'){i=!i,e+=o;continue}if(i&&o===`
9
+ `)e+="\\n";else if(i&&o==="\r")e+="\\r";else if(i&&o==="\t")e+="\\t";else e+=o}return e}function J(t){if(!t)return null;let e=String(t).trim(),i=e.indexOf("BEGIN_JSON"),s=e.indexOf("END_JSON");if(i!==-1&&s!==-1&&i<s)e=e.slice(i+10,s).trim();else{let l=e.indexOf("{");if(l>0)e=e.slice(l)}let o=[e,e.replace(/^```json\s*/i,"").replace(/^```\s*/i,"").replace(/```$/i,"").trim()],c=e.indexOf("{"),p=e.lastIndexOf("}");if(c!==-1&&p!==-1&&c<p)o.push(e.slice(c,p+1));for(let l of[...o]){let n=ve(l);if(n!==l)o.push(n)}for(let l of o)try{return JSON.parse(l)}catch{}return null}function Z(t,e,i=""){let s=new Set(e.map((n)=>n.id)),o=["high","medium","low","mixed","conflicting"].includes(t?.agreement?.level)?t.agreement.level:"mixed",c=Array.isArray(t?.claims)?t.claims.map((n)=>({claim:v(n?.claim||"",260),support:["strong","moderate","weak","conflicting"].includes(n?.support)?n.support:"moderate",sourceIds:Array.isArray(n?.sourceIds)?n.sourceIds.filter((r)=>s.has(r)):[]})).filter((n)=>n.claim):[],p=Array.isArray(t?.recommendedSources)?t.recommendedSources.filter((n)=>s.has(n)).slice(0,6):[],l="";if(i){let n=i.indexOf("{"),r=i.lastIndexOf("}");if(n!==-1&&r!==-1&&n<r)l=i.slice(n,r+1);else l=i}return{answer:v(t?.answer||l||i,4000),agreement:{level:o,summary:v(t?.agreement?.summary||"",280)},differences:Array.isArray(t?.differences)?t.differences.map((n)=>v(n,220)).filter(Boolean).slice(0,5):[],caveats:Array.isArray(t?.caveats)?t.caveats.map((n)=>v(n,220)).filter(Boolean).slice(0,5):[],claims:c,recommendedSources:p}}function x(t,e,i,{grounded:s=!1}={}){let o={};for(let l of["perplexity","bing","google"]){let n=e[l];if(!n)continue;if(n.error){o[l]={status:"error",error:String(n.error)};continue}o[l]={status:"ok",answer:v(n.answer||"",s?4500:2200),sourceIds:i.filter((r)=>r.engines.includes(l)).sort((r,a)=>(r.perEngine[l]?.rank||99)-(a.perEngine[l]?.rank||99)).map((r)=>r.id).slice(0,6)}}let c=s?700:300,p=i.slice(0,s?10:8).map((l)=>({id:l.id,title:l.title,domain:l.domain,canonicalUrl:l.canonicalUrl,sourceType:l.sourceType,isOfficial:l.isOfficial,engines:l.engines,engineCount:l.engineCount,fetch:l.fetch?.attempted?{ok:l.fetch.ok,publishedTime:l.fetch.publishedTime||"",byline:l.fetch.byline||"",snippet:v(l.fetch.snippet||"",c)}:void 0}));return["You are a research synthesizer. Combine these search engine results into a single authoritative answer.","",`Query: ${t}`,"",`Engine summaries:
10
10
  ${JSON.stringify(o,null,2)}`,"",`Source registry:
11
- ${JSON.stringify(f,null,2)}`,"","Instructions:","- Write a clear, direct answer in markdown (use headers/bullets where they help readability)","- Cite sources inline as [S1], [S2] etc. when making specific claims","- Prefer sources with content (fetch.ok=true and non-empty snippet) for citations","- Note where the engines agree or meaningfully disagree","- List any important caveats or limitations","- recommendedSources: the 2-4 source IDs most worth reading for this query","","Respond ONLY with a JSON object wrapped in BEGIN_JSON / END_JSON markers:","","BEGIN_JSON",JSON.stringify({answer:"<your markdown answer here>",agreement:{level:"high|medium|mixed|conflicting",summary:"<one sentence>"},differences:["<notable difference between engines, if any>"],caveats:["<important caveat or limitation>"],recommendedSources:["S1","S2"]},null,2),"END_JSON"].join(`
12
- `)}var Re=y(import.meta.url),De={gemini:"gemini.mjs",chatgpt:"chatgpt.mjs"},Te={gemini:"https://gemini.google.com/app",chatgpt:"https://chatgpt.com/"};function A(t="gemini"){let e=String(t||"gemini").toLowerCase();if(e==="gem")return"gemini";if(e==="gpt")return"chatgpt";return e}function si(t="gemini"){return Te[A(t)]||"about:blank"}async function K(t,e,{tabPrefix:i=null,timeoutMs:s=180000,visible:o=null}={}){let c=A(t),f=De[c];if(!f||!R.includes(c))throw Error(`Unsupported synthesizer "${t}". Supported: ${R.join(", ")}`);return new Promise((l,n)=>{let r=S(f,{moduleDir:Re}),a=i?["--tab",String(i)]:[],E={...process.env,CDP_PROFILE_DIR:h};if(o!==!0)delete E.GREEDY_SEARCH_VISIBLE,delete E.GREEDY_SEARCH_ALWAYS_VISIBLE;else E.GREEDY_SEARCH_VISIBLE="1",E.GREEDY_SEARCH_ALWAYS_VISIBLE="1";let p=Ce(Y(),[r,"--stdin",...a],{stdio:["pipe","pipe","pipe"],env:E});p.stdin.write(e),p.stdin.end();let C="",u="";p.stdout.on("data",(m)=>C+=m),p.stderr.on("data",(m)=>u+=m);let _=setTimeout(()=>{p.kill(),n(Error(`${c} prompt timed out after ${s/1000}s`))},s);p.on("close",(m)=>{if(clearTimeout(_),m!==0){n(Error(u.trim()||`${c} extractor failed`));return}try{l(JSON.parse(C.trim()))}catch{n(Error(`bad JSON from ${c}: ${C.slice(0,100)}`))}})})}async function oi(t,e={}){return K("gemini",t,e)}async function Oe(t,e,{grounded:i=!1,tabPrefix:s=null,visible:o=null,synthesizer:c="gemini"}={}){let f=A(c),l=Array.isArray(e._sources)?e._sources:M(e),n=x(t,e,l,{grounded:i}),r=await K(f,n,{tabPrefix:s,timeoutMs:180000,visible:o}),a=J(r.answer||""),p=a&&["answer","agreement","claims","differences","caveats"].some((u)=>(u in a));if(a&&["perplexity","bing","google","chatgpt","gemini"].some((u)=>(u in a))&&!p)a=null;return{...Z(a,l,r.answer||""),rawAnswer:r.answer||"",synthesizedBy:f,synthesizerSources:r.sources||[],geminiSources:f==="gemini"?r.sources||[]:[]}}async function li(t,e,i={}){return Oe(t,e,{...i,synthesizer:"gemini"})}export{li as synthesizeWithGemini,Oe as synthesizeResults,K as runSynthesisPrompt,oi as runGeminiPrompt,A as normalizeSynthesizer,si as getSynthesisStartUrl};
11
+ ${JSON.stringify(p,null,2)}`,"","Instructions:","- Write a clear, direct answer in markdown (use headers/bullets where they help readability)","- Cite sources inline as [S1], [S2] etc. when making specific claims","- Prefer sources with content (fetch.ok=true and non-empty snippet) for citations","- Note where the engines agree or meaningfully disagree","- List any important caveats or limitations","- recommendedSources: the 2-4 source IDs most worth reading for this query","","Respond ONLY with a JSON object wrapped in BEGIN_JSON / END_JSON markers:","","BEGIN_JSON",JSON.stringify({answer:"<your markdown answer here>",agreement:{level:"high|medium|mixed|conflicting",summary:"<one sentence>"},differences:["<notable difference between engines, if any>"],caveats:["<important caveat or limitation>"],recommendedSources:["S1","S2"]},null,2),"END_JSON"].join(`
12
+ `)}var Ce=H(import.meta.url),De={gemini:"gemini.mjs",chatgpt:"chatgpt.mjs"},Te={gemini:"https://gemini.google.com/app",chatgpt:"https://chatgpt.com/"};function A(t="gemini"){let e=String(t||"gemini").toLowerCase();if(e==="gem")return"gemini";if(e==="gpt")return"chatgpt";return e}function si(t="gemini"){return Te[A(t)]||"about:blank"}async function K(t,e,{tabPrefix:i=null,timeoutMs:s=180000,visible:o=null}={}){let c=A(t),p=De[c];if(!p||!C.includes(c))throw Error(`Unsupported synthesizer "${t}". Supported: ${C.join(", ")}`);return new Promise((l,n)=>{let r=U(p,{moduleDir:Ce}),a=i?["--tab",String(i)]:[],E={...process.env,CDP_PROFILE_DIR:h};if(o!==!0)delete E.GREEDY_SEARCH_VISIBLE,delete E.GREEDY_SEARCH_ALWAYS_VISIBLE;else E.GREEDY_SEARCH_VISIBLE="1",E.GREEDY_SEARCH_ALWAYS_VISIBLE="1";let f=Re(G(),[r,"--stdin",...a],{stdio:["pipe","pipe","pipe"],env:E});f.stdin.write(e),f.stdin.end();let R="",g="";f.stdout.on("data",(m)=>R+=m),f.stderr.on("data",(m)=>g+=m);let _=setTimeout(()=>{f.kill(),n(Error(`${c} prompt timed out after ${s/1000}s`))},s);f.on("close",(m)=>{if(clearTimeout(_),m!==0){n(Error(g.trim()||`${c} extractor failed`));return}try{l(JSON.parse(R.trim()))}catch{n(Error(`bad JSON from ${c}: ${R.slice(0,100)}`))}})})}async function oi(t,e={}){return K("gemini",t,e)}async function Oe(t,e,{grounded:i=!1,tabPrefix:s=null,visible:o=null,synthesizer:c="gemini"}={}){let p=A(c),l=Array.isArray(e._sources)?e._sources:M(e),n=x(t,e,l,{grounded:i}),r=await K(p,n,{tabPrefix:s,timeoutMs:180000,visible:o}),a=J(r.answer||""),f=a&&["answer","agreement","claims","differences","caveats"].some((g)=>(g in a));if(a&&["perplexity","bing","google","chatgpt","gemini"].some((g)=>(g in a))&&!f)a=null;return{...Z(a,l,r.answer||""),rawAnswer:r.answer||"",synthesizedBy:p,synthesizerSources:r.sources||[],geminiSources:p==="gemini"?r.sources||[]:[]}}async function li(t,e,i={}){return Oe(t,e,{...i,synthesizer:"gemini"})}export{li as synthesizeWithGemini,Oe as synthesizeResults,K as runSynthesisPrompt,oi as runGeminiPrompt,A as normalizeSynthesizer,si as getSynthesisStartUrl};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duckmind/dm-windows-x64",
3
- "version": "0.59.3",
3
+ "version": "0.60.2",
4
4
  "description": "DuckMind (dm) binary payload for windows x64",
5
5
  "license": "MIT",
6
6
  "os": [