voidaccess 1.4.3__tar.gz → 1.4.5__tar.gz

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 (178) hide show
  1. {voidaccess-1.4.3/voidaccess.egg-info → voidaccess-1.4.5}/PKG-INFO +55 -3
  2. {voidaccess-1.4.3 → voidaccess-1.4.5}/README.md +54 -2
  3. {voidaccess-1.4.3 → voidaccess-1.4.5}/pyproject.toml +1 -1
  4. {voidaccess-1.4.3 → voidaccess-1.4.5/voidaccess.egg-info}/PKG-INFO +55 -3
  5. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/adapters/sqlite.py +14 -0
  6. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/investigate.py +48 -3
  7. {voidaccess-1.4.3 → voidaccess-1.4.5}/LICENSE +0 -0
  8. {voidaccess-1.4.3 → voidaccess-1.4.5}/analysis/__init__.py +0 -0
  9. {voidaccess-1.4.3 → voidaccess-1.4.5}/analysis/opsec.py +0 -0
  10. {voidaccess-1.4.3 → voidaccess-1.4.5}/analysis/patterns.py +0 -0
  11. {voidaccess-1.4.3 → voidaccess-1.4.5}/analysis/temporal.py +0 -0
  12. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/__init__.py +0 -0
  13. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/auth.py +0 -0
  14. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/main.py +0 -0
  15. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/__init__.py +0 -0
  16. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/admin.py +0 -0
  17. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/auth.py +0 -0
  18. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/entities.py +0 -0
  19. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/export.py +0 -0
  20. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/investigations.py +0 -0
  21. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/monitors.py +0 -0
  22. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/search.py +0 -0
  23. {voidaccess-1.4.3 → voidaccess-1.4.5}/api/routes/settings.py +0 -0
  24. {voidaccess-1.4.3 → voidaccess-1.4.5}/auth/__init__.py +0 -0
  25. {voidaccess-1.4.3 → voidaccess-1.4.5}/auth/token_blacklist.py +0 -0
  26. {voidaccess-1.4.3 → voidaccess-1.4.5}/config.py +0 -0
  27. {voidaccess-1.4.3 → voidaccess-1.4.5}/crawler/__init__.py +0 -0
  28. {voidaccess-1.4.3 → voidaccess-1.4.5}/crawler/dedup.py +0 -0
  29. {voidaccess-1.4.3 → voidaccess-1.4.5}/crawler/frontier.py +0 -0
  30. {voidaccess-1.4.3 → voidaccess-1.4.5}/crawler/spider.py +0 -0
  31. {voidaccess-1.4.3 → voidaccess-1.4.5}/crawler/utils.py +0 -0
  32. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/__init__.py +0 -0
  33. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/__init__.py +0 -0
  34. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/env.py +0 -0
  35. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0001_initial_schema.py +0 -0
  36. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0002_add_investigation_status_column.py +0 -0
  37. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0002_add_missing_tables.py +0 -0
  38. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0003_add_canonical_value_and_entity_links.py +0 -0
  39. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0004_add_page_posted_at.py +0 -0
  40. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0005_add_extraction_method.py +0 -0
  41. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0006_add_monitor_alerts.py +0 -0
  42. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0007_add_actor_style_profiles.py +0 -0
  43. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0008_add_users_table.py +0 -0
  44. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0009_add_investigation_id_to_relationships.py +0 -0
  45. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0010_add_composite_index_entity_relationships.py +0 -0
  46. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0011_add_page_extraction_cache.py +0 -0
  47. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0013_add_graph_status.py +0 -0
  48. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0015_add_progress_fields.py +0 -0
  49. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0016_backfill_graph_status.py +0 -0
  50. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0017_add_user_api_keys.py +0 -0
  51. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0018_add_user_id_to_investigations.py +0 -0
  52. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0019_add_content_safety_log.py +0 -0
  53. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/migrations/versions/0020_add_entity_source_tracking.py +0 -0
  54. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/models.py +0 -0
  55. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/queries.py +0 -0
  56. {voidaccess-1.4.3 → voidaccess-1.4.5}/db/session.py +0 -0
  57. {voidaccess-1.4.3 → voidaccess-1.4.5}/export/__init__.py +0 -0
  58. {voidaccess-1.4.3 → voidaccess-1.4.5}/export/misp.py +0 -0
  59. {voidaccess-1.4.3 → voidaccess-1.4.5}/export/sigma.py +0 -0
  60. {voidaccess-1.4.3 → voidaccess-1.4.5}/export/stix.py +0 -0
  61. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/__init__.py +0 -0
  62. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/llm_extract.py +0 -0
  63. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/ner.py +0 -0
  64. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/normalizer.py +0 -0
  65. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/pipeline.py +0 -0
  66. {voidaccess-1.4.3 → voidaccess-1.4.5}/extractor/regex_patterns.py +0 -0
  67. {voidaccess-1.4.3 → voidaccess-1.4.5}/fingerprint/__init__.py +0 -0
  68. {voidaccess-1.4.3 → voidaccess-1.4.5}/fingerprint/profiler.py +0 -0
  69. {voidaccess-1.4.3 → voidaccess-1.4.5}/fingerprint/stylometry.py +0 -0
  70. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/__init__.py +0 -0
  71. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/builder.py +0 -0
  72. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/export.py +0 -0
  73. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/model.py +0 -0
  74. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/queries.py +0 -0
  75. {voidaccess-1.4.3 → voidaccess-1.4.5}/graph/visualize.py +0 -0
  76. {voidaccess-1.4.3 → voidaccess-1.4.5}/i18n/__init__.py +0 -0
  77. {voidaccess-1.4.3 → voidaccess-1.4.5}/i18n/detect.py +0 -0
  78. {voidaccess-1.4.3 → voidaccess-1.4.5}/i18n/query_expand.py +0 -0
  79. {voidaccess-1.4.3 → voidaccess-1.4.5}/i18n/translate.py +0 -0
  80. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/__init__.py +0 -0
  81. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/_db.py +0 -0
  82. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/alerts.py +0 -0
  83. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/config.py +0 -0
  84. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/diff.py +0 -0
  85. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/jobs.py +0 -0
  86. {voidaccess-1.4.3 → voidaccess-1.4.5}/monitor/scheduler.py +0 -0
  87. {voidaccess-1.4.3 → voidaccess-1.4.5}/scraper/__init__.py +0 -0
  88. {voidaccess-1.4.3 → voidaccess-1.4.5}/scraper/scrape.py +0 -0
  89. {voidaccess-1.4.3 → voidaccess-1.4.5}/scraper/scrape_js.py +0 -0
  90. {voidaccess-1.4.3 → voidaccess-1.4.5}/search/__init__.py +0 -0
  91. {voidaccess-1.4.3 → voidaccess-1.4.5}/search/circuit_breaker.py +0 -0
  92. {voidaccess-1.4.3 → voidaccess-1.4.5}/search/search.py +0 -0
  93. {voidaccess-1.4.3 → voidaccess-1.4.5}/setup.cfg +0 -0
  94. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/__init__.py +0 -0
  95. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/blockchain.py +0 -0
  96. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/cache.py +0 -0
  97. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/cisa.py +0 -0
  98. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/dns_enrichment.py +0 -0
  99. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/domain_reputation.py +0 -0
  100. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/email_reputation.py +0 -0
  101. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/engines.py +0 -0
  102. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/enrichment.py +0 -0
  103. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/github_scraper.py +0 -0
  104. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/gitlab_scraper.py +0 -0
  105. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/hash_reputation.py +0 -0
  106. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/historical_intel.py +0 -0
  107. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/ip_reputation.py +0 -0
  108. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/paste_scraper.py +0 -0
  109. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/pastes.py +0 -0
  110. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/rss_scraper.py +0 -0
  111. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/seed_manager.py +0 -0
  112. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/seeds.py +0 -0
  113. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/shodan.py +0 -0
  114. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/telegram.py +0 -0
  115. {voidaccess-1.4.3 → voidaccess-1.4.5}/sources/virustotal.py +0 -0
  116. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_analysis_opsec.py +0 -0
  117. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_analysis_stylometry.py +0 -0
  118. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_analysis_temporal.py +0 -0
  119. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_api.py +0 -0
  120. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_api_monitors.py +0 -0
  121. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_blockchain.py +0 -0
  122. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_config.py +0 -0
  123. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_crawler.py +0 -0
  124. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_db.py +0 -0
  125. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_dns_enrichment.py +0 -0
  126. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_domain_reputation.py +0 -0
  127. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_email_reputation.py +0 -0
  128. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_fingerprint.py +0 -0
  129. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_github_scraper.py +0 -0
  130. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_gitlab_scraper.py +0 -0
  131. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_graph.py +0 -0
  132. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_hash_reputation.py +0 -0
  133. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_i18n.py +0 -0
  134. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_ip_reputation.py +0 -0
  135. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_llm.py +0 -0
  136. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_llm_utils.py +0 -0
  137. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_model_singleton.py +0 -0
  138. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_monitor.py +0 -0
  139. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_pagination.py +0 -0
  140. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_paste_scraper.py +0 -0
  141. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_rss_scraper.py +0 -0
  142. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_scrape_js.py +0 -0
  143. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_settings.py +0 -0
  144. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_sources.py +0 -0
  145. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_sources_enrichment_new.py +0 -0
  146. {voidaccess-1.4.3 → voidaccess-1.4.5}/tests/test_vector.py +0 -0
  147. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/__init__.py +0 -0
  148. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/async_utils.py +0 -0
  149. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/content_safety.py +0 -0
  150. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/defang.py +0 -0
  151. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/encryption.py +0 -0
  152. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/ioc_freshness.py +0 -0
  153. {voidaccess-1.4.3 → voidaccess-1.4.5}/utils/user_keys.py +0 -0
  154. {voidaccess-1.4.3 → voidaccess-1.4.5}/vector/__init__.py +0 -0
  155. {voidaccess-1.4.3 → voidaccess-1.4.5}/vector/embedder.py +0 -0
  156. {voidaccess-1.4.3 → voidaccess-1.4.5}/vector/model_singleton.py +0 -0
  157. {voidaccess-1.4.3 → voidaccess-1.4.5}/vector/search.py +0 -0
  158. {voidaccess-1.4.3 → voidaccess-1.4.5}/vector/store.py +0 -0
  159. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess/__init__.py +0 -0
  160. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess/llm.py +0 -0
  161. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess/llm_utils.py +0 -0
  162. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess.egg-info/SOURCES.txt +0 -0
  163. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess.egg-info/dependency_links.txt +0 -0
  164. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess.egg-info/entry_points.txt +0 -0
  165. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess.egg-info/requires.txt +0 -0
  166. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess.egg-info/top_level.txt +0 -0
  167. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/__init__.py +0 -0
  168. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/adapters/__init__.py +0 -0
  169. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/browser.py +0 -0
  170. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/__init__.py +0 -0
  171. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/configure.py +0 -0
  172. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/enrich.py +0 -0
  173. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/export.py +0 -0
  174. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/commands/show.py +0 -0
  175. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/config.py +0 -0
  176. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/display.py +0 -0
  177. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/main.py +0 -0
  178. {voidaccess-1.4.3 → voidaccess-1.4.5}/voidaccess_cli/tor_detect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
