@duckmind/dm-windows-x64 0.62.1 → 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
package/dm.exe
CHANGED
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"status": "ok",
|
|
3
|
-
"prepared_at": "2026-08-
|
|
3
|
+
"prepared_at": "2026-08-31T07:37:40.698156+00:00",
|
|
4
4
|
"managed_entries": [
|
|
5
5
|
{
|
|
6
6
|
"id": "dm-context",
|
|
@@ -17,29 +17,19 @@
|
|
|
17
17
|
"target_dir": "extensions/dm-9router-ext",
|
|
18
18
|
"bundle_mode": "source-package-with-runtime-deps"
|
|
19
19
|
},
|
|
20
|
-
{
|
|
21
|
-
"id": "greedysearch-dm",
|
|
22
|
-
"target_dir": "extensions/greedysearch-dm",
|
|
23
|
-
"bundle_mode": "source-package-with-runtime-deps"
|
|
24
|
-
},
|
|
25
20
|
{
|
|
26
21
|
"id": "dm-usage",
|
|
27
22
|
"target_dir": "extensions/dm-usage",
|
|
28
23
|
"bundle_mode": "source-package"
|
|
29
24
|
},
|
|
30
|
-
{
|
|
31
|
-
"id": "dm-goal",
|
|
32
|
-
"target_dir": "extensions/dm-goal",
|
|
33
|
-
"bundle_mode": "source-package"
|
|
34
|
-
},
|
|
35
25
|
{
|
|
36
26
|
"id": "dm-cliproxy",
|
|
37
27
|
"target_dir": "extensions/dm-cliproxy",
|
|
38
28
|
"bundle_mode": "source-package-with-runtime-deps"
|
|
39
29
|
},
|
|
40
30
|
{
|
|
41
|
-
"id": "dm-
|
|
42
|
-
"target_dir": "extensions/dm-
|
|
31
|
+
"id": "dm-ponytail",
|
|
32
|
+
"target_dir": "extensions/dm-ponytail",
|
|
43
33
|
"bundle_mode": "source-package"
|
|
44
34
|
},
|
|
45
35
|
{
|
|
@@ -87,8 +77,8 @@
|
|
|
87
77
|
"src/utils.js"
|
|
88
78
|
],
|
|
89
79
|
"file_count": 3,
|
|
90
|
-
"before_bytes":
|
|
91
|
-
"after_bytes":
|
|
80
|
+
"before_bytes": 25960,
|
|
81
|
+
"after_bytes": 20884,
|
|
92
82
|
"runtime_specifier_rewrites": 0,
|
|
93
83
|
"runtime_filename_rewrites": 3,
|
|
94
84
|
"declaration_files_removed": 0
|
|
@@ -422,109 +412,6 @@
|
|
|
422
412
|
"declaration_files_removed": 0
|
|
423
413
|
}
|
|
424
414
|
},
|
|
425
|
-
{
|
|
426
|
-
"id": "greedysearch-dm",
|
|
427
|
-
"staged_dir": "extensions/greedysearch-dm",
|
|
428
|
-
"bundle_mode": "source-package-with-runtime-deps",
|
|
429
|
-
"dependencies_installed": false,
|
|
430
|
-
"dependency_mode": "platform-package-dependency",
|
|
431
|
-
"dependencies_declared": [
|
|
432
|
-
"@duckmind/dm-coding-agent",
|
|
433
|
-
"@mozilla/readability",
|
|
434
|
-
"@sinclair/typebox",
|
|
435
|
-
"jsdom",
|
|
436
|
-
"pdf-parse",
|
|
437
|
-
"turndown"
|
|
438
|
-
],
|
|
439
|
-
"dependency_patches": [
|
|
440
|
-
"dm.extensions ts->js",
|
|
441
|
-
"drop-dependencies",
|
|
442
|
-
"drop-devDependencies",
|
|
443
|
-
"drop-peerDependencies",
|
|
444
|
-
"drop-scripts",
|
|
445
|
-
"drop-files"
|
|
446
|
-
],
|
|
447
|
-
"stripped_documentation": [
|
|
448
|
-
"docs/",
|
|
449
|
-
"CHANGELOG.md",
|
|
450
|
-
"LICENSE",
|
|
451
|
-
"README.md"
|
|
452
|
-
],
|
|
453
|
-
"javascript_compile": {
|
|
454
|
-
"tool": "bun build --no-bundle",
|
|
455
|
-
"mode": "module-preserving-transpile",
|
|
456
|
-
"files": [
|
|
457
|
-
"bin/cdp-greedy.mjs",
|
|
458
|
-
"bin/cdp-headless.mjs",
|
|
459
|
-
"bin/cdp-visible.mjs",
|
|
460
|
-
"bin/cdp.mjs",
|
|
461
|
-
"bin/gschrome.mjs",
|
|
462
|
-
"bin/kill-visible.mjs",
|
|
463
|
-
"bin/launch-visible.mjs",
|
|
464
|
-
"bin/launch.mjs",
|
|
465
|
-
"bin/mcp.mjs",
|
|
466
|
-
"bin/search.mjs",
|
|
467
|
-
"bin/visible.mjs",
|
|
468
|
-
"extractors/bing-copilot.mjs",
|
|
469
|
-
"extractors/chatgpt.mjs",
|
|
470
|
-
"extractors/common.mjs",
|
|
471
|
-
"extractors/consensus.mjs",
|
|
472
|
-
"extractors/consent.mjs",
|
|
473
|
-
"extractors/gemini.mjs",
|
|
474
|
-
"extractors/google-ai.mjs",
|
|
475
|
-
"extractors/logically.mjs",
|
|
476
|
-
"extractors/perplexity.mjs",
|
|
477
|
-
"extractors/selectors.mjs",
|
|
478
|
-
"extractors/semantic-scholar.mjs",
|
|
479
|
-
"index.js",
|
|
480
|
-
"results/test_1785727384847/_gh_blob_test.mjs",
|
|
481
|
-
"results/test_1785727384847/_gh_fetcher_test.mjs",
|
|
482
|
-
"results/test_1785727384847/_synth_chatgpt.mjs",
|
|
483
|
-
"results/test_1785727384847/_synth_gemini.mjs",
|
|
484
|
-
"src/fetcher.mjs",
|
|
485
|
-
"src/formatters/results.js",
|
|
486
|
-
"src/formatters/sources.js",
|
|
487
|
-
"src/formatters/synthesis.js",
|
|
488
|
-
"src/github.mjs",
|
|
489
|
-
"src/reddit.mjs",
|
|
490
|
-
"src/search/browser-lifecycle.mjs",
|
|
491
|
-
"src/search/challenge-detect.mjs",
|
|
492
|
-
"src/search/chrome.mjs",
|
|
493
|
-
"src/search/constants.mjs",
|
|
494
|
-
"src/search/defaults.mjs",
|
|
495
|
-
"src/search/engines.mjs",
|
|
496
|
-
"src/search/fetch-source.mjs",
|
|
497
|
-
"src/search/file-sources.mjs",
|
|
498
|
-
"src/search/minimize.mjs",
|
|
499
|
-
"src/search/output.mjs",
|
|
500
|
-
"src/search/paths.mjs",
|
|
501
|
-
"src/search/pdf.mjs",
|
|
502
|
-
"src/search/port-pid.mjs",
|
|
503
|
-
"src/search/progress.mjs",
|
|
504
|
-
"src/search/query.mjs",
|
|
505
|
-
"src/search/recovery.mjs",
|
|
506
|
-
"src/search/research.mjs",
|
|
507
|
-
"src/search/scale-aware.mjs",
|
|
508
|
-
"src/search/simple-research.mjs",
|
|
509
|
-
"src/search/sources.mjs",
|
|
510
|
-
"src/search/synthesis-runner.mjs",
|
|
511
|
-
"src/search/synthesis.mjs",
|
|
512
|
-
"src/tools/greedy-search-handler.js",
|
|
513
|
-
"src/tools/shared.js",
|
|
514
|
-
"src/types.js",
|
|
515
|
-
"src/utils/content.mjs",
|
|
516
|
-
"src/utils/helpers.js",
|
|
517
|
-
"src/utils/node-runtime.mjs",
|
|
518
|
-
"src/utils/system-cmds.mjs"
|
|
519
|
-
],
|
|
520
|
-
"file_count": 62,
|
|
521
|
-
"before_bytes": 613697,
|
|
522
|
-
"after_bytes": 496359,
|
|
523
|
-
"runtime_specifier_rewrites": 0,
|
|
524
|
-
"runtime_filename_rewrites": 8,
|
|
525
|
-
"declaration_files_removed": 0
|
|
526
|
-
}
|
|
527
|
-
},
|
|
528
415
|
{
|
|
529
416
|
"id": "dm-usage",
|
|
530
417
|
"staged_dir": "extensions/dm-usage",
|
|
@@ -561,45 +448,6 @@
|
|
|
561
448
|
"declaration_files_removed": 0
|
|
562
449
|
}
|
|
563
450
|
},
|
|
564
|
-
{
|
|
565
|
-
"id": "dm-goal",
|
|
566
|
-
"staged_dir": "extensions/dm-goal",
|
|
567
|
-
"bundle_mode": "source-package",
|
|
568
|
-
"dependencies_installed": false,
|
|
569
|
-
"dependency_mode": "platform-package-dependency",
|
|
570
|
-
"dependencies_declared": [
|
|
571
|
-
"@duckmind/dm-ai",
|
|
572
|
-
"@duckmind/dm-coding-agent",
|
|
573
|
-
"typebox"
|
|
574
|
-
],
|
|
575
|
-
"dependency_patches": [
|
|
576
|
-
"dm.extensions ts->js",
|
|
577
|
-
"main ts->js",
|
|
578
|
-
"drop-dependencies",
|
|
579
|
-
"drop-devDependencies",
|
|
580
|
-
"drop-peerDependencies",
|
|
581
|
-
"drop-scripts",
|
|
582
|
-
"drop-files"
|
|
583
|
-
],
|
|
584
|
-
"stripped_documentation": [
|
|
585
|
-
"CHANGELOG.md",
|
|
586
|
-
"LICENSE",
|
|
587
|
-
"README.md"
|
|
588
|
-
],
|
|
589
|
-
"javascript_compile": {
|
|
590
|
-
"tool": "bun build --no-bundle",
|
|
591
|
-
"mode": "module-preserving-transpile",
|
|
592
|
-
"files": [
|
|
593
|
-
"src/goal.js"
|
|
594
|
-
],
|
|
595
|
-
"file_count": 1,
|
|
596
|
-
"before_bytes": 36860,
|
|
597
|
-
"after_bytes": 33331,
|
|
598
|
-
"runtime_specifier_rewrites": 0,
|
|
599
|
-
"runtime_filename_rewrites": 1,
|
|
600
|
-
"declaration_files_removed": 0
|
|
601
|
-
}
|
|
602
|
-
},
|
|
603
451
|
{
|
|
604
452
|
"id": "dm-cliproxy",
|
|
605
453
|
"staged_dir": "extensions/dm-cliproxy",
|
|
@@ -659,7 +507,7 @@
|
|
|
659
507
|
"src/usage-shared-cache.js"
|
|
660
508
|
],
|
|
661
509
|
"file_count": 31,
|
|
662
|
-
"before_bytes":
|
|
510
|
+
"before_bytes": 136427,
|
|
663
511
|
"after_bytes": 98105,
|
|
664
512
|
"runtime_specifier_rewrites": 20,
|
|
665
513
|
"runtime_filename_rewrites": 29,
|
|
@@ -667,17 +515,15 @@
|
|
|
667
515
|
}
|
|
668
516
|
},
|
|
669
517
|
{
|
|
670
|
-
"id": "dm-
|
|
671
|
-
"staged_dir": "extensions/dm-
|
|
518
|
+
"id": "dm-ponytail",
|
|
519
|
+
"staged_dir": "extensions/dm-ponytail",
|
|
672
520
|
"bundle_mode": "source-package",
|
|
673
521
|
"dependencies_installed": false,
|
|
674
522
|
"dependency_mode": "platform-package-dependency",
|
|
675
523
|
"dependencies_declared": [
|
|
676
|
-
"@duckmind/dm-coding-agent"
|
|
677
|
-
"@duckmind/dm-tui"
|
|
524
|
+
"@duckmind/dm-coding-agent"
|
|
678
525
|
],
|
|
679
526
|
"dependency_patches": [
|
|
680
|
-
"dm.extensions ts->js",
|
|
681
527
|
"drop-devDependencies",
|
|
682
528
|
"drop-peerDependencies",
|
|
683
529
|
"drop-files"
|
|
@@ -690,13 +536,20 @@
|
|
|
690
536
|
"tool": "bun build --no-bundle",
|
|
691
537
|
"mode": "module-preserving-transpile",
|
|
692
538
|
"files": [
|
|
693
|
-
"extensions/
|
|
539
|
+
"extensions/ponytail.mjs",
|
|
540
|
+
"hooks/ponytail-activate.js",
|
|
541
|
+
"hooks/ponytail-config.js",
|
|
542
|
+
"hooks/ponytail-instructions.js",
|
|
543
|
+
"hooks/ponytail-mode-tracker.js",
|
|
544
|
+
"hooks/ponytail-runtime.js",
|
|
545
|
+
"hooks/ponytail-subagent.js",
|
|
546
|
+
"pi-extension/index.js"
|
|
694
547
|
],
|
|
695
|
-
"file_count":
|
|
696
|
-
"before_bytes":
|
|
697
|
-
"after_bytes":
|
|
548
|
+
"file_count": 8,
|
|
549
|
+
"before_bytes": 40920,
|
|
550
|
+
"after_bytes": 31348,
|
|
698
551
|
"runtime_specifier_rewrites": 0,
|
|
699
|
-
"runtime_filename_rewrites":
|
|
552
|
+
"runtime_filename_rewrites": 0,
|
|
700
553
|
"declaration_files_removed": 0
|
|
701
554
|
}
|
|
702
555
|
},
|
|
@@ -745,7 +598,11 @@
|
|
|
745
598
|
"staged_dir": "extensions/dm-cua",
|
|
746
599
|
"bundle_mode": "local-source-package",
|
|
747
600
|
"dependencies_installed": false,
|
|
748
|
-
"dependency_mode": "
|
|
601
|
+
"dependency_mode": "platform-package-dependency",
|
|
602
|
+
"dependencies_declared": [
|
|
603
|
+
"@duckmind/dm-coding-agent",
|
|
604
|
+
"@sinclair/typebox"
|
|
605
|
+
],
|
|
749
606
|
"dependency_patches": [
|
|
750
607
|
"drop-devDependencies",
|
|
751
608
|
"drop-peerDependencies",
|
|
@@ -758,14 +615,21 @@
|
|
|
758
615
|
"tool": "bun build --no-bundle",
|
|
759
616
|
"mode": "module-preserving-transpile",
|
|
760
617
|
"files": [
|
|
618
|
+
"bin/browser-cdp.mjs",
|
|
761
619
|
"bin/browser-cua.mjs",
|
|
620
|
+
"bin/browser-launch.mjs",
|
|
762
621
|
"index.js",
|
|
763
622
|
"src/browser-cua-lib.mjs",
|
|
623
|
+
"src/browser-helpers/constants.mjs",
|
|
624
|
+
"src/browser-helpers/minimize.mjs",
|
|
625
|
+
"src/browser-helpers/node-runtime.mjs",
|
|
626
|
+
"src/browser-helpers/port-pid.mjs",
|
|
627
|
+
"src/browser-helpers/system-cmds.mjs",
|
|
764
628
|
"src/browser-install.mjs"
|
|
765
629
|
],
|
|
766
|
-
"file_count":
|
|
767
|
-
"before_bytes":
|
|
768
|
-
"after_bytes":
|
|
630
|
+
"file_count": 11,
|
|
631
|
+
"before_bytes": 98273,
|
|
632
|
+
"after_bytes": 90409,
|
|
769
633
|
"runtime_specifier_rewrites": 0,
|
|
770
634
|
"runtime_filename_rewrites": 0,
|
|
771
635
|
"declaration_files_removed": 0
|
|
@@ -776,7 +640,11 @@
|
|
|
776
640
|
"staged_dir": "extensions/dm-image2",
|
|
777
641
|
"bundle_mode": "local-source-package",
|
|
778
642
|
"dependencies_installed": false,
|
|
779
|
-
"dependency_mode": "
|
|
643
|
+
"dependency_mode": "platform-package-dependency",
|
|
644
|
+
"dependencies_declared": [
|
|
645
|
+
"@duckmind/dm-coding-agent",
|
|
646
|
+
"@sinclair/typebox"
|
|
647
|
+
],
|
|
780
648
|
"dependency_patches": [
|
|
781
649
|
"drop-devDependencies",
|
|
782
650
|
"drop-peerDependencies",
|
|
@@ -806,24 +674,16 @@
|
|
|
806
674
|
"jiti": "2.7.0",
|
|
807
675
|
"typebox": "^1.1.34",
|
|
808
676
|
"yaml": "2.8.3",
|
|
809
|
-
"@
|
|
810
|
-
"@sinclair/typebox": "^0.34.48",
|
|
811
|
-
"jsdom": "^29.1.1",
|
|
812
|
-
"pdf-parse": "^2.4.5",
|
|
813
|
-
"turndown": "^7.1.2"
|
|
677
|
+
"@sinclair/typebox": "^0.34.48"
|
|
814
678
|
},
|
|
815
679
|
"runtime_loader": {
|
|
816
680
|
"status": "verified",
|
|
817
|
-
"entries":
|
|
681
|
+
"entries": 10,
|
|
818
682
|
"loader": "dm-coding-agent",
|
|
819
683
|
"platform_dependencies": [
|
|
820
|
-
"@mozilla/readability",
|
|
821
684
|
"@sinclair/typebox",
|
|
822
685
|
"acorn",
|
|
823
686
|
"jiti",
|
|
824
|
-
"jsdom",
|
|
825
|
-
"pdf-parse",
|
|
826
|
-
"turndown",
|
|
827
687
|
"typebox",
|
|
828
688
|
"yaml"
|
|
829
689
|
]
|
|
@@ -65,7 +65,6 @@ export default function context_default(pi) {
|
|
|
65
65
|
ctx.ui.notify("Context usage info not available.", "warning");
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
|
-
const usagePercent = usage.percent;
|
|
69
68
|
const totalRaw = systemTokensRaw + toolDefTokensRaw + msgTokensRaw + toolUseTokensRaw + toolResultTokensRaw;
|
|
70
69
|
const ratio = totalRaw > 0 ? totalActual / totalRaw : 1;
|
|
71
70
|
const systemTokens = Math.round(systemTokensRaw * ratio);
|
|
@@ -114,7 +113,7 @@ export default function context_default(pi) {
|
|
|
114
113
|
}
|
|
115
114
|
gridLines.push(rowStr.trimEnd());
|
|
116
115
|
}
|
|
117
|
-
const totalUsageTitle = `${theme.fg("text", theme.bold("Total Usage".padEnd(16)))} ${theme.fg("text", theme.bold(formatTokens(totalActual).padStart(7)))} ${theme.fg("text", theme.bold(`(${
|
|
116
|
+
const totalUsageTitle = `${theme.fg("text", theme.bold("Total Usage".padEnd(16)))} ${theme.fg("text", theme.bold(formatTokens(totalActual).padStart(7)))} ${theme.fg("text", theme.bold(`(${usage.percent.toFixed(1).padStart(5)}%)`))}`;
|
|
118
117
|
const catDetailLines = categories.map((cat) => {
|
|
119
118
|
const labelStr = cat.label.padEnd(14);
|
|
120
119
|
const valStr = formatTokens(cat.value).padStart(7);
|
|
@@ -245,8 +245,7 @@ export default function src_default(pi) {
|
|
|
245
245
|
const usage = await ctx.getContextUsage();
|
|
246
246
|
let usageStr = "Unknown";
|
|
247
247
|
if (usage) {
|
|
248
|
-
|
|
249
|
-
usageStr = percent == null ? `${formatTokens(usage.tokens)}/${formatTokens(usage.contextWindow)}` : `${percent.toFixed(1)}% (${formatTokens(usage.tokens)}/${formatTokens(usage.contextWindow)})`;
|
|
248
|
+
usageStr = `${usage.percent.toFixed(1)}% (${formatTokens(usage.tokens)}/${formatTokens(usage.contextWindow)})`;
|
|
250
249
|
}
|
|
251
250
|
let stepsSinceTag = 0;
|
|
252
251
|
let nearestTagName = "None";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
|
-
import { nodeRuntimeCommand } from "../src/
|
|
3
|
+
import { nodeRuntimeCommand } from "../src/browser-helpers/node-runtime.mjs";
|
|
4
4
|
import {
|
|
5
5
|
existsSync,
|
|
6
6
|
mkdirSync,
|
|
@@ -15,7 +15,7 @@ import { join } from "node:path";
|
|
|
15
15
|
import {
|
|
16
16
|
GREEDY_CDP_SOCKET_DIR,
|
|
17
17
|
PAGES_CACHE
|
|
18
|
-
} from "../src/
|
|
18
|
+
} from "../src/browser-helpers/constants.mjs";
|
|
19
19
|
const TIMEOUT = 90000;
|
|
20
20
|
const NAVIGATION_TIMEOUT = 30000;
|
|
21
21
|
const IDLE_TIMEOUT = 20 * 60 * 1000;
|
|
@@ -46,7 +46,7 @@ function getWsUrl() {
|
|
|
46
46
|
`);
|
|
47
47
|
return `ws://localhost:${lines[0]}${lines[1]}`;
|
|
48
48
|
}
|
|
49
|
-
throw new Error(`
|
|
49
|
+
throw new Error(`DM CUA DevToolsActivePort not found at ${p}. Refusing to fall back to the main Chrome session.`);
|
|
50
50
|
}
|
|
51
51
|
const portFile = getDevToolsActivePortPath();
|
|
52
52
|
const lines = readFileSync(portFile, "utf8").trim().split(`
|
|
@@ -15,7 +15,7 @@ Usage:
|
|
|
15
15
|
node browser-cua.mjs stop [--json]
|
|
16
16
|
|
|
17
17
|
Notes:
|
|
18
|
-
|
|
18
|
+
- This helper uses DM's bundled CUA CDP sidecar.
|
|
19
19
|
- Fresh dedicated browser profiles auto-bootstrap a blank tab.
|
|
20
20
|
- handoff opens the dedicated browser visibly for user-authorized login or
|
|
21
21
|
verification. DM does not solve challenges or enter credentials for you.
|
|
@@ -9,16 +9,16 @@ import {
|
|
|
9
9
|
} from "node:fs";
|
|
10
10
|
import { platform, tmpdir } from "node:os";
|
|
11
11
|
import { join } from "node:path";
|
|
12
|
-
import { httpGet } from "../src/
|
|
12
|
+
import { httpGet } from "../src/browser-helpers/minimize.mjs";
|
|
13
13
|
import {
|
|
14
14
|
ACTIVE_PORT_FILE,
|
|
15
15
|
CHROME_MODE_FILE,
|
|
16
16
|
GREEDY_PID_FILE,
|
|
17
17
|
GREEDY_PORT,
|
|
18
18
|
GREEDY_PROFILE_DIR
|
|
19
|
-
} from "../src/
|
|
20
|
-
import { findListeningProcessPid } from "../src/
|
|
21
|
-
import { resolveSystemCmd } from "../src/
|
|
19
|
+
} from "../src/browser-helpers/constants.mjs";
|
|
20
|
+
import { findListeningProcessPid } from "../src/browser-helpers/port-pid.mjs";
|
|
21
|
+
import { resolveSystemCmd } from "../src/browser-helpers/system-cmds.mjs";
|
|
22
22
|
const PORT = GREEDY_PORT;
|
|
23
23
|
const PROFILE_DIR = GREEDY_PROFILE_DIR;
|
|
24
24
|
const ACTIVE_PORT = ACTIVE_PORT_FILE;
|
|
@@ -41,7 +41,8 @@ function findChrome() {
|
|
|
41
41
|
];
|
|
42
42
|
return candidates.find(existsSync) || null;
|
|
43
43
|
}
|
|
44
|
-
const
|
|
44
|
+
const visibleMode = () => process.env.DM_CUA_VISIBLE ?? process.env.GREEDY_SEARCH_VISIBLE;
|
|
45
|
+
const isHeadless = () => visibleMode() !== "1";
|
|
45
46
|
const BASE_CHROME_FLAGS = [
|
|
46
47
|
`--remote-debugging-port=${PORT}`,
|
|
47
48
|
"--disable-features=DevToolsPrivacyUI",
|
|
@@ -87,7 +88,7 @@ function buildChromeFlags(chromePath) {
|
|
|
87
88
|
flags.push("about:blank");
|
|
88
89
|
return flags;
|
|
89
90
|
}
|
|
90
|
-
const isVisible = () =>
|
|
91
|
+
const isVisible = () => visibleMode() === "1";
|
|
91
92
|
function isModeFileHeadless() {
|
|
92
93
|
try {
|
|
93
94
|
if (!existsSync(MODE_FILE))
|
|
@@ -170,7 +171,7 @@ function cleanupGhostChrome() {
|
|
|
170
171
|
writeFileSync(PID_FILE, String(portPid), "utf8");
|
|
171
172
|
return true;
|
|
172
173
|
}
|
|
173
|
-
console.error(`Browser/CDP port ${PORT} is owned by unverified pid ${portPid}; ` + "refusing to kill it. Set
|
|
174
|
+
console.error(`Browser/CDP port ${PORT} is owned by unverified pid ${portPid}; ` + "refusing to kill it. Set DM_CUA_PORT to a free port.");
|
|
174
175
|
return false;
|
|
175
176
|
}
|
|
176
177
|
async function writePortFile(timeoutMs = 15000) {
|
|
@@ -202,7 +203,7 @@ async function main() {
|
|
|
202
203
|
const ok = killProcess(pid);
|
|
203
204
|
console.log(ok ? `Stopped Chrome (pid ${pid}).` : `Failed to stop pid ${pid}.`);
|
|
204
205
|
} else {
|
|
205
|
-
console.log("
|
|
206
|
+
console.log("DM CUA Chrome is not running.");
|
|
206
207
|
}
|
|
207
208
|
try {
|
|
208
209
|
unlinkSync(PID_FILE);
|
|
@@ -226,7 +227,7 @@ async function main() {
|
|
|
226
227
|
}
|
|
227
228
|
const existing = isRunning();
|
|
228
229
|
if (existing) {
|
|
229
|
-
const isWantingVisible =
|
|
230
|
+
const isWantingVisible = visibleMode() === "1" && !process.argv.includes("--headless");
|
|
230
231
|
if (isWantingVisible && isModeFileHeadless()) {
|
|
231
232
|
console.log(`Headless Chrome running (pid ${existing}) but visible requested — killing...`);
|
|
232
233
|
killProcess(existing);
|
|
@@ -239,7 +240,7 @@ async function main() {
|
|
|
239
240
|
} else {
|
|
240
241
|
const ready = await writePortFile(5000);
|
|
241
242
|
if (ready) {
|
|
242
|
-
console.log(`
|
|
243
|
+
console.log(`DM CUA Chrome already running (pid ${existing}).`);
|
|
243
244
|
return;
|
|
244
245
|
}
|
|
245
246
|
console.log(`Stale PID ${existing} — launching fresh.`);
|
|
@@ -254,7 +255,7 @@ async function main() {
|
|
|
254
255
|
process.exit(1);
|
|
255
256
|
}
|
|
256
257
|
mkdirSync(PROFILE_DIR, { recursive: true });
|
|
257
|
-
console.log(`Launching
|
|
258
|
+
console.log(`Launching DM CUA Chrome on port ${PORT}...`);
|
|
258
259
|
if (isHeadless()) {
|
|
259
260
|
console.log("Headless mode — no window will be shown");
|
|
260
261
|
} else if (!isVisible()) {
|
|
@@ -36,7 +36,7 @@ export default function registerDmCua(pi) {
|
|
|
36
36
|
pi.on("session_start", async (_event, ctx) => {
|
|
37
37
|
const { launchScript, cdpScript } = resolveBrowserHelperPaths();
|
|
38
38
|
if (!existsSync(launchScript) || !existsSync(cdpScript)) {
|
|
39
|
-
ctx.ui.notify("dm-cua: bundled browser helpers are missing. Rebuild DM
|
|
39
|
+
ctx.ui.notify("dm-cua: bundled browser helpers are missing. Rebuild DM to restore them.", "warning");
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
pi.registerTool({
|
|
@@ -119,14 +119,10 @@ async function ensureConfiguredBrowserSelectionUsable() {
|
|
|
119
119
|
return browserSelectionPromise;
|
|
120
120
|
}
|
|
121
121
|
export function resolveBrowserHelperPaths() {
|
|
122
|
-
const
|
|
123
|
-
resolve(__dirname, "..", "
|
|
124
|
-
resolve(__dirname, "..", "
|
|
125
|
-
];
|
|
126
|
-
const candidates = helperRoots.map((root) => ({
|
|
127
|
-
launchScript: join(root, "bin", "launch.mjs"),
|
|
128
|
-
cdpScript: join(root, "bin", "cdp.mjs")
|
|
129
|
-
}));
|
|
122
|
+
const candidates = [{
|
|
123
|
+
launchScript: resolve(__dirname, "..", "bin", "browser-launch.mjs"),
|
|
124
|
+
cdpScript: resolve(__dirname, "..", "bin", "browser-cdp.mjs")
|
|
125
|
+
}];
|
|
130
126
|
for (const candidate of candidates) {
|
|
131
127
|
if (existsSync(candidate.launchScript) && existsSync(candidate.cdpScript)) {
|
|
132
128
|
return candidate;
|
|
@@ -135,10 +131,16 @@ export function resolveBrowserHelperPaths() {
|
|
|
135
131
|
return candidates[0];
|
|
136
132
|
}
|
|
137
133
|
export function resolveBrowserProcessEnv(config = BROWSER_CONFIG, env = process.env, { visible } = {}) {
|
|
138
|
-
const visibleMode = visible === true ? "1" : visible === false ? "0" : env.
|
|
134
|
+
const visibleMode = visible === true ? "1" : visible === false ? "0" : env.DM_CUA_VISIBLE ?? env.DM_BROWSER_CUA_VISIBLE ?? env.GREEDY_SEARCH_VISIBLE;
|
|
139
135
|
return {
|
|
140
136
|
...env,
|
|
141
137
|
...config.browserExecutablePath ? { CHROME_PATH: config.browserExecutablePath } : {},
|
|
138
|
+
DM_CUA_BROWSER_LABEL: config.browserDisplayName,
|
|
139
|
+
DM_CUA_PORT: String(config.port),
|
|
140
|
+
DM_CUA_PROFILE_DIR: config.profileDir.replace(/\\/g, "/"),
|
|
141
|
+
DM_CUA_PID_FILE: config.pidFile.replace(/\\/g, "/"),
|
|
142
|
+
DM_CUA_MODE_FILE: config.modeFile.replace(/\\/g, "/"),
|
|
143
|
+
DM_CUA_ALLOW_PORT_CLEANUP: env.DM_CUA_ALLOW_PORT_CLEANUP ?? env.GREEDY_SEARCH_ALLOW_PORT_CLEANUP ?? "0",
|
|
142
144
|
CDP_PROFILE_DIR: config.profileDir.replace(/\\/g, "/"),
|
|
143
145
|
CDP_PAGES_CACHE: config.pagesCache.replace(/\\/g, "/"),
|
|
144
146
|
CDP_SOCKET_DIR: config.socketDir.replace(/\\/g, "/"),
|
|
@@ -147,8 +149,11 @@ export function resolveBrowserProcessEnv(config = BROWSER_CONFIG, env = process.
|
|
|
147
149
|
GREEDY_SEARCH_PROFILE_DIR: config.profileDir.replace(/\\/g, "/"),
|
|
148
150
|
GREEDY_SEARCH_PID_FILE: config.pidFile.replace(/\\/g, "/"),
|
|
149
151
|
GREEDY_SEARCH_MODE_FILE: config.modeFile.replace(/\\/g, "/"),
|
|
150
|
-
GREEDY_SEARCH_ALLOW_PORT_CLEANUP: env.GREEDY_SEARCH_ALLOW_PORT_CLEANUP ?? "0",
|
|
151
|
-
...visibleMode === undefined ? {} : {
|
|
152
|
+
GREEDY_SEARCH_ALLOW_PORT_CLEANUP: env.DM_CUA_ALLOW_PORT_CLEANUP ?? env.GREEDY_SEARCH_ALLOW_PORT_CLEANUP ?? "0",
|
|
153
|
+
...visibleMode === undefined ? {} : {
|
|
154
|
+
DM_CUA_VISIBLE: visibleMode,
|
|
155
|
+
GREEDY_SEARCH_VISIBLE: visibleMode
|
|
156
|
+
}
|
|
152
157
|
};
|
|
153
158
|
}
|
|
154
159
|
function browserEnv(options) {
|
|
@@ -288,7 +293,7 @@ function findPage(pages, prefix) {
|
|
|
288
293
|
async function ensureBrowserHelpersExist() {
|
|
289
294
|
const { launchScript, cdpScript } = resolveBrowserHelperPaths();
|
|
290
295
|
if (!existsSync(launchScript) || !existsSync(cdpScript)) {
|
|
291
|
-
throw new Error("Bundled browser helpers are missing. Rebuild DM
|
|
296
|
+
throw new Error("Bundled DM CUA browser helpers are missing. Rebuild DM to restore them.");
|
|
292
297
|
}
|
|
293
298
|
return { launchScript, cdpScript };
|
|
294
299
|
}
|
|
@@ -3,17 +3,17 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
3
3
|
import { homedir, platform } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
6
|
-
export function
|
|
6
|
+
export function parseBrowserPort(value, fallback = 9222) {
|
|
7
7
|
const port = Number.parseInt(String(value ?? ""), 10);
|
|
8
8
|
return Number.isInteger(port) && port > 1024 && port < 65535 ? port : fallback;
|
|
9
9
|
}
|
|
10
10
|
const GREEDY_TMP = tmpdir().replaceAll("\\", "/");
|
|
11
|
-
export const GREEDY_PORT =
|
|
12
|
-
export const GREEDY_PROFILE_DIR = (process.env.GREEDY_SEARCH_PROFILE_DIR || process.env.CDP_PROFILE_DIR || `${GREEDY_TMP}/
|
|
11
|
+
export const GREEDY_PORT = parseBrowserPort(process.env.DM_CUA_PORT ?? process.env.GREEDY_SEARCH_PORT);
|
|
12
|
+
export const GREEDY_PROFILE_DIR = (process.env.DM_CUA_PROFILE_DIR || process.env.GREEDY_SEARCH_PROFILE_DIR || process.env.CDP_PROFILE_DIR || `${GREEDY_TMP}/dm-cua-chrome-profile`).replaceAll("\\", "/");
|
|
13
13
|
export const ACTIVE_PORT_FILE = `${GREEDY_PROFILE_DIR}/DevToolsActivePort`;
|
|
14
|
-
export const GREEDY_PID_FILE = process.env.GREEDY_SEARCH_PID_FILE || `${GREEDY_PROFILE_DIR}/browser.pid`;
|
|
14
|
+
export const GREEDY_PID_FILE = process.env.DM_CUA_PID_FILE || process.env.GREEDY_SEARCH_PID_FILE || `${GREEDY_PROFILE_DIR}/browser.pid`;
|
|
15
15
|
export const PAGES_CACHE = process.env.CDP_PAGES_CACHE || `${GREEDY_PROFILE_DIR}/cdp-pages.json`;
|
|
16
|
-
export const CHROME_MODE_FILE = process.env.GREEDY_SEARCH_MODE_FILE || `${GREEDY_PROFILE_DIR}/browser-mode`;
|
|
16
|
+
export const CHROME_MODE_FILE = process.env.DM_CUA_MODE_FILE || process.env.GREEDY_SEARCH_MODE_FILE || `${GREEDY_PROFILE_DIR}/browser-mode`;
|
|
17
17
|
export const GREEDY_METADATA_FILE = process.env.GREEDY_SEARCH_METADATA_FILE || `${GREEDY_PROFILE_DIR}/browser-metadata.json`;
|
|
18
18
|
export const GREEDY_LAUNCH_LOCK_FILE = process.env.GREEDY_SEARCH_LAUNCH_LOCK_FILE || `${GREEDY_PROFILE_DIR}/browser-launch.lock`;
|
|
19
19
|
export const GREEDY_ACTIVITY_FILE = process.env.GREEDY_SEARCH_ACTIVITY_FILE || `${GREEDY_PROFILE_DIR}/browser-last-activity`;
|
|
@@ -34,13 +34,13 @@ function loadUserEngines() {
|
|
|
34
34
|
const valid = config.engines.filter((e) => ENGINES[e]);
|
|
35
35
|
const invalid = config.engines.filter((e) => !ENGINES[e]);
|
|
36
36
|
if (invalid.length > 0) {
|
|
37
|
-
process.stderr.write(`[
|
|
38
|
-
` + `[
|
|
37
|
+
process.stderr.write(`[dm-cua] Warning: ignoring unknown engine(s) in ${CONFIG_FILE}: ${invalid.join(", ")}
|
|
38
|
+
` + `[dm-cua] Available engines: ${Object.keys(ENGINES).join(", ")}
|
|
39
39
|
`);
|
|
40
40
|
}
|
|
41
41
|
if (valid.length > 0)
|
|
42
42
|
return valid;
|
|
43
|
-
process.stderr.write(`[
|
|
43
|
+
process.stderr.write(`[dm-cua] Warning: no valid engines in ${CONFIG_FILE}, falling back to defaults: ${DEFAULT_ENGINES.join(", ")}
|
|
44
44
|
`);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -68,9 +68,9 @@ function loadUserSynthesizer() {
|
|
|
68
68
|
const normalized = config.synthesizer.toLowerCase();
|
|
69
69
|
if (SUPPORTED_SYNTHESIZERS.includes(normalized))
|
|
70
70
|
return normalized;
|
|
71
|
-
process.stderr.write(`[
|
|
72
|
-
` + `[
|
|
73
|
-
` + `[
|
|
71
|
+
process.stderr.write(`[dm-cua] Warning: unknown synthesizer "${config.synthesizer}" in ${CONFIG_FILE}
|
|
72
|
+
` + `[dm-cua] Available synthesizers: ${SUPPORTED_SYNTHESIZERS.join(", ")}
|
|
73
|
+
` + `[dm-cua] Falling back to default: ${DEFAULT_SYNTHESIZER}
|
|
74
74
|
`);
|
|
75
75
|
}
|
|
76
76
|
}
|
package/extensions/{greedysearch-dm/src/utils → dm-cua/src/browser-helpers}/node-runtime.mjs
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
export function nodeRuntimeCommand(env = process.env, execPath = process.execPath) {
|
|
3
|
-
const configured = env.GREEDY_SEARCH_NODE || env.NODE_BINARY || env.NODE;
|
|
3
|
+
const configured = env.DM_CUA_NODE || env.GREEDY_SEARCH_NODE || env.NODE_BINARY || env.NODE;
|
|
4
4
|
if (configured?.trim())
|
|
5
5
|
return configured.trim();
|
|
6
6
|
const name = basename(execPath || "").toLowerCase();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
2
|
import { platform } from "node:os";
|
|
3
|
-
import { resolveSystemCmd } from "
|
|
3
|
+
import { resolveSystemCmd } from "./system-cmds.mjs";
|
|
4
4
|
function defaultRun(command, args) {
|
|
5
5
|
return execFileSync(resolveSystemCmd(command), args, {
|
|
6
6
|
encoding: "utf8",
|