voidaccess 1.3.0__tar.gz → 1.4.0__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 (179) hide show
  1. {voidaccess-1.3.0 → voidaccess-1.4.0}/PKG-INFO +2 -3
  2. {voidaccess-1.3.0 → voidaccess-1.4.0}/pyproject.toml +4 -5
  3. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/PKG-INFO +2 -3
  4. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/SOURCES.txt +15 -15
  5. voidaccess-1.4.0/voidaccess.egg-info/entry_points.txt +2 -0
  6. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/top_level.txt +1 -1
  7. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/configure.py +1 -1
  8. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/enrich.py +3 -3
  9. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/export.py +4 -4
  10. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/investigate.py +6 -6
  11. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/show.py +4 -4
  12. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/main.py +34 -9
  13. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/tor_detect.py +1 -1
  14. voidaccess-1.3.0/voidaccess.egg-info/entry_points.txt +0 -2
  15. {voidaccess-1.3.0 → voidaccess-1.4.0}/LICENSE +0 -0
  16. {voidaccess-1.3.0 → voidaccess-1.4.0}/README.md +0 -0
  17. {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/__init__.py +0 -0
  18. {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/opsec.py +0 -0
  19. {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/patterns.py +0 -0
  20. {voidaccess-1.3.0 → voidaccess-1.4.0}/analysis/temporal.py +0 -0
  21. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/__init__.py +0 -0
  22. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/auth.py +0 -0
  23. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/main.py +0 -0
  24. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/__init__.py +0 -0
  25. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/admin.py +0 -0
  26. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/auth.py +0 -0
  27. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/entities.py +0 -0
  28. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/export.py +0 -0
  29. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/investigations.py +0 -0
  30. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/monitors.py +0 -0
  31. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/search.py +0 -0
  32. {voidaccess-1.3.0 → voidaccess-1.4.0}/api/routes/settings.py +0 -0
  33. {voidaccess-1.3.0 → voidaccess-1.4.0}/auth/__init__.py +0 -0
  34. {voidaccess-1.3.0 → voidaccess-1.4.0}/auth/token_blacklist.py +0 -0
  35. {voidaccess-1.3.0 → voidaccess-1.4.0}/config.py +0 -0
  36. {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/__init__.py +0 -0
  37. {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/dedup.py +0 -0
  38. {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/frontier.py +0 -0
  39. {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/spider.py +0 -0
  40. {voidaccess-1.3.0 → voidaccess-1.4.0}/crawler/utils.py +0 -0
  41. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/__init__.py +0 -0
  42. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/__init__.py +0 -0
  43. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/env.py +0 -0
  44. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0001_initial_schema.py +0 -0
  45. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0002_add_investigation_status_column.py +0 -0
  46. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0002_add_missing_tables.py +0 -0
  47. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0003_add_canonical_value_and_entity_links.py +0 -0
  48. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0004_add_page_posted_at.py +0 -0
  49. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0005_add_extraction_method.py +0 -0
  50. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0006_add_monitor_alerts.py +0 -0
  51. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0007_add_actor_style_profiles.py +0 -0
  52. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0008_add_users_table.py +0 -0
  53. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0009_add_investigation_id_to_relationships.py +0 -0
  54. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0010_add_composite_index_entity_relationships.py +0 -0
  55. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0011_add_page_extraction_cache.py +0 -0
  56. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0013_add_graph_status.py +0 -0
  57. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0015_add_progress_fields.py +0 -0
  58. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0016_backfill_graph_status.py +0 -0
  59. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0017_add_user_api_keys.py +0 -0
  60. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0018_add_user_id_to_investigations.py +0 -0
  61. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0019_add_content_safety_log.py +0 -0
  62. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/migrations/versions/0020_add_entity_source_tracking.py +0 -0
  63. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/models.py +0 -0
  64. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/queries.py +0 -0
  65. {voidaccess-1.3.0 → voidaccess-1.4.0}/db/session.py +0 -0
  66. {voidaccess-1.3.0 → voidaccess-1.4.0}/export/__init__.py +0 -0
  67. {voidaccess-1.3.0 → voidaccess-1.4.0}/export/misp.py +0 -0
  68. {voidaccess-1.3.0 → voidaccess-1.4.0}/export/sigma.py +0 -0
  69. {voidaccess-1.3.0 → voidaccess-1.4.0}/export/stix.py +0 -0
  70. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/__init__.py +0 -0
  71. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/llm_extract.py +0 -0
  72. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/ner.py +0 -0
  73. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/normalizer.py +0 -0
  74. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/pipeline.py +0 -0
  75. {voidaccess-1.3.0 → voidaccess-1.4.0}/extractor/regex_patterns.py +0 -0
  76. {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/__init__.py +0 -0
  77. {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/profiler.py +0 -0
  78. {voidaccess-1.3.0 → voidaccess-1.4.0}/fingerprint/stylometry.py +0 -0
  79. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/__init__.py +0 -0
  80. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/builder.py +0 -0
  81. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/export.py +0 -0
  82. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/model.py +0 -0
  83. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/queries.py +0 -0
  84. {voidaccess-1.3.0 → voidaccess-1.4.0}/graph/visualize.py +0 -0
  85. {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/__init__.py +0 -0
  86. {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/detect.py +0 -0
  87. {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/query_expand.py +0 -0
  88. {voidaccess-1.3.0 → voidaccess-1.4.0}/i18n/translate.py +0 -0
  89. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/__init__.py +0 -0
  90. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/_db.py +0 -0
  91. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/alerts.py +0 -0
  92. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/config.py +0 -0
  93. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/diff.py +0 -0
  94. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/jobs.py +0 -0
  95. {voidaccess-1.3.0 → voidaccess-1.4.0}/monitor/scheduler.py +0 -0
  96. {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/__init__.py +0 -0
  97. {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/scrape.py +0 -0
  98. {voidaccess-1.3.0 → voidaccess-1.4.0}/scraper/scrape_js.py +0 -0
  99. {voidaccess-1.3.0 → voidaccess-1.4.0}/search/__init__.py +0 -0
  100. {voidaccess-1.3.0 → voidaccess-1.4.0}/search/circuit_breaker.py +0 -0
  101. {voidaccess-1.3.0 → voidaccess-1.4.0}/search/search.py +0 -0
  102. {voidaccess-1.3.0 → voidaccess-1.4.0}/setup.cfg +0 -0
  103. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/__init__.py +0 -0
  104. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/blockchain.py +0 -0
  105. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/cache.py +0 -0
  106. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/cisa.py +0 -0
  107. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/dns_enrichment.py +0 -0
  108. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/domain_reputation.py +0 -0
  109. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/email_reputation.py +0 -0
  110. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/engines.py +0 -0
  111. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/enrichment.py +0 -0
  112. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/github_scraper.py +0 -0
  113. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/gitlab_scraper.py +0 -0
  114. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/hash_reputation.py +0 -0
  115. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/historical_intel.py +0 -0
  116. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/ip_reputation.py +0 -0
  117. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/paste_scraper.py +0 -0
  118. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/pastes.py +0 -0
  119. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/rss_scraper.py +0 -0
  120. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/seed_manager.py +0 -0
  121. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/seeds.py +0 -0
  122. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/shodan.py +0 -0
  123. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/telegram.py +0 -0
  124. {voidaccess-1.3.0 → voidaccess-1.4.0}/sources/virustotal.py +0 -0
  125. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_opsec.py +0 -0
  126. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_stylometry.py +0 -0
  127. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_analysis_temporal.py +0 -0
  128. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_api.py +0 -0
  129. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_api_monitors.py +0 -0
  130. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_blockchain.py +0 -0
  131. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_config.py +0 -0
  132. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_crawler.py +0 -0
  133. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_db.py +0 -0
  134. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_dns_enrichment.py +0 -0
  135. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_domain_reputation.py +0 -0
  136. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_email_reputation.py +0 -0
  137. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_fingerprint.py +0 -0
  138. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_github_scraper.py +0 -0
  139. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_gitlab_scraper.py +0 -0
  140. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_graph.py +0 -0
  141. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_hash_reputation.py +0 -0
  142. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_i18n.py +0 -0
  143. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_ip_reputation.py +0 -0
  144. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_llm.py +0 -0
  145. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_llm_utils.py +0 -0
  146. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_model_singleton.py +0 -0
  147. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_monitor.py +0 -0
  148. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_pagination.py +0 -0
  149. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_paste_scraper.py +0 -0
  150. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_rss_scraper.py +0 -0
  151. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_scrape_js.py +0 -0
  152. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_settings.py +0 -0
  153. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_sources.py +0 -0
  154. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_sources_enrichment_new.py +0 -0
  155. {voidaccess-1.3.0 → voidaccess-1.4.0}/tests/test_vector.py +0 -0
  156. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/__init__.py +0 -0
  157. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/async_utils.py +0 -0
  158. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/content_safety.py +0 -0
  159. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/defang.py +0 -0
  160. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/encryption.py +0 -0
  161. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/ioc_freshness.py +0 -0
  162. {voidaccess-1.3.0 → voidaccess-1.4.0}/utils/user_keys.py +0 -0
  163. {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/__init__.py +0 -0
  164. {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/embedder.py +0 -0
  165. {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/model_singleton.py +0 -0
  166. {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/search.py +0 -0
  167. {voidaccess-1.3.0 → voidaccess-1.4.0}/vector/store.py +0 -0
  168. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/__init__.py +0 -0
  169. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/llm.py +0 -0
  170. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess/llm_utils.py +0 -0
  171. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/dependency_links.txt +0 -0
  172. {voidaccess-1.3.0 → voidaccess-1.4.0}/voidaccess.egg-info/requires.txt +0 -0
  173. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/__init__.py +0 -0
  174. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/adapters/__init__.py +0 -0
  175. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/adapters/sqlite.py +0 -0
  176. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/browser.py +0 -0
  177. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/commands/__init__.py +0 -0
  178. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/config.py +0 -0
  179. {voidaccess-1.3.0/cli → voidaccess-1.4.0/voidaccess_cli}/display.py +0 -0
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Keywords: osint,darkweb,threat-intelligence,tor,cli
8
8
  Classifier: Development Status :: 4 - Beta
9
9
  Classifier: Environment :: Console
10
10
  Classifier: Intended Audience :: Information Technology
11
- Classifier: License :: OSI Approved :: MIT License
12
11
  Classifier: Operating System :: OS Independent
13
12
  Classifier: Programming Language :: Python :: 3
14
13
  Classifier: Programming Language :: Python :: 3.11
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "voidaccess"
7
- version = "1.3.0"
7
+ version = "1.4.0"
8
8
  description = "Dark web OSINT CLI — automated threat intelligence from query to report"
9
9
  readme = "README.md"
10
- license = { text = "MIT" }
10
+ license = "MIT"
11
11
  requires-python = ">=3.10"
12
12
  authors = [{ name = "VoidAccess" }]
13
13
  keywords = ["osint", "darkweb", "threat-intelligence", "tor", "cli"]
@@ -15,7 +15,6 @@ classifiers = [
15
15
  "Development Status :: 4 - Beta",
16
16
  "Environment :: Console",
17
17
  "Intended Audience :: Information Technology",
18
- "License :: OSI Approved :: MIT License",
19
18
  "Operating System :: OS Independent",
20
19
  "Programming Language :: Python :: 3",
21
20
  "Programming Language :: Python :: 3.11",
@@ -51,7 +50,7 @@ dependencies = [
51
50
  dev = ["pytest", "pytest-asyncio"]
52
51
 
53
52
  [project.scripts]
54
- voidaccess = "cli.main:app"
53
+ voidaccess = "voidaccess_cli.main:app"
55
54
 
56
55
  [tool.setuptools]
57
56
  py-modules = ["config"]
@@ -59,7 +58,7 @@ py-modules = ["config"]
59
58
  [tool.setuptools.packages.find]
60
59
  where = ["."]
61
60
  include = [
62
- "cli*",
61
+ "voidaccess_cli*",
63
62
  "db*",
64
63
  "sources*",
65
64
  "extractor*",
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Keywords: osint,darkweb,threat-intelligence,tor,cli
8
8
  Classifier: Development Status :: 4 - Beta
9
9
  Classifier: Environment :: Console
10
10
  Classifier: Intended Audience :: Information Technology
11
- Classifier: License :: OSI Approved :: MIT License
12
11
  Classifier: Operating System :: OS Independent
13
12
  Classifier: Programming Language :: Python :: 3
14
13
  Classifier: Programming Language :: Python :: 3.11
@@ -20,20 +20,6 @@ api/routes/search.py
20
20
  api/routes/settings.py
21
21
  auth/__init__.py
22
22
  auth/token_blacklist.py
23
- cli/__init__.py
24
- cli/browser.py
25
- cli/config.py
26
- cli/display.py
27
- cli/main.py
28
- cli/tor_detect.py
29
- cli/adapters/__init__.py
30
- cli/adapters/sqlite.py
31
- cli/commands/__init__.py
32
- cli/commands/configure.py
33
- cli/commands/enrich.py
34
- cli/commands/export.py
35
- cli/commands/investigate.py
36
- cli/commands/show.py
37
23
  crawler/__init__.py
38
24
  crawler/dedup.py
39
25
  crawler/frontier.py
@@ -173,4 +159,18 @@ voidaccess.egg-info/SOURCES.txt
173
159
  voidaccess.egg-info/dependency_links.txt
174
160
  voidaccess.egg-info/entry_points.txt
175
161
  voidaccess.egg-info/requires.txt
176
- voidaccess.egg-info/top_level.txt
162
+ voidaccess.egg-info/top_level.txt
163
+ voidaccess_cli/__init__.py
164
+ voidaccess_cli/browser.py
165
+ voidaccess_cli/config.py
166
+ voidaccess_cli/display.py
167
+ voidaccess_cli/main.py
168
+ voidaccess_cli/tor_detect.py
169
+ voidaccess_cli/adapters/__init__.py
170
+ voidaccess_cli/adapters/sqlite.py
171
+ voidaccess_cli/commands/__init__.py
172
+ voidaccess_cli/commands/configure.py
173
+ voidaccess_cli/commands/enrich.py
174
+ voidaccess_cli/commands/export.py
175
+ voidaccess_cli/commands/investigate.py
176
+ voidaccess_cli/commands/show.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ voidaccess = voidaccess_cli.main:app
@@ -1,7 +1,6 @@
1
1
  analysis
2
2
  api
3
3
  auth
4
- cli
5
4
  config
6
5
  crawler
7
6
  db
@@ -17,3 +16,4 @@ sources
17
16
  utils
18
17
  vector
19
18
  voidaccess
19
+ voidaccess_cli
@@ -15,7 +15,7 @@ from rich.console import Console
15
15
  from rich.prompt import Prompt, Confirm
16
16
  from rich.table import Table
17
17
 
18
- from cli import config as cli_config
18
+ from voidaccess_cli import config as cli_config
19
19
 
20
20
  app = typer.Typer(help="Configure the voidaccess CLI.", no_args_is_help=False, invoke_without_command=True)
21
21
  console = Console()
@@ -30,7 +30,7 @@ def run(
30
30
  skip_emails: bool = typer.Option(False, "--skip-emails"),
31
31
  ) -> None:
32
32
  """Re-enrich entities for an existing investigation."""
33
- from cli import config as cli_config
33
+ from voidaccess_cli import config as cli_config
34
34
  cli_config.apply_env()
35
35
 
36
36
  inv_id = _resolve_investigation_id(target)
@@ -50,7 +50,7 @@ def _resolve_investigation_id(target: str) -> Optional[str]:
50
50
  except Exception:
51
51
  return None
52
52
  return data.get("investigation", {}).get("id") or data.get("id")
53
- from cli.adapters import sqlite as sqlite_adapter
53
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
54
54
  sqlite_adapter.init_db()
55
55
  resolved = sqlite_adapter.resolve_investigation_id(target) or target
56
56
  row = sqlite_adapter.get_investigation(resolved)
@@ -89,7 +89,7 @@ _TYPE_MAP = {
89
89
 
90
90
  def _load_extraction_results(investigation_id: str) -> list:
91
91
  """Reconstruct ExtractionResult-shaped objects from the DB."""
92
- from cli.adapters import sqlite as sqlite_adapter
92
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
93
93
  rows = sqlite_adapter.get_entities(investigation_id)
94
94
  fakes = []
95
95
  for r in rows:
@@ -25,7 +25,7 @@ def run(
25
25
  output: Optional[Path] = typer.Option(None, "--output", help="Output file"),
26
26
  ) -> None:
27
27
  """Export an investigation."""
28
- from cli import config as cli_config
28
+ from voidaccess_cli import config as cli_config
29
29
  cli_config.apply_env()
30
30
 
31
31
  fmt = fmt.lower()
@@ -58,7 +58,7 @@ def _load_target(target: str) -> tuple[Optional[str], Optional[dict]]:
58
58
  return None, None
59
59
  inv_id = data.get("investigation", {}).get("id") or data.get("id")
60
60
  return inv_id, data
61
- from cli.adapters import sqlite as sqlite_adapter
61
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
62
62
  sqlite_adapter.init_db()
63
63
  resolved = sqlite_adapter.resolve_investigation_id(target) or target
64
64
  data = sqlite_adapter.investigation_to_export_dict(resolved)
@@ -75,7 +75,7 @@ def _render(fmt: str, inv_id: Optional[str], data: dict) -> tuple[str | bytes, s
75
75
  return _csv_from_data(data), ".csv"
76
76
 
77
77
  if fmt == "md":
78
- from cli.commands.investigate import _render_markdown # reuse renderer
78
+ from voidaccess_cli.commands.investigate import _render_markdown # reuse renderer
79
79
  # Adapt shape: _render_markdown expects flat payload
80
80
  flat = _flatten_for_md(data)
81
81
  return _render_markdown(flat), ".md"
@@ -154,5 +154,5 @@ def _default_out_path(target: str, suffix: str) -> Path:
154
154
  p = Path(target).expanduser()
155
155
  if p.exists():
156
156
  return p.with_suffix(suffix)
157
- from cli import config as cli_config
157
+ from voidaccess_cli import config as cli_config
158
158
  return cli_config.get_output_dir() / f"{target}{suffix}"
@@ -46,7 +46,7 @@ def run(
46
46
  quiet: bool = typer.Option(False, "--quiet", help="No live display; print final summary only"),
47
47
  ) -> None:
48
48
  """Run an investigation: query → search → scrape → extract → enrich → report."""
49
- from cli import config as cli_config
49
+ from voidaccess_cli import config as cli_config
50
50
 
51
51
  cli_config.apply_env()
52
52
  if quiet:
@@ -106,10 +106,10 @@ async def _run_investigation(
106
106
  fmt: str,
107
107
  quiet: bool,
108
108
  ) -> None:
109
- from cli import config as cli_config
110
- from cli.adapters import sqlite as sqlite_adapter
111
- from cli.display import InvestigationDisplay
112
- from cli.tor_detect import detect_tor, tor_unavailable_message
109
+ from voidaccess_cli import config as cli_config
110
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
111
+ from voidaccess_cli.display import InvestigationDisplay
112
+ from voidaccess_cli.tor_detect import detect_tor, tor_unavailable_message
113
113
 
114
114
  cfg = cli_config.load_config()
115
115
  preset = DEPTH_PRESETS[depth]
@@ -500,7 +500,7 @@ def _build_cooccurrence_edges(investigation_id: str) -> int:
500
500
  from db.session import get_session
501
501
  except Exception:
502
502
  return 0
503
- from cli.adapters.sqlite import save_relationships
503
+ from voidaccess_cli.adapters.sqlite import save_relationships
504
504
 
505
505
  edges: list[dict] = []
506
506
  inv_uuid = uuid.UUID(investigation_id)
@@ -26,7 +26,7 @@ def run(
26
26
  ),
27
27
  ) -> None:
28
28
  """Open the entity browser TUI."""
29
- from cli import config as cli_config
29
+ from voidaccess_cli import config as cli_config
30
30
  cli_config.apply_env()
31
31
 
32
32
  data: Optional[dict] = None
@@ -41,7 +41,7 @@ def run(
41
41
  if candidate_path.exists() and candidate_path.suffix == ".json":
42
42
  data = json.loads(candidate_path.read_text(encoding="utf-8"))
43
43
  else:
44
- from cli.adapters import sqlite as sqlite_adapter
44
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
45
45
  sqlite_adapter.init_db()
46
46
  resolved = sqlite_adapter.resolve_investigation_id(target) or target
47
47
  data = sqlite_adapter.investigation_to_export_dict(resolved)
@@ -49,13 +49,13 @@ def run(
49
49
  console.print(f"[red]Unknown investigation:[/red] {target}")
50
50
  raise typer.Exit(code=1)
51
51
 
52
- from cli.browser import EntityBrowserApp
52
+ from voidaccess_cli.browser import EntityBrowserApp
53
53
  app = EntityBrowserApp(data=data)
54
54
  app.run()
55
55
 
56
56
 
57
57
  def _pick_recent() -> Optional[str]:
58
- from cli.adapters import sqlite as sqlite_adapter
58
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
59
59
  sqlite_adapter.init_db()
60
60
  rows = sqlite_adapter.list_investigations(limit=20)
61
61
  if not rows:
@@ -2,7 +2,7 @@
2
2
  cli/main.py — typer entry point exposed as the `voidaccess` script.
3
3
 
4
4
  Defined as the [project.scripts] target in pyproject.toml:
5
- voidaccess = "cli.main:app"
5
+ voidaccess = "voidaccess_cli.main:app"
6
6
  """
7
7
 
8
8
  from __future__ import annotations
@@ -24,11 +24,20 @@ import typer
24
24
  from rich.console import Console
25
25
  from rich.table import Table
26
26
 
27
- from cli import __version__
28
- from cli import config as cli_config
29
- from cli.commands import configure, enrich, export, investigate, show
27
+ from voidaccess_cli import __version__
28
+ from voidaccess_cli import config as cli_config
29
+ from voidaccess_cli.commands import configure, enrich, export, investigate, show
30
30
 
31
31
  console = Console()
32
+ BANNER = """\
33
+ [color(183)] ░░[color(141)]████████[color(183)]░░[/]
34
+ [color(183)] ░░[color(141)]████████████[color(183)]░░[/]
35
+ [color(183)] ░░[color(141)]██████████████[color(183)]░░[/]
36
+ [color(183)] ░░[color(141)]████[/] [bright_white]void[/] [color(141)]████[color(183)]░░[/]
37
+ [color(183)] ░░[color(141)]██████████████[color(183)]░░[/]
38
+ [color(183)] ░░[color(141)]████████████[color(183)]░░[/]
39
+ [color(183)] ░░[color(141)]████████[color(183)]░░[/]
40
+ [dim white] dark web osint intelligence[/dim white]"""
32
41
 
33
42
  app = typer.Typer(
34
43
  name="voidaccess",
@@ -63,7 +72,7 @@ def _ensure_first_run() -> None:
63
72
  @app.command("status")
64
73
  def status() -> None:
65
74
  """Show current config, Tor status, and detected API keys."""
66
- from cli.tor_detect import detect_tor
75
+ from voidaccess_cli.tor_detect import detect_tor
67
76
  cli_config.apply_env()
68
77
  cfg = cli_config.load_config()
69
78
 
@@ -112,7 +121,7 @@ def list_investigations(
112
121
  ) -> None:
113
122
  """List saved investigations."""
114
123
  cli_config.apply_env()
115
- from cli.adapters import sqlite as sqlite_adapter
124
+ from voidaccess_cli.adapters import sqlite as sqlite_adapter
116
125
  sqlite_adapter.init_db()
117
126
  rows = sqlite_adapter.list_investigations(limit=limit)
118
127
  if as_json:
@@ -144,10 +153,26 @@ def version() -> None:
144
153
  console.print(f"voidaccess {__version__}")
145
154
 
146
155
 
147
- @app.callback()
148
- def _global(ctx: typer.Context) -> None:
149
- """Set env vars before sub-commands import voidaccess modules."""
156
+ def show_banner(console: Console) -> None:
157
+ if not sys.stdout.isatty():
158
+ return
159
+ console.print()
160
+ console.print(BANNER, justify="center")
161
+ console.print()
162
+
163
+
164
+ @app.callback(invoke_without_command=True)
165
+ def main(
166
+ ctx: typer.Context,
167
+ no_banner: bool = typer.Option(
168
+ False, "--no-banner",
169
+ help="Skip banner"
170
+ ),
171
+ ) -> None:
172
+ """Set env vars and render banner before command execution."""
150
173
  cli_config.apply_env()
174
+ if not no_banner and not ctx.invoked_subcommand:
175
+ show_banner(console)
151
176
 
152
177
 
153
178
  if __name__ == "__main__":
@@ -17,7 +17,7 @@ import struct
17
17
  from dataclasses import dataclass
18
18
  from typing import Optional
19
19
 
20
- from cli.config import load_config
20
+ from voidaccess_cli.config import load_config
21
21
 
22
22
 
23
23
  @dataclass
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- voidaccess = cli.main:app
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
File without changes