6
  License-Expression: MIT
@@ -65,6 +65,58 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
65
65
 
66
66
  ---
67
67
 
68
+ ## Quick Start
69
+
70
+ ### Option A - CLI (no Docker, 30 seconds)
71
+
72
+ ```bash
73
+ pip install voidaccess
74
+ voidaccess configure
75
+ voidaccess investigate "LockBit ransomware"
76
+ ```
77
+
78
+ Requires local Tor for dark web sources:
79
+
80
+ - https://torproject.org
81
+ - Use `--no-tor` for clearnet-only investigations
82
+
83
+ The CLI stores config in `~/.voidaccess/config.json` and writes results to `~/.voidaccess/results/`.
84
+
85
+ ### Option B - Docker (full stack, 5 minutes)
86
+
87
+ ```bash
88
+ git clone https://github.com/KatrielMoses/voidaccess
89
+ cd voidaccess
90
+ bash setup.sh
91
+ ```
92
+
93
+ The Docker stack includes PostgreSQL, Tor, FastAPI, and Next.js.
94
+
95
+ ### CLI Commands
96
+
97
+ | Command | Description |
98
+ |---|---|
99
+ | `voidaccess investigate` | Run an investigation |
100
+ | `voidaccess show` | Interactive entity browser |
101
+ | `voidaccess export` | Export STIX/MISP/Sigma/CSV/MD |
102
+ | `voidaccess enrich` | Re-enrich saved results |
103
+ | `voidaccess list` | List saved investigations |
104
+ | `voidaccess status` | Config and API key status |
105
+ | `voidaccess configure` | Setup wizard |
106
+
107
+ ### CLI vs Docker
108
+
109
+ | Feature | CLI | Docker |
110
+ |---|---|---|
111
+ | Install time | 30 seconds | 5 minutes |
112
+ | Dark web scraping | Requires local Tor | Built-in |
113
+ | Graph visualization | Terminal TUI | sigma.js |
114
+ | Monitoring/alerts | No | Yes |
115
+ | Multi-user | No | Yes |
116
+ | Persistence | SQLite (`~/.voidaccess`) | PostgreSQL |
117
+
118
+ ---
119
+
68
120
  ## Visual Walkthrough
