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.
Files changed (36) hide show
  1. package/LICENSE +33 -33
  2. package/README.md +15 -15
  3. package/bin/dvz.exe +0 -0
  4. package/bin/dvz.js +35 -35
  5. package/package.json +50 -50
  6. package/prepare-search-deps.mjs +42 -42
  7. package/skills/insane-search/SKILL.md +36 -36
  8. package/skills/insane-search/engine/__main__.py +44 -44
  9. package/skills/insane-search/engine/executor.py +246 -246
  10. package/skills/insane-search/engine/fetch_chain.py +443 -443
  11. package/skills/insane-search/engine/network.py +108 -108
  12. package/skills/insane-search/engine/phase0.py +380 -380
  13. package/skills/insane-search/engine/session_input.py +120 -120
  14. package/skills/insane-search/engine/templates/invisible_playwright_fetch.py +57 -57
  15. package/skills/insane-search/engine/templates/nodriver_fetch.py +9 -9
  16. package/skills/insane-search/engine/templates/patchright_fetch.py +9 -9
  17. package/skills/insane-search/engine/templates/playwright_mobile_chrome.js +9 -9
  18. package/skills/insane-search/engine/templates/playwright_real_chrome.js +7 -7
  19. package/skills/insane-search/engine/templates/scrapling_fetch.py +46 -46
  20. package/skills/insane-search/engine/tests/test_smoke.py +8 -8
  21. package/skills/insane-search/engine/tests/test_t10_artifact_routes.py +126 -126
  22. package/skills/insane-search/engine/tests/test_t11_session_handoff.py +157 -157
  23. package/skills/insane-search/engine/tests/test_t5_pdfplumber.py +11 -11
  24. package/skills/insane-search/engine/tests/test_t7_browser_gate.py +3 -3
  25. package/skills/insane-search/engine/tests/test_t8_network_routes.py +207 -207
  26. package/skills/insane-search/engine/tests/test_t9_evidence_bundle.py +89 -89
  27. package/skills/insane-search/engine/tests/test_u5.py +9 -9
  28. package/skills/insane-search/engine/transport.py +94 -94
  29. package/skills/insane-search/engine/waf_profiles.yaml +38 -38
  30. package/skills/insane-search/references/cache-archive.md +13 -13
  31. package/skills/insane-search/references/media.md +14 -14
  32. package/skills/insane-search/references/playwright.md +27 -27
  33. package/skills/insane-search/references/research-evidence.md +36 -36
  34. package/skills/insane-search/references/session-handoff.md +26 -26
  35. package/skills/insane-search/tests/test_x_search.py +3 -3
  36. 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