voidaccess 1.6.3__tar.gz → 1.7.1__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 (207) hide show
  1. {voidaccess-1.6.3/voidaccess.egg-info → voidaccess-1.7.1}/PKG-INFO +50 -7
  2. {voidaccess-1.6.3 → voidaccess-1.7.1}/README.md +14 -8
  3. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/actors.py +32 -3
  4. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/investigations.py +3147 -3472
  5. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/search.py +77 -55
  6. {voidaccess-1.6.3 → voidaccess-1.7.1}/crawler/spider.py +30 -4
  7. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/queries.py +14 -4
  8. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/ioc_package.py +20 -2
  9. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/stix.py +78 -21
  10. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/ner.py +136 -1
  11. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/normalizer.py +256 -91
  12. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/pipeline.py +84 -12
  13. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/__init__.py +2 -0
  14. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/builder.py +8 -7
  15. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/config.py +4 -0
  16. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/jobs.py +68 -11
  17. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/scheduler.py +4 -6
  18. {voidaccess-1.6.3 → voidaccess-1.7.1}/pyproject.toml +40 -1
  19. {voidaccess-1.6.3 → voidaccess-1.7.1}/scraper/scrape.py +14 -2
  20. voidaccess-1.7.1/sources/data/onion_seeds.json +513 -0
  21. voidaccess-1.7.1/tests/test_confidence_calibration.py +108 -0
  22. voidaccess-1.7.1/tests/test_graph_integration.py +141 -0
  23. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_monitor.py +11 -8
  24. voidaccess-1.7.1/tests/test_monitor_integration.py +150 -0
  25. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_regex_patterns.py +39 -44
  26. voidaccess-1.7.1/tests/test_stix_export.py +281 -0
  27. {voidaccess-1.6.3 → voidaccess-1.7.1}/vector/__init__.py +2 -0
  28. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess/llm.py +96 -18
  29. {voidaccess-1.6.3 → voidaccess-1.7.1/voidaccess.egg-info}/PKG-INFO +50 -7
  30. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess.egg-info/SOURCES.txt +4 -0
  31. voidaccess-1.7.1/voidaccess.egg-info/requires.txt +71 -0
  32. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/__init__.py +1 -1
  33. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/adapters/sqlite.py +101 -7
  34. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/configure.py +28 -4
  35. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/export.py +6 -0
  36. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/config.py +34 -3
  37. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/main.py +20 -4
  38. voidaccess-1.6.3/sources/data/onion_seeds.json +0 -272
  39. voidaccess-1.6.3/voidaccess.egg-info/requires.txt +0 -29
  40. {voidaccess-1.6.3 → voidaccess-1.7.1}/LICENSE +0 -0
  41. {voidaccess-1.6.3 → voidaccess-1.7.1}/analysis/__init__.py +0 -0
  42. {voidaccess-1.6.3 → voidaccess-1.7.1}/analysis/opsec.py +0 -0
  43. {voidaccess-1.6.3 → voidaccess-1.7.1}/analysis/patterns.py +0 -0
  44. {voidaccess-1.6.3 → voidaccess-1.7.1}/analysis/temporal.py +0 -0
  45. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/__init__.py +0 -0
  46. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/auth.py +0 -0
  47. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/main.py +0 -0
  48. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/__init__.py +0 -0
  49. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/admin.py +0 -0
  50. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/auth.py +0 -0
  51. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/entities.py +0 -0
  52. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/export.py +0 -0
  53. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/monitors.py +0 -0
  54. {voidaccess-1.6.3 → voidaccess-1.7.1}/api/routes/settings.py +0 -0
  55. {voidaccess-1.6.3 → voidaccess-1.7.1}/auth/__init__.py +0 -0
  56. {voidaccess-1.6.3 → voidaccess-1.7.1}/auth/token_blacklist.py +0 -0
  57. {voidaccess-1.6.3 → voidaccess-1.7.1}/config.py +0 -0
  58. {voidaccess-1.6.3 → voidaccess-1.7.1}/crawler/__init__.py +0 -0
  59. {voidaccess-1.6.3 → voidaccess-1.7.1}/crawler/dedup.py +0 -0
  60. {voidaccess-1.6.3 → voidaccess-1.7.1}/crawler/frontier.py +0 -0
  61. {voidaccess-1.6.3 → voidaccess-1.7.1}/crawler/utils.py +0 -0
  62. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/__init__.py +0 -0
  63. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/__init__.py +0 -0
  64. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/env.py +0 -0
  65. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0001_initial_schema.py +0 -0
  66. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0002_add_investigation_status_column.py +0 -0
  67. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0002_add_missing_tables.py +0 -0
  68. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0003_add_canonical_value_and_entity_links.py +0 -0
  69. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0004_add_page_posted_at.py +0 -0
  70. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0005_add_extraction_method.py +0 -0
  71. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0006_add_monitor_alerts.py +0 -0
  72. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0007_add_actor_style_profiles.py +0 -0
  73. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0008_add_users_table.py +0 -0
  74. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0009_add_investigation_id_to_relationships.py +0 -0
  75. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0010_add_composite_index_entity_relationships.py +0 -0
  76. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0011_add_page_extraction_cache.py +0 -0
  77. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0013_add_graph_status.py +0 -0
  78. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0015_add_progress_fields.py +0 -0
  79. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0016_backfill_graph_status.py +0 -0
  80. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0017_add_user_api_keys.py +0 -0
  81. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0018_add_user_id_to_investigations.py +0 -0
  82. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0019_add_content_safety_log.py +0 -0
  83. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0020_add_entity_source_tracking.py +0 -0
  84. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0021_add_search_engine_stats.py +0 -0
  85. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0022_add_actor_profiles.py +0 -0
  86. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/migrations/versions/0023_add_investigation_metadata.py +0 -0
  87. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/models.py +0 -0
  88. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/search_engine_stats.py +0 -0
  89. {voidaccess-1.6.3 → voidaccess-1.7.1}/db/session.py +0 -0
  90. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/__init__.py +0 -0
  91. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/misp.py +0 -0
  92. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/sigma.py +0 -0
  93. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/snort_export.py +0 -0
  94. {voidaccess-1.6.3 → voidaccess-1.7.1}/export/yara_export.py +0 -0
  95. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/__init__.py +0 -0
  96. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/llm_extract.py +0 -0
  97. {voidaccess-1.6.3 → voidaccess-1.7.1}/extractor/regex_patterns.py +0 -0
  98. {voidaccess-1.6.3 → voidaccess-1.7.1}/fingerprint/__init__.py +0 -0
  99. {voidaccess-1.6.3 → voidaccess-1.7.1}/fingerprint/profiler.py +0 -0
  100. {voidaccess-1.6.3 → voidaccess-1.7.1}/fingerprint/stylometry.py +0 -0
  101. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/export.py +0 -0
  102. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/model.py +0 -0
  103. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/queries.py +0 -0
  104. {voidaccess-1.6.3 → voidaccess-1.7.1}/graph/visualize.py +0 -0
  105. {voidaccess-1.6.3 → voidaccess-1.7.1}/i18n/__init__.py +0 -0
  106. {voidaccess-1.6.3 → voidaccess-1.7.1}/i18n/detect.py +0 -0
  107. {voidaccess-1.6.3 → voidaccess-1.7.1}/i18n/query_expand.py +0 -0
  108. {voidaccess-1.6.3 → voidaccess-1.7.1}/i18n/translate.py +0 -0
  109. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/__init__.py +0 -0
  110. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/_db.py +0 -0
  111. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/alerts.py +0 -0
  112. {voidaccess-1.6.3 → voidaccess-1.7.1}/monitor/diff.py +0 -0
  113. {voidaccess-1.6.3 → voidaccess-1.7.1}/scraper/__init__.py +0 -0
  114. {voidaccess-1.6.3 → voidaccess-1.7.1}/scraper/scrape_js.py +0 -0
  115. {voidaccess-1.6.3 → voidaccess-1.7.1}/search/__init__.py +0 -0
  116. {voidaccess-1.6.3 → voidaccess-1.7.1}/search/circuit_breaker.py +0 -0
  117. {voidaccess-1.6.3 → voidaccess-1.7.1}/search/query_builder.py +0 -0
  118. {voidaccess-1.6.3 → voidaccess-1.7.1}/search/search.py +0 -0
  119. {voidaccess-1.6.3 → voidaccess-1.7.1}/setup.cfg +0 -0
  120. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/__init__.py +0 -0
  121. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/actor_profiles.py +0 -0
  122. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/blockchain.py +0 -0
  123. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/cache.py +0 -0
  124. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/cisa.py +0 -0
  125. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/data/__init__.py +0 -0
  126. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/dns_enrichment.py +0 -0
  127. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/domain_reputation.py +0 -0
  128. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/email_reputation.py +0 -0
  129. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/engines.py +0 -0
  130. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/enrichment.py +0 -0
  131. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/github_scraper.py +0 -0
  132. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/gitlab_scraper.py +0 -0
  133. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/hash_reputation.py +0 -0
  134. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/historical_intel.py +0 -0
  135. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/ip_reputation.py +0 -0
  136. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/paste_scraper.py +0 -0
  137. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/pastes.py +0 -0
  138. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/proxy_client.py +0 -0
  139. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/rss_scraper.py +0 -0
  140. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/seed_manager.py +0 -0
  141. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/seeds.py +0 -0
  142. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/shodan.py +0 -0
  143. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/telegram.py +0 -0
  144. {voidaccess-1.6.3 → voidaccess-1.7.1}/sources/virustotal.py +0 -0
  145. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_analysis_opsec.py +0 -0
  146. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_analysis_stylometry.py +0 -0
  147. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_analysis_temporal.py +0 -0
  148. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_api.py +0 -0
  149. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_api_monitors.py +0 -0
  150. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_blockchain.py +0 -0
  151. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_cli_proxy_config.py +0 -0
  152. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_config.py +0 -0
  153. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_crawler.py +0 -0
  154. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_db.py +0 -0
  155. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_dns_enrichment.py +0 -0
  156. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_domain_reputation.py +0 -0
  157. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_email_reputation.py +0 -0
  158. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_filter_e2e_manual.py +0 -0
  159. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_filter_parser_manual.py +0 -0
  160. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_fingerprint.py +0 -0
  161. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_github_scraper.py +0 -0
  162. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_gitlab_scraper.py +0 -0
  163. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_graph.py +0 -0
  164. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_hash_reputation.py +0 -0
  165. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_i18n.py +0 -0
  166. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_ip_reputation.py +0 -0
  167. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_llm.py +0 -0
  168. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_llm_utils.py +0 -0
  169. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_model_singleton.py +0 -0
  170. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_pagination.py +0 -0
  171. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_paste_scraper.py +0 -0
  172. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_proxy_client.py +0 -0
  173. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_rss_scraper.py +0 -0
  174. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_scrape_js.py +0 -0
  175. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_settings.py +0 -0
  176. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_snort_export.py +0 -0
  177. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_sources.py +0 -0
  178. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_sources_enrichment_new.py +0 -0
  179. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_vector.py +0 -0
  180. {voidaccess-1.6.3 → voidaccess-1.7.1}/tests/test_yara_export.py +0 -0
  181. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/__init__.py +0 -0
  182. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/async_utils.py +0 -0
  183. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/content_safety.py +0 -0
  184. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/defang.py +0 -0
  185. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/encryption.py +0 -0
  186. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/enrichment_cache.py +0 -0
  187. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/ioc_freshness.py +0 -0
  188. {voidaccess-1.6.3 → voidaccess-1.7.1}/utils/user_keys.py +0 -0
  189. {voidaccess-1.6.3 → voidaccess-1.7.1}/vector/embedder.py +0 -0
  190. {voidaccess-1.6.3 → voidaccess-1.7.1}/vector/model_singleton.py +0 -0
  191. {voidaccess-1.6.3 → voidaccess-1.7.1}/vector/search.py +0 -0
  192. {voidaccess-1.6.3 → voidaccess-1.7.1}/vector/store.py +0 -0
  193. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess/__init__.py +0 -0
  194. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess/config.py +0 -0
  195. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess/llm_utils.py +0 -0
  196. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess.egg-info/dependency_links.txt +0 -0
  197. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess.egg-info/entry_points.txt +0 -0
  198. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess.egg-info/top_level.txt +0 -0
  199. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/adapters/__init__.py +0 -0
  200. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/browser.py +0 -0
  201. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/__init__.py +0 -0
  202. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/actors.py +0 -0
  203. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/enrich.py +0 -0
  204. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/investigate.py +0 -0
  205. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/commands/show.py +0 -0
  206. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/display.py +0 -0
  207. {voidaccess-1.6.3 → voidaccess-1.7.1}/voidaccess_cli/tor_detect.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voidaccess