69
121
 
70
122
  ### 1. Intuitive Dashboard
@@ -213,7 +265,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
213
265
 
214
266
  ---
215
267
 
216
- ## What's New in v1.3
268
+ ## Recent Updates
217
269
 
218
270
  - **10 new enrichment sources**: GreyNoise (scanner suppression), AbuseIPDB, Feodo Tracker, C2IntelFeeds, crt.sh, URLScan.io, Wayback Machine, Hybrid Analysis, HaveIBeenPwned, EmailRep
219
271
  - **4 new clearnet collection sources**: paste sites, GitHub code search, GitLab code search, and 20 curated RSS security feeds
@@ -228,7 +280,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
228
280
 
229
281
  ---
230
282
 
231
- ## Quick Start
283
+ ## Docker Setup
232
284
 
233
285
  ### Prerequisites
234
286
  - Docker and Docker Compose
@@ -19,6 +19,58 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
19
19
 
20
20
  ---
21
21
 
22
+ ## Quick Start
23
+
24
+ ### Option A - CLI (no Docker, 30 seconds)
25
+
26
+ ```bash
27
+ pip install voidaccess
28
+ voidaccess configure
29
+ voidaccess investigate "LockBit ransomware"
30
+ ```
31
+
32
+ Requires local Tor for dark web sources:
33
+
34
+ - https://torproject.org
35
+ - Use `--no-tor` for clearnet-only investigations
36
+
37
+ The CLI stores config in `~/.voidaccess/config.json` and writes results to `~/.voidaccess/results/`.
38
+
39
+ ### Option B - Docker (full stack, 5 minutes)
40
+
41
+ ```bash
42
+ git clone https://github.com/KatrielMoses/voidaccess
43
+ cd voidaccess
44
+ bash setup.sh
45
+ ```
46
+
47
+ The Docker stack includes PostgreSQL, Tor, FastAPI, and Next.js.
48
+
49
+ ### CLI Commands
50
+
51
+ | Command | Description |
52
+ |---|---|
53
+ | `voidaccess investigate` | Run an investigation |
54
+ | `voidaccess show` | Interactive entity browser |
55
+ | `voidaccess export` | Export STIX/MISP/Sigma/CSV/MD |
56
+ | `voidaccess enrich` | Re-enrich saved results |
57
+ | `voidaccess list` | List saved investigations |
58
+ | `voidaccess status` | Config and API key status |
59
+ | `voidaccess configure` | Setup wizard |
60
+
61
+ ### CLI vs Docker
62
+
63
+ | Feature | CLI | Docker |
64
+ |---|---|---|
65
+ | Install time | 30 seconds | 5 minutes |
66
+ | Dark web scraping | Requires local Tor | Built-in |
67
+ | Graph visualization | Terminal TUI | sigma.js |
68
+ | Monitoring/alerts | No | Yes |
69
+ | Multi-user | No | Yes |
70
+ | Persistence | SQLite (`~/.voidaccess`) | PostgreSQL |
71
+
72
+ ---
73
+
22
74
  ## Visual Walkthrough
