ai-dev-cli-tools 1.0.0__tar.gz → 1.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.
- ai_dev_cli_tools-1.1.0/.github/workflows/ci.yml +120 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/.github/workflows/docs.yml +2 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/.github/workflows/publish-pypi.yml +5 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/.github/workflows/release.yml +10 -11
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/CHANGELOG.md +22 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/PKG-INFO +34 -3
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/README.md +30 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/AGENT_EFFICIENCY_ROADMAP.md +6 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/AGENT_INTEGRATION_CONTRACT.md +11 -9
- ai_dev_cli_tools-1.1.0/docs/AGENT_WORKFLOW.md +77 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/ARCHITECTURE.md +14 -4
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/BENCHMARKS.md +15 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/CACHE_AND_INDEX.md +24 -0
- ai_dev_cli_tools-1.1.0/docs/INTEGRATIONS_AND_DASHBOARD.md +25 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/MCP_SERVER.md +3 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/REPORT_SCHEMA.md +13 -1
- ai_dev_cli_tools-1.1.0/examples/benchmarks/agent-corpus.json +18 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/pyproject.toml +14 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/requirements-dev.lock +1 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/benchmark_agent_workflow.py +73 -5
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/test_installed_package.py +4 -1
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/validate_ci.py +25 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/validate_release.py +8 -3
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/verify_published_package.py +2 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/__init__.py +1 -1
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/__main__.py +4 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cli.py +144 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/completion.py +8 -5
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/config.py +46 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/dashboard.py +139 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/index_daemon_service.py +243 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/integrations.py +115 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/mcp_server.py +51 -3
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/parsers/failures.py +64 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/reporters/sarif.py +100 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/benchmark.py +239 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/bootstrap.py +36 -3
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/check.py +87 -5
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/index.py +15 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/runners/index_daemon.py +89 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/runners/plan.py +239 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/runners/policy.py +33 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runtime/runner.py +50 -5
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/security/execution.py +126 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/semantic.py +195 -0
- ai_dev_cli_tools-1.1.0/src/ai_dev_tools/semantic_backends.py +253 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/utils/subprocess.py +4 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_agent_plan.py +60 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_benchmark.py +2 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_benchmark_gate.py +132 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_check_scheduler.py +1 -1
- ai_dev_cli_tools-1.1.0/tests/unit/test_execution_policy.py +50 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_failure_classification.py +60 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_index_daemon.py +62 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_index_daemon_service.py +132 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_integrations_dashboard.py +124 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_mcp_server.py +17 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_new_cli_commands.py +41 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_release_scripts.py +10 -2
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_report.py +1 -1
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_runtime_runner.py +98 -1
- ai_dev_cli_tools-1.1.0/tests/unit/test_sarif.py +55 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_semantic.py +88 -0
- ai_dev_cli_tools-1.1.0/tests/unit/test_semantic_backends.py +210 -0
- ai_dev_cli_tools-1.0.0/.github/workflows/ci.yml +0 -71
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/.gitignore +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/CONTRIBUTING.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/LICENSE +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/Makefile +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/SECURITY.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/TODO.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/ai.ps1 +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/ai.sh +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/ADAPTIVECHESSAI_FULL_CHECK_FAILURE_2026-08-30.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/ADAPTIVECHESSAI_PYCHARM_HEADLESS_INSPECTION_FAILURE_2026-08-30.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/ADDING_A_DETECTOR.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/ADDING_A_RUNNER.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/AGENT_COORDINATION.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/BOOTSTRAP.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/CHANGED_TEST_SELECTION.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/CONTEXT_BUILDER.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/DISTRIBUTION.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/FLAKY_RETRIES.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/MONOREPO_SUPPORT.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/OBSERVATION_LIFECYCLE.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/PERFORMANCE.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/RUNTIME.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/SEMANTIC_COMPRESSION.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/TOKEN_EFFICIENCY_RESEARCH.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/TOOL_OUTPUT_PARSERS.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/WARM_ENVIRONMENT.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/WATCH_MODE.md +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/benchmarks/agent-workflows-windows-py314-2026-08-11.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/docs/report-schema.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/agent-affected-workflow.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/agent-monorepo-workflow.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/agent-multiturn-workflow.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/agent-repair-workflow.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/src/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/src/orders.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/src/pricing.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_orders.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_pricing.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_1.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_10.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_11.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_12.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_2.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_3.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_4.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_5.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_6.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_7.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_8.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_9.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/billing.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/test_billing.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/catalog.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/test_catalog.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/mcp-recurring-status.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/output-budget-smoke.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/benchmarks/symbol-diff-context.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/examples/consume_json_report.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/benchmark_mcp_status.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/scripts/benchmark_symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cache/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cache/graph.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cache/prompt_layout.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cache/repository.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/cache/validation.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/builder.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/compression.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/incremental.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/models.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/profiles.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/refinement.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/retrieval.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/selection.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/symbols.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/context/tokens.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/environment.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/project.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/repository_map.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/runtime.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/detectors/workspaces.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/git/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/git/inspect.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/git/symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/models/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/models/report.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/models/workspace.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/parsers/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/parsers/logs.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/parsers/registry.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/reporters/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/reporters/progressive.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/reporters/writer.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/baseline.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/bootstrap_models.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/bootstrap_strategies.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/cache.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/check_checkpoint.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/check_models.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/check_scheduler.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/check_selection.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/coordination.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/diagnostics.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/environment_state.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/feedback.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/finish.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/flaky.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/focused.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/observations.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/performance.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runners/watch.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runtime/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/runtime/supervisor.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/security/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/security/secrets.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/source_symbols.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/src/ai_dev_tools/utils/__init__.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/cargo-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/coverage-ok.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/eslint-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/gradle-ok.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/jest-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/maven-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/maven-localized-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/mypy-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/phpunit-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/pytest-9-ok.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/pytest-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/pytest-multiple-failures.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/ruff-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/ruff-warning.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/tsc-fail.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/logs/vitest-ok.log +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/package.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/packages/web/package.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/packages/web/test.js +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/gradle/build.gradle +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/gradle/gradlew.bat +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/maven/mvnw.cmd +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/maven/pom.xml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-npm/package-lock.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-npm/package.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-pnpm/package.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-yarn/package.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/node-yarn/yarn.lock +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/php-composer/composer.json +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/python-pip/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/python-pip/requirements.txt +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/python-poetry/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/python-uv/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/python-uv/uv.lock +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/fixtures/projects/rust/Cargo.toml +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/integration/test_adaptive_chess_regression.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/integration/test_cli.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/integration/test_cross_platform_paths.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/integration/test_git.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/integration/test_toolchain_e2e.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_baseline.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_bootstrap.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_cache.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_check.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_check_plan.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_cli_more.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_completion.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_config.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_builder.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_compression.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_profiles.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_refinement.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_retrieval.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_context_symbols.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_coordination.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_diagnostics.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_doctor.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_environment_state.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_feedback.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_finish.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_flaky.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_logs.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_more_coverage.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_more_symbol_adapters.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_observations.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_package_smoke.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_performance.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_progressive_reports.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_prompt_layout.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_repository_map.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_runner_failures.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_runtime.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_runtime_supervisor.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_scan.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_secret_boundaries.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_secrets.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_token_accounting.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_tool_parsers.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_watch.py +0 -0
- {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.1.0}/tests/unit/test_workspaces.py +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
13
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
17
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
- run: python -m pip install --upgrade pip
|
|
21
|
+
- run: python -m pip install -c requirements-dev.lock -e ".[dev]"
|
|
22
|
+
- run: ruff check .
|
|
23
|
+
- run: mypy src tests
|
|
24
|
+
- run: coverage run -m pytest
|
|
25
|
+
- run: coverage report --fail-under=90
|
|
26
|
+
- run: python -m build
|
|
27
|
+
- run: python scripts/test_installed_package.py
|
|
28
|
+
- run: python scripts/validate_ci.py
|
|
29
|
+
- run: ai-dev --version
|
|
30
|
+
- run: ai-dev doctor --json
|
|
31
|
+
- run: ai-dev scan --json
|
|
32
|
+
- run: ai-dev bootstrap --explain --json
|
|
33
|
+
- run: ai-dev capabilities --json
|
|
34
|
+
- run: ai-dev context build --explain --json
|
|
35
|
+
- run: ai-dev git inspect --json
|
|
36
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
37
|
+
if: always()
|
|
38
|
+
with:
|
|
39
|
+
name: ai-dev-reports-${{ matrix.os }}-${{ matrix.python-version }}
|
|
40
|
+
path: |
|
|
41
|
+
.ai/reports
|
|
42
|
+
.ai/logs
|
|
43
|
+
if-no-files-found: ignore
|
|
44
|
+
toolchain-e2e:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
48
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
49
|
+
with:
|
|
50
|
+
python-version: "3.13"
|
|
51
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
52
|
+
with:
|
|
53
|
+
node-version: "22"
|
|
54
|
+
- uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
|
|
55
|
+
with:
|
|
56
|
+
distribution: temurin
|
|
57
|
+
java-version: "17"
|
|
58
|
+
- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable 2026-08-31
|
|
59
|
+
- uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2
|
|
60
|
+
with:
|
|
61
|
+
php-version: "8.3"
|
|
62
|
+
tools: composer
|
|
63
|
+
- uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
|
|
64
|
+
with:
|
|
65
|
+
gradle-version: "8.10"
|
|
66
|
+
- run: python -m pip install -c requirements-dev.lock -e ".[dev]"
|
|
67
|
+
- name: Execute real fixture toolchains
|
|
68
|
+
env:
|
|
69
|
+
RUN_TOOLCHAIN_E2E: "1"
|
|
70
|
+
E2E_TOOLCHAINS: python,node,rust,maven,gradle,php
|
|
71
|
+
run: python -m pytest tests/integration/test_toolchain_e2e.py -q
|
|
72
|
+
|
|
73
|
+
agent-corpus:
|
|
74
|
+
runs-on: ubuntu-latest
|
|
75
|
+
steps:
|
|
76
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
77
|
+
with:
|
|
78
|
+
persist-credentials: false
|
|
79
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
80
|
+
with:
|
|
81
|
+
python-version: "3.13"
|
|
82
|
+
- run: python -m pip install -c requirements-dev.lock -e ".[dev]"
|
|
83
|
+
- name: Run real-agent regression corpus
|
|
84
|
+
run: >-
|
|
85
|
+
ai-dev benchmark corpus
|
|
86
|
+
--manifest examples/benchmarks/agent-corpus.json
|
|
87
|
+
--trials 3
|
|
88
|
+
--timeout 60
|
|
89
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
90
|
+
if: always()
|
|
91
|
+
with:
|
|
92
|
+
name: agent-corpus-results
|
|
93
|
+
path: .ai/benchmarks
|
|
94
|
+
if-no-files-found: error
|
|
95
|
+
|
|
96
|
+
agent-report:
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
permissions:
|
|
99
|
+
contents: read
|
|
100
|
+
security-events: write
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
103
|
+
with:
|
|
104
|
+
fetch-depth: 0
|
|
105
|
+
persist-credentials: false
|
|
106
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
107
|
+
with:
|
|
108
|
+
python-version: "3.13"
|
|
109
|
+
- run: python -m pip install -c requirements-dev.lock -e ".[dev]"
|
|
110
|
+
- name: Build bounded agent plan
|
|
111
|
+
run: ai-dev plan --task "Review this commit" --json
|
|
112
|
+
- name: Export SARIF
|
|
113
|
+
run: ai-dev sarif --input .ai/reports/agent-plan.json --output .ai/reports/ai-dev.sarif
|
|
114
|
+
- name: Add agent plan to job summary
|
|
115
|
+
run: cat .ai/reports/agent-plan.md >> "$GITHUB_STEP_SUMMARY"
|
|
116
|
+
- name: Upload SARIF to GitHub code scanning
|
|
117
|
+
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
|
|
118
|
+
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
|
|
119
|
+
with:
|
|
120
|
+
sarif_file: .ai/reports/ai-dev.sarif
|
|
@@ -8,8 +8,8 @@ jobs:
|
|
|
8
8
|
docs:
|
|
9
9
|
runs-on: ubuntu-latest
|
|
10
10
|
steps:
|
|
11
|
-
- uses: actions/checkout@
|
|
12
|
-
- uses: actions/setup-python@
|
|
11
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
12
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
13
13
|
with:
|
|
14
14
|
python-version: "3.12"
|
|
15
15
|
- run: python -m pip install -c requirements-dev.lock -e ".[dev]"
|
|
@@ -10,6 +10,7 @@ permissions:
|
|
|
10
10
|
|
|
11
11
|
jobs:
|
|
12
12
|
validate-release:
|
|
13
|
+
if: github.event.release.prerelease == false
|
|
13
14
|
name: Validate manually promoted release artifacts
|
|
14
15
|
runs-on: ubuntu-latest
|
|
15
16
|
steps:
|
|
@@ -36,7 +37,7 @@ jobs:
|
|
|
36
37
|
python -m twine check dist/*
|
|
37
38
|
python scripts/validate_release.py --tag "$RELEASE_TAG" --dist dist
|
|
38
39
|
- name: Upload validated production artifact
|
|
39
|
-
uses: actions/upload-artifact@
|
|
40
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
40
41
|
with:
|
|
41
42
|
name: pypi-distributions
|
|
42
43
|
path: dist/
|
|
@@ -44,6 +45,7 @@ jobs:
|
|
|
44
45
|
retention-days: 7
|
|
45
46
|
|
|
46
47
|
publish-pypi:
|
|
48
|
+
if: github.event.release.prerelease == false
|
|
47
49
|
name: Publish manually approved release to PyPI
|
|
48
50
|
needs: validate-release
|
|
49
51
|
runs-on: ubuntu-latest
|
|
@@ -54,7 +56,7 @@ jobs:
|
|
|
54
56
|
id-token: write
|
|
55
57
|
steps:
|
|
56
58
|
- name: Download validated production artifact
|
|
57
|
-
uses: actions/download-artifact@
|
|
59
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
58
60
|
with:
|
|
59
61
|
name: pypi-distributions
|
|
60
62
|
path: dist/
|
|
@@ -64,6 +66,7 @@ jobs:
|
|
|
64
66
|
packages-dir: dist/
|
|
65
67
|
|
|
66
68
|
verify-pypi:
|
|
69
|
+
if: github.event.release.prerelease == false
|
|
67
70
|
name: Verify PyPI pipx installation
|
|
68
71
|
needs: publish-pypi
|
|
69
72
|
runs-on: ubuntu-latest
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
python scripts/validate_release.py --tag "$GITHUB_REF_NAME" --dist dist
|
|
32
32
|
python scripts/test_installed_package.py
|
|
33
33
|
- name: Upload immutable distribution artifact
|
|
34
|
-
uses: actions/upload-artifact@
|
|
34
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
35
35
|
with:
|
|
36
36
|
name: python-package-distributions
|
|
37
37
|
path: dist/
|
|
@@ -49,7 +49,7 @@ jobs:
|
|
|
49
49
|
id-token: write
|
|
50
50
|
steps:
|
|
51
51
|
- name: Download distribution artifact
|
|
52
|
-
uses: actions/download-artifact@
|
|
52
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
53
53
|
with:
|
|
54
54
|
name: python-package-distributions
|
|
55
55
|
path: dist/
|
|
@@ -88,17 +88,16 @@ jobs:
|
|
|
88
88
|
with:
|
|
89
89
|
persist-credentials: false
|
|
90
90
|
- name: Download TestPyPI-verified distribution artifact
|
|
91
|
-
uses: actions/download-artifact@
|
|
91
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
92
92
|
with:
|
|
93
93
|
name: python-package-distributions
|
|
94
94
|
path: dist/
|
|
95
|
-
- name: Create
|
|
95
|
+
- name: Create RC prerelease or stable promotion draft
|
|
96
96
|
env:
|
|
97
97
|
GH_TOKEN: ${{ github.token }}
|
|
98
|
-
run:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
--title "ai-dev $GITHUB_REF_NAME"
|
|
98
|
+
run: |
|
|
99
|
+
if [[ "$GITHUB_REF_NAME" == *-rc.* ]]; then
|
|
100
|
+
gh release create "$GITHUB_REF_NAME" dist/* --prerelease --verify-tag --generate-notes --title "ai-dev $GITHUB_REF_NAME"
|
|
101
|
+
else
|
|
102
|
+
gh release create "$GITHUB_REF_NAME" dist/* --draft --verify-tag --generate-notes --title "ai-dev $GITHUB_REF_NAME"
|
|
103
|
+
fi
|
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.0 - 2026-08-31
|
|
4
|
+
|
|
5
|
+
Stable promotion of `1.1.0rc1` after cross-platform CI, benchmark regression gates, and a clean
|
|
6
|
+
TestPyPI installation smoke test.
|
|
7
|
+
|
|
8
|
+
- Add `plan` and MCP `plan_work` for bounded, preview-only implementation plans with scope,
|
|
9
|
+
dependencies, validation, risk, policy assessments, and stable evidence references.
|
|
10
|
+
- Add built-in Tree-sitter AST and LSP document-symbol backends alongside the local structural
|
|
11
|
+
fallback and semantic plugin contract.
|
|
12
|
+
- Add a detached, localhost-authenticated index daemon using native filesystem events, IPC
|
|
13
|
+
start/status/stop control, lifecycle state, and no periodic repository rescans.
|
|
14
|
+
- Classify command failures and retry only transient infrastructure failures while preserving the
|
|
15
|
+
first failure and recovery evidence.
|
|
16
|
+
- Add configurable command allow/deny prefixes and impact limits, enforced by checks, bootstrap,
|
|
17
|
+
and application startup, plus a preview-only `policy assess` command.
|
|
18
|
+
- Extend reproducible benchmarks with precision, recall, false negatives, iterations, files read,
|
|
19
|
+
reported token metrics, a versioned real-agent corpus, and enforceable regression gates.
|
|
20
|
+
- Add ready project-scoped MCP configurations for Codex, Claude Code, Cursor, and generic clients.
|
|
21
|
+
- Add a loopback-only local dashboard for index, semantic, cache, runtime, daemon, and error health.
|
|
22
|
+
- Add deterministic report-to-SARIF conversion and a GitHub Actions code-scanning summary job.
|
|
23
|
+
- Upgrade and SHA-pin supported GitHub Actions used by CI, docs, and publishing workflows.
|
|
24
|
+
|
|
3
25
|
## 1.0.0 - 2026-08-31
|
|
4
26
|
|
|
5
27
|
- Stabilize the local CLI and report schema for the 1.0 release line.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ai-dev-cli-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Cross-platform CLI helpers that give AI coding agents concise, deterministic development reports.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MatthiasLew/ai-dev-cli-tools
|
|
6
6
|
Project-URL: Repository, https://github.com/MatthiasLew/ai-dev-cli-tools
|
|
@@ -19,12 +19,15 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
21
|
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: watchdog<7,>=4
|
|
22
23
|
Provides-Extra: dev
|
|
23
24
|
Requires-Dist: build>=1.2; extra == 'dev'
|
|
24
25
|
Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
|
|
25
26
|
Requires-Dist: mypy>=1.11; extra == 'dev'
|
|
26
27
|
Requires-Dist: pytest>=8.3; extra == 'dev'
|
|
27
28
|
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
29
|
+
Provides-Extra: semantic
|
|
30
|
+
Requires-Dist: tree-sitter-language-pack>=0.9; extra == 'semantic'
|
|
28
31
|
Provides-Extra: tokenizers
|
|
29
32
|
Requires-Dist: tiktoken>=0.7; extra == 'tokenizers'
|
|
30
33
|
Description-Content-Type: text/markdown
|
|
@@ -93,12 +96,24 @@ ai-dev check --mode full --jobs 4
|
|
|
93
96
|
ai-dev check --mode changed --policy feedback-first --resume
|
|
94
97
|
ai-dev check --mode changed --compare main
|
|
95
98
|
ai-dev check --mode changed --retry-flaky 1
|
|
99
|
+
ai-dev check --mode changed --retry-infra 1
|
|
100
|
+
ai-dev plan --task "implement rate limiting" --mode changed
|
|
96
101
|
ai-dev index update
|
|
102
|
+
ai-dev index daemon start
|
|
103
|
+
ai-dev index daemon status
|
|
104
|
+
ai-dev index daemon stop
|
|
105
|
+
ai-dev semantic status
|
|
106
|
+
ai-dev semantic index --backend auto
|
|
107
|
+
ai-dev policy assess -- python -m pytest
|
|
108
|
+
ai-dev sarif --input .ai/reports/agent-plan.json
|
|
97
109
|
ai-dev cache status
|
|
98
110
|
ai-dev cache layout
|
|
99
111
|
ai-dev baseline create main
|
|
100
112
|
ai-dev baseline compare main
|
|
101
113
|
ai-dev benchmark run --suite examples/benchmarks/output-budget-smoke.json --variant baseline
|
|
114
|
+
ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
|
|
115
|
+
ai-dev integrations install all
|
|
116
|
+
ai-dev dashboard serve --port 8765
|
|
102
117
|
ai-dev explain issue:<id> --tail 100
|
|
103
118
|
ai-dev explain --symbol "src/app.py#Application.run" --tail 100
|
|
104
119
|
ai-dev feedback --task "fix authentication timeout"
|
|
@@ -123,7 +138,7 @@ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version`
|
|
|
123
138
|
|
|
124
139
|
## Local MCP server
|
|
125
140
|
|
|
126
|
-
`ai-dev mcp serve` exposes project status, compact feedback, bounded context, validation,
|
|
141
|
+
`ai-dev mcp serve` exposes project status, implementation planning, compact feedback, bounded context, validation,
|
|
127
142
|
and progressive evidence as local structured tools for Codex-compatible MCP clients. The STDIO
|
|
128
143
|
server is dependency-free, has no network listener, fixes all calls to one project root, and
|
|
129
144
|
defaults validation to preview-only.
|
|
@@ -135,6 +150,9 @@ codex mcp add ai-dev -- ai-dev --project "/absolute/path/to/project" mcp serve
|
|
|
135
150
|
See `docs/MCP_SERVER.md` for tool schemas, approvals, project-scoped configuration, and
|
|
136
151
|
security boundaries.
|
|
137
152
|
|
|
153
|
+
For the recommended agent loop—plan, retrieve, implement, validate, and expand only failed
|
|
154
|
+
evidence—see `docs/AGENT_WORKFLOW.md`.
|
|
155
|
+
|
|
138
156
|
For agents sharing a repository, `ai-dev agents add|claim|heartbeat|release|complete|status`
|
|
139
157
|
maintains an atomic local task board with expiring leases and declared-path conflict detection.
|
|
140
158
|
See `docs/AGENT_COORDINATION.md` for the workflow and safety limits.
|
|
@@ -230,6 +248,12 @@ paths = ["node_modules", ".venv", "dist", "build"]
|
|
|
230
248
|
[reports]
|
|
231
249
|
directory = ".ai/reports"
|
|
232
250
|
logs_directory = ".ai/logs"
|
|
251
|
+
|
|
252
|
+
[execution]
|
|
253
|
+
mode = "enforce"
|
|
254
|
+
maximum_impact = "high"
|
|
255
|
+
allow_prefixes = ["python -m pytest", "python -m ruff", "python -m mypy"]
|
|
256
|
+
deny_prefixes = ["git reset", "git clean"]
|
|
233
257
|
```
|
|
234
258
|
|
|
235
259
|
Configuration takes precedence over auto detection. Invalid or unknown configuration is reported through `config_warnings` instead of crashing normal scans.
|
|
@@ -262,13 +286,20 @@ git diff --check
|
|
|
262
286
|
| test affected | implemented |
|
|
263
287
|
| test flaky / check --retry-flaky | implemented |
|
|
264
288
|
| index status/update/rebuild | implemented |
|
|
289
|
+
| index daemon | implemented |
|
|
290
|
+
| plan / MCP plan_work | implemented |
|
|
291
|
+
| semantic status/index | implemented with built-in Tree-sitter, LSP, and provider plugins |
|
|
292
|
+
| policy assess / execution enforcement | implemented |
|
|
293
|
+
| sarif | implemented |
|
|
265
294
|
| cache status/prune/clear/layout | implemented |
|
|
266
295
|
| logs summarize | implemented |
|
|
267
296
|
| context build | implemented |
|
|
268
297
|
| diagnostics | implemented |
|
|
269
298
|
| mcp serve | implemented |
|
|
270
299
|
| watch | implemented |
|
|
271
|
-
| benchmark run/compare | implemented |
|
|
300
|
+
| benchmark run/compare/gate/corpus | implemented |
|
|
301
|
+
| integrations install | implemented for Codex, Claude Code, Cursor, and generic MCP |
|
|
302
|
+
| dashboard status/serve | implemented, loopback-only |
|
|
272
303
|
| performance latest/compare | implemented |
|
|
273
304
|
| capabilities | implemented |
|
|
274
305
|
| git status | implemented |
|
|
@@ -62,12 +62,24 @@ ai-dev check --mode full --jobs 4
|
|
|
62
62
|
ai-dev check --mode changed --policy feedback-first --resume
|
|
63
63
|
ai-dev check --mode changed --compare main
|
|
64
64
|
ai-dev check --mode changed --retry-flaky 1
|
|
65
|
+
ai-dev check --mode changed --retry-infra 1
|
|
66
|
+
ai-dev plan --task "implement rate limiting" --mode changed
|
|
65
67
|
ai-dev index update
|
|
68
|
+
ai-dev index daemon start
|
|
69
|
+
ai-dev index daemon status
|
|
70
|
+
ai-dev index daemon stop
|
|
71
|
+
ai-dev semantic status
|
|
72
|
+
ai-dev semantic index --backend auto
|
|
73
|
+
ai-dev policy assess -- python -m pytest
|
|
74
|
+
ai-dev sarif --input .ai/reports/agent-plan.json
|
|
66
75
|
ai-dev cache status
|
|
67
76
|
ai-dev cache layout
|
|
68
77
|
ai-dev baseline create main
|
|
69
78
|
ai-dev baseline compare main
|
|
70
79
|
ai-dev benchmark run --suite examples/benchmarks/output-budget-smoke.json --variant baseline
|
|
80
|
+
ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
|
|
81
|
+
ai-dev integrations install all
|
|
82
|
+
ai-dev dashboard serve --port 8765
|
|
71
83
|
ai-dev explain issue:<id> --tail 100
|
|
72
84
|
ai-dev explain --symbol "src/app.py#Application.run" --tail 100
|
|
73
85
|
ai-dev feedback --task "fix authentication timeout"
|
|
@@ -92,7 +104,7 @@ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version`
|
|
|
92
104
|
|
|
93
105
|
## Local MCP server
|
|
94
106
|
|
|
95
|
-
`ai-dev mcp serve` exposes project status, compact feedback, bounded context, validation,
|
|
107
|
+
`ai-dev mcp serve` exposes project status, implementation planning, compact feedback, bounded context, validation,
|
|
96
108
|
and progressive evidence as local structured tools for Codex-compatible MCP clients. The STDIO
|
|
97
109
|
server is dependency-free, has no network listener, fixes all calls to one project root, and
|
|
98
110
|
defaults validation to preview-only.
|
|
@@ -104,6 +116,9 @@ codex mcp add ai-dev -- ai-dev --project "/absolute/path/to/project" mcp serve
|
|
|
104
116
|
See `docs/MCP_SERVER.md` for tool schemas, approvals, project-scoped configuration, and
|
|
105
117
|
security boundaries.
|
|
106
118
|
|
|
119
|
+
For the recommended agent loop—plan, retrieve, implement, validate, and expand only failed
|
|
120
|
+
evidence—see `docs/AGENT_WORKFLOW.md`.
|
|
121
|
+
|
|
107
122
|
For agents sharing a repository, `ai-dev agents add|claim|heartbeat|release|complete|status`
|
|
108
123
|
maintains an atomic local task board with expiring leases and declared-path conflict detection.
|
|
109
124
|
See `docs/AGENT_COORDINATION.md` for the workflow and safety limits.
|
|
@@ -199,6 +214,12 @@ paths = ["node_modules", ".venv", "dist", "build"]
|
|
|
199
214
|
[reports]
|
|
200
215
|
directory = ".ai/reports"
|
|
201
216
|
logs_directory = ".ai/logs"
|
|
217
|
+
|
|
218
|
+
[execution]
|
|
219
|
+
mode = "enforce"
|
|
220
|
+
maximum_impact = "high"
|
|
221
|
+
allow_prefixes = ["python -m pytest", "python -m ruff", "python -m mypy"]
|
|
222
|
+
deny_prefixes = ["git reset", "git clean"]
|
|
202
223
|
```
|
|
203
224
|
|
|
204
225
|
Configuration takes precedence over auto detection. Invalid or unknown configuration is reported through `config_warnings` instead of crashing normal scans.
|
|
@@ -231,13 +252,20 @@ git diff --check
|
|
|
231
252
|
| test affected | implemented |
|
|
232
253
|
| test flaky / check --retry-flaky | implemented |
|
|
233
254
|
| index status/update/rebuild | implemented |
|
|
255
|
+
| index daemon | implemented |
|
|
256
|
+
| plan / MCP plan_work | implemented |
|
|
257
|
+
| semantic status/index | implemented with built-in Tree-sitter, LSP, and provider plugins |
|
|
258
|
+
| policy assess / execution enforcement | implemented |
|
|
259
|
+
| sarif | implemented |
|
|
234
260
|
| cache status/prune/clear/layout | implemented |
|
|
235
261
|
| logs summarize | implemented |
|
|
236
262
|
| context build | implemented |
|
|
237
263
|
| diagnostics | implemented |
|
|
238
264
|
| mcp serve | implemented |
|
|
239
265
|
| watch | implemented |
|
|
240
|
-
| benchmark run/compare | implemented |
|
|
266
|
+
| benchmark run/compare/gate/corpus | implemented |
|
|
267
|
+
| integrations install | implemented for Codex, Claude Code, Cursor, and generic MCP |
|
|
268
|
+
| dashboard status/serve | implemented, loopback-only |
|
|
241
269
|
| performance latest/compare | implemented |
|
|
242
270
|
| capabilities | implemented |
|
|
243
271
|
| git status | implemented |
|
|
@@ -33,7 +33,7 @@ and longer-term direction without presenting proposed interfaces as available co
|
|
|
33
33
|
| 11 | Compact agent protocol | Implemented | Schema 1.1 JSON reports, stable reason codes, evidence references, bounded output, and the local MCP server provide the supported machine contract. |
|
|
34
34
|
| 12 | Local session state | Implemented | Versioned local session and observation state retains task, validation, context, and unresolved failure evidence without storing a conversation transcript. |
|
|
35
35
|
| 13 | Dependency-aware parallel scheduler | Implemented | `check --jobs` respects explicit check dependencies, CPU/memory/exclusive resource classes, feedback-first gates, and deterministic report order. Failed dependencies conservatively cancel their dependents. |
|
|
36
|
-
| 14 | Persistent repository index | Implemented | `index status/update/rebuild` maintains a schema-versioned, content-addressed index under `.ai/cache
|
|
36
|
+
| 14 | Persistent repository index | Implemented | `index status/update/rebuild` maintains a schema-versioned, content-addressed index under `.ai/cache/`; foreground `index daemon` keeps it warm with bounded polling and lifecycle state. |
|
|
37
37
|
| 15 | Watch mode | Implemented | Foreground polling, debounce, generated-root exclusion, queued changes, bounded runs, and cancellation of subprocesses owned by obsolete validations are implemented. Cancellation never targets an unrelated PID. |
|
|
38
38
|
| 16 | Priority and fail-fast scheduling | Implemented | `feedback-first` and `complete` policies provide deterministic priority waves and required-failure gating. |
|
|
39
39
|
| 17 | Warm environment state | Implemented | `bootstrap --if-needed` and `environment explain` reuse only revalidated executable, dependency, configuration, runtime, and plan fingerprints. |
|
|
@@ -41,7 +41,11 @@ and longer-term direction without presenting proposed interfaces as available co
|
|
|
41
41
|
| 19 | Flaky-test awareness | Implemented | Opt-in bounded retries preserve first failures, exclude deterministic/environment failures, avoid caching flaky passes, and maintain bounded local history. |
|
|
42
42
|
| 20 | Unified feedback command | Implemented | `feedback` composes Git changes, changed validation, incremental context, focused reruns, timings, observations, and session state. |
|
|
43
43
|
| 21 | Performance budgets | Implemented | Schema-versioned local timing records, total/per-stage budgets, bounded retention, and `performance latest/compare` diagnostics are available. |
|
|
44
|
-
| 22 | Reproducible workflow benchmarks | Implemented | Versioned local suites support repeated cold/warm trials, correctness gates,
|
|
44
|
+
| 22 | Reproducible workflow benchmarks | Implemented | Versioned local suites support repeated cold/warm trials, correctness gates, precision/recall and false-negative metrics, token/iteration/file telemetry, machine-readable results, and compact comparisons. |
|
|
45
|
+
| 23 | Agent execution plans | Implemented | `plan` and MCP `plan_work` emit preview-only scope, risk, dependencies, command-policy assessments, validation schedules, and stable evidence references. |
|
|
46
|
+
| 24 | Optional semantic providers | Implemented | A bounded local structural index is built in; explicitly selected entry-point providers can add Tree-sitter or LSP-backed semantics, while auto mode fails closed to structural parsing. |
|
|
47
|
+
| 25 | Execution policy | Implemented | Audit/enforce modes, allow/deny prefixes, impact ceilings, preview assessment, and enforcement cover checks, bootstrap, and managed application startup. |
|
|
48
|
+
| 26 | CI-native agent evidence | Implemented | Reports convert deterministically to SARIF and the pinned GitHub Actions workflow publishes a compact plan summary plus code-scanning evidence. |
|
|
45
49
|
|
|
46
50
|
## Implemented supporting capabilities
|
|
47
51
|
|
|
@@ -15,14 +15,15 @@ Integrations must request JSON with `--json` and must not parse Markdown or term
|
|
|
15
15
|
|
|
16
16
|
## Recommended loop
|
|
17
17
|
|
|
18
|
-
1.
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
22
|
-
5.
|
|
23
|
-
6.
|
|
24
|
-
7.
|
|
25
|
-
8.
|
|
18
|
+
1. Call `plan_work` or run `ai-dev plan --task "<task>" --json` before broad edits.
|
|
19
|
+
2. Run `ai-dev cache layout --json` once per content state and place stable sections before task-specific content at the recommended breakpoint.
|
|
20
|
+
3. Prefer `ai-dev feedback --task "<task>" --json` for the normal compact loop.
|
|
21
|
+
4. Inspect `decision`, `scope`, `changes`, `validation`, `context`, `observations`, and `performance`.
|
|
22
|
+
5. Use `ai-dev session status --json` after an interrupted handoff.
|
|
23
|
+
6. Read `metadata.progressive.references` and expand only the evidence needed.
|
|
24
|
+
7. Use failure signatures to deduplicate retries and optionally compare a named local baseline.
|
|
25
|
+
8. Treat flaky passes, low confidence, and recall regressions as unresolved evidence.
|
|
26
|
+
9. Before handoff, run `ai-dev finish --json` and a complete validation pass.
|
|
26
27
|
|
|
27
28
|
All acceleration state is local under `.ai/`; no command transmits repository contents or
|
|
28
29
|
metrics.
|
|
@@ -32,12 +33,13 @@ metrics.
|
|
|
32
33
|
Use the local MCP server when the agent supports structured tools. Tool results contain concise
|
|
33
34
|
text and machine-readable `structuredContent`; consumers should prefer the structured data.
|
|
34
35
|
|
|
35
|
-
- Call `project_status` before
|
|
36
|
+
- Call `project_status`, then `plan_work`, before broad repository work.
|
|
36
37
|
- Use `feedback`, `build_context`, and `run_checks` in their preview-only defaults.
|
|
37
38
|
- Set execution or artifact-writing flags only when the task requires them.
|
|
38
39
|
- Expand one stable ID with `explain_evidence` instead of requesting full logs.
|
|
39
40
|
- Treat tool names and required fields as compatibility contracts.
|
|
40
41
|
- Ignore new optional fields and new tools.
|
|
41
42
|
- Respect MCP annotations and the configured client approval policy.
|
|
43
|
+
- Keep infrastructure retry separate from flaky-test retry; neither may retry code failures.
|
|
42
44
|
|
|
43
45
|
See `MCP_SERVER.md` for setup and complete safety boundaries.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Agent workflow
|
|
2
|
+
|
|
3
|
+
The recommended loop gives an AI agent enough evidence to act without granting broad execution
|
|
4
|
+
or forcing it to reread the repository.
|
|
5
|
+
|
|
6
|
+
## 1. Plan before editing
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
ai-dev plan --task "fix authentication timeout" --mode changed --json
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The plan is preview-only and caps scope at 30 files, 20 symbols, and 50 evidence rows. It reports
|
|
13
|
+
intended scope, changed symbols, file risk, dependent actions,
|
|
14
|
+
selected validation commands, command-policy decisions, and stable evidence references. It writes
|
|
15
|
+
`.ai/reports/agent-plan.json` and `.ai/reports/agent-plan.md`. MCP clients should call
|
|
16
|
+
`plan_work` for the same contract.
|
|
17
|
+
|
|
18
|
+
## 2. Retrieve bounded context
|
|
19
|
+
|
|
20
|
+
Use `context build --profile implement` for code changes and `--profile docs` for documentation.
|
|
21
|
+
Prefer `--incremental`, task text, or explicit evidence IDs. Expand one uncertainty with
|
|
22
|
+
`ai-dev explain <evidence-id>` instead of requesting a full tree or log.
|
|
23
|
+
|
|
24
|
+
The optional semantic index is local and deterministic:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
ai-dev semantic status
|
|
28
|
+
ai-dev semantic index --backend auto
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`auto` uses the built-in structural parser unless an explicitly supported provider is selected.
|
|
32
|
+
Third-party providers register the `ai_dev_tools.semantic_backends` entry-point group and expose
|
|
33
|
+
an `index(project_root, paths)` method returning bounded symbol objects. Provider code runs in the
|
|
34
|
+
local process and therefore must be trusted like any development dependency.
|
|
35
|
+
|
|
36
|
+
## 3. Assess commands before execution
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ai-dev policy assess -- python -m pytest tests/unit -q --json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Configure `[execution]` in `.ai-dev-tools.toml`. `audit` reports decisions without blocking;
|
|
43
|
+
`enforce` applies allow/deny prefixes and `maximum_impact` to checks, bootstrap, and application
|
|
44
|
+
startup. Argument arrays are always executed without a shell. Policy does not turn an untrusted
|
|
45
|
+
repository into a trusted one; review project configuration before running it.
|
|
46
|
+
|
|
47
|
+
## 4. Validate narrowly, then completely
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
ai-dev check --mode changed --policy feedback-first --retry-infra 1 --json
|
|
51
|
+
ai-dev check --mode full --jobs 4 --json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Only failures classified as transient infrastructure are retried automatically. Code,
|
|
55
|
+
environment, policy, cancellation, and timeout failures are not hidden by retry. Recovered runs
|
|
56
|
+
retain their initial output and attempt count. Flaky-test retry remains separate and opt-in through
|
|
57
|
+
`--retry-flaky`.
|
|
58
|
+
|
|
59
|
+
## 5. Publish compact evidence
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
ai-dev sarif --input .ai/reports/check-latest.json --output .ai/reports/ai-dev.sarif
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
SARIF conversion is project-scoped, secret-masked, capped at 10 MB input and 5,000 results, and
|
|
66
|
+
does not contact GitHub. CI may upload the result to code scanning and place the readable plan in
|
|
67
|
+
the job summary. Full logs remain local artifacts and should be opened only for a failed evidence
|
|
68
|
+
reference.
|
|
69
|
+
|
|
70
|
+
## Recommended agent defaults
|
|
71
|
+
|
|
72
|
+
- Start with `project_status` or `plan_work`, not an unbounded repository read.
|
|
73
|
+
- Keep execution preview-only until the user or client policy allows it.
|
|
74
|
+
- Use `implement` or `docs` context profiles and stable evidence IDs.
|
|
75
|
+
- Treat low confidence, truncation, and recall regressions as reasons to broaden validation.
|
|
76
|
+
- Run a full validation pass before claiming completion.
|
|
77
|
+
- Never infer permission to commit, push, merge, publish, deploy, or delete from these tools.
|
|
@@ -6,17 +6,23 @@
|
|
|
6
6
|
|
|
7
7
|
- Detectors inspect environment and project structure without changing files.
|
|
8
8
|
- Runners execute existing project commands with `subprocess.run(shell=False)`, timeouts, UTF-8 output, and full log capture.
|
|
9
|
-
- Parsers reduce raw command output into first failure, project frame, repeated warning groups,
|
|
10
|
-
|
|
9
|
+
- Parsers reduce raw command output into first failure, project frame, repeated warning groups,
|
|
10
|
+
issue lists, and retry-safe failure classes.
|
|
11
|
+
- Reporters write stable Markdown, JSON, and project-scoped SARIF reports.
|
|
11
12
|
- Git helpers inspect repository state without destructive operations.
|
|
12
|
-
- Security helpers scan changed files for masked secret findings
|
|
13
|
+
- Security helpers scan changed files for masked secret findings and assess command impact against
|
|
14
|
+
configurable execution policy.
|
|
13
15
|
- Context builders compose detector, git, runner-plan, parser, and security outputs into bounded AI context packages.
|
|
14
16
|
- The MCP adapter exposes bounded local reports as strict STDIO JSON-RPC tools without duplicating detector or runner logic.
|
|
17
|
+
- The semantic adapter maintains a bounded structural symbol index and loads explicitly selected
|
|
18
|
+
trusted providers through `ai_dev_tools.semantic_backends`.
|
|
15
19
|
- Packaging smoke tests build a wheel, install it into a clean virtual environment, and verify the installed `ai-dev` entrypoint.
|
|
16
20
|
|
|
17
21
|
## Data Flow
|
|
18
22
|
|
|
19
|
-
CLI or MCP tool -> detector/runner/context builder -> full log or bounded source selection ->
|
|
23
|
+
CLI or MCP tool -> plan/detector/runner/context builder -> full log or bounded source selection ->
|
|
24
|
+
parser/security classification and masking -> `Report` model -> Markdown/JSON/SARIF artifacts or
|
|
25
|
+
concise MCP `structuredContent`.
|
|
20
26
|
|
|
21
27
|
## Extending
|
|
22
28
|
|
|
@@ -31,6 +37,10 @@ classes. CPU tasks consume one slot, memory-heavy tasks consume two, and exclusi
|
|
|
31
37
|
alone. Results are always restored to deterministic plan order. Watch cancellation propagates an
|
|
32
38
|
in-memory token only to subprocesses created by the active validation.
|
|
33
39
|
|
|
40
|
+
Before execution, checks are assessed against the configured command policy. Failed commands are
|
|
41
|
+
classified as code, environment, infrastructure, timeout, cancellation, policy, or unknown.
|
|
42
|
+
Only transient infrastructure failures receive the separately bounded automatic retry.
|
|
43
|
+
|
|
34
44
|
The stable `runners.check` facade orchestrates execution and re-exports its public models and selection functions. `check_models` owns report contracts, while `check_selection` owns changed-file and affected-test strategy.
|
|
35
45
|
|
|
36
46
|
## Context Builders
|
|
@@ -33,6 +33,8 @@ from the same declared state and ends with independently checked correctness.
|
|
|
33
33
|
ai-dev benchmark run --suite benchmarks/agent-workflows.json --variant baseline --trials 5 --cache-state cold
|
|
34
34
|
ai-dev benchmark run --suite benchmarks/agent-workflows.json --variant ai-dev --trials 5 --cache-state cold
|
|
35
35
|
ai-dev benchmark compare .ai/benchmarks/runs/<baseline>.json .ai/benchmarks/runs/<candidate>.json
|
|
36
|
+
ai-dev benchmark gate .ai/benchmarks/runs/<baseline>.json .ai/benchmarks/runs/<candidate>.json
|
|
37
|
+
ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
|
|
36
38
|
~~~
|
|
37
39
|
|
|
38
40
|
Cold and warm results are deliberately separate and cannot be compared with each other. A
|
|
@@ -45,10 +47,21 @@ correctness, fixture identity, and a local machine profile. Token estimates use
|
|
|
45
47
|
masked_utf8_bytes_divided_by_4; they are a stable approximation, not a model tokenizer claim.
|
|
46
48
|
Raw JSON and compact Markdown reports stay under `.ai/benchmarks/`.
|
|
47
49
|
|
|
50
|
+
`benchmark gate` fails when correctness differs, candidate time or token regressions exceed their
|
|
51
|
+
bounds, precision/recall fall below their floors, or false negatives exceed the allowance. The
|
|
52
|
+
versioned corpus runs all four representative agent tasks and applies the shared thresholds from
|
|
53
|
+
`examples/benchmarks/agent-corpus.json`; it is suitable as a CI release gate.
|
|
54
|
+
|
|
48
55
|
A suite variant may emit one private `AI_DEV_BENCHMARK_METRICS=` JSON line on stderr to
|
|
49
56
|
report its real command count, validation subprocess count, and time to its first actionable
|
|
50
|
-
result.
|
|
51
|
-
|
|
57
|
+
result. It may additionally report `iterations`, `files_read`, `selected_items`,
|
|
58
|
+
`relevant_items`, `true_positive_items`, `false_negative_items`, `input_tokens`, and
|
|
59
|
+
`output_tokens`. The runner derives selection precision and recall, preserves false-negative
|
|
60
|
+
counts, and compares their medians. A candidate with a recall regression is rejected even when it
|
|
61
|
+
is faster or smaller. The runner validates and removes the private line before counting
|
|
62
|
+
agent-visible bytes. Missing or invalid metrics safely fall back to generic measurements and are
|
|
63
|
+
never presented as exact model-token counts. `selection_metric_trials` is zero when precision and
|
|
64
|
+
recall were not reported; their zero medians must not be interpreted as measured selection quality.
|
|
52
65
|
|
|
53
66
|
## Included suites
|
|
54
67
|
|