jack-data-science-agent 4.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jack_data_science_agent-4.1.0/.github/CODEOWNERS +8 -0
- jack_data_science_agent-4.1.0/.github/ISSUE_TEMPLATE/bug_report.md +10 -0
- jack_data_science_agent-4.1.0/.github/ISSUE_TEMPLATE/feature_request.md +9 -0
- jack_data_science_agent-4.1.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- jack_data_science_agent-4.1.0/.github/dependabot.yml +11 -0
- jack_data_science_agent-4.1.0/.github/workflows/ci.yml +23 -0
- jack_data_science_agent-4.1.0/.github/workflows/codeql.yml +36 -0
- jack_data_science_agent-4.1.0/.github/workflows/dependency-review.yml +23 -0
- jack_data_science_agent-4.1.0/.github/workflows/secret-scan.yml +18 -0
- jack_data_science_agent-4.1.0/.gitignore +37 -0
- jack_data_science_agent-4.1.0/.pre-commit-config.yaml +7 -0
- jack_data_science_agent-4.1.0/.python-version +1 -0
- jack_data_science_agent-4.1.0/ARCHITECTURE_FREEZE_V0.1.md +351 -0
- jack_data_science_agent-4.1.0/CHANGELOG.md +126 -0
- jack_data_science_agent-4.1.0/CITATION.cff +28 -0
- jack_data_science_agent-4.1.0/CODE_OF_CONDUCT.md +9 -0
- jack_data_science_agent-4.1.0/CONTRIBUTING.md +28 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT.md +2934 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V0_1.md +3317 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V2_0.md +3082 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V3_0.md +2505 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V4_0.md +2469 -0
- jack_data_science_agent-4.1.0/DATA_SCIENCE_AGENT_V4_1.md +2083 -0
- jack_data_science_agent-4.1.0/LICENSE +21 -0
- jack_data_science_agent-4.1.0/PKG-INFO +257 -0
- jack_data_science_agent-4.1.0/README.md +184 -0
- jack_data_science_agent-4.1.0/ROADMAP.md +34 -0
- jack_data_science_agent-4.1.0/SECURITY.md +36 -0
- jack_data_science_agent-4.1.0/THIRD_PARTY_LICENSES.md +40 -0
- jack_data_science_agent-4.1.0/apps/api/pyproject.toml +13 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/__init__.py +1 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/__init__.py +0 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/config.py +13 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/core/database.py +21 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/main.py +32 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/__init__.py +0 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/analysis.py +192 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/datasets.py +74 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/experiments.py +76 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/routers/health.py +87 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/__init__.py +0 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/analysis_service.py +152 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/dataset_service.py +88 -0
- jack_data_science_agent-4.1.0/apps/api/src/dsa_api/services/experiment_service.py +88 -0
- jack_data_science_agent-4.1.0/apps/api/tests/__init__.py +0 -0
- jack_data_science_agent-4.1.0/apps/api/tests/test_health.py +28 -0
- jack_data_science_agent-4.1.0/apps/jupyter/README.md +121 -0
- jack_data_science_agent-4.1.0/apps/jupyter/pyproject.toml +19 -0
- jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/__init__.py +14 -0
- jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/display.py +146 -0
- jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/magic.py +359 -0
- jack_data_science_agent-4.1.0/apps/jupyter/src/dsa_jupyter/metadata.py +63 -0
- jack_data_science_agent-4.1.0/apps/vscode/README.md +84 -0
- jack_data_science_agent-4.1.0/apps/vscode/package-lock.json +525 -0
- jack_data_science_agent-4.1.0/apps/vscode/package.json +122 -0
- jack_data_science_agent-4.1.0/apps/vscode/src/dsa.ts +156 -0
- jack_data_science_agent-4.1.0/apps/vscode/src/extension.ts +213 -0
- jack_data_science_agent-4.1.0/apps/vscode/src/views.ts +173 -0
- jack_data_science_agent-4.1.0/apps/vscode/tsconfig.json +16 -0
- jack_data_science_agent-4.1.0/apps/web/app/analysis/[runId]/page.tsx +114 -0
- jack_data_science_agent-4.1.0/apps/web/app/analysis/page.tsx +57 -0
- jack_data_science_agent-4.1.0/apps/web/app/benchmarks/page.tsx +64 -0
- jack_data_science_agent-4.1.0/apps/web/app/datasets/[id]/page.tsx +35 -0
- jack_data_science_agent-4.1.0/apps/web/app/datasets/page.tsx +70 -0
- jack_data_science_agent-4.1.0/apps/web/app/evaluations/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/app/failures/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/app/globals.css +3 -0
- jack_data_science_agent-4.1.0/apps/web/app/layout.tsx +29 -0
- jack_data_science_agent-4.1.0/apps/web/app/mcp/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/app/page.tsx +49 -0
- jack_data_science_agent-4.1.0/apps/web/app/reports/page.tsx +35 -0
- jack_data_science_agent-4.1.0/apps/web/app/research/page.tsx +37 -0
- jack_data_science_agent-4.1.0/apps/web/app/runs/[id]/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/app/runs/[id]/replay/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/app/runs/page.tsx +9 -0
- jack_data_science_agent-4.1.0/apps/web/next-env.d.ts +5 -0
- jack_data_science_agent-4.1.0/apps/web/next.config.mjs +3 -0
- jack_data_science_agent-4.1.0/apps/web/package-lock.json +2116 -0
- jack_data_science_agent-4.1.0/apps/web/package.json +25 -0
- jack_data_science_agent-4.1.0/apps/web/postcss.config.js +1 -0
- jack_data_science_agent-4.1.0/apps/web/tailwind.config.js +2 -0
- jack_data_science_agent-4.1.0/apps/web/tsconfig.json +21 -0
- jack_data_science_agent-4.1.0/benchmarks/baseline/README.md +26 -0
- jack_data_science_agent-4.1.0/benchmarks/baseline/raw_runs.json +27756 -0
- jack_data_science_agent-4.1.0/benchmarks/baseline/results.json +1052 -0
- jack_data_science_agent-4.1.0/benchmarks/baseline/summary.json +44 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/README.md +23 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/catalog.json +727 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/ads.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/correlation.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/customer_churn.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/data_quality.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/energy.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/financial.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/groups.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/health.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/house_prices.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/hr_promotion.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/marketing.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/outliers.csv +251 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/paired_series.csv +201 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/region_revenue.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/retail_sales.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/sales.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries_seasonal.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/timeseries_trend.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/datasets/titanic.csv +901 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/raw_runs.json +1117 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/results.json +142 -0
- jack_data_science_agent-4.1.0/benchmarks/ds-agent-benchmark/results/summary.json +16 -0
- jack_data_science_agent-4.1.0/benchmarks/leaderboard/README.md +21 -0
- jack_data_science_agent-4.1.0/benchmarks/leaderboard/leaderboard.json +15 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/README.md +27 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/catalog.json +4250 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/ads.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/causal_toy.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/clustering.csv +451 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/correlation.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/customer_churn.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/data_quality.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/energy.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/financial.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/groups.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/health.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/high_cardinality.csv +1001 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/house_prices.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/hr_promotion.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/imbalanced.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/leakage.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/marketing.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/missing_heavy.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/mixed_types.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/outliers.csv +251 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/paired_series.csv +201 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/region_revenue.csv +401 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/retail_sales.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/sales.csv +501 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/time_series_long.csv +601 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries_seasonal.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/timeseries_trend.csv +301 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/titanic.csv +901 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/unicode.csv +139 -0
- jack_data_science_agent-4.1.0/benchmarks/v2/datasets/wide_table.csv +301 -0
- jack_data_science_agent-4.1.0/conftest.py +22 -0
- jack_data_science_agent-4.1.0/data/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/demo/README.md +48 -0
- jack_data_science_agent-4.1.0/demo/datasets/sales.csv +501 -0
- jack_data_science_agent-4.1.0/demo/evidence/state.json +525 -0
- jack_data_science_agent-4.1.0/demo/questions/demo-question.md +12 -0
- jack_data_science_agent-4.1.0/demo/runs/demo/manifest.json +6 -0
- jack_data_science_agent-4.1.0/demo/runs/demo/report.md +45 -0
- jack_data_science_agent-4.1.0/demo/runs/demo/state.json +525 -0
- jack_data_science_agent-4.1.0/docker/Dockerfile.api +10 -0
- jack_data_science_agent-4.1.0/docker/Dockerfile.web +13 -0
- jack_data_science_agent-4.1.0/docker-compose.yml +28 -0
- jack_data_science_agent-4.1.0/docs/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/docs/ADR/ADR-001-mcp-2026-07-28-stateless-core.md +40 -0
- jack_data_science_agent-4.1.0/docs/FRONTEND_IA.md +26 -0
- jack_data_science_agent-4.1.0/docs/MCP_DESIGN.md +45 -0
- jack_data_science_agent-4.1.0/docs/README.md +29 -0
- jack_data_science_agent-4.1.0/docs/agent-system.md +15 -0
- jack_data_science_agent-4.1.0/docs/agent.md +14 -0
- jack_data_science_agent-4.1.0/docs/api.md +20 -0
- jack_data_science_agent-4.1.0/docs/architecture.md +179 -0
- jack_data_science_agent-4.1.0/docs/benchmark.md +26 -0
- jack_data_science_agent-4.1.0/docs/contributing.md +28 -0
- jack_data_science_agent-4.1.0/docs/evaluation.md +29 -0
- jack_data_science_agent-4.1.0/docs/evidence.md +17 -0
- jack_data_science_agent-4.1.0/docs/getting-started.md +48 -0
- jack_data_science_agent-4.1.0/docs/mcp.md +21 -0
- jack_data_science_agent-4.1.0/docs/reproducibility.md +44 -0
- jack_data_science_agent-4.1.0/docs/research.md +26 -0
- jack_data_science_agent-4.1.0/docs/security.md +13 -0
- jack_data_science_agent-4.1.0/docs/statistics.md +13 -0
- jack_data_science_agent-4.1.0/docs/tools.md +24 -0
- jack_data_science_agent-4.1.0/docs/v2/Baseline Report.md +347 -0
- jack_data_science_agent-4.1.0/docs/v2/MCP_2026_Audit.md +14 -0
- jack_data_science_agent-4.1.0/docs/v2/baseline/ARCHITECTURE.md +65 -0
- jack_data_science_agent-4.1.0/docs/v2/evaluation.md +12 -0
- jack_data_science_agent-4.1.0/docs/v2/security.md +15 -0
- jack_data_science_agent-4.1.0/docs/v3/BENCHMARK_AUDIT.md +62 -0
- jack_data_science_agent-4.1.0/docs/v3/CROSS_MODEL.md +115 -0
- jack_data_science_agent-4.1.0/docs/v3/EXTERNAL_VALIDATION.md +104 -0
- jack_data_science_agent-4.1.0/docs/v3/HUMAN_EVALUATION_GUIDE.md +122 -0
- jack_data_science_agent-4.1.0/docs/v3/RELIABILITY.md +117 -0
- jack_data_science_agent-4.1.0/docs/v3/REPRODUCTION.md +136 -0
- jack_data_science_agent-4.1.0/docs/v3/STATISTICAL_EVALUATION.md +120 -0
- jack_data_science_agent-4.1.0/docs/v3/V2_FINAL_BASELINE.md +178 -0
- jack_data_science_agent-4.1.0/docs/v4/CONTRIBUTOR_GUIDE.md +21 -0
- jack_data_science_agent-4.1.0/docs/v4/SHOWCASE.md +12 -0
- jack_data_science_agent-4.1.0/docs/v4/V3_FREEZE_REPORT.md +216 -0
- jack_data_science_agent-4.1.0/docs/v4/benchmark.md +7 -0
- jack_data_science_agent-4.1.0/docs/v4/cli.md +12 -0
- jack_data_science_agent-4.1.0/docs/v4/jupyter.md +43 -0
- jack_data_science_agent-4.1.0/docs/v4/mcp.md +50 -0
- jack_data_science_agent-4.1.0/docs/v4/migration.md +10 -0
- jack_data_science_agent-4.1.0/docs/v4/overview.md +5 -0
- jack_data_science_agent-4.1.0/docs/v4/perf.md +9 -0
- jack_data_science_agent-4.1.0/docs/v4/plugins.md +96 -0
- jack_data_science_agent-4.1.0/docs/v4/product-discovery.md +17 -0
- jack_data_science_agent-4.1.0/docs/v4/sdk.md +36 -0
- jack_data_science_agent-4.1.0/docs/v4/vscode.md +53 -0
- jack_data_science_agent-4.1.0/docs/v4_1/EXTERNAL_DEVELOPER_VALIDATION.md +102 -0
- jack_data_science_agent-4.1.0/docs/v4_1/MCP_COMPATIBILITY.md +42 -0
- jack_data_science_agent-4.1.0/docs/v4_1/MIGRATION_V4_0_TO_V4_1.md +62 -0
- jack_data_science_agent-4.1.0/docs/v4_1/RELEASE_MATRIX.md +27 -0
- jack_data_science_agent-4.1.0/docs/v4_1/SDK_PUBLIC_API_AUDIT.md +110 -0
- jack_data_science_agent-4.1.0/docs/v4_1/V4_IMPLEMENTATION_TRUTH.md +63 -0
- jack_data_science_agent-4.1.0/docs/v4_1/W3_PLUGIN_HARDENING.md +86 -0
- jack_data_science_agent-4.1.0/docs/v4_1/W4_JUPYTER.md +87 -0
- jack_data_science_agent-4.1.0/docs/v4_1/W5_VSCODE.md +71 -0
- jack_data_science_agent-4.1.0/docs/v4_1/W6_MCP_APP.md +110 -0
- jack_data_science_agent-4.1.0/docs/v4_1/W7_SECURITY.md +92 -0
- jack_data_science_agent-4.1.0/docs/v4_1/external-validation.md +13 -0
- jack_data_science_agent-4.1.0/docs/v4_1/jupyter.md +17 -0
- jack_data_science_agent-4.1.0/docs/v4_1/mcp.md +15 -0
- jack_data_science_agent-4.1.0/docs/v4_1/migration.md +62 -0
- jack_data_science_agent-4.1.0/docs/v4_1/overview.md +18 -0
- jack_data_science_agent-4.1.0/docs/v4_1/performance.json +53 -0
- jack_data_science_agent-4.1.0/docs/v4_1/performance.md +53 -0
- jack_data_science_agent-4.1.0/docs/v4_1/plugins.md +15 -0
- jack_data_science_agent-4.1.0/docs/v4_1/release.md +33 -0
- jack_data_science_agent-4.1.0/docs/v4_1/sdk.md +21 -0
- jack_data_science_agent-4.1.0/docs/v4_1/security.md +19 -0
- jack_data_science_agent-4.1.0/docs/v4_1/vscode.md +23 -0
- jack_data_science_agent-4.1.0/examples/README.md +39 -0
- jack_data_science_agent-4.1.0/examples/analyses/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/examples/datasets/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/examples/datasets/sales.csv +501 -0
- jack_data_science_agent-4.1.0/examples/datasets/titanic.csv +901 -0
- jack_data_science_agent-4.1.0/human-eval/README.md +40 -0
- jack_data_science_agent-4.1.0/human-eval/agreement.json +4 -0
- jack_data_science_agent-4.1.0/human-eval/reviews.template.json +58 -0
- jack_data_science_agent-4.1.0/human-eval/samples.json +90 -0
- jack_data_science_agent-4.1.0/mkdocs.yml +40 -0
- jack_data_science_agent-4.1.0/package-lock.json +2075 -0
- jack_data_science_agent-4.1.0/package.json +16 -0
- jack_data_science_agent-4.1.0/packages/agent/prompts/critic/v1.yaml +5 -0
- jack_data_science_agent-4.1.0/packages/agent/prompts/data_scientist/v1.yaml +5 -0
- jack_data_science_agent-4.1.0/packages/agent/prompts/planner/v1.yaml +5 -0
- jack_data_science_agent-4.1.0/packages/agent/prompts/report/v1.yaml +5 -0
- jack_data_science_agent-4.1.0/packages/agent/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/__init__.py +37 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/critic.py +136 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/graph.py +543 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/langgraph_graph.py +472 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/planner.py +330 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/report.py +95 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/state.py +127 -0
- jack_data_science_agent-4.1.0/packages/agent/src/dsa_agent/trajectory.py +117 -0
- jack_data_science_agent-4.1.0/packages/datasets/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/__init__.py +42 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/errors.py +14 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/hash_utils.py +19 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/loader.py +73 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/models.py +75 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/profiler.py +164 -0
- jack_data_science_agent-4.1.0/packages/datasets/src/dsa_datasets/validate.py +88 -0
- jack_data_science_agent-4.1.0/packages/evaluation/pyproject.toml +16 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/__init__.py +14 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/catalog.py +71 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/cli.py +446 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/cross_model.py +163 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/doctor.py +43 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/evaluation_framework.py +115 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/external_validation.py +236 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/human_eval.py +258 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/metrics.py +241 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/perf_harness.py +35 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/project_init.py +13 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/reliability.py +279 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/research_manifest.py +72 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/runner.py +105 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/significance.py +46 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/statistical_eval.py +277 -0
- jack_data_science_agent-4.1.0/packages/evaluation/src/dsa_evaluation/verify_release.py +101 -0
- jack_data_science_agent-4.1.0/packages/evidence/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/__init__.py +18 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/failure_taxonomy.py +97 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/graph.py +87 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/models.py +63 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/observability.py +39 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/repro.py +273 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/reproducibility.py +105 -0
- jack_data_science_agent-4.1.0/packages/evidence/src/dsa_evidence/validator.py +92 -0
- jack_data_science_agent-4.1.0/packages/execution/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/__init__.py +3 -0
- jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/guardrails.py +59 -0
- jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/mime_sniff.py +77 -0
- jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/python_sandbox.py +210 -0
- jack_data_science_agent-4.1.0/packages/execution/src/dsa_execution/sql_guard.py +62 -0
- jack_data_science_agent-4.1.0/packages/llm/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/llm/src/dsa_llm/__init__.py +51 -0
- jack_data_science_agent-4.1.0/packages/llm/src/dsa_llm/providers.py +62 -0
- jack_data_science_agent-4.1.0/packages/mcp/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/__init__.py +6 -0
- jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/adapter.py +477 -0
- jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/app.py +150 -0
- jack_data_science_agent-4.1.0/packages/mcp/src/dsa_mcp/server.py +192 -0
- jack_data_science_agent-4.1.0/packages/ml/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/ml/src/dsa_ml/__init__.py +1 -0
- jack_data_science_agent-4.1.0/packages/plugins/pyproject.toml +13 -0
- jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/__init__.py +35 -0
- jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/manifest.py +221 -0
- jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/plugin.py +33 -0
- jack_data_science_agent-4.1.0/packages/plugins/src/dsa_plugins/registry.py +256 -0
- jack_data_science_agent-4.1.0/packages/reports/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/reports/src/dsa_reports/__init__.py +1 -0
- jack_data_science_agent-4.1.0/packages/statistics/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/statistics/src/dsa_statistics/__init__.py +1 -0
- jack_data_science_agent-4.1.0/packages/statistics/src/dsa_statistics/helpers.py +19 -0
- jack_data_science_agent-4.1.0/packages/tools/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/__init__.py +47 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/base.py +72 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/errors.py +14 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/registry.py +27 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/__init__.py +0 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/assumption_check.py +134 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/causal_check.py +128 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/correlation.py +118 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/create_chart.py +167 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/create_evidence.py +48 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/evaluate_model.py +126 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/feature_importance.py +92 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/forecast.py +153 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/generate_report.py +94 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/hypothesis_test.py +180 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/profile_dataset.py +47 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/regression.py +139 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/run_python.py +59 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/run_sql.py +67 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/save_artifact.py +51 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/train_model.py +105 -0
- jack_data_science_agent-4.1.0/packages/tools/src/dsa_tools/tools/validate_result.py +68 -0
- jack_data_science_agent-4.1.0/packages/visualization/pyproject.toml +12 -0
- jack_data_science_agent-4.1.0/packages/visualization/src/dsa_viz/__init__.py +1 -0
- jack_data_science_agent-4.1.0/plugins/README.md +26 -0
- jack_data_science_agent-4.1.0/plugins/dsa-time-series/README.md +99 -0
- jack_data_science_agent-4.1.0/plugins/dsa-time-series/manifest.yaml +13 -0
- jack_data_science_agent-4.1.0/plugins/dsa-time-series/pyproject.toml +10 -0
- jack_data_science_agent-4.1.0/plugins/dsa-time-series/src/dsa_time_series/plugin.py +273 -0
- jack_data_science_agent-4.1.0/pyproject.toml +155 -0
- jack_data_science_agent-4.1.0/release/sbom.cyclonedx.json +1706 -0
- jack_data_science_agent-4.1.0/release/sbom.json +1350 -0
- jack_data_science_agent-4.1.0/release/v3.0/README.md +12 -0
- jack_data_science_agent-4.1.0/research/V3_RESEARCH_REPORT.md +185 -0
- jack_data_science_agent-4.1.0/research/benchmark-showcase.md +20 -0
- jack_data_science_agent-4.1.0/research/claim-evidence-matrix.md +19 -0
- jack_data_science_agent-4.1.0/research/evidence-trace-showcase.md +62 -0
- jack_data_science_agent-4.1.0/research/experiments/ablation_matrix.py +37 -0
- jack_data_science_agent-4.1.0/research/experiments/run_ablation.py +82 -0
- jack_data_science_agent-4.1.0/research/failure-case-study.md +20 -0
- jack_data_science_agent-4.1.0/research/figures/README.md +8 -0
- jack_data_science_agent-4.1.0/research/figures/benchmark_by_category.png +0 -0
- jack_data_science_agent-4.1.0/research/figures/coverage.png +0 -0
- jack_data_science_agent-4.1.0/research/figures/cross_model_frontier.png +0 -0
- jack_data_science_agent-4.1.0/research/figures/evidence_trace.png +0 -0
- jack_data_science_agent-4.1.0/research/figures/human_eval_rubric.png +0 -0
- jack_data_science_agent-4.1.0/research/figures/reproducibility.png +0 -0
- jack_data_science_agent-4.1.0/research/paper/V2_paper_draft.md +39 -0
- jack_data_science_agent-4.1.0/research/paper/outline.md +7 -0
- jack_data_science_agent-4.1.0/research/questions/RQs.md +13 -0
- jack_data_science_agent-4.1.0/research/related-work.md +70 -0
- jack_data_science_agent-4.1.0/research/reproduction-showcase.md +62 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/raw_runs.json +7625 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/results.json +228 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_587c4bf0/summary.json +20 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_83058322/raw_runs.json +7625 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_83058322/results.json +228 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_83058322/summary.json +20 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/raw_runs.json +72982 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/results.json +2060 -0
- jack_data_science_agent-4.1.0/research/results/_tmp_feb31c61/summary.json +56 -0
- jack_data_science_agent-4.1.0/research/results/ablation_ablation-587c4bf0.json +101 -0
- jack_data_science_agent-4.1.0/research/results/ablation_ablation-83058322.json +101 -0
- jack_data_science_agent-4.1.0/research/results/ablation_ablation-feb31c61.json +137 -0
- jack_data_science_agent-4.1.0/research/scripts/generate_figures.py +51 -0
- jack_data_science_agent-4.1.0/research/scripts/generate_tables.py +53 -0
- jack_data_science_agent-4.1.0/research/success-case-study.md +20 -0
- jack_data_science_agent-4.1.0/research/tables/README.md +7 -0
- jack_data_science_agent-4.1.0/research/tables/ablation.md +3 -0
- jack_data_science_agent-4.1.0/research/tables/benchmark_summary.md +17 -0
- jack_data_science_agent-4.1.0/research/tables/claim_evidence.md +19 -0
- jack_data_science_agent-4.1.0/research/technical-report/README.md +34 -0
- jack_data_science_agent-4.1.0/scripts/dev.sh +9 -0
- jack_data_science_agent-4.1.0/scripts/generate_benchmark_datasets.py +132 -0
- jack_data_science_agent-4.1.0/scripts/generate_benchmark_v2.py +223 -0
- jack_data_science_agent-4.1.0/scripts/generate_sbom.py +138 -0
- jack_data_science_agent-4.1.0/scripts/run_perf_matrix.py +181 -0
- jack_data_science_agent-4.1.0/src/data_science_agent/__init__.py +30 -0
- jack_data_science_agent-4.1.0/src/data_science_agent/sdk.py +658 -0
- jack_data_science_agent-4.1.0/tests/api/compatibility/test_sdk_compat.py +21 -0
- jack_data_science_agent-4.1.0/tests/e2e/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/tests/e2e/test_acceptance_v02.py +58 -0
- jack_data_science_agent-4.1.0/tests/evals/test_cross_model.py +35 -0
- jack_data_science_agent-4.1.0/tests/evals/test_evaluation_framework.py +51 -0
- jack_data_science_agent-4.1.0/tests/evals/test_external_validation.py +42 -0
- jack_data_science_agent-4.1.0/tests/evals/test_human_eval.py +75 -0
- jack_data_science_agent-4.1.0/tests/evals/test_reliability.py +51 -0
- jack_data_science_agent-4.1.0/tests/evals/test_statistical_eval.py +86 -0
- jack_data_science_agent-4.1.0/tests/integration/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/tests/integration/test_agent_analysis.py +156 -0
- jack_data_science_agent-4.1.0/tests/integration/test_dataset_api.py +122 -0
- jack_data_science_agent-4.1.0/tests/integration/test_phase6_api.py +94 -0
- jack_data_science_agent-4.1.0/tests/jupyter/test_jupyter_integration.py +192 -0
- jack_data_science_agent-4.1.0/tests/mcp/conformance/test_mcp_conformance.py +156 -0
- jack_data_science_agent-4.1.0/tests/mcp/test_mcp_app_acceptance.py +133 -0
- jack_data_science_agent-4.1.0/tests/perf/test_w9_performance.py +164 -0
- jack_data_science_agent-4.1.0/tests/plugins/test_plugin_isolation.py +98 -0
- jack_data_science_agent-4.1.0/tests/plugins/test_plugin_lifecycle.py +120 -0
- jack_data_science_agent-4.1.0/tests/plugins/test_time_series_plugin.py +130 -0
- jack_data_science_agent-4.1.0/tests/regression/test_regression_matrix.py +115 -0
- jack_data_science_agent-4.1.0/tests/sdk/test_cli_contract.py +130 -0
- jack_data_science_agent-4.1.0/tests/sdk/test_sdk_contract.py +178 -0
- jack_data_science_agent-4.1.0/tests/security/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/tests/security/test_adversarial_suite.py +158 -0
- jack_data_science_agent-4.1.0/tests/security/test_security_phase8.py +223 -0
- jack_data_science_agent-4.1.0/tests/security/test_w7_supply_chain.py +146 -0
- jack_data_science_agent-4.1.0/tests/test_w8_external_validation.py +53 -0
- jack_data_science_agent-4.1.0/tests/unit/.gitkeep +0 -0
- jack_data_science_agent-4.1.0/tests/unit/test_benchmark.py +88 -0
- jack_data_science_agent-4.1.0/tests/unit/test_cov_final.py +40 -0
- jack_data_science_agent-4.1.0/tests/unit/test_cov_mcp_server_and_llm.py +46 -0
- jack_data_science_agent-4.1.0/tests/unit/test_cov_report_and_llm.py +63 -0
- jack_data_science_agent-4.1.0/tests/unit/test_coverage_assumption_group.py +48 -0
- jack_data_science_agent-4.1.0/tests/unit/test_coverage_final_push.py +60 -0
- jack_data_science_agent-4.1.0/tests/unit/test_coverage_gaps.py +185 -0
- jack_data_science_agent-4.1.0/tests/unit/test_coverage_push.py +49 -0
- jack_data_science_agent-4.1.0/tests/unit/test_data_engine.py +10 -0
- jack_data_science_agent-4.1.0/tests/unit/test_datasets.py +142 -0
- jack_data_science_agent-4.1.0/tests/unit/test_evidence.py +153 -0
- jack_data_science_agent-4.1.0/tests/unit/test_generate_report_coverage.py +64 -0
- jack_data_science_agent-4.1.0/tests/unit/test_imports.py +7 -0
- jack_data_science_agent-4.1.0/tests/unit/test_langgraph.py +34 -0
- jack_data_science_agent-4.1.0/tests/unit/test_mcp.py +120 -0
- jack_data_science_agent-4.1.0/tests/unit/test_more_coverage.py +81 -0
- jack_data_science_agent-4.1.0/tests/unit/test_more_gaps.py +81 -0
- jack_data_science_agent-4.1.0/tests/unit/test_reliability_repro_failure_obs.py +52 -0
- jack_data_science_agent-4.1.0/tests/unit/test_significance.py +13 -0
- jack_data_science_agent-4.1.0/tests/unit/test_tools.py +245 -0
- jack_data_science_agent-4.1.0/tests/unit/test_trajectory.py +58 -0
- jack_data_science_agent-4.1.0/tests/unit/test_v02_tools.py +105 -0
- jack_data_science_agent-4.1.0/tests/unit/test_v03_tools.py +135 -0
- jack_data_science_agent-4.1.0/tests/vscode/test_vscode_extension.py +105 -0
- jack_data_science_agent-4.1.0/uv.lock +4231 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## What does this PR do?
|
|
2
|
+
|
|
3
|
+
## How to test
|
|
4
|
+
|
|
5
|
+
- [ ] `uv run ruff check packages apps/api tests`
|
|
6
|
+
- [ ] `uv run mypy packages apps/api --ignore-missing-imports`
|
|
7
|
+
- [ ] `uv run pytest -q`
|
|
8
|
+
- [ ] `uv run dsa demo` (if CLI/DX touched)
|
|
9
|
+
|
|
10
|
+
## Checklist
|
|
11
|
+
|
|
12
|
+
- [ ] No breaking public API without SemVer bump
|
|
13
|
+
- [ ] Docs updated if needed
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule: { interval: weekly }
|
|
6
|
+
- package-ecosystem: npm
|
|
7
|
+
directory: "/apps/web"
|
|
8
|
+
schedule: { interval: weekly }
|
|
9
|
+
- package-ecosystem: docker
|
|
10
|
+
directory: "/"
|
|
11
|
+
schedule: { interval: weekly }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on: [push, pull_request]
|
|
3
|
+
jobs:
|
|
4
|
+
ci:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
steps:
|
|
7
|
+
- uses: actions/checkout@v4
|
|
8
|
+
- uses: actions/setup-python@v5
|
|
9
|
+
with: { python-version: "3.12" }
|
|
10
|
+
- run: pip install uv
|
|
11
|
+
- run: uv sync --dev
|
|
12
|
+
- run: uv lock --check # §46 dependency pinning
|
|
13
|
+
- run: uv run ruff check packages apps/api tests src apps/jupyter
|
|
14
|
+
- run: uv run ruff format --check packages apps/api tests src apps/jupyter
|
|
15
|
+
- run: uv run mypy packages apps/api src --ignore-missing-imports
|
|
16
|
+
- run: uv run pytest -q --cov --cov-report=term-missing
|
|
17
|
+
- run: uv run python scripts/generate_sbom.py && test -f release/sbom.json # §47 SBOM
|
|
18
|
+
- run: uv run dsa --limit 5 --out /tmp/ci-bench --catalog benchmarks/ds-agent-benchmark/catalog.json --datasets benchmarks/ds-agent-benchmark/datasets 2>&1 | tail -n 20
|
|
19
|
+
- run: docker build -f docker/Dockerfile.api -t dsa-api:ci .
|
|
20
|
+
- run: docker build -f docker/Dockerfile.web -t dsa-web:ci .
|
|
21
|
+
- run: npm --prefix apps/web run build 2>&1 | tail -n 20
|
|
22
|
+
- run: docker compose config 2>&1 | head -n 40
|
|
23
|
+
- run: uv run python -m mkdocs build --strict 2>&1 | tail -n 50
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: "CodeQL"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "0 6 * * 1" # weekly
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
analyze:
|
|
13
|
+
name: Analyze (${{ matrix.language }})
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
actions: read
|
|
17
|
+
contents: read
|
|
18
|
+
security-events: write
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
language: ["python", "javascript"]
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
- name: Initialize CodeQL
|
|
27
|
+
uses: github/codeql-action/init@v3
|
|
28
|
+
with:
|
|
29
|
+
languages: ${{ matrix.language }}
|
|
30
|
+
queries: security-and-quality
|
|
31
|
+
- name: Autobuild
|
|
32
|
+
uses: github/codeql-action/autobuild@v3
|
|
33
|
+
- name: Perform CodeQL Analysis
|
|
34
|
+
uses: github/codeql-action/analyze@v3
|
|
35
|
+
with:
|
|
36
|
+
category: "/language:${{matrix.language}}"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: "Dependency Review"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
pull-requests: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
dependency-review:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
- name: Dependency Review
|
|
18
|
+
uses: actions/dependency-review-action@v4
|
|
19
|
+
with:
|
|
20
|
+
fail-on-severity: high
|
|
21
|
+
fail-on-scopes: runtime
|
|
22
|
+
comment-summary-in-pr: always
|
|
23
|
+
allow-licenses: MIT, Apache-2.0, BSD-3-Clause, ISC, PSF, Python-2.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: "Secret Scan"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
gitleaks:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
with:
|
|
15
|
+
fetch-depth: 0
|
|
16
|
+
- uses: gitleaks/gitleaks-action@v2
|
|
17
|
+
env:
|
|
18
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*.pyo
|
|
4
|
+
.mypy_cache/
|
|
5
|
+
.ruff_cache/
|
|
6
|
+
.pytest_cache/
|
|
7
|
+
.coverage
|
|
8
|
+
htmlcov/
|
|
9
|
+
.venv/
|
|
10
|
+
venv/
|
|
11
|
+
node_modules/
|
|
12
|
+
.next/
|
|
13
|
+
dist/
|
|
14
|
+
build/
|
|
15
|
+
*.egg-info/
|
|
16
|
+
.env
|
|
17
|
+
.env.local
|
|
18
|
+
/data/projects/
|
|
19
|
+
/data/datasets/
|
|
20
|
+
/artifacts/
|
|
21
|
+
packages/artifacts/
|
|
22
|
+
demo/reports/
|
|
23
|
+
/reports/
|
|
24
|
+
models/
|
|
25
|
+
logs/
|
|
26
|
+
.DS_Store
|
|
27
|
+
*.db
|
|
28
|
+
*.sqlite
|
|
29
|
+
*.sqlite3
|
|
30
|
+
apps/data/
|
|
31
|
+
apps/web/node_modules
|
|
32
|
+
reproduction/
|
|
33
|
+
plugins/.registry_state.json
|
|
34
|
+
dist/
|
|
35
|
+
site/
|
|
36
|
+
apps/vscode/out/
|
|
37
|
+
apps/vscode/node_modules/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# Data Science Agent — Phase 0 Architecture Freeze (V0.1)
|
|
2
|
+
|
|
3
|
+
> Status: FROZEN for V0.1 implementation | Date: 2026-08-15
|
|
4
|
+
> Principle: Evidence Before Claim | Code Before Claim | Statistical Rigor Before Fluency
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. System Architecture (Layered)
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌─────────────────────────────────────────────────────┐
|
|
12
|
+
│ Frontend Next.js 15 + TypeScript + Tailwind + │
|
|
13
|
+
│ shadcn/ui + Plotly (SSE client) │
|
|
14
|
+
└──────────────────────┬──────────────────────────────┘
|
|
15
|
+
│ HTTPS / SSE
|
|
16
|
+
┌──────────────────────▼──────────────────────────────┐
|
|
17
|
+
│ API Layer FastAPI + Pydantic v2 + SQLAlchemy │
|
|
18
|
+
│ /api/v1/datasets /analysis /artifacts /reports │
|
|
19
|
+
│ Auth (future) · Validation · Rate Limit · Logging │
|
|
20
|
+
└──────────────────────┬──────────────────────────────┘
|
|
21
|
+
│
|
|
22
|
+
┌──────────────────────▼──────────────────────────────┐
|
|
23
|
+
│ Agent Runtime LangGraph Stateful Graph │
|
|
24
|
+
│ Planner → DataScientist → Critic → Report │
|
|
25
|
+
│ State: AnalysisState · Checkpoints · Retry(3) │
|
|
26
|
+
└──────────────────────┬──────────────────────────────┘
|
|
27
|
+
│
|
|
28
|
+
┌──────────────────────▼──────────────────────────────┐
|
|
29
|
+
│ Tool Layer Typed Tool Contract (async execute) │
|
|
30
|
+
│ Data | SQL | Python | Stats | ML | Viz | Evidence │
|
|
31
|
+
└──────┬──────────┬───────────┬───────────┬───────────┘
|
|
32
|
+
│ │ │ │
|
|
33
|
+
DuckDB Python Sandbox Stats/ML Viz Engine
|
|
34
|
+
+ Polars (restricted) (scipy/ (Plotly/
|
|
35
|
+
+ PyArrow AST+seccomp sklearn) Matplotlib)
|
|
36
|
+
│ │ │ │
|
|
37
|
+
└──────────┴───────────┴───────────┘
|
|
38
|
+
│
|
|
39
|
+
┌──────────────────────▼──────────────────────────────┐
|
|
40
|
+
│ Evidence & Reproducibility Layer │
|
|
41
|
+
│ Evidence Graph · Artifact Store · experiment.json │
|
|
42
|
+
│ + reproduce.sh + analysis.ipynb │
|
|
43
|
+
└──────────────────────┬──────────────────────────────┘
|
|
44
|
+
│
|
|
45
|
+
┌──────────────────────▼──────────────────────────────┐
|
|
46
|
+
│ Storage SQLite (MVP) / Postgres · Local FS │
|
|
47
|
+
│ projects/datasets/analysis_runs/tool_calls/ │
|
|
48
|
+
│ artifacts/evidence/insights/reports │
|
|
49
|
+
└─────────────────────────────────────────────────────┘
|
|
50
|
+
LLM Abstraction: LLMProvider → OpenAI/Anthropic/Google/OpenRouter/Ollama
|
|
51
|
+
Cache: Local File Cache (DatasetProfile/SQL/Python/LLM) OTel: optional
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Why layered:** Separation of Concerns, Dependency Injection (API → Agent → Tool → Engine), testability, MCP adapter can wrap Tool Layer without leaking into domain.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 2. Component Diagram
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
apps/api → FastAPI app, routers, SSE, DI container
|
|
62
|
+
apps/web → Next.js app router, Dashboard/Projects/Datasets/Analysis/Reports
|
|
63
|
+
|
|
64
|
+
packages/agent → LangGraph graph, 4 agents, state, prompts, guardrails
|
|
65
|
+
packages/tools → Tool registry, base Tool class, 20+ tools
|
|
66
|
+
packages/execution→ Python Sandbox (AST validator + subprocess jail), SQL validator
|
|
67
|
+
packages/statistics → descriptive/correlation/hypo/regression engine + assumption checker
|
|
68
|
+
packages/ml → leakage detector, model selector, trainer, evaluator
|
|
69
|
+
packages/visualization → chart recommender + Plotly/Matplotlib generators
|
|
70
|
+
packages/evidence → Evidence / Insight / validation, graph builder
|
|
71
|
+
packages/reports → Markdown/HTML/PDF/Notebook builder
|
|
72
|
+
packages/datasets → upload, registry, profiling, DuckDB/Polars adapters, hash
|
|
73
|
+
packages/mcp → MCP adapter (stateless, 2026-07-28 spec) wraps Tool Layer
|
|
74
|
+
|
|
75
|
+
Shared: packages/llm (LLMProvider), packages/cache, packages/observability, packages/security
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3. Repository Tree (Monorepo, frozen)
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
data-science-agent/
|
|
84
|
+
├── apps/
|
|
85
|
+
│ ├── api/ # FastAPI
|
|
86
|
+
│ │ ├── src/dsa_api/{routers,services,models,core}
|
|
87
|
+
│ │ └── tests/
|
|
88
|
+
│ └── web/ # Next.js 15
|
|
89
|
+
│ ├── app/(dashboard|projects|datasets|analysis|reports|settings)/
|
|
90
|
+
│ ├── components/ui/ # shadcn
|
|
91
|
+
│ └── lib/
|
|
92
|
+
├── packages/
|
|
93
|
+
│ ├── agent/ # LangGraph
|
|
94
|
+
│ │ ├── prompts/{planner,data_scientist,critic,report}/v1.yaml
|
|
95
|
+
│ │ ├── state.py # AnalysisState
|
|
96
|
+
│ │ ├── graph.py # StateGraph
|
|
97
|
+
│ │ └── agents/{planner,scientist,critic,report}.py
|
|
98
|
+
│ ├── tools/ # Tool contracts + implementations
|
|
99
|
+
│ ├── execution/ # python sandbox + sql validator
|
|
100
|
+
│ ├── statistics/ # stats engine
|
|
101
|
+
│ ├── ml/ # ml + leakage
|
|
102
|
+
│ ├── visualization/ # viz engine
|
|
103
|
+
│ ├── evidence/ # evidence graph
|
|
104
|
+
│ ├── reports/ # report generators
|
|
105
|
+
│ ├── datasets/ # dataset layer
|
|
106
|
+
│ ├── llm/ # LLMProvider abstraction
|
|
107
|
+
│ └── mcp/ # MCP server (adapter)
|
|
108
|
+
├── tests/{unit,integration,e2e,security}/
|
|
109
|
+
├── benchmarks/ds-agent-benchmark/ # 20 datasets, 50 tasks
|
|
110
|
+
├── examples/{datasets,analyses}/
|
|
111
|
+
├── docs/ # MkDocs
|
|
112
|
+
├── scripts/
|
|
113
|
+
├── docker/{Dockerfile,compose.yml}
|
|
114
|
+
├── .github/workflows/ci.yml
|
|
115
|
+
├── pyproject.toml (uv) package.json README.md LICENSE (MIT)
|
|
116
|
+
├── CONTRIBUTING.md SECURITY.md CODE_OF_CONDUCT.md THIRD_PARTY_LICENSES.md
|
|
117
|
+
└── .commandcode/
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Tooling: `uv` (dep), `Ruff` (lint/fmt), `MyPy` (strict), `Pytest+coverage`, `pre-commit`, `Docker`
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 4. Agent State Machine (LangGraph StateGraph, explicit)
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
START
|
|
128
|
+
↓
|
|
129
|
+
UNDERSTANDING (Supervisor/Planner parses user_query + dataset profile)
|
|
130
|
+
↓
|
|
131
|
+
PLANNING (produce AnalysisPlan: objective, assumptions, steps, tools, outputs)
|
|
132
|
+
↓
|
|
133
|
+
DATA_PROFILING (profile_dataset, schema, missing, duplicates, outliers)
|
|
134
|
+
↓
|
|
135
|
+
ANALYSIS (EDA, correlation, hypothesis_test — Data Scientist)
|
|
136
|
+
↓
|
|
137
|
+
MODELING (feature eng, train_model, leakage check — optional by task)
|
|
138
|
+
↓
|
|
139
|
+
VALIDATION (Critic: stats validity, leakage, calc correctness, evidence completeness)
|
|
140
|
+
├─ FAIL → CorrectionRequest → back to ANALYSIS/MODELING (max 3 retries)
|
|
141
|
+
└─ PASS → SYNTHESIS
|
|
142
|
+
↓
|
|
143
|
+
SYNTHESIS (Insight engine: Finding+Evidence+Magnitude+Limitation)
|
|
144
|
+
↓
|
|
145
|
+
REPORTING (Report Agent: Markdown/HTML/PDF + Notebook + experiment.json + reproduce.sh)
|
|
146
|
+
↓
|
|
147
|
+
COMPLETED
|
|
148
|
+
|
|
149
|
+
ERROR → RECOVERY → RETRY (≤3) → else HUMAN_REVIEW (WAITING_FOR_APPROVAL)
|
|
150
|
+
Cost guard: max_tokens / max_steps / max_tool_calls / max_time → STOP
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
V0.1 agents: `Planner`, `Data Scientist`, `Critic`, `Report` (4). Supervisor responsibilities merged into Planner for V0.1; expand to 8 agents in V0.2+.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. Database ERD (SQLite MVP)
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
projects (id PK, name, description, created_at)
|
|
161
|
+
1──n datasets (id PK, project_id FK, filename, path, hash, format, rows, cols, metadata JSON, created_at)
|
|
162
|
+
1──n analysis_runs (id PK, project_id FK, dataset_id FK, user_query, objective, status ENUM, plan JSON, current_step, report_id FK, error, budget JSON, created_at)
|
|
163
|
+
1──n agent_steps (id PK, run_id FK, agent, state, input JSON, output JSON, duration_ms, status)
|
|
164
|
+
1──n tool_calls (id PK, run_id FK, step_id FK, tool_name, input JSON, output JSON, status, duration_ms, error)
|
|
165
|
+
1──n artifacts (id PK, run_id FK, type ENUM[dataset,code,sql,table,chart,model,notebook,report,evidence], path, metadata JSON, created_by, created_at)
|
|
166
|
+
1──n evidence (id PK, run_id FK, claim, source_type ENUM[sql,python,statistical_test,model,visualization], source_id FK→tool_calls/artifacts, result JSON, confidence, validation_status)
|
|
167
|
+
1──n insights (id PK, run_id FK, finding, evidence_ids JSON, magnitude, significance, limitation, created_at)
|
|
168
|
+
1──1 reports (id PK, run_id FK, markdown_path, html_path, pdf_path, notebook_path, experiment_json_path, created_at)
|
|
169
|
+
users (future, id PK, email) — not in V0.1 MVP
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Indexes: `analysis_runs(status)`, `tool_calls(run_id, tool_name)`, `evidence(run_id)`.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 6. Core Domain Models (Pydantic, typed)
|
|
177
|
+
|
|
178
|
+
```python
|
|
179
|
+
class AnalysisStatus(str, Enum): UNDERSTANDING, PLANNING, DATA_PROFILING, ANALYSIS, MODELING, VALIDATION, SYNTHESIS, REPORTING, COMPLETED, FAILED, HUMAN_REVIEW
|
|
180
|
+
|
|
181
|
+
class AnalysisStep(BaseModel): id: str; name: str; description: str; tool: str; inputs: dict; depends_on: list[str]
|
|
182
|
+
|
|
183
|
+
class AnalysisPlan(BaseModel): objective: str; assumptions: list[str]; steps: list[AnalysisStep]; required_tools: list[str]; expected_outputs: list[str]
|
|
184
|
+
|
|
185
|
+
class AnalysisState(BaseModel):
|
|
186
|
+
run_id: str; project_id: str; dataset_id: str
|
|
187
|
+
user_query: str; objective: str
|
|
188
|
+
plan: list[AnalysisStep]; current_step: int
|
|
189
|
+
agent_messages: list[AgentMessage]; tool_calls: list[ToolCall]
|
|
190
|
+
artifacts: list[Artifact]; evidence: list[Evidence]
|
|
191
|
+
validation_results: list[ValidationResult]; insights: list[Insight]
|
|
192
|
+
report_id: str | None; status: AnalysisStatus; error: str | None
|
|
193
|
+
|
|
194
|
+
class Evidence(BaseModel):
|
|
195
|
+
id: str; claim: str
|
|
196
|
+
source_type: Literal["sql","python","statistical_test","model","visualization"]
|
|
197
|
+
source_id: str; result: dict; confidence: float; validation_status: str # pending/verified/failed
|
|
198
|
+
|
|
199
|
+
class Artifact(BaseModel): id: str; type: ArtifactType; path: str; metadata: dict; created_by: str; created_at: datetime
|
|
200
|
+
|
|
201
|
+
class EvidenceGraph: Insight → Evidence → Computation(ToolCall) → Dataset (traceable)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Reproducibility bundle: `experiment.json` = {dataset_hash, schema, python_version, package_versions, llm_provider/model, prompt_version, seed, SQL, code, params, model_config, timestamp}
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 7. Tool Contracts (uniform, typed, validated)
|
|
209
|
+
|
|
210
|
+
```python
|
|
211
|
+
class Tool(BaseModel):
|
|
212
|
+
name: str; description: str; input_schema: type[BaseModel]; output_schema: type[BaseModel]
|
|
213
|
+
async def execute(self, input: ToolInput) -> ToolOutput: ...
|
|
214
|
+
|
|
215
|
+
# Contract guarantees: input validation (Pydantic) → permission check → execution → output validation → evidence emission
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**V0.1 required tools (≥22):**
|
|
219
|
+
|
|
220
|
+
| Tool | Input | Output |
|
|
221
|
+
|------|-------|--------|
|
|
222
|
+
| `profile_dataset` | dataset_id | DatasetProfile (rows/cols/dtypes/missing/duplicates/cardinality/distribution) |
|
|
223
|
+
| `inspect_schema` | dataset_id | schema |
|
|
224
|
+
| `describe_columns` | dataset_id | stats per column |
|
|
225
|
+
| `detect_missing_values` | dataset_id | missing map |
|
|
226
|
+
| `detect_duplicates` | dataset_id | dup count/rows |
|
|
227
|
+
| `detect_outliers` | dataset_id, method | outliers |
|
|
228
|
+
| `run_sql` | sql (read-only, DuckDB) | rows + columns |
|
|
229
|
+
| `run_python` | code (sandbox) | stdout/stderr/plots/variables |
|
|
230
|
+
| `correlation_analysis` | cols, method[pearson/spearman/kendall] | r, p, CI, interpretation |
|
|
231
|
+
| `hypothesis_test` | test[t/welch/mannwhitney/anova/kruskal/chisq/fisher], cols | statistic, p, CI, effect_size, assumptions, interpretation, limitations |
|
|
232
|
+
| `regression_analysis` | type[linear/logistic/ridge/lasso/elastic], X, y | coef, metrics, diagnostics |
|
|
233
|
+
| `train_model` | task, X,y, candidates, cv | model_id, cv_scores |
|
|
234
|
+
| `evaluate_model` | model_id, metrics | Accuracy/Precision/Recall/F1/ROC/PR or MAE/MSE/RMSE/R2 |
|
|
235
|
+
| `feature_importance` | model_id | importance + plot |
|
|
236
|
+
| `create_chart` | spec → Plotly | chart artifact |
|
|
237
|
+
| `save_artifact` | type, content | artifact_id |
|
|
238
|
+
| `create_evidence` | claim, source | evidence_id |
|
|
239
|
+
| `validate_result` | evidence_id | ValidationResult |
|
|
240
|
+
| `generate_report` | run_id | report paths |
|
|
241
|
+
|
|
242
|
+
All tools: `Typed Input/Output`, `Validation`, `Error Handling`, `Unit Tests`, `Cost/Latency logged`.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 8. Evidence Model & Graph
|
|
247
|
+
|
|
248
|
+
Every Insight must trace:
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
Insight #003: "East region revenue +27.4% (highest)"
|
|
252
|
+
├─ Evidence E-014 {claim, source_type=sql, source_id=TC-042, result={East:27.4,South:18.2,North:12.1}, confidence=0.92, validation=verified}
|
|
253
|
+
│ ├─ ToolCall TC-042 run_sql: SELECT region, growth FROM ...
|
|
254
|
+
│ └─ Dataset D-001 sales.csv hash=sha256:...
|
|
255
|
+
├─ Chart C-007 Revenue Growth by Region (bar)
|
|
256
|
+
└─ Validation V-014 {aggregation verified, missing checked, n=...}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Unsupported-claim guard: output guardrail rewrites `causes/impact/effect` → `associated with` unless causal inference evidence exists.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 9. API Specification (FastAPI, /api/v1)
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
POST /datasets → upload (multipart, validate size/ext/MIME/traversal) → dataset_id
|
|
267
|
+
GET /datasets/{id} → profile + metadata
|
|
268
|
+
POST /analysis → {dataset_id, task} → run_id (creates AnalysisRun, enqueues graph)
|
|
269
|
+
GET /analysis/{id} → AnalysisState (polling fallback)
|
|
270
|
+
GET /analysis/{id}/events → SSE: agent_started, agent_completed, tool_started, tool_completed, analysis_progress, validation_started/completed, report_generated
|
|
271
|
+
GET /analysis/{id}/artifacts → list artifacts
|
|
272
|
+
GET /analysis/{id}/report → markdown/html/pdf/notebook
|
|
273
|
+
POST /analysis/{id}/approve → human-in-the-loop approval
|
|
274
|
+
GET /health GET /version
|
|
275
|
+
|
|
276
|
+
Event schema: {event, agent, tool, status, timestamp, duration_ms, run_id}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
Auth: none in V0.1 (local-first). Storage: `data/projects/{id}/artifacts/...`
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 10. Security Boundary
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
Untrusted perimeter: uploaded files + dataset cell text + user task
|
|
287
|
+
↓
|
|
288
|
+
File Security: max_size (100MB MVP), allowlist [csv,parquet,json,xlsx], MIME sniff, filename sanitization, path traversal block, zip bomb check, hash
|
|
289
|
+
↓
|
|
290
|
+
SQL Boundary: SQL Validation → allowlist read-only; deny DROP/DELETE/UPDATE/INSERT/ALTER/ATTACH/COPY; DuckDB read-only connection; row limit
|
|
291
|
+
↓
|
|
292
|
+
Python Boundary: Static AST validation → deny os/subprocess/socket/requests/eval/exec/open(file beyond workdir) → Sandbox (subprocess jail, no net, no env, tmp WorkDir, timeout, mem limit) → capture stdout/stderr/plots only
|
|
293
|
+
↓
|
|
294
|
+
Prompt Injection: all dataset content tagged UNTRUSTED DATA; system prompt instructs to treat as data; input guardrail scans for "ignore previous instructions"
|
|
295
|
+
↓
|
|
296
|
+
Output Guardrail: Unsupported Claim Detection (causal language without causal evidence) + Evidence Coverage check before report
|
|
297
|
+
↓
|
|
298
|
+
Resource Limits: max_tokens, max_steps, max_tool_calls, max_time → STOP with message
|
|
299
|
+
Human-in-the-loop: delete/overwrite/unrestricted code/large compute/network → WAITING_FOR_APPROVAL
|
|
300
|
+
Logging: JSON structured, no secrets; API keys only env vars
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## 11. Technology Decision Record (TDR)
|
|
306
|
+
|
|
307
|
+
| Decision | Chosen | Rejected | Why |
|
|
308
|
+
|----------|--------|----------|-----|
|
|
309
|
+
| Frontend | Next.js 15 + TS + Tailwind + shadcn + Plotly | CRA, Vue | SSR, app router, ecosystem, shadcn quality, Plotly statistical charts |
|
|
310
|
+
| Backend | FastAPI + Pydantic v2 + SQLAlchemy | Flask, Django | async, auto OpenAPI, typed, DI, SSE |
|
|
311
|
+
| Agent Framework | **LangGraph** | OpenAI Agents SDK (also MIT) | Explicit StateGraph, checkpoints, conditional routing, retry/recovery, long-running — required by spec §8; single framework rule |
|
|
312
|
+
| Data Engine | DuckDB + Polars + PyArrow | Pandas-only, Spark | Local analytical SQL, zero-cost, reads CSV/Parquet natively, Arrow interop, avoids loading all into memory |
|
|
313
|
+
| DB | SQLite (MVP) → Postgres | MySQL, Redis | Zero-dep local, file cache; Postgres for prod without code change (SQLAlchemy) |
|
|
314
|
+
| LLM Abstraction | Custom LLMProvider (async generate/structured_output/stream) | LangChain LLM wrapper | Lightweight, provider-agnostic, supports OpenAI/Anthropic/Google/OpenRouter/Ollama, no lock-in |
|
|
315
|
+
| Cache | Local File Cache | Redis Cloud | Free-first, no paid dependency |
|
|
316
|
+
| Observability | OTel-compatible interface, optional | Datadog | No SaaS requirement |
|
|
317
|
+
| Package Mgr | uv + Ruff + MyPy + Pytest | Poetry + flake8 | Speed, modern, strict typing |
|
|
318
|
+
| MCP | Adapter layer over Tool Layer | MCP everywhere | Domain not dependent on MCP; stateless 2026-07-28 spec |
|
|
319
|
+
|
|
320
|
+
Risks: LangGraph version churn → pin; DuckDB memory on huge files → Polars streaming fallback; LLM cost → budget guards + local Ollama default.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 12. Development Roadmap (Phased, test-gated)
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
Phase 0 Architecture Freeze ← WE ARE HERE (no business code)
|
|
328
|
+
Phase 1 Repository Scaffold Monorepo, uv, Next.js, FastAPI, SQLite, DuckDB, Polars, Pytest/Ruff/MyPy/Docker/CI → all tests pass
|
|
329
|
+
Phase 2 Data Layer upload/registry/schema/profiling/DuckDB/Polars/hash → CSV/Parquet/large/malformed tests
|
|
330
|
+
Phase 3 Tool Layer 20+ tools typed+validated+unit-tested
|
|
331
|
+
Phase 4 Agent Graph 4 agents via LangGraph, explicit state/transitions/retry/human approval
|
|
332
|
+
Phase 5 Evidence System Evidence/Insight model, graph, traceability, validation
|
|
333
|
+
Phase 6 API Dataset/Analysis/SSE/Artifact/Report endpoints
|
|
334
|
+
Phase 7 Frontend Dashboard/Datasets/Analysis workspace/Trace/Charts/Evidence/Reports
|
|
335
|
+
Phase 8 Security Sandbox, injection defense, file/SQL guards, limits
|
|
336
|
+
Phase 9 Benchmark DS-Agent-Benchmark 20 datasets/50 tasks/5 categories + metrics
|
|
337
|
+
Phase 10 MCP Server 10+ tools, decoupled adapter
|
|
338
|
+
Phase 11 Documentation README (demo/arch/quickstart/benchmark), MkDocs, examples
|
|
339
|
+
|
|
340
|
+
Per-phase gate: Implement → Test → Run → Review → Fix → Commit
|
|
341
|
+
Quality gates before report: Data → Statistical → Code → Model → Evidence → UnsupportedClaim → Report
|
|
342
|
+
Final acceptance: "Analyze why revenue declined and forecast 30 days" + Titanic survival task → full E2E reproducible
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**What NOT to build in V0.1:** K8s, microservices, cloud deploy, billing, multi-tenancy, mobile, social, custom foundation model, distributed GPU, complex RAG, vector DB, real-time collaboration.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
### Next Step
|
|
350
|
+
|
|
351
|
+
> Awaiting **Architecture Confirmation** before proceeding to Phase 1 (Scaffold). No business code will be written until freeze is approved.
|