3
- Version: 1.6.3
3
+ Version: 1.7.1
4
4
  Summary: Dark web OSINT CLI — automated threat intelligence from query to report
5
5
  Author: VoidAccess
6
6
  License-Expression: MIT
@@ -20,10 +20,16 @@ Requires-Dist: typer>=0.12
20
20
  Requires-Dist: rich>=13
21
21
  Requires-Dist: textual>=0.60
22
22
  Requires-Dist: click>=8.0
23
+ Requires-Dist: fastapi>=0.115
23
24
  Requires-Dist: aiohttp>=3.9
24
25
  Requires-Dist: aiohttp-socks>=0.8
26
+ Requires-Dist: alembic>=1.13
27
+ Requires-Dist: apscheduler>=3.10
28
+ Requires-Dist: pillow>=10.0
25
29
  Requires-Dist: sqlalchemy>=2.0
26
30
  Requires-Dist: aiosqlite>=0.20
31
+ Requires-Dist: filelock>=3.14
32
+ Requires-Dist: numpy>=1.26
27
33
  Requires-Dist: langchain>=0.2
28
34
  Requires-Dist: langchain-openai>=0.1
29
35
  Requires-Dist: langchain-anthropic>=0.1
@@ -35,7 +41,19 @@ Requires-Dist: httpx>=0.27
35
41
  Requires-Dist: spacy>=3.7