23
75
 
24
76
  ### 1. Intuitive Dashboard
@@ -167,7 +219,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
167
219
 
168
220
  ---
169
221
 
170
- ## What's New in v1.3
222
+ ## Recent Updates
171
223
 
172
224
  - **10 new enrichment sources**: GreyNoise (scanner suppression), AbuseIPDB, Feodo Tracker, C2IntelFeeds, crt.sh, URLScan.io, Wayback Machine, Hybrid Analysis, HaveIBeenPwned, EmailRep
173
225
  - **4 new clearnet collection sources**: paste sites, GitHub code search, GitLab code search, and 20 curated RSS security feeds
@@ -182,7 +234,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
182
234
 
183
235
  ---
184
236
 
185
- ## Quick Start
237
+ ## Docker Setup
186
238
 
187
239
  ### Prerequisites
188
240
  - Docker and Docker Compose
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "voidaccess"
7
- version = "1.4.3"
7
+ version = "1.4.5"
8
8
  description = "Dark web OSINT CLI — automated threat intelligence from query to report"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
6
  License-Expression: MIT
@@ -65,6 +65,58 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
65
65
 
66
66
  ---
67
67
 
68
+ ## Quick Start
69
+
70
+ ### Option A - CLI (no Docker, 30 seconds)
71
+
72
+ ```bash
73
+ pip install voidaccess
74
+ voidaccess configure
75
+ voidaccess investigate "LockBit ransomware"
76
+ ```
77
+
78
+ Requires local Tor for dark web sources:
79
+
80
+ - https://torproject.org
81
+ - Use `--no-tor` for clearnet-only investigations
82
+
83
+ The CLI stores config in `~/.voidaccess/config.json` and writes results to `~/.voidaccess/results/`.
84
+
85
+ ### Option B - Docker (full stack, 5 minutes)
86
+
87
+ ```bash
88
+ git clone https://github.com/KatrielMoses/voidaccess
89
+ cd voidaccess
90
+ bash setup.sh
91
+ ```
92
+
93
+ The Docker stack includes PostgreSQL, Tor, FastAPI, and Next.js.
94
+
95
+ ### CLI Commands
96
+
97
+ | Command | Description |
98
+ |---|---|
99
+ | `voidaccess investigate` | Run an investigation |
100
+ | `voidaccess show` | Interactive entity browser |
101
+ | `voidaccess export` | Export STIX/MISP/Sigma/CSV/MD |
102
+ | `voidaccess enrich` | Re-enrich saved results |
103
+ | `voidaccess list` | List saved investigations |
104
+ | `voidaccess status` | Config and API key status |
105
+ | `voidaccess configure` | Setup wizard |
106
+
107
+ ### CLI vs Docker
108
+
109
+ | Feature | CLI | Docker |
110
+ |---|---|---|
111
+ | Install time | 30 seconds | 5 minutes |
112
+ | Dark web scraping | Requires local Tor | Built-in |
113
+ | Graph visualization | Terminal TUI | sigma.js |
114
+ | Monitoring/alerts | No | Yes |
115
+ | Multi-user | No | Yes |
116
+ | Persistence | SQLite (`~/.voidaccess`) | PostgreSQL |
117
+
118
+ ---
119
+
68
120
  ## Visual Walkthrough
