devez-vibe 1.8.2 → 1.8.3
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/LICENSE +33 -33
- package/README.md +15 -15
- package/bin/dvz.exe +0 -0
- package/bin/dvz.js +35 -35
- package/package.json +50 -50
- package/prepare-search-deps.mjs +42 -42
- package/skills/insane-search/SKILL.md +36 -36
- package/skills/insane-search/engine/__main__.py +44 -44
- package/skills/insane-search/engine/executor.py +246 -246
- package/skills/insane-search/engine/fetch_chain.py +443 -443
- package/skills/insane-search/engine/network.py +108 -108
- package/skills/insane-search/engine/phase0.py +380 -380
- package/skills/insane-search/engine/session_input.py +120 -120
- package/skills/insane-search/engine/templates/invisible_playwright_fetch.py +57 -57
- package/skills/insane-search/engine/templates/nodriver_fetch.py +9 -9
- package/skills/insane-search/engine/templates/patchright_fetch.py +9 -9
- package/skills/insane-search/engine/templates/playwright_mobile_chrome.js +9 -9
- package/skills/insane-search/engine/templates/playwright_real_chrome.js +7 -7
- package/skills/insane-search/engine/templates/scrapling_fetch.py +46 -46
- package/skills/insane-search/engine/tests/test_smoke.py +8 -8
- package/skills/insane-search/engine/tests/test_t10_artifact_routes.py +126 -126
- package/skills/insane-search/engine/tests/test_t11_session_handoff.py +157 -157
- package/skills/insane-search/engine/tests/test_t5_pdfplumber.py +11 -11
- package/skills/insane-search/engine/tests/test_t7_browser_gate.py +3 -3
- package/skills/insane-search/engine/tests/test_t8_network_routes.py +207 -207
- package/skills/insane-search/engine/tests/test_t9_evidence_bundle.py +89 -89
- package/skills/insane-search/engine/tests/test_u5.py +9 -9
- package/skills/insane-search/engine/transport.py +94 -94
- package/skills/insane-search/engine/waf_profiles.yaml +38 -38
- package/skills/insane-search/references/cache-archive.md +13 -13
- package/skills/insane-search/references/media.md +14 -14
- package/skills/insane-search/references/playwright.md +27 -27
- package/skills/insane-search/references/research-evidence.md +36 -36
- package/skills/insane-search/references/session-handoff.md +26 -26
- package/skills/insane-search/tests/test_x_search.py +3 -3
- package/skills/luna-loop/agents/openai.yaml +7 -7
|
@@ -36,12 +36,12 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
36
36
|
help="Device class pin.")
|
|
37
37
|
p.add_argument("--timeout", type=int, default=25,
|
|
38
38
|
help="Per-attempt timeout seconds (default 25).")
|
|
39
|
-
p.add_argument("--max-attempts", type=int, default=None,
|
|
40
|
-
help="TOTAL curl-attempt budget. Default: None = exhaustive (honours R6).")
|
|
41
|
-
p.add_argument("--proxy", default=None, metavar="URL",
|
|
42
|
-
help="User-approved HTTP(S) or SOCKS proxy URL for every network route.")
|
|
43
|
-
p.add_argument("--cookie-file", default=None, metavar="PATH",
|
|
44
|
-
help="Explicit JSON or Netscape cookie export, scoped to the target host.")
|
|
39
|
+
p.add_argument("--max-attempts", type=int, default=None,
|
|
40
|
+
help="TOTAL curl-attempt budget. Default: None = exhaustive (honours R6).")
|
|
41
|
+
p.add_argument("--proxy", default=None, metavar="URL",
|
|
42
|
+
help="User-approved HTTP(S) or SOCKS proxy URL for every network route.")
|
|
43
|
+
p.add_argument("--cookie-file", default=None, metavar="PATH",
|
|
44
|
+
help="Explicit JSON or Netscape cookie export, scoped to the target host.")
|
|
45
45
|
p.add_argument("--no-retry", action="store_true",
|
|
46
46
|
help="Disable transient-status (429/502/503/504) probe retry.")
|
|
47
47
|
p.add_argument("--no-extract", action="store_true",
|
|
@@ -51,36 +51,36 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
51
51
|
help="Disable markdownification. By default a raw-HTML success is "
|
|
52
52
|
"converted to structure-preserving markdown (tables/code kept) "
|
|
53
53
|
"via markdownify; this returns the raw HTML instead.")
|
|
54
|
-
p.add_argument("--maincontent", action="store_true",
|
|
55
|
-
help="Strip boilerplate (nav/footer/ads) to the article body via "
|
|
56
|
-
"optional resiliparse. Off by default; wins over --markdown.")
|
|
57
|
-
p.add_argument("--ocr", action="store_true",
|
|
58
|
-
help="OCR scanned PDFs with local pdftoppm and tesseract when available.")
|
|
59
|
-
p.add_argument("--archive", action="store_true",
|
|
60
|
-
help="After current-page failure, try a labeled historical Wayback snapshot.")
|
|
61
|
-
p.add_argument("--media", action="store_true",
|
|
62
|
-
help="Treat the URL as media and route it through yt-dlp metadata extraction.")
|
|
63
|
-
p.add_argument("--media-transcript", action="store_true",
|
|
64
|
-
help="Fetch a Korean or English subtitle transcript through yt-dlp.")
|
|
54
|
+
p.add_argument("--maincontent", action="store_true",
|
|
55
|
+
help="Strip boilerplate (nav/footer/ads) to the article body via "
|
|
56
|
+
"optional resiliparse. Off by default; wins over --markdown.")
|
|
57
|
+
p.add_argument("--ocr", action="store_true",
|
|
58
|
+
help="OCR scanned PDFs with local pdftoppm and tesseract when available.")
|
|
59
|
+
p.add_argument("--archive", action="store_true",
|
|
60
|
+
help="After current-page failure, try a labeled historical Wayback snapshot.")
|
|
61
|
+
p.add_argument("--media", action="store_true",
|
|
62
|
+
help="Treat the URL as media and route it through yt-dlp metadata extraction.")
|
|
63
|
+
p.add_argument("--media-transcript", action="store_true",
|
|
64
|
+
help="Fetch a Korean or English subtitle transcript through yt-dlp.")
|
|
65
65
|
p.add_argument("--no-playwright", action="store_true",
|
|
66
66
|
help="Skip Playwright fallback (curl-only).")
|
|
67
67
|
p.add_argument("--no-phase0", action="store_true",
|
|
68
68
|
help="Skip the Phase 0 official-API router (generic grid only).")
|
|
69
|
-
output = p.add_mutually_exclusive_group()
|
|
70
|
-
output.add_argument("--json", action="store_true",
|
|
71
|
-
help="Emit FetchResult as JSON to stdout (content omitted).")
|
|
72
|
-
output.add_argument("--bundle", action="store_true",
|
|
73
|
-
help="Emit provenance plus boundary-wrapped untrusted content as JSON.")
|
|
69
|
+
output = p.add_mutually_exclusive_group()
|
|
70
|
+
output.add_argument("--json", action="store_true",
|
|
71
|
+
help="Emit FetchResult as JSON to stdout (content omitted).")
|
|
72
|
+
output.add_argument("--bundle", action="store_true",
|
|
73
|
+
help="Emit provenance plus boundary-wrapped untrusted content as JSON.")
|
|
74
74
|
p.add_argument("--trace", action="store_true",
|
|
75
75
|
help="Print per-attempt trace to stderr.")
|
|
76
76
|
return p
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
def main(argv: list[str] | None = None) -> int:
|
|
80
|
-
for stream in (sys.stdout, sys.stderr):
|
|
81
|
-
if hasattr(stream, "reconfigure"):
|
|
82
|
-
stream.reconfigure(errors="backslashreplace")
|
|
83
|
-
args = build_parser().parse_args(argv)
|
|
79
|
+
def main(argv: list[str] | None = None) -> int:
|
|
80
|
+
for stream in (sys.stdout, sys.stderr):
|
|
81
|
+
if hasattr(stream, "reconfigure"):
|
|
82
|
+
stream.reconfigure(errors="backslashreplace")
|
|
83
|
+
args = build_parser().parse_args(argv)
|
|
84
84
|
try:
|
|
85
85
|
result = fetch(
|
|
86
86
|
args.url,
|
|
@@ -92,15 +92,15 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
92
92
|
enable_phase0=not args.no_phase0,
|
|
93
93
|
enable_extraction=not args.no_extract,
|
|
94
94
|
enable_retry=not args.no_retry,
|
|
95
|
-
enable_markdown=not args.no_markdown,
|
|
96
|
-
enable_maincontent=args.maincontent,
|
|
97
|
-
enable_ocr=args.ocr,
|
|
98
|
-
enable_archive=args.archive,
|
|
99
|
-
force_media=args.media or args.media_transcript,
|
|
100
|
-
include_media_transcript=args.media_transcript,
|
|
101
|
-
proxy=args.proxy,
|
|
102
|
-
cookie_file=args.cookie_file,
|
|
103
|
-
)
|
|
95
|
+
enable_markdown=not args.no_markdown,
|
|
96
|
+
enable_maincontent=args.maincontent,
|
|
97
|
+
enable_ocr=args.ocr,
|
|
98
|
+
enable_archive=args.archive,
|
|
99
|
+
force_media=args.media or args.media_transcript,
|
|
100
|
+
include_media_transcript=args.media_transcript,
|
|
101
|
+
proxy=args.proxy,
|
|
102
|
+
cookie_file=args.cookie_file,
|
|
103
|
+
)
|
|
104
104
|
except Exception as e:
|
|
105
105
|
print(f"engine fatal: {type(e).__name__}: {e}", file=sys.stderr)
|
|
106
106
|
return 2
|
|
@@ -150,9 +150,9 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
150
150
|
print(" ➜ must_invoke_playwright_mcp = TRUE — drive MCP Playwright from the agent session.", file=sys.stderr)
|
|
151
151
|
print("════════════════════════════════════════════════════════════════", file=sys.stderr)
|
|
152
152
|
|
|
153
|
-
if args.bundle:
|
|
154
|
-
print(json.dumps(result.to_evidence_bundle(), ensure_ascii=False, indent=2))
|
|
155
|
-
elif args.json:
|
|
153
|
+
if args.bundle:
|
|
154
|
+
print(json.dumps(result.to_evidence_bundle(), ensure_ascii=False, indent=2))
|
|
155
|
+
elif args.json:
|
|
156
156
|
payload = result.to_dict()
|
|
157
157
|
print(json.dumps(payload, ensure_ascii=False, indent=2))
|
|
158
158
|
else:
|
|
@@ -163,11 +163,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
163
163
|
f"[engine] prompt_injection_risk={result.prompt_injection_risk} signals={signals}",
|
|
164
164
|
file=sys.stderr,
|
|
165
165
|
)
|
|
166
|
-
print(f"\n[engine] ok={result.ok} verdict={result.verdict} "
|
|
167
|
-
f"profile={result.profile_used} attempts={len(result.trace)}",
|
|
168
|
-
file=sys.stderr)
|
|
169
|
-
if result.network_diagnosis:
|
|
170
|
-
print(f"[engine] network_diagnosis={result.network_diagnosis}", file=sys.stderr)
|
|
166
|
+
print(f"\n[engine] ok={result.ok} verdict={result.verdict} "
|
|
167
|
+
f"profile={result.profile_used} attempts={len(result.trace)}",
|
|
168
|
+
file=sys.stderr)
|
|
169
|
+
if result.network_diagnosis:
|
|
170
|
+
print(f"[engine] network_diagnosis={result.network_diagnosis}", file=sys.stderr)
|
|
171
171
|
|
|
172
172
|
return 0 if result.ok else 1
|
|
173
173
|
|