36
42
  Requires-Dist: beautifulsoup4>=4.12
37
43
  Requires-Dist: feedparser>=6.0
44
+ Requires-Dist: networkx>=3.0
45
+ Requires-Dist: pydantic>=2.7
46
+ Requires-Dist: python-jose[cryptography]>=3.3
47
+ Requires-Dist: passlib[bcrypt]>=1.7
48
+ Requires-Dist: slowapi>=0.1.9
49
+ Requires-Dist: redis>=5.0
50
+ Requires-Dist: pyyaml>=6.0
51
+ Requires-Dist: openai>=1.30
52
+ Requires-Dist: cryptography>=42.0
38
53
  Requires-Dist: python-dateutil>=2.9
54
+ Requires-Dist: langdetect>=1.0
55
+ Requires-Dist: pyvis>=0.3
56
+ Requires-Dist: urllib3>=2.2
39
57
  Requires-Dist: trafilatura>=1.6
40
58
  Requires-Dist: requests>=2.31
41
59
  Requires-Dist: python-socks>=2.4
@@ -44,6 +62,25 @@ Requires-Dist: stix2>=3.0.2
44
62
  Provides-Extra: dev
45
63
  Requires-Dist: pytest; extra == "dev"
46
64
  Requires-Dist: pytest-asyncio; extra == "dev"