69
121
 
70
122
  ### 1. Intuitive Dashboard
@@ -213,7 +265,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
213
265
 
214
266
  ---
215
267
 
216
- ## What's New in v1.3
268
+ ## Recent Updates
217
269
 
218
270
  - **10 new enrichment sources**: GreyNoise (scanner suppression), AbuseIPDB, Feodo Tracker, C2IntelFeeds, crt.sh, URLScan.io, Wayback Machine, Hybrid Analysis, HaveIBeenPwned, EmailRep
219
271
  - **4 new clearnet collection sources**: paste sites, GitHub code search, GitLab code search, and 20 curated RSS security feeds
@@ -228,7 +280,7 @@ Free with Groq, OpenRouter free models, or Ollama. Under $0.50 per investigation
228
280
 
229
281
  ---
230
282
 
231
- ## Quick Start
283
+ ## Docker Setup
232
284
 
233
285
  ### Prerequisites
234
286
  - Docker and Docker Compose
@@ -22,6 +22,8 @@ import uuid
22
22
  from datetime import datetime, timezone
23
23
  from typing import Any, Optional
24
24
 
25
+ from sqlalchemy import text
26
+
25
27
 
26
28
  def init_db() -> None:
27
29
  """Create all tables on the SQLite file if missing. Idempotent."""
