@duckmind/dm-windows-x64 0.62.3 → 0.62.9
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.exe +0 -0
- package/extensions/.dm-extensions.json +43 -183
- package/extensions/dm-context/src/context.js +1 -2
- package/extensions/dm-context/src/index.js +1 -2
- package/extensions/{greedysearch-dm/bin/cdp.mjs → dm-cua/bin/browser-cdp.mjs} +3 -3
- package/extensions/dm-cua/bin/browser-cua.mjs +1 -1
- package/extensions/{greedysearch-dm/bin/launch.mjs → dm-cua/bin/browser-launch.mjs} +12 -11
- package/extensions/dm-cua/index.js +1 -1
- package/extensions/dm-cua/src/browser-cua-lib.mjs +17 -12
- package/extensions/{greedysearch-dm/src/search → dm-cua/src/browser-helpers}/constants.mjs +11 -11
- package/extensions/{greedysearch-dm/src/utils → dm-cua/src/browser-helpers}/node-runtime.mjs +1 -1
- package/extensions/{greedysearch-dm/src/search → dm-cua/src/browser-helpers}/port-pid.mjs +1 -1
- package/extensions/dm-ponytail/extensions/ponytail.mjs +186 -0
- package/extensions/dm-ponytail/hooks/claude-codex-hooks.json +41 -0
- package/extensions/dm-ponytail/hooks/copilot-hooks.json +21 -0
- package/extensions/dm-ponytail/hooks/ponytail-activate.js +59 -0
- package/extensions/dm-ponytail/hooks/ponytail-config.js +116 -0
- package/extensions/dm-ponytail/hooks/ponytail-instructions.js +81 -0
- package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +96 -0
- package/extensions/dm-ponytail/hooks/ponytail-runtime.js +79 -0
- package/extensions/dm-ponytail/hooks/ponytail-statusline.ps1 +24 -0
- package/extensions/dm-ponytail/hooks/ponytail-statusline.sh +18 -0
- package/extensions/dm-ponytail/hooks/ponytail-subagent.js +50 -0
- package/extensions/dm-ponytail/hooks/qoder-hooks.json +26 -0
- package/extensions/dm-ponytail/package.json +19 -0
- package/extensions/dm-ponytail/pi-extension/index.js +186 -0
- package/extensions/dm-ponytail/pi-extension/package.json +8 -0
- package/extensions/dm-ponytail/skills/ponytail/SKILL.md +120 -0
- package/extensions/dm-ponytail/skills/ponytail-audit/SKILL.md +41 -0
- package/extensions/dm-ponytail/skills/ponytail-debt/SKILL.md +44 -0
- package/extensions/dm-ponytail/skills/ponytail-gain/SKILL.md +50 -0
- package/extensions/dm-ponytail/skills/ponytail-help/SKILL.md +71 -0
- package/extensions/dm-ponytail/skills/ponytail-review/SKILL.md +57 -0
- package/package.json +2 -6
- package/extensions/dm-caveman/extensions/caveman.js +0 -300
- package/extensions/dm-caveman/package.json +0 -20
- package/extensions/dm-goal/package.json +0 -23
- package/extensions/dm-goal/src/goal.js +0 -914
- package/extensions/greedysearch-dm/bin/cdp-greedy.mjs +0 -40
- package/extensions/greedysearch-dm/bin/cdp-headless.mjs +0 -5
- package/extensions/greedysearch-dm/bin/cdp-visible.mjs +0 -5
- package/extensions/greedysearch-dm/bin/gschrome.mjs +0 -30
- package/extensions/greedysearch-dm/bin/kill-visible.mjs +0 -7
- package/extensions/greedysearch-dm/bin/launch-visible.mjs +0 -13
- package/extensions/greedysearch-dm/bin/mcp.mjs +0 -400
- package/extensions/greedysearch-dm/bin/search.mjs +0 -635
- package/extensions/greedysearch-dm/bin/visible.mjs +0 -22
- package/extensions/greedysearch-dm/extractors/bing-copilot.mjs +0 -344
- package/extensions/greedysearch-dm/extractors/chatgpt.mjs +0 -354
- package/extensions/greedysearch-dm/extractors/common.mjs +0 -794
- package/extensions/greedysearch-dm/extractors/consensus.mjs +0 -527
- package/extensions/greedysearch-dm/extractors/consent.mjs +0 -449
- package/extensions/greedysearch-dm/extractors/gemini.mjs +0 -291
- package/extensions/greedysearch-dm/extractors/google-ai.mjs +0 -86
- package/extensions/greedysearch-dm/extractors/logically.mjs +0 -589
- package/extensions/greedysearch-dm/extractors/perplexity.mjs +0 -370
- package/extensions/greedysearch-dm/extractors/selectors.mjs +0 -32
- package/extensions/greedysearch-dm/extractors/semantic-scholar.mjs +0 -199
- package/extensions/greedysearch-dm/index.js +0 -123
- package/extensions/greedysearch-dm/package.json +0 -27
- package/extensions/greedysearch-dm/skills/greedy-search/skill.md +0 -18
- package/extensions/greedysearch-dm/src/fetcher.mjs +0 -577
- package/extensions/greedysearch-dm/src/formatters/results.js +0 -95
- package/extensions/greedysearch-dm/src/formatters/sources.js +0 -57
- package/extensions/greedysearch-dm/src/formatters/synthesis.js +0 -49
- package/extensions/greedysearch-dm/src/github.mjs +0 -228
- package/extensions/greedysearch-dm/src/reddit.mjs +0 -154
- package/extensions/greedysearch-dm/src/search/browser-lifecycle.mjs +0 -340
- package/extensions/greedysearch-dm/src/search/challenge-detect.mjs +0 -156
- package/extensions/greedysearch-dm/src/search/chrome.mjs +0 -510
- package/extensions/greedysearch-dm/src/search/defaults.mjs +0 -10
- package/extensions/greedysearch-dm/src/search/engines.mjs +0 -79
- package/extensions/greedysearch-dm/src/search/fetch-source.mjs +0 -470
- package/extensions/greedysearch-dm/src/search/file-sources.mjs +0 -31
- package/extensions/greedysearch-dm/src/search/output.mjs +0 -51
- package/extensions/greedysearch-dm/src/search/paths.mjs +0 -48
- package/extensions/greedysearch-dm/src/search/pdf.mjs +0 -64
- package/extensions/greedysearch-dm/src/search/progress.mjs +0 -109
- package/extensions/greedysearch-dm/src/search/query.mjs +0 -21
- package/extensions/greedysearch-dm/src/search/recovery.mjs +0 -49
- package/extensions/greedysearch-dm/src/search/research.mjs +0 -2255
- package/extensions/greedysearch-dm/src/search/scale-aware.mjs +0 -61
- package/extensions/greedysearch-dm/src/search/simple-research.mjs +0 -418
- package/extensions/greedysearch-dm/src/search/sources.mjs +0 -412
- package/extensions/greedysearch-dm/src/search/synthesis-runner.mjs +0 -127
- package/extensions/greedysearch-dm/src/search/synthesis.mjs +0 -202
- package/extensions/greedysearch-dm/src/tools/greedy-search-handler.js +0 -209
- package/extensions/greedysearch-dm/src/tools/shared.js +0 -226
- package/extensions/greedysearch-dm/src/types.js +0 -0
- package/extensions/greedysearch-dm/src/utils/content.mjs +0 -38
- package/extensions/greedysearch-dm/src/utils/helpers.js +0 -22
- /package/extensions/{greedysearch-dm/src/search → dm-cua/src/browser-helpers}/minimize.mjs +0 -0
- /package/extensions/{greedysearch-dm/src/utils → dm-cua/src/browser-helpers}/system-cmds.mjs +0 -0
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
const BAR_WIDTH = 20;
|
|
2
|
-
function formatDuration(ms) {
|
|
3
|
-
if (ms < 1000)
|
|
4
|
-
return "0s";
|
|
5
|
-
const totalSeconds = Math.round(ms / 1000);
|
|
6
|
-
if (totalSeconds < 60)
|
|
7
|
-
return `${totalSeconds}s`;
|
|
8
|
-
const minutes = Math.floor(totalSeconds / 60);
|
|
9
|
-
const seconds = totalSeconds % 60;
|
|
10
|
-
return `${minutes}m ${seconds}s`;
|
|
11
|
-
}
|
|
12
|
-
function renderBar(progress, width = BAR_WIDTH) {
|
|
13
|
-
const filled = Math.round(progress * width);
|
|
14
|
-
const empty = width - filled;
|
|
15
|
-
return "[" + "█".repeat(filled) + "░".repeat(empty) + "]";
|
|
16
|
-
}
|
|
17
|
-
export function createProgressTracker({
|
|
18
|
-
totalActions = 0,
|
|
19
|
-
totalRounds = 0,
|
|
20
|
-
totalFetches = 0,
|
|
21
|
-
silent = false
|
|
22
|
-
} = {}) {
|
|
23
|
-
const startedAt = Date.now();
|
|
24
|
-
let completedActions = 0;
|
|
25
|
-
let completedRounds = 0;
|
|
26
|
-
let completedFetches = 0;
|
|
27
|
-
const actionTimings = [];
|
|
28
|
-
let currentActionStart = null;
|
|
29
|
-
let currentActionLabel = null;
|
|
30
|
-
let lastPrintAt = 0;
|
|
31
|
-
const MIN_PRINT_INTERVAL_MS = 500;
|
|
32
|
-
function recordAction(durationMs) {
|
|
33
|
-
actionTimings.push(durationMs);
|
|
34
|
-
if (actionTimings.length > 5)
|
|
35
|
-
actionTimings.shift();
|
|
36
|
-
}
|
|
37
|
-
function avgActionMs() {
|
|
38
|
-
if (actionTimings.length === 0)
|
|
39
|
-
return null;
|
|
40
|
-
return actionTimings.reduce((a, b) => a + b, 0) / actionTimings.length;
|
|
41
|
-
}
|
|
42
|
-
function buildStatus(phase) {
|
|
43
|
-
const elapsed = Date.now() - startedAt;
|
|
44
|
-
const total = totalActions + totalFetches + totalRounds;
|
|
45
|
-
const done = completedActions + completedFetches + completedRounds;
|
|
46
|
-
const progress = total > 0 ? Math.min(1, done / total) : 0;
|
|
47
|
-
const bar = renderBar(progress);
|
|
48
|
-
const avg = avgActionMs();
|
|
49
|
-
const remaining = Math.max(0, total - done);
|
|
50
|
-
const etaMs = avg ? avg * remaining : null;
|
|
51
|
-
const eta = etaMs ? formatDuration(etaMs) : "—";
|
|
52
|
-
const label = currentActionLabel ? ` ${currentActionLabel}` : "";
|
|
53
|
-
return `${bar} ${done}/${total} (${phase}${label}, ETA ${eta})`;
|
|
54
|
-
}
|
|
55
|
-
function print(phase) {
|
|
56
|
-
if (silent)
|
|
57
|
-
return;
|
|
58
|
-
const now = Date.now();
|
|
59
|
-
if (now - lastPrintAt < MIN_PRINT_INTERVAL_MS && phase !== "done")
|
|
60
|
-
return;
|
|
61
|
-
lastPrintAt = now;
|
|
62
|
-
process.stderr.write(`[greedysearch] ${buildStatus(phase)}
|
|
63
|
-
`);
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
startRound(n) {
|
|
67
|
-
completedRounds = n - 1;
|
|
68
|
-
},
|
|
69
|
-
endRound() {
|
|
70
|
-
completedRounds++;
|
|
71
|
-
print("round");
|
|
72
|
-
},
|
|
73
|
-
startAction(type, label) {
|
|
74
|
-
currentActionStart = Date.now();
|
|
75
|
-
currentActionLabel = `${type}:${(label || "").slice(0, 40)}`;
|
|
76
|
-
print(type);
|
|
77
|
-
},
|
|
78
|
-
endAction() {
|
|
79
|
-
if (currentActionStart) {
|
|
80
|
-
recordAction(Date.now() - currentActionStart);
|
|
81
|
-
currentActionStart = null;
|
|
82
|
-
}
|
|
83
|
-
completedActions++;
|
|
84
|
-
print("action");
|
|
85
|
-
},
|
|
86
|
-
startFetch(label) {
|
|
87
|
-
currentActionStart = Date.now();
|
|
88
|
-
currentActionLabel = `fetch:${(label || "").slice(0, 40)}`;
|
|
89
|
-
print("fetch");
|
|
90
|
-
},
|
|
91
|
-
endFetch(ok = true) {
|
|
92
|
-
if (currentActionStart) {
|
|
93
|
-
recordAction(Date.now() - currentActionStart);
|
|
94
|
-
currentActionStart = null;
|
|
95
|
-
}
|
|
96
|
-
completedFetches++;
|
|
97
|
-
print(ok ? "fetch" : "fetch-failed");
|
|
98
|
-
},
|
|
99
|
-
print() {
|
|
100
|
-
print("progress");
|
|
101
|
-
},
|
|
102
|
-
finish() {
|
|
103
|
-
print("done");
|
|
104
|
-
},
|
|
105
|
-
getElapsedMs() {
|
|
106
|
-
return Date.now() - startedAt;
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const PREAMBLE_RX = /^(can you |could you |please |would you mind |i need to (know|understand) |i want to (know|understand) |i('m| am) (looking for|wondering about|curious about) |i need (information|info) (about|on) |tell me )?(about |explain |describe |give me |help me understand |search for |look up |find |research )?(about |regarding |on |for )?(it|this|the following)?\s*/i;
|
|
2
|
-
const TEMPORAL_RX = /\b(latest|newest|current|recent|up-to-date|up to date)\b/i;
|
|
3
|
-
const VERSION_RX = /\b\d+\.\d+|\bv\d+\b|\b20(2[0-9]|[3-9]\d)\b/i;
|
|
4
|
-
export function stripPreamble(query) {
|
|
5
|
-
const stripped = query.trim().replace(PREAMBLE_RX, "").trim();
|
|
6
|
-
return stripped.length > 4 ? stripped : query.trim();
|
|
7
|
-
}
|
|
8
|
-
export function addRecencyHint(query, year = new Date().getFullYear()) {
|
|
9
|
-
if (!TEMPORAL_RX.test(query))
|
|
10
|
-
return query;
|
|
11
|
-
if (VERSION_RX.test(query))
|
|
12
|
-
return query;
|
|
13
|
-
return `${query.trimEnd()} ${year}`;
|
|
14
|
-
}
|
|
15
|
-
export function normalizeQuery(query) {
|
|
16
|
-
if (!query?.trim())
|
|
17
|
-
return query;
|
|
18
|
-
let q = stripPreamble(query);
|
|
19
|
-
q = addRecencyHint(q);
|
|
20
|
-
return q || query;
|
|
21
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
export const HEADLESS_RECOVERY_ENGINES = [
|
|
2
|
-
"perplexity",
|
|
3
|
-
"bing",
|
|
4
|
-
"chatgpt",
|
|
5
|
-
"semantic-scholar",
|
|
6
|
-
"logically"
|
|
7
|
-
];
|
|
8
|
-
const NON_RECOVERABLE_BLOCKED_BY = new Set(["rate-limit"]);
|
|
9
|
-
const HEADLESS_BLOCKED_PATTERN = /timed out|timeout|verification|captcha|cloudflare|turnstile|input not found|ask-input|copy button hidden|sign.in|login required/i;
|
|
10
|
-
const MANUAL_VERIFICATION_PATTERN = /needs-human|verification required|please solve|captcha|cloudflare|turnstile|could not be completed automatically|manual intervention|sign.in|login required/i;
|
|
11
|
-
export function isHeadlessBlockedError(error) {
|
|
12
|
-
return HEADLESS_BLOCKED_PATTERN.test(String(error || ""));
|
|
13
|
-
}
|
|
14
|
-
export function isManualVerificationError(error) {
|
|
15
|
-
return MANUAL_VERIFICATION_PATTERN.test(String(error || ""));
|
|
16
|
-
}
|
|
17
|
-
export function isNonRecoverableBlockedBy(blockedBy) {
|
|
18
|
-
return NON_RECOVERABLE_BLOCKED_BY.has(blockedBy);
|
|
19
|
-
}
|
|
20
|
-
export function findHeadlessBlockedEngines(resultsByEngine) {
|
|
21
|
-
return HEADLESS_RECOVERY_ENGINES.filter((engine) => {
|
|
22
|
-
const result = resultsByEngine?.[engine];
|
|
23
|
-
if (!result)
|
|
24
|
-
return false;
|
|
25
|
-
const blockedBy = result._envelope?.blockedBy;
|
|
26
|
-
if (blockedBy) {
|
|
27
|
-
if (NON_RECOVERABLE_BLOCKED_BY.has(blockedBy))
|
|
28
|
-
return false;
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
if (result._envelope?.verificationResult === "needs-human")
|
|
32
|
-
return true;
|
|
33
|
-
const error = result.error;
|
|
34
|
-
return error && isHeadlessBlockedError(error);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
export function isHeadlessBlockedResult(error) {
|
|
38
|
-
if (!error)
|
|
39
|
-
return false;
|
|
40
|
-
const env = error.envelope;
|
|
41
|
-
if (env?.blockedBy) {
|
|
42
|
-
if (NON_RECOVERABLE_BLOCKED_BY.has(env.blockedBy))
|
|
43
|
-
return false;
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
if (env?.verificationResult === "needs-human")
|
|
47
|
-
return true;
|
|
48
|
-
return isHeadlessBlockedError(error.message);
|
|
49
|
-
}
|