65
+ Provides-Extra: nlp
66
+ Requires-Dist: sentence-transformers>=3.0; extra == "nlp"
67
+ Requires-Dist: torch>=2.3; extra == "nlp"
68
+ Requires-Dist: transformers>=4.42; extra == "nlp"
69
+ Provides-Extra: vector
70
+ Requires-Dist: chromadb>=0.5; extra == "vector"
71
+ Requires-Dist: sentence-transformers>=3.0; extra == "vector"
72
+ Requires-Dist: torch>=2.3; extra == "vector"
73
+ Provides-Extra: telegram
74
+ Requires-Dist: telethon>=1.36; extra == "telegram"
75
+ Provides-Extra: js
76
+ Requires-Dist: playwright>=1.45; extra == "js"
77
+ Provides-Extra: all
78
+ Requires-Dist: chromadb>=0.5; extra == "all"
79
+ Requires-Dist: playwright>=1.45; extra == "all"
80
+ Requires-Dist: sentence-transformers>=3.0; extra == "all"
81
+ Requires-Dist: telethon>=1.36; extra == "all"
82
+ Requires-Dist: torch>=2.3; extra == "all"
83
+ Requires-Dist: transformers>=4.42; extra == "all"
47
84
  Dynamic: license-file
48
85
 
49
86
  <div align="center">
@@ -67,9 +104,17 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
67
104
 
68
105
  ---
69
106
 
70
- ## What's New in v1.6.3
107
+ ## What's New in v1.7.1
108
+ - STIX export now produces real bundles with entities and relationships again.
109
+ - Entity extraction on CVE/financial queries now returns the expected entity mix instead of collapsing to organization-name noise.
110
+ - Confidence scores now show multi-value spread that reflects source quality, extraction method, and corroboration.
111
+ - Entity readback now includes rows linked through `InvestigationEntityLink` and dedupes canonical collisions correctly.
71
112
 
72
- - **Release candidate alignment** — release metadata, package metadata, and docs now all report `v1.6.3`.
113
+ ---
114
+
115
+ ## What's New in the Previous Release
116
+
117
+ - **Dependency optional-extras split** — `sentence-transformers`, `torch`, `transformers`, `telethon`, and `playwright` are now optional extras: `voidaccess[nlp]`, `voidaccess[telegram]`, `voidaccess[js]`, and `voidaccess[all]`.
73
118
  - **Optional clearnet ScrapingAnt integration** — paste sites and RSS feeds can now be routed through ScrapingAnt. Affects clearnet scraping only; Tor, `.onion`, GitHub, and GitLab traffic are never affected.
74
119
  - **Three independent products** — Web Scraping API, Residential Proxy transport, and Datacenter Proxy transport are documented separately so the API key is not conflated with the proxy credentials.
75
120
  - **One-shot CLI flags** — `voidaccess investigate --use-scraping-api` and `voidaccess investigate --use-proxies` select the REST API or proxy transport for a single run.
@@ -79,7 +124,7 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
79
124
 
80
125
  ---
81
126
 
82
- ## What's New in v1.6.3
127
+ ## What's New in v1.6.4
83
128
 
84
129
  - 37 new entity types across crypto, credentials, messaging, and network/forensic indicators.
85
130
  - YARA, Snort, Suricata, and IOC package ZIP exports.
@@ -273,7 +318,7 @@ Export formats:
273
318
 
274
319
  ## Actor Intelligence
275
320
 
276
- VoidAccess v1.6.3 persists actor profiles across investigations in `actor_profiles`, with linked aliases and infrastructure in `actor_aliases` and `actor_infrastructure`. Profiles are populated from threat actor, ransomware group, and handle entities, then enriched with co-occurring infrastructure and timeline events.
321
+ VoidAccess v1.7.1 persists actor profiles across investigations in `actor_profiles`, with linked aliases and infrastructure in `actor_aliases` and `actor_infrastructure`. Profiles are populated from threat actor, ransomware group, and handle entities, then enriched with co-occurring infrastructure and timeline events.
277
322
 
278
323
  Cross-alias resolution scores five signals: shared infrastructure, shared PGP, string similarity, temporal co-activity, and co-investigation. Use `voidaccess actors` to list profiles, `voidaccess actor <handle>` for the full profile, `voidaccess actor <handle> --timeline` for chronology, and `voidaccess actor <handle> --note "text"` for analyst notes.
279
324
 
@@ -541,5 +586,3 @@ To report a security vulnerability, see [docs/SECURITY.md](docs/SECURITY.md).
541
586
  MIT License. See [LICENSE](LICENSE) for details.
542
587
 
543
588
 
544
-
545
-
@@ -19,9 +19,17 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
19
19
 
20
20
  ---
21
21
 
22
- ## What's New in v1.6.3
22
+ ## What's New in v1.7.1
23
+ - STIX export now produces real bundles with entities and relationships again.
24
+ - Entity extraction on CVE/financial queries now returns the expected entity mix instead of collapsing to organization-name noise.
25
+ - Confidence scores now show multi-value spread that reflects source quality, extraction method, and corroboration.
26
+ - Entity readback now includes rows linked through `InvestigationEntityLink` and dedupes canonical collisions correctly.
23
27
 
24
- - **Release candidate alignment** — release metadata, package metadata, and docs now all report `v1.6.3`.
28
+ ---
29
+
30
+ ## What's New in the Previous Release
31
+
32
+ - **Dependency optional-extras split** — `sentence-transformers`, `torch`, `transformers`, `telethon`, and `playwright` are now optional extras: `voidaccess[nlp]`, `voidaccess[telegram]`, `voidaccess[js]`, and `voidaccess[all]`.
25
33
  - **Optional clearnet ScrapingAnt integration** — paste sites and RSS feeds can now be routed through ScrapingAnt. Affects clearnet scraping only; Tor, `.onion`, GitHub, and GitLab traffic are never affected.
26
34
  - **Three independent products** — Web Scraping API, Residential Proxy transport, and Datacenter Proxy transport are documented separately so the API key is not conflated with the proxy credentials.
27
35
  - **One-shot CLI flags** — `voidaccess investigate --use-scraping-api` and `voidaccess investigate --use-proxies` select the REST API or proxy transport for a single run.
@@ -31,7 +39,7 @@ Commercial threat intelligence platforms often charge prohibitive annual fees fo
31
39
 
32
40
  ---
33
41
 
34
- ## What's New in v1.6.3
42
+ ## What's New in v1.6.4
35
43
 
36
44
  - 37 new entity types across crypto, credentials, messaging, and network/forensic indicators.
37
45
  - YARA, Snort, Suricata, and IOC package ZIP exports.
@@ -225,7 +233,7 @@ Export formats:
225
233
 
226
234
  ## Actor Intelligence
227
235
 
228
- VoidAccess v1.6.3 persists actor profiles across investigations in `actor_profiles`, with linked aliases and infrastructure in `actor_aliases` and `actor_infrastructure`. Profiles are populated from threat actor, ransomware group, and handle entities, then enriched with co-occurring infrastructure and timeline events.
236
+ VoidAccess v1.7.1 persists actor profiles across investigations in `actor_profiles`, with linked aliases and infrastructure in `actor_aliases` and `actor_infrastructure`. Profiles are populated from threat actor, ransomware group, and handle entities, then enriched with co-occurring infrastructure and timeline events.
229
237
 
230
238
  Cross-alias resolution scores five signals: shared infrastructure, shared PGP, string similarity, temporal co-activity, and co-investigation. Use `voidaccess actors` to list profiles, `voidaccess actor <handle>` for the full profile, `voidaccess actor <handle> --timeline` for chronology, and `voidaccess actor <handle> --note "text"` for analyst notes.
231
239
 
@@ -491,7 +499,5 @@ To report a security vulnerability, see [docs/SECURITY.md](docs/SECURITY.md).
491
499
  ## License
492
500
 
493
501
  MIT License. See [LICENSE](LICENSE) for details.
494
-
495
-
496
-
497
-
502
+
503
+
@@ -17,6 +17,7 @@ from __future__ import annotations
17
17
 
18
18
  import logging
19
19
  import os
20
+ import uuid
20
21
  from typing import Optional
21
22
 
22
23
  from fastapi import APIRouter, Depends, HTTPException, Query
@@ -99,7 +100,7 @@ def _user_owned_investigation_ids_subq(session, user_id: int):
99
100
 
100
101
  def _profile_accessible(session, profile_id: str, user_id: int) -> bool:
101
102
  """True when at least one investigation linked to the profile is owned by the user."""
102
- from db.models import ActorAlias, ActorInfrastructure, Investigation
103
+ from db.models import ActorAlias, ActorInfrastructure
103
104
 
104
105
  inv_ids_subq = _user_owned_investigation_ids_subq(session, user_id)
105
106
  alias_match = (
@@ -151,7 +152,6 @@ async def list_actors(
151
152
  ActorProfile,
152
153
  ActorAlias,
153
154
  ActorInfrastructure,
154
- Investigation,
155
155
  )
156
156
 
157
157
  try:
@@ -258,6 +258,35 @@ async def get_actor(
258
258
  return profile
259
259
 
260
260
 
261
+ @router.get("/{node_id}/profile")
262
+ async def get_actor_profile_by_node(
263
+ node_id: str,
264
+ investigation_id: str = Query(..., description="Investigation ID"),
265
+ current_user: CurrentUser = Depends(get_current_user),
266
+ ) -> dict:
267
+ """Return the graph actor profile for a node inside one investigation."""
268
+ _db_required()
269
+ try:
270
+ inv_uuid = uuid.UUID(investigation_id)
271
+ except ValueError:
272
+ raise HTTPException(status_code=422, detail="Invalid investigation ID format")
273
+ from db.queries import get_investigation_by_id_or_run
274
+ from graph import build_graph_from_db_cached, get_actor_profile
275
+
276
+ with _session() as session:
277
+ inv = get_investigation_by_id_or_run(session, inv_uuid)
278
+ if inv is None:
279
+ raise HTTPException(status_code=404, detail="Investigation not found")
280
+ if str(inv.user_id) != str(current_user.user.id):
281
+ raise HTTPException(status_code=403, detail="Forbidden")
282
+ graph = build_graph_from_db_cached(investigation_id=inv.id)
283
+
284
+ profile = get_actor_profile(graph, node_id)
285
+ if not profile:
286
+ raise HTTPException(status_code=404, detail="Graph node not found")
287
+ return profile
288
+
289
+
261
290
  @router.get("/{handle}/investigations")
262
291
  async def get_actor_investigations(
263
292
  handle: str,
@@ -732,4 +761,4 @@ def uuid_value(s):
732
761
  import uuid as _uuid
733
762
  return _uuid.UUID(str(s))
734
763
  except (ValueError, TypeError):
735
- return None
764
+ return None