dd-agents 0.4.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 (312) hide show
  1. dd_agents-0.4.1/.claude/agents/code-reviewer.md +24 -0
  2. dd_agents-0.4.1/.claude/agents/test-runner.md +21 -0
  3. dd_agents-0.4.1/.claude/settings.json +62 -0
  4. dd_agents-0.4.1/.dockerignore +21 -0
  5. dd_agents-0.4.1/.env.example +22 -0
  6. dd_agents-0.4.1/.github/FUNDING.yml +1 -0
  7. dd_agents-0.4.1/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  8. dd_agents-0.4.1/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  9. dd_agents-0.4.1/.github/ISSUE_TEMPLATE/question.md +13 -0
  10. dd_agents-0.4.1/.github/pull_request_template.md +17 -0
  11. dd_agents-0.4.1/.github/workflows/ci.yml +162 -0
  12. dd_agents-0.4.1/.github/workflows/release.yml +174 -0
  13. dd_agents-0.4.1/.gitignore +60 -0
  14. dd_agents-0.4.1/.pre-commit-config.yaml +20 -0
  15. dd_agents-0.4.1/CHANGELOG.md +287 -0
  16. dd_agents-0.4.1/CLAUDE.md +164 -0
  17. dd_agents-0.4.1/CODE_OF_CONDUCT.md +61 -0
  18. dd_agents-0.4.1/CONTRIBUTING.md +103 -0
  19. dd_agents-0.4.1/Dockerfile +33 -0
  20. dd_agents-0.4.1/IMPLEMENTATION_PLAN.md +328 -0
  21. dd_agents-0.4.1/LICENSE +190 -0
  22. dd_agents-0.4.1/Makefile +46 -0
  23. dd_agents-0.4.1/NOTICE +20 -0
  24. dd_agents-0.4.1/PKG-INFO +370 -0
  25. dd_agents-0.4.1/PRODUCTION_HARDENING_PLAN.md +955 -0
  26. dd_agents-0.4.1/README.md +316 -0
  27. dd_agents-0.4.1/SECURITY.md +34 -0
  28. dd_agents-0.4.1/config/deal-config.template.json +118 -0
  29. dd_agents-0.4.1/config/report_schema.json +486 -0
  30. dd_agents-0.4.1/docs/extraction-knowledge-base.md +2346 -0
  31. dd_agents-0.4.1/docs/plan/01-architecture-decisions.md +273 -0
  32. dd_agents-0.4.1/docs/plan/02-system-architecture.md +535 -0
  33. dd_agents-0.4.1/docs/plan/03-project-structure.md +451 -0
  34. dd_agents-0.4.1/docs/plan/04-data-models.md +1569 -0
  35. dd_agents-0.4.1/docs/plan/05-orchestrator.md +1653 -0
  36. dd_agents-0.4.1/docs/plan/06-agents.md +1039 -0
  37. dd_agents-0.4.1/docs/plan/07-tools-and-hooks.md +1396 -0
  38. dd_agents-0.4.1/docs/plan/08-extraction.md +971 -0
  39. dd_agents-0.4.1/docs/plan/09-entity-resolution.md +1228 -0
  40. dd_agents-0.4.1/docs/plan/10-reporting.md +993 -0
  41. dd_agents-0.4.1/docs/plan/11-qa-validation.md +1362 -0
  42. dd_agents-0.4.1/docs/plan/12-error-recovery.md +1469 -0
  43. dd_agents-0.4.1/docs/plan/13-multi-project.md +436 -0
  44. dd_agents-0.4.1/docs/plan/14-vector-store.md +570 -0
  45. dd_agents-0.4.1/docs/plan/15-testing-deployment.md +961 -0
  46. dd_agents-0.4.1/docs/plan/16-migration.md +383 -0
  47. dd_agents-0.4.1/docs/plan/17-file-manifest.md +251 -0
  48. dd_agents-0.4.1/docs/plan/18-implementation-order.md +442 -0
  49. dd_agents-0.4.1/docs/plan/19-vector-graph-db-comparison.md +796 -0
  50. dd_agents-0.4.1/docs/plan/20-cross-document-analysis.md +1337 -0
  51. dd_agents-0.4.1/docs/plan/21-ontology-and-reasoning.md +1526 -0
  52. dd_agents-0.4.1/docs/plan/22-llm-robustness.md +829 -0
  53. dd_agents-0.4.1/docs/plan/PLAN.md +162 -0
  54. dd_agents-0.4.1/docs/plan/structured-output-plan.md +78 -0
  55. dd_agents-0.4.1/docs/search-guide.md +382 -0
  56. dd_agents-0.4.1/docs/user-guide/cli-reference.md +469 -0
  57. dd_agents-0.4.1/docs/user-guide/deal-configuration.md +352 -0
  58. dd_agents-0.4.1/docs/user-guide/getting-started.md +250 -0
  59. dd_agents-0.4.1/docs/user-guide/reading-report.md +228 -0
  60. dd_agents-0.4.1/docs/user-guide/running-pipeline.md +210 -0
  61. dd_agents-0.4.1/examples/quickstart/README.md +221 -0
  62. dd_agents-0.4.1/examples/quickstart/deal-config.json +129 -0
  63. dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Acme_Corp/contract_acme.pdf.md +39 -0
  64. dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Acme_Corp/invoice_2024.xlsx.md +39 -0
  65. dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Beta_Inc/agreement_beta.pdf.md +55 -0
  66. dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupB/Gamma_LLC/license_gamma.docx.md +72 -0
  67. dd_agents-0.4.1/examples/quickstart/sample_data_room/_reference/buyer_overview.pdf.md +77 -0
  68. dd_agents-0.4.1/examples/search/change_of_control.json +30 -0
  69. dd_agents-0.4.1/pyproject.toml +112 -0
  70. dd_agents-0.4.1/scripts/post-edit-lint.sh +16 -0
  71. dd_agents-0.4.1/scripts/pre-commit-gate.sh +31 -0
  72. dd_agents-0.4.1/scripts/run-quality-gates.sh +16 -0
  73. dd_agents-0.4.1/src/dd_agents/__init__.py +5 -0
  74. dd_agents-0.4.1/src/dd_agents/agents/__init__.py +88 -0
  75. dd_agents-0.4.1/src/dd_agents/agents/acquirer_intelligence.py +220 -0
  76. dd_agents-0.4.1/src/dd_agents/agents/base.py +584 -0
  77. dd_agents-0.4.1/src/dd_agents/agents/cost_tracker.py +205 -0
  78. dd_agents-0.4.1/src/dd_agents/agents/executive_synthesis.py +143 -0
  79. dd_agents-0.4.1/src/dd_agents/agents/judge.py +436 -0
  80. dd_agents-0.4.1/src/dd_agents/agents/prompt_builder.py +1408 -0
  81. dd_agents-0.4.1/src/dd_agents/agents/prompt_templates.py +450 -0
  82. dd_agents-0.4.1/src/dd_agents/agents/red_flag_scanner.py +199 -0
  83. dd_agents-0.4.1/src/dd_agents/agents/specialists.py +431 -0
  84. dd_agents-0.4.1/src/dd_agents/assessment.py +291 -0
  85. dd_agents-0.4.1/src/dd_agents/cli.py +1426 -0
  86. dd_agents-0.4.1/src/dd_agents/cli_auto_config.py +1061 -0
  87. dd_agents-0.4.1/src/dd_agents/cli_init.py +245 -0
  88. dd_agents-0.4.1/src/dd_agents/cli_logging.py +87 -0
  89. dd_agents-0.4.1/src/dd_agents/config.py +130 -0
  90. dd_agents-0.4.1/src/dd_agents/entity_resolution/__init__.py +15 -0
  91. dd_agents-0.4.1/src/dd_agents/entity_resolution/cache.py +287 -0
  92. dd_agents-0.4.1/src/dd_agents/entity_resolution/dedup.py +63 -0
  93. dd_agents-0.4.1/src/dd_agents/entity_resolution/logging.py +86 -0
  94. dd_agents-0.4.1/src/dd_agents/entity_resolution/matcher.py +660 -0
  95. dd_agents-0.4.1/src/dd_agents/entity_resolution/safe_name.py +11 -0
  96. dd_agents-0.4.1/src/dd_agents/errors.py +120 -0
  97. dd_agents-0.4.1/src/dd_agents/extraction/__init__.py +17 -0
  98. dd_agents-0.4.1/src/dd_agents/extraction/_constants.py +28 -0
  99. dd_agents-0.4.1/src/dd_agents/extraction/_helpers.py +25 -0
  100. dd_agents-0.4.1/src/dd_agents/extraction/backend.py +99 -0
  101. dd_agents-0.4.1/src/dd_agents/extraction/cache.py +143 -0
  102. dd_agents-0.4.1/src/dd_agents/extraction/coordinates.py +95 -0
  103. dd_agents-0.4.1/src/dd_agents/extraction/glm_ocr.py +482 -0
  104. dd_agents-0.4.1/src/dd_agents/extraction/language_detect.py +88 -0
  105. dd_agents-0.4.1/src/dd_agents/extraction/layout_pdf.py +172 -0
  106. dd_agents-0.4.1/src/dd_agents/extraction/markitdown.py +159 -0
  107. dd_agents-0.4.1/src/dd_agents/extraction/ocr.py +153 -0
  108. dd_agents-0.4.1/src/dd_agents/extraction/ocr_registry.py +117 -0
  109. dd_agents-0.4.1/src/dd_agents/extraction/pipeline.py +1253 -0
  110. dd_agents-0.4.1/src/dd_agents/extraction/quality.py +166 -0
  111. dd_agents-0.4.1/src/dd_agents/extraction/reference_downloader.py +404 -0
  112. dd_agents-0.4.1/src/dd_agents/hooks/__init__.py +45 -0
  113. dd_agents-0.4.1/src/dd_agents/hooks/post_tool.py +135 -0
  114. dd_agents-0.4.1/src/dd_agents/hooks/pre_tool.py +220 -0
  115. dd_agents-0.4.1/src/dd_agents/hooks/stop.py +101 -0
  116. dd_agents-0.4.1/src/dd_agents/inventory/__init__.py +17 -0
  117. dd_agents-0.4.1/src/dd_agents/inventory/customers.py +253 -0
  118. dd_agents-0.4.1/src/dd_agents/inventory/discovery.py +153 -0
  119. dd_agents-0.4.1/src/dd_agents/inventory/integrity.py +91 -0
  120. dd_agents-0.4.1/src/dd_agents/inventory/mentions.py +142 -0
  121. dd_agents-0.4.1/src/dd_agents/inventory/reference_files.py +222 -0
  122. dd_agents-0.4.1/src/dd_agents/models/__init__.py +290 -0
  123. dd_agents-0.4.1/src/dd_agents/models/audit.py +159 -0
  124. dd_agents-0.4.1/src/dd_agents/models/config.py +334 -0
  125. dd_agents-0.4.1/src/dd_agents/models/entity.py +114 -0
  126. dd_agents-0.4.1/src/dd_agents/models/enums.py +192 -0
  127. dd_agents-0.4.1/src/dd_agents/models/finding.py +431 -0
  128. dd_agents-0.4.1/src/dd_agents/models/governance.py +70 -0
  129. dd_agents-0.4.1/src/dd_agents/models/inventory.py +105 -0
  130. dd_agents-0.4.1/src/dd_agents/models/manifest.py +64 -0
  131. dd_agents-0.4.1/src/dd_agents/models/numerical.py +35 -0
  132. dd_agents-0.4.1/src/dd_agents/models/ontology.py +139 -0
  133. dd_agents-0.4.1/src/dd_agents/models/persistence.py +178 -0
  134. dd_agents-0.4.1/src/dd_agents/models/project.py +48 -0
  135. dd_agents-0.4.1/src/dd_agents/models/reporting.py +186 -0
  136. dd_agents-0.4.1/src/dd_agents/models/search.py +183 -0
  137. dd_agents-0.4.1/src/dd_agents/net_safety.py +178 -0
  138. dd_agents-0.4.1/src/dd_agents/orchestrator/__init__.py +13 -0
  139. dd_agents-0.4.1/src/dd_agents/orchestrator/batch_scheduler.py +148 -0
  140. dd_agents-0.4.1/src/dd_agents/orchestrator/checkpoints.py +351 -0
  141. dd_agents-0.4.1/src/dd_agents/orchestrator/engine.py +3126 -0
  142. dd_agents-0.4.1/src/dd_agents/orchestrator/precedence.py +67 -0
  143. dd_agents-0.4.1/src/dd_agents/orchestrator/progress.py +101 -0
  144. dd_agents-0.4.1/src/dd_agents/orchestrator/state.py +279 -0
  145. dd_agents-0.4.1/src/dd_agents/orchestrator/steps.py +120 -0
  146. dd_agents-0.4.1/src/dd_agents/orchestrator/team.py +843 -0
  147. dd_agents-0.4.1/src/dd_agents/persistence/__init__.py +16 -0
  148. dd_agents-0.4.1/src/dd_agents/persistence/concurrency.py +136 -0
  149. dd_agents-0.4.1/src/dd_agents/persistence/incremental.py +256 -0
  150. dd_agents-0.4.1/src/dd_agents/persistence/project_registry.py +196 -0
  151. dd_agents-0.4.1/src/dd_agents/persistence/run_manager.py +273 -0
  152. dd_agents-0.4.1/src/dd_agents/persistence/tiers.py +223 -0
  153. dd_agents-0.4.1/src/dd_agents/precedence/__init__.py +1 -0
  154. dd_agents-0.4.1/src/dd_agents/precedence/folder_priority.py +113 -0
  155. dd_agents-0.4.1/src/dd_agents/precedence/scorer.py +75 -0
  156. dd_agents-0.4.1/src/dd_agents/precedence/version_chains.py +210 -0
  157. dd_agents-0.4.1/src/dd_agents/query/__init__.py +16 -0
  158. dd_agents-0.4.1/src/dd_agents/query/engine.py +247 -0
  159. dd_agents-0.4.1/src/dd_agents/query/indexer.py +131 -0
  160. dd_agents-0.4.1/src/dd_agents/reasoning/__init__.py +1 -0
  161. dd_agents-0.4.1/src/dd_agents/reasoning/contract_graph.py +347 -0
  162. dd_agents-0.4.1/src/dd_agents/reporting/__init__.py +22 -0
  163. dd_agents-0.4.1/src/dd_agents/reporting/clause_library.py +232 -0
  164. dd_agents-0.4.1/src/dd_agents/reporting/computed_metrics.py +3192 -0
  165. dd_agents-0.4.1/src/dd_agents/reporting/contract_dates.py +273 -0
  166. dd_agents-0.4.1/src/dd_agents/reporting/diff.py +341 -0
  167. dd_agents-0.4.1/src/dd_agents/reporting/excel.py +716 -0
  168. dd_agents-0.4.1/src/dd_agents/reporting/export.py +109 -0
  169. dd_agents-0.4.1/src/dd_agents/reporting/html.py +278 -0
  170. dd_agents-0.4.1/src/dd_agents/reporting/html_analysis.py +328 -0
  171. dd_agents-0.4.1/src/dd_agents/reporting/html_base.py +992 -0
  172. dd_agents-0.4.1/src/dd_agents/reporting/html_clause_library.py +126 -0
  173. dd_agents-0.4.1/src/dd_agents/reporting/html_compliance.py +124 -0
  174. dd_agents-0.4.1/src/dd_agents/reporting/html_cross.py +80 -0
  175. dd_agents-0.4.1/src/dd_agents/reporting/html_cross_domain.py +65 -0
  176. dd_agents-0.4.1/src/dd_agents/reporting/html_customers.py +149 -0
  177. dd_agents-0.4.1/src/dd_agents/reporting/html_dashboard.py +258 -0
  178. dd_agents-0.4.1/src/dd_agents/reporting/html_diff.py +146 -0
  179. dd_agents-0.4.1/src/dd_agents/reporting/html_discount.py +110 -0
  180. dd_agents-0.4.1/src/dd_agents/reporting/html_domains.py +102 -0
  181. dd_agents-0.4.1/src/dd_agents/reporting/html_entity.py +99 -0
  182. dd_agents-0.4.1/src/dd_agents/reporting/html_executive.py +275 -0
  183. dd_agents-0.4.1/src/dd_agents/reporting/html_financial.py +177 -0
  184. dd_agents-0.4.1/src/dd_agents/reporting/html_findings_table.py +115 -0
  185. dd_agents-0.4.1/src/dd_agents/reporting/html_gaps.py +147 -0
  186. dd_agents-0.4.1/src/dd_agents/reporting/html_governance.py +178 -0
  187. dd_agents-0.4.1/src/dd_agents/reporting/html_integration_playbook.py +113 -0
  188. dd_agents-0.4.1/src/dd_agents/reporting/html_ip_risk.py +89 -0
  189. dd_agents-0.4.1/src/dd_agents/reporting/html_key_employee.py +77 -0
  190. dd_agents-0.4.1/src/dd_agents/reporting/html_liability.py +90 -0
  191. dd_agents-0.4.1/src/dd_agents/reporting/html_methodology.py +98 -0
  192. dd_agents-0.4.1/src/dd_agents/reporting/html_product_adoption.py +81 -0
  193. dd_agents-0.4.1/src/dd_agents/reporting/html_quality.py +165 -0
  194. dd_agents-0.4.1/src/dd_agents/reporting/html_recommendations.py +65 -0
  195. dd_agents-0.4.1/src/dd_agents/reporting/html_red_flags.py +148 -0
  196. dd_agents-0.4.1/src/dd_agents/reporting/html_renewal.py +93 -0
  197. dd_agents-0.4.1/src/dd_agents/reporting/html_risk.py +45 -0
  198. dd_agents-0.4.1/src/dd_agents/reporting/html_saas_metrics.py +180 -0
  199. dd_agents-0.4.1/src/dd_agents/reporting/html_strategy.py +113 -0
  200. dd_agents-0.4.1/src/dd_agents/reporting/html_tech_stack.py +88 -0
  201. dd_agents-0.4.1/src/dd_agents/reporting/html_timeline.py +91 -0
  202. dd_agents-0.4.1/src/dd_agents/reporting/html_valuation.py +112 -0
  203. dd_agents-0.4.1/src/dd_agents/reporting/merge.py +1477 -0
  204. dd_agents-0.4.1/src/dd_agents/reporting/pdf_export.py +134 -0
  205. dd_agents-0.4.1/src/dd_agents/reporting/templates.py +245 -0
  206. dd_agents-0.4.1/src/dd_agents/search/__init__.py +19 -0
  207. dd_agents-0.4.1/src/dd_agents/search/analyzer.py +1254 -0
  208. dd_agents-0.4.1/src/dd_agents/search/chunker.py +405 -0
  209. dd_agents-0.4.1/src/dd_agents/search/citation_verifier.py +359 -0
  210. dd_agents-0.4.1/src/dd_agents/search/excel_writer.py +302 -0
  211. dd_agents-0.4.1/src/dd_agents/search/runner.py +399 -0
  212. dd_agents-0.4.1/src/dd_agents/testing/__init__.py +7 -0
  213. dd_agents-0.4.1/src/dd_agents/testing/data_generator.py +189 -0
  214. dd_agents-0.4.1/src/dd_agents/tools/__init__.py +35 -0
  215. dd_agents-0.4.1/src/dd_agents/tools/get_customer_files.py +45 -0
  216. dd_agents-0.4.1/src/dd_agents/tools/read_office.py +245 -0
  217. dd_agents-0.4.1/src/dd_agents/tools/report_progress.py +44 -0
  218. dd_agents-0.4.1/src/dd_agents/tools/resolve_entity.py +50 -0
  219. dd_agents-0.4.1/src/dd_agents/tools/search_similar.py +99 -0
  220. dd_agents-0.4.1/src/dd_agents/tools/server.py +289 -0
  221. dd_agents-0.4.1/src/dd_agents/tools/validate_finding.py +105 -0
  222. dd_agents-0.4.1/src/dd_agents/tools/validate_gap.py +55 -0
  223. dd_agents-0.4.1/src/dd_agents/tools/validate_manifest.py +70 -0
  224. dd_agents-0.4.1/src/dd_agents/tools/verify_citation.py +145 -0
  225. dd_agents-0.4.1/src/dd_agents/tools/web_research.py +65 -0
  226. dd_agents-0.4.1/src/dd_agents/utils/__init__.py +9 -0
  227. dd_agents-0.4.1/src/dd_agents/utils/constants.py +115 -0
  228. dd_agents-0.4.1/src/dd_agents/utils/naming.py +168 -0
  229. dd_agents-0.4.1/src/dd_agents/validation/__init__.py +17 -0
  230. dd_agents-0.4.1/src/dd_agents/validation/coverage.py +137 -0
  231. dd_agents-0.4.1/src/dd_agents/validation/dod.py +1207 -0
  232. dd_agents-0.4.1/src/dd_agents/validation/numerical_audit.py +603 -0
  233. dd_agents-0.4.1/src/dd_agents/validation/pre_merge.py +427 -0
  234. dd_agents-0.4.1/src/dd_agents/validation/qa_audit.py +1049 -0
  235. dd_agents-0.4.1/src/dd_agents/validation/schema_validator.py +353 -0
  236. dd_agents-0.4.1/src/dd_agents/vector_store/__init__.py +47 -0
  237. dd_agents-0.4.1/src/dd_agents/vector_store/embeddings.py +168 -0
  238. dd_agents-0.4.1/src/dd_agents/vector_store/store.py +227 -0
  239. dd_agents-0.4.1/tests/conftest.py +149 -0
  240. dd_agents-0.4.1/tests/e2e/__init__.py +0 -0
  241. dd_agents-0.4.1/tests/e2e/conftest.py +163 -0
  242. dd_agents-0.4.1/tests/e2e/test_full_run.py +219 -0
  243. dd_agents-0.4.1/tests/fixtures/deal_config_invalid.json +74 -0
  244. dd_agents-0.4.1/tests/fixtures/deal_config_minimal.json +15 -0
  245. dd_agents-0.4.1/tests/fixtures/deal_config_valid.json +202 -0
  246. dd_agents-0.4.1/tests/integration/__init__.py +0 -0
  247. dd_agents-0.4.1/tests/integration/test_pipeline_integration.py +651 -0
  248. dd_agents-0.4.1/tests/unit/test_acquirer_intelligence.py +329 -0
  249. dd_agents-0.4.1/tests/unit/test_agents.py +2266 -0
  250. dd_agents-0.4.1/tests/unit/test_assessment.py +143 -0
  251. dd_agents-0.4.1/tests/unit/test_batch_scheduler.py +177 -0
  252. dd_agents-0.4.1/tests/unit/test_citation_verifier.py +795 -0
  253. dd_agents-0.4.1/tests/unit/test_cli_auto_config.py +1594 -0
  254. dd_agents-0.4.1/tests/unit/test_cli_init.py +723 -0
  255. dd_agents-0.4.1/tests/unit/test_coc_termination_nuance.py +433 -0
  256. dd_agents-0.4.1/tests/unit/test_computed_metrics.py +746 -0
  257. dd_agents-0.4.1/tests/unit/test_confidence_calibration.py +187 -0
  258. dd_agents-0.4.1/tests/unit/test_config_loader.py +224 -0
  259. dd_agents-0.4.1/tests/unit/test_constants.py +61 -0
  260. dd_agents-0.4.1/tests/unit/test_cost_tracker.py +207 -0
  261. dd_agents-0.4.1/tests/unit/test_data_generator.py +167 -0
  262. dd_agents-0.4.1/tests/unit/test_entity_dedup.py +190 -0
  263. dd_agents-0.4.1/tests/unit/test_entity_resolution.py +724 -0
  264. dd_agents-0.4.1/tests/unit/test_errors.py +157 -0
  265. dd_agents-0.4.1/tests/unit/test_executive_synthesis.py +503 -0
  266. dd_agents-0.4.1/tests/unit/test_extraction.py +2329 -0
  267. dd_agents-0.4.1/tests/unit/test_extraction_backend.py +324 -0
  268. dd_agents-0.4.1/tests/unit/test_financial_impact.py +400 -0
  269. dd_agents-0.4.1/tests/unit/test_glm_ocr.py +595 -0
  270. dd_agents-0.4.1/tests/unit/test_hooks.py +529 -0
  271. dd_agents-0.4.1/tests/unit/test_html_renderers.py +2207 -0
  272. dd_agents-0.4.1/tests/unit/test_html_report.py +673 -0
  273. dd_agents-0.4.1/tests/unit/test_inventory.py +729 -0
  274. dd_agents-0.4.1/tests/unit/test_layout_pdf.py +213 -0
  275. dd_agents-0.4.1/tests/unit/test_models/__init__.py +0 -0
  276. dd_agents-0.4.1/tests/unit/test_models/test_config.py +747 -0
  277. dd_agents-0.4.1/tests/unit/test_naming.py +133 -0
  278. dd_agents-0.4.1/tests/unit/test_net_safety.py +204 -0
  279. dd_agents-0.4.1/tests/unit/test_ocr_registry.py +151 -0
  280. dd_agents-0.4.1/tests/unit/test_ontology.py +396 -0
  281. dd_agents-0.4.1/tests/unit/test_orchestrator.py +3721 -0
  282. dd_agents-0.4.1/tests/unit/test_persistence.py +795 -0
  283. dd_agents-0.4.1/tests/unit/test_pre_merge.py +444 -0
  284. dd_agents-0.4.1/tests/unit/test_precedence.py +954 -0
  285. dd_agents-0.4.1/tests/unit/test_production_hardening.py +618 -0
  286. dd_agents-0.4.1/tests/unit/test_project_registry.py +228 -0
  287. dd_agents-0.4.1/tests/unit/test_read_office.py +439 -0
  288. dd_agents-0.4.1/tests/unit/test_red_flag_scanner.py +292 -0
  289. dd_agents-0.4.1/tests/unit/test_reference_downloader.py +402 -0
  290. dd_agents-0.4.1/tests/unit/test_report_rendering.py +1041 -0
  291. dd_agents-0.4.1/tests/unit/test_report_templates.py +200 -0
  292. dd_agents-0.4.1/tests/unit/test_reporting.py +3084 -0
  293. dd_agents-0.4.1/tests/unit/test_saas_metrics.py +176 -0
  294. dd_agents-0.4.1/tests/unit/test_search_analyzer.py +2620 -0
  295. dd_agents-0.4.1/tests/unit/test_search_chunker.py +358 -0
  296. dd_agents-0.4.1/tests/unit/test_search_cli.py +77 -0
  297. dd_agents-0.4.1/tests/unit/test_search_excel.py +344 -0
  298. dd_agents-0.4.1/tests/unit/test_search_models.py +270 -0
  299. dd_agents-0.4.1/tests/unit/test_semantic_dedup.py +119 -0
  300. dd_agents-0.4.1/tests/unit/test_severity_recalibration.py +315 -0
  301. dd_agents-0.4.1/tests/unit/test_severity_rubric.py +160 -0
  302. dd_agents-0.4.1/tests/unit/test_tools.py +589 -0
  303. dd_agents-0.4.1/tests/unit/test_type_safety.py +179 -0
  304. dd_agents-0.4.1/tests/unit/test_validation.py +3304 -0
  305. dd_agents-0.4.1/tests/unit/test_visual_grounding.py +350 -0
  306. dd_agents-0.4.1/tests/unit/test_wave1_issues.py +1170 -0
  307. dd_agents-0.4.1/tests/unit/test_wave2_export.py +183 -0
  308. dd_agents-0.4.1/tests/unit/test_wave2_metrics.py +812 -0
  309. dd_agents-0.4.1/tests/unit/test_wave2_renderers.py +761 -0
  310. dd_agents-0.4.1/tests/unit/test_wave3_features.py +548 -0
  311. dd_agents-0.4.1/tests/unit/test_wave3_polish.py +1032 -0
  312. dd_agents-0.4.1/tests/unit/test_wave_final.py +476 -0
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: code-reviewer
3
+ description: Reviews implementation against spec docs for correctness and completeness
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ ---
7
+
8
+ You are a senior code reviewer for the due-diligence-agents project. Your job is to verify that implementation matches the specification.
9
+
10
+ For each file you review:
11
+ 1. Read the implementation file
12
+ 2. Read the corresponding spec doc (see CLAUDE.md for the mapping)
13
+ 3. Check: Does the implementation cover all requirements in the spec?
14
+ 4. Check: Are all edge cases from the spec handled?
15
+ 5. Check: Do the tests cover the key behaviors?
16
+ 6. Check: Does the code follow project conventions (see CLAUDE.md)?
17
+
18
+ Report:
19
+ - MISSING: Features in spec but not implemented
20
+ - WRONG: Implementation that contradicts the spec
21
+ - UNTESTED: Code paths without test coverage
22
+ - STYLE: Convention violations
23
+
24
+ Be specific — include file paths, line numbers, and spec section references.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: test-runner
3
+ description: Runs tests and reports results with diagnostics
4
+ tools: Bash, Read, Grep, Glob
5
+ model: haiku
6
+ ---
7
+
8
+ You are a test runner for the due-diligence-agents project.
9
+
10
+ Run the requested tests and report results clearly:
11
+ 1. Run `pytest` with the specified path and flags
12
+ 2. If tests fail, read the failing test file and the source file it tests
13
+ 3. Identify the root cause of each failure
14
+ 4. Report: test name, expected vs actual, likely fix
15
+
16
+ Commands:
17
+ - Unit tests: `python -m pytest tests/unit/ -x -q`
18
+ - Integration: `python -m pytest tests/integration/ -x -q`
19
+ - Specific file: `python -m pytest <path> -x -v`
20
+ - Type check: `python -m mypy src/ --strict`
21
+ - Lint: `python -m ruff check src/ tests/`
@@ -0,0 +1,62 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python:*)",
5
+ "Bash(python3:*)",
6
+ "Bash(pip:*)",
7
+ "Bash(pytest:*)",
8
+ "Bash(mypy:*)",
9
+ "Bash(ruff:*)",
10
+ "Bash(git:*)",
11
+ "Bash(ls:*)",
12
+ "Bash(mkdir:*)",
13
+ "Bash(mv:*)",
14
+ "Bash(cp:*)",
15
+ "Bash(touch:*)",
16
+ "Bash(chmod:*)",
17
+ "Bash(head:*)",
18
+ "Bash(tail:*)",
19
+ "Bash(find:*)",
20
+ "Bash(grep:*)",
21
+ "Bash(rg:*)",
22
+ "Bash(cat:*)",
23
+ "Bash(wc:*)",
24
+ "Bash(diff:*)",
25
+ "Bash(echo:*)",
26
+ "Bash(docker:*)",
27
+ "Bash(docker-compose:*)",
28
+ "Bash(dd-agents:*)",
29
+ "Write(*)",
30
+ "Edit(*)",
31
+ "Read(*)"
32
+ ],
33
+ "deny": [
34
+ "Bash(rm -rf /*)",
35
+ "Bash(rm -rf ~/*)"
36
+ ]
37
+ },
38
+ "hooks": {
39
+ "PostToolUse": [
40
+ {
41
+ "matcher": "Edit|Write",
42
+ "hooks": [
43
+ {
44
+ "type": "command",
45
+ "command": "bash scripts/post-edit-lint.sh"
46
+ }
47
+ ]
48
+ }
49
+ ],
50
+ "PreToolUse": [
51
+ {
52
+ "matcher": "Bash",
53
+ "hooks": [
54
+ {
55
+ "type": "command",
56
+ "command": "bash scripts/pre-commit-gate.sh"
57
+ }
58
+ ]
59
+ }
60
+ ]
61
+ }
62
+ }
@@ -0,0 +1,21 @@
1
+ .git
2
+ __pycache__
3
+ *.pyc
4
+ *.pyo
5
+ .pytest_cache
6
+ .mypy_cache
7
+ .ruff_cache
8
+ tests/
9
+ docs/
10
+ .github/
11
+ .claude/
12
+ *.egg-info
13
+ dist/
14
+ build/
15
+ .env
16
+ .venv
17
+ .tox
18
+ .nox
19
+ *.egg
20
+ .coverage
21
+ htmlcov/
@@ -0,0 +1,22 @@
1
+ # ==============================================================================
2
+ # Due Diligence Agent SDK — Environment Variables
3
+ # ==============================================================================
4
+ # Copy this file to .env and uncomment/set the variables you need.
5
+ # Only ONE API access method is required (Option A or B).
6
+
7
+ # --- API Access (required — choose one) ---
8
+
9
+ # Option A: Anthropic API (recommended for new developers)
10
+ # ANTHROPIC_API_KEY=sk-ant-...
11
+
12
+ # Option B: AWS Bedrock
13
+ # AWS_PROFILE=default
14
+ # AWS_REGION=us-east-1
15
+
16
+ # --- Optional ---
17
+
18
+ # ChromaDB: persist vector search index to disk (default: memory-only)
19
+ # CHROMA_PERSIST_DIR=./chroma_data
20
+
21
+ # Logging level (default: INFO). Set to DEBUG for verbose pipeline output.
22
+ # LOG_LEVEL=INFO
@@ -0,0 +1 @@
1
+ github: zoharbabin
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug in dd-agents
4
+ labels: bug
5
+ ---
6
+
7
+ ## Describe the Bug
8
+
9
+ <!-- A clear, concise description of what the bug is. -->
10
+
11
+ ## Steps to Reproduce
12
+
13
+ 1.
14
+ 2.
15
+ 3.
16
+
17
+ ## Expected Behavior
18
+
19
+ <!-- What you expected to happen. -->
20
+
21
+ ## Actual Behavior
22
+
23
+ <!-- What actually happened. Include error messages or stack traces if available. -->
24
+
25
+ ## Environment
26
+
27
+ - **OS**: <!-- e.g., macOS 14.5, Ubuntu 24.04 -->
28
+ - **Python version**: <!-- e.g., 3.12.3 -->
29
+ - **dd-agents version**: <!-- e.g., 0.1.0 -->
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest a new feature or improvement
4
+ labels: enhancement
5
+ ---
6
+
7
+ ## Problem Description
8
+
9
+ <!-- What problem does this solve? Why is it needed? -->
10
+
11
+ ## Proposed Solution
12
+
13
+ <!-- How should this work? Be specific about expected behavior. -->
14
+
15
+ ## Alternatives Considered
16
+
17
+ <!-- What other approaches did you consider and why were they ruled out? -->
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: Question
3
+ about: Ask a question about using dd-agents
4
+ labels: question
5
+ ---
6
+
7
+ ## Question
8
+
9
+ <!-- What would you like to know? -->
10
+
11
+ ## Context
12
+
13
+ <!-- What are you trying to accomplish? What have you tried so far? -->
@@ -0,0 +1,17 @@
1
+ ## Summary
2
+
3
+ <!-- What does this PR do and why? -->
4
+
5
+ ## Changes
6
+
7
+ -
8
+
9
+ ## Testing
10
+
11
+ <!-- How was this verified? Which tests were added/updated? -->
12
+
13
+ ## Checklist
14
+
15
+ - [ ] Tests added or updated
16
+ - [ ] `make verify` passes (lint + typecheck + tests)
17
+ - [ ] No breaking changes (or documented in this PR)
@@ -0,0 +1,162 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ # ──────────────────────────────────────────────
14
+ # Stage 1: Code Quality (runs in parallel)
15
+ # ──────────────────────────────────────────────
16
+
17
+ lint:
18
+ name: "Lint & Format"
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: actions/setup-python@v5
23
+ with:
24
+ python-version: "3.12"
25
+ cache: pip
26
+ - name: Install dependencies
27
+ run: pip install -e ".[dev]"
28
+ - name: Ruff lint
29
+ run: ruff check src/ tests/
30
+ - name: Ruff format
31
+ run: ruff format --check src/ tests/
32
+
33
+ typecheck:
34
+ name: "Type Check (mypy --strict)"
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: actions/setup-python@v5
39
+ with:
40
+ python-version: "3.12"
41
+ cache: pip
42
+ - name: Install dependencies
43
+ run: pip install -e ".[dev]" types-openpyxl types-networkx
44
+ - name: Mypy strict
45
+ run: mypy src/ --strict
46
+
47
+ # ──────────────────────────────────────────────
48
+ # Stage 2: Tests (unit runs in parallel with Stage 1)
49
+ # ──────────────────────────────────────────────
50
+
51
+ test-unit:
52
+ name: "Unit Tests"
53
+ runs-on: ubuntu-latest
54
+ strategy:
55
+ matrix:
56
+ python-version: ["3.12", "3.13"]
57
+ steps:
58
+ - uses: actions/checkout@v4
59
+ - uses: actions/setup-python@v5
60
+ with:
61
+ python-version: ${{ matrix.python-version }}
62
+ cache: pip
63
+ - name: Install dependencies
64
+ run: pip install -e ".[dev]"
65
+ - name: Run unit tests
66
+ run: pytest tests/unit/ -v --tb=short --junitxml=results/unit-${{ matrix.python-version }}.xml
67
+ - uses: actions/upload-artifact@v4
68
+ if: always()
69
+ with:
70
+ name: unit-test-results-py${{ matrix.python-version }}
71
+ path: results/
72
+
73
+ # ──────────────────────────────────────────────
74
+ # Stage 3: Integration (after lint + unit pass)
75
+ # ──────────────────────────────────────────────
76
+
77
+ test-integration:
78
+ name: "Integration Tests"
79
+ runs-on: ubuntu-latest
80
+ needs: [lint, typecheck, test-unit]
81
+ steps:
82
+ - uses: actions/checkout@v4
83
+ - uses: actions/setup-python@v5
84
+ with:
85
+ python-version: "3.12"
86
+ cache: pip
87
+ - name: Install dependencies
88
+ run: pip install -e ".[dev]"
89
+ - name: Run integration tests
90
+ run: pytest tests/integration/ -v --tb=short -k "not test_agent_spawning" --junitxml=results/integration.xml
91
+ - uses: actions/upload-artifact@v4
92
+ if: always()
93
+ with:
94
+ name: integration-test-results
95
+ path: results/
96
+
97
+ # ──────────────────────────────────────────────
98
+ # Stage 4: Build verification
99
+ # ──────────────────────────────────────────────
100
+
101
+ build:
102
+ name: "Build Package"
103
+ runs-on: ubuntu-latest
104
+ needs: [lint, typecheck, test-unit]
105
+ steps:
106
+ - uses: actions/checkout@v4
107
+ - uses: actions/setup-python@v5
108
+ with:
109
+ python-version: "3.12"
110
+ cache: pip
111
+ - name: Install build tools
112
+ run: pip install build twine
113
+ - name: Build sdist and wheel
114
+ run: python -m build
115
+ - name: Verify package
116
+ run: twine check dist/*
117
+ - name: Verify CLI entry point
118
+ run: |
119
+ pip install dist/*.whl
120
+ dd-agents version
121
+ - uses: actions/upload-artifact@v4
122
+ with:
123
+ name: dist
124
+ path: dist/
125
+
126
+ build-docker:
127
+ name: "Build Docker Image"
128
+ runs-on: ubuntu-latest
129
+ needs: [lint, typecheck, test-unit]
130
+ steps:
131
+ - uses: actions/checkout@v4
132
+ - name: Build image
133
+ run: docker build -t dd-agents:ci-test .
134
+ - name: Verify CLI in container
135
+ run: docker run --rm dd-agents:ci-test version
136
+
137
+ # ──────────────────────────────────────────────
138
+ # Stage 5: E2E (main branch only, requires API key)
139
+ # ──────────────────────────────────────────────
140
+
141
+ test-e2e:
142
+ name: "E2E Tests"
143
+ runs-on: ubuntu-latest
144
+ needs: [test-integration, build]
145
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
146
+ steps:
147
+ - uses: actions/checkout@v4
148
+ - uses: actions/setup-python@v5
149
+ with:
150
+ python-version: "3.12"
151
+ cache: pip
152
+ - name: Install dependencies
153
+ run: pip install -e ".[dev]"
154
+ - name: Run end-to-end tests
155
+ run: pytest tests/e2e/ -v --tb=long -m "e2e" --junitxml=results/e2e.xml
156
+ env:
157
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
158
+ - uses: actions/upload-artifact@v4
159
+ if: always()
160
+ with:
161
+ name: e2e-test-results
162
+ path: results/
@@ -0,0 +1,174 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+ inputs:
9
+ tag:
10
+ description: "Version tag to release (e.g. v0.4.1)"
11
+ required: true
12
+
13
+ permissions:
14
+ contents: write
15
+ id-token: write
16
+ packages: write
17
+
18
+ jobs:
19
+ # ──────────────────────────────────────────────
20
+ # Gate: run full test suite before releasing
21
+ # ──────────────────────────────────────────────
22
+
23
+ quality-gate:
24
+ name: "Quality Gate"
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: "3.12"
31
+ cache: pip
32
+ - name: Install dependencies
33
+ run: pip install -e ".[dev]" types-openpyxl types-networkx
34
+ - name: Lint
35
+ run: ruff check src/ tests/ && ruff format --check src/ tests/
36
+ - name: Type check
37
+ run: mypy src/ --strict
38
+ - name: Unit tests
39
+ run: pytest tests/unit/ -x -q
40
+ - name: Integration tests
41
+ run: pytest tests/integration/ -x -q -k "not test_agent_spawning"
42
+
43
+ # ──────────────────────────────────────────────
44
+ # Build Python package
45
+ # ──────────────────────────────────────────────
46
+
47
+ build:
48
+ name: "Build Package"
49
+ runs-on: ubuntu-latest
50
+ needs: [quality-gate]
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ - uses: actions/setup-python@v5
54
+ with:
55
+ python-version: "3.12"
56
+ cache: pip
57
+ - name: Install build tools
58
+ run: pip install build
59
+ - name: Build sdist and wheel
60
+ run: python -m build
61
+ - name: Verify CLI entry point
62
+ run: |
63
+ pip install dist/*.whl
64
+ dd-agents version
65
+ - uses: actions/upload-artifact@v4
66
+ with:
67
+ name: dist
68
+ path: dist/
69
+
70
+ # ──────────────────────────────────────────────
71
+ # Publish to PyPI (trusted publishing via OIDC)
72
+ # ──────────────────────────────────────────────
73
+
74
+ publish-pypi:
75
+ name: "Publish to PyPI"
76
+ runs-on: ubuntu-latest
77
+ needs: [build]
78
+ steps:
79
+ - uses: actions/download-artifact@v4
80
+ with:
81
+ name: dist
82
+ path: dist/
83
+ - name: Publish to PyPI
84
+ uses: pypa/gh-action-pypi-publish@release/v1
85
+
86
+ # ──────────────────────────────────────────────
87
+ # Publish Docker image to GHCR
88
+ # ──────────────────────────────────────────────
89
+
90
+ publish-docker:
91
+ name: "Publish Docker Image"
92
+ runs-on: ubuntu-latest
93
+ needs: [build]
94
+ steps:
95
+ - uses: actions/checkout@v4
96
+
97
+ - name: Docker metadata
98
+ id: meta
99
+ uses: docker/metadata-action@v5
100
+ with:
101
+ images: ghcr.io/${{ github.repository }}
102
+ tags: |
103
+ type=semver,pattern={{version}}
104
+ type=semver,pattern={{major}}.{{minor}}
105
+ type=raw,value=latest
106
+
107
+ - name: Log in to GitHub Container Registry
108
+ uses: docker/login-action@v3
109
+ with:
110
+ registry: ghcr.io
111
+ username: ${{ github.actor }}
112
+ password: ${{ secrets.GITHUB_TOKEN }}
113
+
114
+ - name: Build and push
115
+ uses: docker/build-push-action@v6
116
+ with:
117
+ context: .
118
+ push: true
119
+ tags: ${{ steps.meta.outputs.tags }}
120
+ labels: ${{ steps.meta.outputs.labels }}
121
+
122
+ # ──────────────────────────────────────────────
123
+ # Create GitHub Release with changelog
124
+ # ──────────────────────────────────────────────
125
+
126
+ github-release:
127
+ name: "GitHub Release"
128
+ runs-on: ubuntu-latest
129
+ needs: [publish-pypi, publish-docker]
130
+ steps:
131
+ - uses: actions/checkout@v4
132
+ with:
133
+ fetch-depth: 0
134
+
135
+ - uses: actions/download-artifact@v4
136
+ with:
137
+ name: dist
138
+ path: dist/
139
+
140
+ - name: Generate release notes
141
+ id: notes
142
+ run: |
143
+ TAG="${GITHUB_REF_NAME}"
144
+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
145
+ TAG="${{ github.event.inputs.tag }}"
146
+ fi
147
+ PREV_TAG=$(git tag --sort=-v:refname | grep '^v' | grep -v "^${TAG}$" | head -1)
148
+ if [ -n "$PREV_TAG" ]; then
149
+ echo "## Changes since $PREV_TAG" > notes.md
150
+ echo "" >> notes.md
151
+ git log "$PREV_TAG".."$TAG" --pretty=format:"- %s" --no-merges >> notes.md
152
+ else
153
+ echo "## Initial release" > notes.md
154
+ fi
155
+ echo "" >> notes.md
156
+ echo "---" >> notes.md
157
+ echo "" >> notes.md
158
+ echo "### Install" >> notes.md
159
+ echo '```bash' >> notes.md
160
+ echo "pip install dd-agents==${TAG#v}" >> notes.md
161
+ echo '```' >> notes.md
162
+ echo "" >> notes.md
163
+ echo "### Docker" >> notes.md
164
+ echo '```bash' >> notes.md
165
+ echo "docker pull ghcr.io/${{ github.repository }}:${TAG#v}" >> notes.md
166
+ echo '```' >> notes.md
167
+
168
+ - name: Create GitHub Release
169
+ uses: softprops/action-gh-release@v2
170
+ with:
171
+ tag_name: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref_name }}
172
+ body_path: notes.md
173
+ files: dist/*
174
+ generate_release_notes: true
@@ -0,0 +1,60 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ *.egg-info/
7
+ *.egg
8
+ dist/
9
+ build/
10
+ .eggs/
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ ENV/
16
+ .python-version
17
+
18
+ # IDE
19
+ .idea/
20
+ .vscode/
21
+ *.swp
22
+ *.swo
23
+ *~
24
+ .DS_Store
25
+
26
+ # Testing
27
+ .pytest_cache/
28
+ .coverage
29
+ htmlcov/
30
+ .mypy_cache/
31
+ .ruff_cache/
32
+ results/
33
+
34
+ # Environment
35
+ .env
36
+ .env.local
37
+
38
+ # Claude Code local overrides (project settings are checked in)
39
+ .claude/settings.local.json
40
+ CLAUDE.local.md
41
+
42
+ # Data room artifacts (generated at runtime)
43
+ _dd/
44
+ _index/
45
+ _findings/
46
+ _inventory/
47
+
48
+ # Data room files (prevent accidental commit of customer documents)
49
+ data_room/
50
+ *.pdf
51
+
52
+ # ChromaDB local storage
53
+ chroma_data/
54
+
55
+ # Node / misc
56
+ node_modules/
57
+ *.db
58
+
59
+ # Generated reports
60
+ *.xlsx
@@ -0,0 +1,20 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.8.0
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+
9
+ - repo: https://github.com/pre-commit/mirrors-mypy
10
+ rev: v1.13.0
11
+ hooks:
12
+ - id: mypy
13
+ args: [--strict]
14
+ additional_dependencies:
15
+ - pydantic>=2.0
16
+ - click>=8.0
17
+ - openpyxl>=3.1
18
+ - networkx>=3.0
19
+ - types-openpyxl
20
+ - types-networkx