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.
- dd_agents-0.4.1/.claude/agents/code-reviewer.md +24 -0
- dd_agents-0.4.1/.claude/agents/test-runner.md +21 -0
- dd_agents-0.4.1/.claude/settings.json +62 -0
- dd_agents-0.4.1/.dockerignore +21 -0
- dd_agents-0.4.1/.env.example +22 -0
- dd_agents-0.4.1/.github/FUNDING.yml +1 -0
- dd_agents-0.4.1/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- dd_agents-0.4.1/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- dd_agents-0.4.1/.github/ISSUE_TEMPLATE/question.md +13 -0
- dd_agents-0.4.1/.github/pull_request_template.md +17 -0
- dd_agents-0.4.1/.github/workflows/ci.yml +162 -0
- dd_agents-0.4.1/.github/workflows/release.yml +174 -0
- dd_agents-0.4.1/.gitignore +60 -0
- dd_agents-0.4.1/.pre-commit-config.yaml +20 -0
- dd_agents-0.4.1/CHANGELOG.md +287 -0
- dd_agents-0.4.1/CLAUDE.md +164 -0
- dd_agents-0.4.1/CODE_OF_CONDUCT.md +61 -0
- dd_agents-0.4.1/CONTRIBUTING.md +103 -0
- dd_agents-0.4.1/Dockerfile +33 -0
- dd_agents-0.4.1/IMPLEMENTATION_PLAN.md +328 -0
- dd_agents-0.4.1/LICENSE +190 -0
- dd_agents-0.4.1/Makefile +46 -0
- dd_agents-0.4.1/NOTICE +20 -0
- dd_agents-0.4.1/PKG-INFO +370 -0
- dd_agents-0.4.1/PRODUCTION_HARDENING_PLAN.md +955 -0
- dd_agents-0.4.1/README.md +316 -0
- dd_agents-0.4.1/SECURITY.md +34 -0
- dd_agents-0.4.1/config/deal-config.template.json +118 -0
- dd_agents-0.4.1/config/report_schema.json +486 -0
- dd_agents-0.4.1/docs/extraction-knowledge-base.md +2346 -0
- dd_agents-0.4.1/docs/plan/01-architecture-decisions.md +273 -0
- dd_agents-0.4.1/docs/plan/02-system-architecture.md +535 -0
- dd_agents-0.4.1/docs/plan/03-project-structure.md +451 -0
- dd_agents-0.4.1/docs/plan/04-data-models.md +1569 -0
- dd_agents-0.4.1/docs/plan/05-orchestrator.md +1653 -0
- dd_agents-0.4.1/docs/plan/06-agents.md +1039 -0
- dd_agents-0.4.1/docs/plan/07-tools-and-hooks.md +1396 -0
- dd_agents-0.4.1/docs/plan/08-extraction.md +971 -0
- dd_agents-0.4.1/docs/plan/09-entity-resolution.md +1228 -0
- dd_agents-0.4.1/docs/plan/10-reporting.md +993 -0
- dd_agents-0.4.1/docs/plan/11-qa-validation.md +1362 -0
- dd_agents-0.4.1/docs/plan/12-error-recovery.md +1469 -0
- dd_agents-0.4.1/docs/plan/13-multi-project.md +436 -0
- dd_agents-0.4.1/docs/plan/14-vector-store.md +570 -0
- dd_agents-0.4.1/docs/plan/15-testing-deployment.md +961 -0
- dd_agents-0.4.1/docs/plan/16-migration.md +383 -0
- dd_agents-0.4.1/docs/plan/17-file-manifest.md +251 -0
- dd_agents-0.4.1/docs/plan/18-implementation-order.md +442 -0
- dd_agents-0.4.1/docs/plan/19-vector-graph-db-comparison.md +796 -0
- dd_agents-0.4.1/docs/plan/20-cross-document-analysis.md +1337 -0
- dd_agents-0.4.1/docs/plan/21-ontology-and-reasoning.md +1526 -0
- dd_agents-0.4.1/docs/plan/22-llm-robustness.md +829 -0
- dd_agents-0.4.1/docs/plan/PLAN.md +162 -0
- dd_agents-0.4.1/docs/plan/structured-output-plan.md +78 -0
- dd_agents-0.4.1/docs/search-guide.md +382 -0
- dd_agents-0.4.1/docs/user-guide/cli-reference.md +469 -0
- dd_agents-0.4.1/docs/user-guide/deal-configuration.md +352 -0
- dd_agents-0.4.1/docs/user-guide/getting-started.md +250 -0
- dd_agents-0.4.1/docs/user-guide/reading-report.md +228 -0
- dd_agents-0.4.1/docs/user-guide/running-pipeline.md +210 -0
- dd_agents-0.4.1/examples/quickstart/README.md +221 -0
- dd_agents-0.4.1/examples/quickstart/deal-config.json +129 -0
- dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Acme_Corp/contract_acme.pdf.md +39 -0
- dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Acme_Corp/invoice_2024.xlsx.md +39 -0
- dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupA/Beta_Inc/agreement_beta.pdf.md +55 -0
- dd_agents-0.4.1/examples/quickstart/sample_data_room/GroupB/Gamma_LLC/license_gamma.docx.md +72 -0
- dd_agents-0.4.1/examples/quickstart/sample_data_room/_reference/buyer_overview.pdf.md +77 -0
- dd_agents-0.4.1/examples/search/change_of_control.json +30 -0
- dd_agents-0.4.1/pyproject.toml +112 -0
- dd_agents-0.4.1/scripts/post-edit-lint.sh +16 -0
- dd_agents-0.4.1/scripts/pre-commit-gate.sh +31 -0
- dd_agents-0.4.1/scripts/run-quality-gates.sh +16 -0
- dd_agents-0.4.1/src/dd_agents/__init__.py +5 -0
- dd_agents-0.4.1/src/dd_agents/agents/__init__.py +88 -0
- dd_agents-0.4.1/src/dd_agents/agents/acquirer_intelligence.py +220 -0
- dd_agents-0.4.1/src/dd_agents/agents/base.py +584 -0
- dd_agents-0.4.1/src/dd_agents/agents/cost_tracker.py +205 -0
- dd_agents-0.4.1/src/dd_agents/agents/executive_synthesis.py +143 -0
- dd_agents-0.4.1/src/dd_agents/agents/judge.py +436 -0
- dd_agents-0.4.1/src/dd_agents/agents/prompt_builder.py +1408 -0
- dd_agents-0.4.1/src/dd_agents/agents/prompt_templates.py +450 -0
- dd_agents-0.4.1/src/dd_agents/agents/red_flag_scanner.py +199 -0
- dd_agents-0.4.1/src/dd_agents/agents/specialists.py +431 -0
- dd_agents-0.4.1/src/dd_agents/assessment.py +291 -0
- dd_agents-0.4.1/src/dd_agents/cli.py +1426 -0
- dd_agents-0.4.1/src/dd_agents/cli_auto_config.py +1061 -0
- dd_agents-0.4.1/src/dd_agents/cli_init.py +245 -0
- dd_agents-0.4.1/src/dd_agents/cli_logging.py +87 -0
- dd_agents-0.4.1/src/dd_agents/config.py +130 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/__init__.py +15 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/cache.py +287 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/dedup.py +63 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/logging.py +86 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/matcher.py +660 -0
- dd_agents-0.4.1/src/dd_agents/entity_resolution/safe_name.py +11 -0
- dd_agents-0.4.1/src/dd_agents/errors.py +120 -0
- dd_agents-0.4.1/src/dd_agents/extraction/__init__.py +17 -0
- dd_agents-0.4.1/src/dd_agents/extraction/_constants.py +28 -0
- dd_agents-0.4.1/src/dd_agents/extraction/_helpers.py +25 -0
- dd_agents-0.4.1/src/dd_agents/extraction/backend.py +99 -0
- dd_agents-0.4.1/src/dd_agents/extraction/cache.py +143 -0
- dd_agents-0.4.1/src/dd_agents/extraction/coordinates.py +95 -0
- dd_agents-0.4.1/src/dd_agents/extraction/glm_ocr.py +482 -0
- dd_agents-0.4.1/src/dd_agents/extraction/language_detect.py +88 -0
- dd_agents-0.4.1/src/dd_agents/extraction/layout_pdf.py +172 -0
- dd_agents-0.4.1/src/dd_agents/extraction/markitdown.py +159 -0
- dd_agents-0.4.1/src/dd_agents/extraction/ocr.py +153 -0
- dd_agents-0.4.1/src/dd_agents/extraction/ocr_registry.py +117 -0
- dd_agents-0.4.1/src/dd_agents/extraction/pipeline.py +1253 -0
- dd_agents-0.4.1/src/dd_agents/extraction/quality.py +166 -0
- dd_agents-0.4.1/src/dd_agents/extraction/reference_downloader.py +404 -0
- dd_agents-0.4.1/src/dd_agents/hooks/__init__.py +45 -0
- dd_agents-0.4.1/src/dd_agents/hooks/post_tool.py +135 -0
- dd_agents-0.4.1/src/dd_agents/hooks/pre_tool.py +220 -0
- dd_agents-0.4.1/src/dd_agents/hooks/stop.py +101 -0
- dd_agents-0.4.1/src/dd_agents/inventory/__init__.py +17 -0
- dd_agents-0.4.1/src/dd_agents/inventory/customers.py +253 -0
- dd_agents-0.4.1/src/dd_agents/inventory/discovery.py +153 -0
- dd_agents-0.4.1/src/dd_agents/inventory/integrity.py +91 -0
- dd_agents-0.4.1/src/dd_agents/inventory/mentions.py +142 -0
- dd_agents-0.4.1/src/dd_agents/inventory/reference_files.py +222 -0
- dd_agents-0.4.1/src/dd_agents/models/__init__.py +290 -0
- dd_agents-0.4.1/src/dd_agents/models/audit.py +159 -0
- dd_agents-0.4.1/src/dd_agents/models/config.py +334 -0
- dd_agents-0.4.1/src/dd_agents/models/entity.py +114 -0
- dd_agents-0.4.1/src/dd_agents/models/enums.py +192 -0
- dd_agents-0.4.1/src/dd_agents/models/finding.py +431 -0
- dd_agents-0.4.1/src/dd_agents/models/governance.py +70 -0
- dd_agents-0.4.1/src/dd_agents/models/inventory.py +105 -0
- dd_agents-0.4.1/src/dd_agents/models/manifest.py +64 -0
- dd_agents-0.4.1/src/dd_agents/models/numerical.py +35 -0
- dd_agents-0.4.1/src/dd_agents/models/ontology.py +139 -0
- dd_agents-0.4.1/src/dd_agents/models/persistence.py +178 -0
- dd_agents-0.4.1/src/dd_agents/models/project.py +48 -0
- dd_agents-0.4.1/src/dd_agents/models/reporting.py +186 -0
- dd_agents-0.4.1/src/dd_agents/models/search.py +183 -0
- dd_agents-0.4.1/src/dd_agents/net_safety.py +178 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/__init__.py +13 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/batch_scheduler.py +148 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/checkpoints.py +351 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/engine.py +3126 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/precedence.py +67 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/progress.py +101 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/state.py +279 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/steps.py +120 -0
- dd_agents-0.4.1/src/dd_agents/orchestrator/team.py +843 -0
- dd_agents-0.4.1/src/dd_agents/persistence/__init__.py +16 -0
- dd_agents-0.4.1/src/dd_agents/persistence/concurrency.py +136 -0
- dd_agents-0.4.1/src/dd_agents/persistence/incremental.py +256 -0
- dd_agents-0.4.1/src/dd_agents/persistence/project_registry.py +196 -0
- dd_agents-0.4.1/src/dd_agents/persistence/run_manager.py +273 -0
- dd_agents-0.4.1/src/dd_agents/persistence/tiers.py +223 -0
- dd_agents-0.4.1/src/dd_agents/precedence/__init__.py +1 -0
- dd_agents-0.4.1/src/dd_agents/precedence/folder_priority.py +113 -0
- dd_agents-0.4.1/src/dd_agents/precedence/scorer.py +75 -0
- dd_agents-0.4.1/src/dd_agents/precedence/version_chains.py +210 -0
- dd_agents-0.4.1/src/dd_agents/query/__init__.py +16 -0
- dd_agents-0.4.1/src/dd_agents/query/engine.py +247 -0
- dd_agents-0.4.1/src/dd_agents/query/indexer.py +131 -0
- dd_agents-0.4.1/src/dd_agents/reasoning/__init__.py +1 -0
- dd_agents-0.4.1/src/dd_agents/reasoning/contract_graph.py +347 -0
- dd_agents-0.4.1/src/dd_agents/reporting/__init__.py +22 -0
- dd_agents-0.4.1/src/dd_agents/reporting/clause_library.py +232 -0
- dd_agents-0.4.1/src/dd_agents/reporting/computed_metrics.py +3192 -0
- dd_agents-0.4.1/src/dd_agents/reporting/contract_dates.py +273 -0
- dd_agents-0.4.1/src/dd_agents/reporting/diff.py +341 -0
- dd_agents-0.4.1/src/dd_agents/reporting/excel.py +716 -0
- dd_agents-0.4.1/src/dd_agents/reporting/export.py +109 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html.py +278 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_analysis.py +328 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_base.py +992 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_clause_library.py +126 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_compliance.py +124 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_cross.py +80 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_cross_domain.py +65 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_customers.py +149 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_dashboard.py +258 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_diff.py +146 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_discount.py +110 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_domains.py +102 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_entity.py +99 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_executive.py +275 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_financial.py +177 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_findings_table.py +115 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_gaps.py +147 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_governance.py +178 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_integration_playbook.py +113 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_ip_risk.py +89 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_key_employee.py +77 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_liability.py +90 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_methodology.py +98 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_product_adoption.py +81 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_quality.py +165 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_recommendations.py +65 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_red_flags.py +148 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_renewal.py +93 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_risk.py +45 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_saas_metrics.py +180 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_strategy.py +113 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_tech_stack.py +88 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_timeline.py +91 -0
- dd_agents-0.4.1/src/dd_agents/reporting/html_valuation.py +112 -0
- dd_agents-0.4.1/src/dd_agents/reporting/merge.py +1477 -0
- dd_agents-0.4.1/src/dd_agents/reporting/pdf_export.py +134 -0
- dd_agents-0.4.1/src/dd_agents/reporting/templates.py +245 -0
- dd_agents-0.4.1/src/dd_agents/search/__init__.py +19 -0
- dd_agents-0.4.1/src/dd_agents/search/analyzer.py +1254 -0
- dd_agents-0.4.1/src/dd_agents/search/chunker.py +405 -0
- dd_agents-0.4.1/src/dd_agents/search/citation_verifier.py +359 -0
- dd_agents-0.4.1/src/dd_agents/search/excel_writer.py +302 -0
- dd_agents-0.4.1/src/dd_agents/search/runner.py +399 -0
- dd_agents-0.4.1/src/dd_agents/testing/__init__.py +7 -0
- dd_agents-0.4.1/src/dd_agents/testing/data_generator.py +189 -0
- dd_agents-0.4.1/src/dd_agents/tools/__init__.py +35 -0
- dd_agents-0.4.1/src/dd_agents/tools/get_customer_files.py +45 -0
- dd_agents-0.4.1/src/dd_agents/tools/read_office.py +245 -0
- dd_agents-0.4.1/src/dd_agents/tools/report_progress.py +44 -0
- dd_agents-0.4.1/src/dd_agents/tools/resolve_entity.py +50 -0
- dd_agents-0.4.1/src/dd_agents/tools/search_similar.py +99 -0
- dd_agents-0.4.1/src/dd_agents/tools/server.py +289 -0
- dd_agents-0.4.1/src/dd_agents/tools/validate_finding.py +105 -0
- dd_agents-0.4.1/src/dd_agents/tools/validate_gap.py +55 -0
- dd_agents-0.4.1/src/dd_agents/tools/validate_manifest.py +70 -0
- dd_agents-0.4.1/src/dd_agents/tools/verify_citation.py +145 -0
- dd_agents-0.4.1/src/dd_agents/tools/web_research.py +65 -0
- dd_agents-0.4.1/src/dd_agents/utils/__init__.py +9 -0
- dd_agents-0.4.1/src/dd_agents/utils/constants.py +115 -0
- dd_agents-0.4.1/src/dd_agents/utils/naming.py +168 -0
- dd_agents-0.4.1/src/dd_agents/validation/__init__.py +17 -0
- dd_agents-0.4.1/src/dd_agents/validation/coverage.py +137 -0
- dd_agents-0.4.1/src/dd_agents/validation/dod.py +1207 -0
- dd_agents-0.4.1/src/dd_agents/validation/numerical_audit.py +603 -0
- dd_agents-0.4.1/src/dd_agents/validation/pre_merge.py +427 -0
- dd_agents-0.4.1/src/dd_agents/validation/qa_audit.py +1049 -0
- dd_agents-0.4.1/src/dd_agents/validation/schema_validator.py +353 -0
- dd_agents-0.4.1/src/dd_agents/vector_store/__init__.py +47 -0
- dd_agents-0.4.1/src/dd_agents/vector_store/embeddings.py +168 -0
- dd_agents-0.4.1/src/dd_agents/vector_store/store.py +227 -0
- dd_agents-0.4.1/tests/conftest.py +149 -0
- dd_agents-0.4.1/tests/e2e/__init__.py +0 -0
- dd_agents-0.4.1/tests/e2e/conftest.py +163 -0
- dd_agents-0.4.1/tests/e2e/test_full_run.py +219 -0
- dd_agents-0.4.1/tests/fixtures/deal_config_invalid.json +74 -0
- dd_agents-0.4.1/tests/fixtures/deal_config_minimal.json +15 -0
- dd_agents-0.4.1/tests/fixtures/deal_config_valid.json +202 -0
- dd_agents-0.4.1/tests/integration/__init__.py +0 -0
- dd_agents-0.4.1/tests/integration/test_pipeline_integration.py +651 -0
- dd_agents-0.4.1/tests/unit/test_acquirer_intelligence.py +329 -0
- dd_agents-0.4.1/tests/unit/test_agents.py +2266 -0
- dd_agents-0.4.1/tests/unit/test_assessment.py +143 -0
- dd_agents-0.4.1/tests/unit/test_batch_scheduler.py +177 -0
- dd_agents-0.4.1/tests/unit/test_citation_verifier.py +795 -0
- dd_agents-0.4.1/tests/unit/test_cli_auto_config.py +1594 -0
- dd_agents-0.4.1/tests/unit/test_cli_init.py +723 -0
- dd_agents-0.4.1/tests/unit/test_coc_termination_nuance.py +433 -0
- dd_agents-0.4.1/tests/unit/test_computed_metrics.py +746 -0
- dd_agents-0.4.1/tests/unit/test_confidence_calibration.py +187 -0
- dd_agents-0.4.1/tests/unit/test_config_loader.py +224 -0
- dd_agents-0.4.1/tests/unit/test_constants.py +61 -0
- dd_agents-0.4.1/tests/unit/test_cost_tracker.py +207 -0
- dd_agents-0.4.1/tests/unit/test_data_generator.py +167 -0
- dd_agents-0.4.1/tests/unit/test_entity_dedup.py +190 -0
- dd_agents-0.4.1/tests/unit/test_entity_resolution.py +724 -0
- dd_agents-0.4.1/tests/unit/test_errors.py +157 -0
- dd_agents-0.4.1/tests/unit/test_executive_synthesis.py +503 -0
- dd_agents-0.4.1/tests/unit/test_extraction.py +2329 -0
- dd_agents-0.4.1/tests/unit/test_extraction_backend.py +324 -0
- dd_agents-0.4.1/tests/unit/test_financial_impact.py +400 -0
- dd_agents-0.4.1/tests/unit/test_glm_ocr.py +595 -0
- dd_agents-0.4.1/tests/unit/test_hooks.py +529 -0
- dd_agents-0.4.1/tests/unit/test_html_renderers.py +2207 -0
- dd_agents-0.4.1/tests/unit/test_html_report.py +673 -0
- dd_agents-0.4.1/tests/unit/test_inventory.py +729 -0
- dd_agents-0.4.1/tests/unit/test_layout_pdf.py +213 -0
- dd_agents-0.4.1/tests/unit/test_models/__init__.py +0 -0
- dd_agents-0.4.1/tests/unit/test_models/test_config.py +747 -0
- dd_agents-0.4.1/tests/unit/test_naming.py +133 -0
- dd_agents-0.4.1/tests/unit/test_net_safety.py +204 -0
- dd_agents-0.4.1/tests/unit/test_ocr_registry.py +151 -0
- dd_agents-0.4.1/tests/unit/test_ontology.py +396 -0
- dd_agents-0.4.1/tests/unit/test_orchestrator.py +3721 -0
- dd_agents-0.4.1/tests/unit/test_persistence.py +795 -0
- dd_agents-0.4.1/tests/unit/test_pre_merge.py +444 -0
- dd_agents-0.4.1/tests/unit/test_precedence.py +954 -0
- dd_agents-0.4.1/tests/unit/test_production_hardening.py +618 -0
- dd_agents-0.4.1/tests/unit/test_project_registry.py +228 -0
- dd_agents-0.4.1/tests/unit/test_read_office.py +439 -0
- dd_agents-0.4.1/tests/unit/test_red_flag_scanner.py +292 -0
- dd_agents-0.4.1/tests/unit/test_reference_downloader.py +402 -0
- dd_agents-0.4.1/tests/unit/test_report_rendering.py +1041 -0
- dd_agents-0.4.1/tests/unit/test_report_templates.py +200 -0
- dd_agents-0.4.1/tests/unit/test_reporting.py +3084 -0
- dd_agents-0.4.1/tests/unit/test_saas_metrics.py +176 -0
- dd_agents-0.4.1/tests/unit/test_search_analyzer.py +2620 -0
- dd_agents-0.4.1/tests/unit/test_search_chunker.py +358 -0
- dd_agents-0.4.1/tests/unit/test_search_cli.py +77 -0
- dd_agents-0.4.1/tests/unit/test_search_excel.py +344 -0
- dd_agents-0.4.1/tests/unit/test_search_models.py +270 -0
- dd_agents-0.4.1/tests/unit/test_semantic_dedup.py +119 -0
- dd_agents-0.4.1/tests/unit/test_severity_recalibration.py +315 -0
- dd_agents-0.4.1/tests/unit/test_severity_rubric.py +160 -0
- dd_agents-0.4.1/tests/unit/test_tools.py +589 -0
- dd_agents-0.4.1/tests/unit/test_type_safety.py +179 -0
- dd_agents-0.4.1/tests/unit/test_validation.py +3304 -0
- dd_agents-0.4.1/tests/unit/test_visual_grounding.py +350 -0
- dd_agents-0.4.1/tests/unit/test_wave1_issues.py +1170 -0
- dd_agents-0.4.1/tests/unit/test_wave2_export.py +183 -0
- dd_agents-0.4.1/tests/unit/test_wave2_metrics.py +812 -0
- dd_agents-0.4.1/tests/unit/test_wave2_renderers.py +761 -0
- dd_agents-0.4.1/tests/unit/test_wave3_features.py +548 -0
- dd_agents-0.4.1/tests/unit/test_wave3_polish.py +1032 -0
- 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,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,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
|