@@ -30,6 +32,18 @@ def init_db() -> None:
30
32
  engine = get_engine()
31
33
  Base.metadata.create_all(engine)
32
34
 
35
+ # Create page_extraction_cache table if missing
36
+ with engine.connect() as conn:
37
+ conn.execute(text("""
38
+ CREATE TABLE IF NOT EXISTS page_extraction_cache (
39
+ page_hash TEXT PRIMARY KEY,
40
+ entities_json TEXT NOT NULL,
41
+ extracted_at TIMESTAMP NOT NULL,
42
+ expires_at TIMESTAMP NOT NULL
43
+ )
44
+ """))
45
+ conn.commit()
46
+
33
47
 
34
48
  def _serialize_dt(dt: Optional[datetime]) -> Optional[str]:
35
49
  if dt is None:
@@ -27,7 +27,13 @@ from typing import Any, Optional
27
27
  import typer
28
28
  from rich.console import Console
29
29
 
30
+ # Import reputation enrichment sources (used in Step 6.2–6.4)
31
+ from sources.domain_reputation import enrich_domain_entities
32
+ from sources.email_reputation import enrich_email_entities
33
+ from sources.hash_reputation import enrich_hash_entities
34
+
30
35
  console = Console()
36
+ logger = logging.getLogger(__name__)
31
37
 
32
38
 
33
39
  # ---------------------------------------------------------------------------
@@ -333,6 +339,45 @@ async def _run_investigation(
333
339
  except Exception as ip_exc:
334
340
  console.print(f"[grey50]ip_reputation skipped: {ip_exc}[/grey50]")
335
341
 
342
+ # Step 6.2 — Domain reputation
343
+ try:
344
+ extraction_results = await enrich_domain_entities(
345
+ extraction_results, inv_uuid
346
+ )
347
+ display.update_step(
348
+ "Enriching domains",
349
+ "done",
350
+ f"{sum(1 for e in extraction_results if e.get('entity_type') == 'DOMAIN')} domains enriched",
351
+ )
352
+ except Exception as e:
353
+ logger.debug(f"Domain enrichment: {e}")
354
+
355
+ # Step 6.3 — Hash reputation
356
+ try:
357
+ extraction_results = await enrich_hash_entities(
358
+ extraction_results, inv_uuid
359
+ )
360
+ display.update_step(
361
+ "Enriching hashes",
362
+ "done",
363
+ "",
364
+ )
365
+ except Exception as e:
366
+ logger.debug(f"Hash enrichment: {e}")
367
+
368
+ # Step 6.4 — Email reputation
369
+ try:
370
+ extraction_results = await enrich_email_entities(
371
+ extraction_results, inv_uuid
372
+ )
373
+ display.update_step(
374
+ "Enriching emails",
375
+ "done",
376
+ "",
377
+ )
378
+ except Exception as e:
379
+ logger.debug(f"Email enrichment: {e}")
380
+
336
381
  sources_used["enrichment"] = {"status": "ok", "count": len(enrichment_pages)}
337
382
  display.update_step("Enriching intelligence", "ok", f"{len(enrichment_pages)} pages added")
338
383
  except Exception as exc:
@@ -367,10 +412,10 @@ async def _run_investigation(
367
412
  if llm is not None:
368
413
  try:
369
414
  from voidaccess.llm import generate_summary
370
- corpus = "\n\n".join(p["text"][:5000] for p in scraped_pages[:10])
371
- if corpus:
415
+ pages_to_summarize = scraped_pages[:10]
416
+ if pages_to_summarize:
372
417
  summary_text = await asyncio.to_thread(
373
- generate_summary, llm, refined, corpus, "threat_intel"
418
+ generate_summary, llm, refined, pages_to_summarize, "threat_intel"
374
419
  )
375
420
  display.update_step("Generating summary", "ok")
376
421
  except Exception as exc:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes