@duckmind/dm-darwin-x64 0.52.6 → 0.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dm +0 -0
- package/extensions/.dm-extensions.json +14 -10
- package/extensions/dm-cua/bin/browser-cua.mjs +6 -6
- package/extensions/dm-cua/index.js +5 -5
- package/extensions/dm-cua/src/browser-cua-lib.mjs +2 -2
- package/extensions/greedysearch-dm/bin/cdp-greedy.mjs +8 -1
- package/extensions/greedysearch-dm/bin/cdp-headless.mjs +1 -1
- package/extensions/greedysearch-dm/bin/cdp-visible.mjs +1 -1
- package/extensions/greedysearch-dm/bin/cdp.mjs +29 -20
- package/extensions/greedysearch-dm/bin/gschrome.mjs +1 -8
- package/extensions/greedysearch-dm/bin/kill-visible.mjs +1 -1
- package/extensions/greedysearch-dm/bin/launch-visible.mjs +1 -2
- package/extensions/greedysearch-dm/bin/launch.mjs +9 -11
- package/extensions/greedysearch-dm/bin/mcp.mjs +375 -0
- package/extensions/greedysearch-dm/bin/search.mjs +309 -157
- package/extensions/greedysearch-dm/bin/visible.mjs +1 -1
- package/extensions/greedysearch-dm/extractors/bing-copilot.mjs +205 -68
- package/extensions/greedysearch-dm/extractors/chatgpt.mjs +229 -140
- package/extensions/greedysearch-dm/extractors/common.mjs +160 -50
- package/extensions/greedysearch-dm/extractors/consensus.mjs +226 -93
- package/extensions/greedysearch-dm/extractors/consent.mjs +44 -17
- package/extensions/greedysearch-dm/extractors/gemini.mjs +277 -138
- package/extensions/greedysearch-dm/extractors/google-ai.mjs +172 -64
- package/extensions/greedysearch-dm/extractors/logically.mjs +183 -69
- package/extensions/greedysearch-dm/extractors/perplexity.mjs +331 -65
- package/extensions/greedysearch-dm/extractors/semantic-scholar.mjs +118 -41
- package/extensions/greedysearch-dm/index.js +23 -20
- package/extensions/greedysearch-dm/package.json +8 -3
- package/extensions/greedysearch-dm/skills/greedy-search/skill.md +8 -8
- package/extensions/greedysearch-dm/src/fetcher.mjs +2 -2
- package/extensions/greedysearch-dm/src/formatters/results.js +8 -6
- package/extensions/greedysearch-dm/src/github.mjs +7 -7
- package/extensions/greedysearch-dm/src/reddit.mjs +1 -1
- package/extensions/greedysearch-dm/src/search/browser-lifecycle.mjs +10 -8
- package/extensions/greedysearch-dm/src/search/challenge-detect.mjs +48 -0
- package/extensions/greedysearch-dm/src/search/chrome.mjs +130 -54
- package/extensions/greedysearch-dm/src/search/constants.mjs +6 -6
- package/extensions/greedysearch-dm/src/search/engines.mjs +9 -9
- package/extensions/greedysearch-dm/src/search/fetch-source.mjs +160 -83
- package/extensions/greedysearch-dm/src/search/minimize.mjs +1 -0
- package/extensions/greedysearch-dm/src/search/paths.mjs +1 -1
- package/extensions/greedysearch-dm/src/search/pdf.mjs +1 -1
- package/extensions/greedysearch-dm/src/search/port-pid.mjs +1 -1
- package/extensions/greedysearch-dm/src/search/progress.mjs +2 -0
- package/extensions/greedysearch-dm/src/search/recovery.mjs +1 -1
- package/extensions/greedysearch-dm/src/search/research.mjs +262 -167
- package/extensions/greedysearch-dm/src/search/scale-aware.mjs +11 -0
- package/extensions/greedysearch-dm/src/search/simple-research.mjs +827 -0
- package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +9 -9
- package/extensions/greedysearch-dm/src/search/synthesis.mjs +10 -10
- package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +23 -20
- package/extensions/greedysearch-dm/src/tools/shared.js +10 -9
- package/extensions/greedysearch-dm/src/utils/node-runtime.mjs +1 -1
- package/package.json +1 -1
- package/extensions/greedysearch-dm/src/search/cdp-endpoint.mjs +0 -3
- package/extensions/greedysearch-dm/src/search/launcher-paths.mjs +0 -3
- package/extensions/greedysearch-dm/src/search/partial-output.mjs +0 -1
- package/extensions/greedysearch-dm/src/utils/browser-executable.mjs +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function V(R="",E=240){let _=String(R).replaceAll(/\s+/g," ").trim();if(_.length<=E)return _;let D=_.slice(0,E),$=D.lastIndexOf(" ");return $>0?`${D.slice(0,$)}...`:`${D}...`}import{spawn as a}from"node:child_process";import{basename as p}from"node:path";function P(R=process.env,E=process.execPath){let _=R.GREEDY_SEARCH_NODE||R.NODE_BINARY||R.NODE;if(_?.trim())return _.trim();let D=p(E||"").toLowerCase();if(D==="node"||D==="node.exe")return E;return"node"}import{existsSync as H,mkdirSync as x,readFileSync as M,writeFileSync as y}from"node:fs";import{homedir as z}from"node:os";import{join as B}from"node:path";import{tmpdir as h}from"node:os";function l(R,E=9222){let _=Number.parseInt(String(R??""),10);return Number.isInteger(_)&&_>1024&&_<65535?_:E}var m=h().replaceAll("\\","/"),CE=l(process.env.GREEDY_SEARCH_PORT),G=(process.env.GREEDY_SEARCH_PROFILE_DIR||process.env.CDP_PROFILE_DIR||`${m}/greedysearch-chrome-profile`).replaceAll("\\","/"),gE=`${G}/DevToolsActivePort`,jE=process.env.GREEDY_SEARCH_PID_FILE||`${G}/browser.pid`,AE=process.env.CDP_PAGES_CACHE||`${G}/cdp-pages.json`,OE=process.env.GREEDY_SEARCH_MODE_FILE||`${G}/browser-mode`,HE=process.env.GREEDY_SEARCH_METADATA_FILE||`${G}/browser-metadata.json`,LE=process.env.GREEDY_SEARCH_LAUNCH_LOCK_FILE||`${G}/browser-launch.lock`,vE=process.env.GREEDY_SEARCH_ACTIVITY_FILE||`${G}/browser-last-activity`,VE=(process.env.CDP_SOCKET_DIR||`${G}/cdp-sockets`).replaceAll("\\","/"),ZE=`${G}/visible-recovery.jsonl`,K=B(z(),".dm"),N=B(K,"greedyconfig"),Q=["perplexity","google","chatgpt","gemini"],W="gemini";function u(){try{if(H(N)){let R=M(N,"utf8"),E=JSON.parse(R);if(Array.isArray(E.engines)&&E.engines.length>0&&E.engines.every((_)=>typeof _==="string")){let _=E.engines.filter(($)=>Z[$]),D=E.engines.filter(($)=>!Z[$]);if(D.length>0)process.stderr.write(`[greedysearch] Warning: ignoring unknown engine(s) in ${N}: ${D.join(", ")}
|
|
2
|
+
[greedysearch] Available engines: ${Object.keys(Z).join(", ")}
|
|
3
|
+
`);if(_.length>0)return _;process.stderr.write(`[greedysearch] Warning: no valid engines in ${N}, falling back to defaults: ${Q.join(", ")}
|
|
4
|
+
`)}}}catch{}return Q}function n(){try{if(!H(K))x(K,{recursive:!0});if(!H(N))y(N,JSON.stringify({engines:Q,synthesizer:W},null,2)+`
|
|
5
|
+
`,"utf8")}catch{}}n();var O=["gemini","chatgpt"];function i(){try{if(H(N)){let R=M(N,"utf8"),E=JSON.parse(R);if(typeof E.synthesizer==="string"){let _=E.synthesizer.toLowerCase();if(O.includes(_))return _;process.stderr.write(`[greedysearch] Warning: unknown synthesizer "${E.synthesizer}" in ${N}
|
|
6
|
+
[greedysearch] Available synthesizers: ${O.join(", ")}
|
|
7
|
+
[greedysearch] Falling back to default: ${W}
|
|
8
|
+
`)}}}catch{}return W}var Z={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"},d=u();var KE=i(),QE=Math.max(1,Number.parseInt(process.env.GREEDY_FETCH_CONCURRENCY||"5",10)||5);process.env.CDP_PROFILE_DIR=G;import{existsSync as q}from"node:fs";import{dirname as t,join as L}from"node:path";import{fileURLToPath as s}from"node:url";function T(R){return s(new URL(".",R)).replace(/^\/([A-Z]:)/,"$1")}function c(R,E=q){let _=new Set;for(let D of R.filter(Boolean)){if(_.has(D))continue;if(_.add(D),E(D))return D}return R.filter(Boolean).at(-1)}function U(R,{moduleDir:E,entrypoint:_=process.argv[1],env:D=process.env,exists:$=q}={}){let Y=_?t(_):null,F=D.GREEDY_SEARCH_EXTENSION_DIR?.trim()||null;return c([E?L(E,"..","..","extractors",R):null,E?L(E,"..","extractors",R):null,F?L(F,"extractors",R):null,Y?L(Y,"..","extractors",R):null],$)}function o(R){let E="",_=!1,D=!1;for(let $ of String(R)){if(D){E+=$,D=!1;continue}if($==="\\"){E+=$,D=!0;continue}if($==='"'){_=!_,E+=$;continue}if(_&&$===`
|
|
9
|
+
`)E+="\\n";else if(_&&$==="\r")E+="\\r";else if(_&&$==="\t")E+="\\t";else E+=$}return E}function J(R){if(!R)return null;let E=String(R).trim(),_=E.indexOf("BEGIN_JSON"),D=E.indexOf("END_JSON");if(_!==-1&&D!==-1&&_<D)E=E.slice(_+10,D).trim();else{let I=E.indexOf("{");if(I>0)E=E.slice(I)}let $=[E,E.replace(/^```json\s*/i,"").replace(/^```\s*/i,"").replace(/```$/i,"").trim()],Y=E.indexOf("{"),F=E.lastIndexOf("}");if(Y!==-1&&F!==-1&&Y<F)$.push(E.slice(Y,F+1));for(let I of[...$]){let C=o(I);if(C!==I)$.push(C)}for(let I of $)try{return JSON.parse(I)}catch{}return null}var r=T(import.meta.url),e={gemini:"gemini.mjs",chatgpt:"chatgpt.mjs"};function EE(R="gemini"){let E=String(R||"gemini").toLowerCase();if(E==="gem")return"gemini";if(E==="gpt")return"chatgpt";return E}async function _E(R,E,{tabPrefix:_=null,timeoutMs:D=180000,visible:$=null}={}){let Y=EE(R),F=e[Y];if(!F||!O.includes(Y))throw Error(`Unsupported synthesizer "${R}". Supported: ${O.join(", ")}`);return new Promise((I,C)=>{let w=U(F,{moduleDir:r}),f=_?["--tab",String(_)]:[],j={...process.env,CDP_PROFILE_DIR:G};if($!==!0)delete j.GREEDY_SEARCH_VISIBLE,delete j.GREEDY_SEARCH_ALWAYS_VISIBLE;else j.GREEDY_SEARCH_VISIBLE="1",j.GREEDY_SEARCH_ALWAYS_VISIBLE="1";let g=a(P(),[w,"--stdin",...f],{stdio:["pipe","pipe","pipe"],env:j});g.stdin.write(E),g.stdin.end();let v="",X="";g.stdout.on("data",(A)=>v+=A),g.stderr.on("data",(A)=>X+=A);let S=setTimeout(()=>{g.kill(),C(Error(`${Y} prompt timed out after ${D/1000}s`))},D);g.on("close",(A)=>{if(clearTimeout(S),A!==0){C(Error(X.trim()||`${Y} extractor failed`));return}try{I(JSON.parse(v.trim()))}catch{C(Error(`bad JSON from ${Y}: ${v.slice(0,100)}`))}})})}async function b(R,E={}){return _E("gemini",R,E)}var RE=30000;function k(R,E,_,D){let $=Number.parseInt(String(R??""),10);if(!Number.isFinite($))return D;return Math.min(_,Math.max(E,$))}async function uE(R){let E=["You are a research complexity classifier.","Classify the following query by research complexity.","","- simple: A narrow factual question (what is X, define X, how does X work)."," Answerable with 1-3 search queries and a short synthesis. No sub-questions.","- moderate: A focused comparison, recent change, or best-practice lookup."," Needs 2-4 angles but stays within one domain.","- complex: Multi-faceted survey, landscape analysis, or cross-domain investigation."," Benefits from parallel research directions and iterative deepening.","","Respond ONLY with JSON wrapped in BEGIN_JSON / END_JSON markers:","BEGIN_JSON",JSON.stringify({complexity:"simple",reasoning:"narrow factual question",suggestedBreadth:1,suggestedIterations:1,needsAcademicSources:!1},null,2),"END_JSON","","Query: "+R].join(`
|
|
10
|
+
`);try{let _=await b(E,{timeoutMs:RE}),D=J(_?.answer||"")||{},$=["simple","moderate","complex"].includes(D.complexity)?D.complexity:"moderate";return{complexity:$,reasoning:V(D.reasoning||"",200),suggestedBreadth:k(D.suggestedBreadth,1,5,$==="simple"?1:3),suggestedIterations:k(D.suggestedIterations,1,3,$==="simple"?1:2),needsAcademicSources:D.needsAcademicSources===!0}}catch(_){return process.stderr.write(`[greedysearch] Complexity classification failed, defaulting to moderate: ${_.message}
|
|
11
|
+
`),{complexity:"moderate",reasoning:"classification failed",suggestedBreadth:3,suggestedIterations:2,needsAcademicSources:!1}}}export{uE as classifyResearchComplexity};
|