ai-dev-cli-tools 0.5.0a1__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-0.5.0a1/.github/workflows/ci.yml +71 -0
- ai_dev_cli_tools-0.5.0a1/.github/workflows/docs.yml +20 -0
- ai_dev_cli_tools-0.5.0a1/.github/workflows/publish-pypi.yml +85 -0
- ai_dev_cli_tools-0.5.0a1/.github/workflows/release.yml +102 -0
- ai_dev_cli_tools-0.5.0a1/.gitignore +16 -0
- ai_dev_cli_tools-0.5.0a1/CHANGELOG.md +51 -0
- ai_dev_cli_tools-0.5.0a1/CONTRIBUTING.md +18 -0
- ai_dev_cli_tools-0.5.0a1/LICENSE +21 -0
- ai_dev_cli_tools-0.5.0a1/Makefile +17 -0
- ai_dev_cli_tools-0.5.0a1/PKG-INFO +240 -0
- ai_dev_cli_tools-0.5.0a1/README.md +211 -0
- ai_dev_cli_tools-0.5.0a1/SECURITY.md +6 -0
- ai_dev_cli_tools-0.5.0a1/TODO.md +126 -0
- ai_dev_cli_tools-0.5.0a1/ai.ps1 +7 -0
- ai_dev_cli_tools-0.5.0a1/ai.sh +3 -0
- ai_dev_cli_tools-0.5.0a1/docs/ADDING_A_DETECTOR.md +7 -0
- ai_dev_cli_tools-0.5.0a1/docs/ADDING_A_RUNNER.md +7 -0
- ai_dev_cli_tools-0.5.0a1/docs/AGENT_EFFICIENCY_ROADMAP.md +483 -0
- ai_dev_cli_tools-0.5.0a1/docs/AGENT_INTEGRATION_CONTRACT.md +25 -0
- ai_dev_cli_tools-0.5.0a1/docs/ARCHITECTURE.md +50 -0
- ai_dev_cli_tools-0.5.0a1/docs/BOOTSTRAP.md +86 -0
- ai_dev_cli_tools-0.5.0a1/docs/CACHE_AND_INDEX.md +31 -0
- ai_dev_cli_tools-0.5.0a1/docs/CHANGED_TEST_SELECTION.md +21 -0
- ai_dev_cli_tools-0.5.0a1/docs/CONTEXT_BUILDER.md +56 -0
- ai_dev_cli_tools-0.5.0a1/docs/DISTRIBUTION.md +61 -0
- ai_dev_cli_tools-0.5.0a1/docs/MONOREPO_SUPPORT.md +26 -0
- ai_dev_cli_tools-0.5.0a1/docs/RELEASE_CHECKLIST.md +68 -0
- ai_dev_cli_tools-0.5.0a1/docs/REPORT_SCHEMA.md +83 -0
- ai_dev_cli_tools-0.5.0a1/docs/RUNTIME.md +44 -0
- ai_dev_cli_tools-0.5.0a1/docs/TOOL_OUTPUT_PARSERS.md +33 -0
- ai_dev_cli_tools-0.5.0a1/docs/report-schema.json +59 -0
- ai_dev_cli_tools-0.5.0a1/examples/consume_json_report.py +24 -0
- ai_dev_cli_tools-0.5.0a1/pyproject.toml +70 -0
- ai_dev_cli_tools-0.5.0a1/scripts/__init__.py +0 -0
- ai_dev_cli_tools-0.5.0a1/scripts/test_installed_package.py +145 -0
- ai_dev_cli_tools-0.5.0a1/scripts/validate_ci.py +103 -0
- ai_dev_cli_tools-0.5.0a1/scripts/validate_release.py +72 -0
- ai_dev_cli_tools-0.5.0a1/scripts/verify_published_package.py +157 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/__init__.py +3 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/__init__.py +11 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/graph.py +136 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/repository.py +169 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/validation.py +154 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cli.py +387 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/completion.py +72 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/config.py +223 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/__init__.py +5 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/builder.py +506 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/incremental.py +107 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/models.py +59 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/profiles.py +49 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/selection.py +270 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/symbols.py +178 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/environment.py +125 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/project.py +189 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/repository_map.py +129 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/runtime.py +190 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/workspaces.py +228 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/git/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/git/inspect.py +219 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/report.py +95 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/workspace.py +48 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/logs.py +372 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/registry.py +60 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/progressive.py +161 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/writer.py +74 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/baseline.py +190 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap.py +191 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap_models.py +64 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap_strategies.py +444 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/cache.py +23 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check.py +509 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_checkpoint.py +50 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_models.py +51 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_scheduler.py +94 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_selection.py +267 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/diagnostics.py +96 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/feedback.py +193 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/finish.py +105 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/focused.py +37 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/index.py +44 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/__init__.py +3 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/runner.py +380 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/supervisor.py +145 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/security/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/security/secrets.py +58 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/utils/__init__.py +1 -0
- ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/utils/subprocess.py +74 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/cargo-fail.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/coverage-ok.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/eslint-fail.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/gradle-ok.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/jest-fail.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/maven-fail.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/maven-localized-fail.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/mypy-fail.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/phpunit-fail.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-9-ok.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-fail.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-multiple-failures.log +5 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/ruff-fail.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/ruff-warning.log +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/tsc-fail.log +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/vitest-ok.log +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/package.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +6 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +2 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/web/package.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/web/test.js +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +4 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +4 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/gradle/build.gradle +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/gradle/gradlew.bat +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/maven/mvnw.cmd +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/maven/pom.xml +9 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-npm/package-lock.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-npm/package.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-pnpm/package.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-yarn/package.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-yarn/yarn.lock +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/php-composer/composer.json +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-pip/pyproject.toml +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-pip/requirements.txt +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-poetry/pyproject.toml +5 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-uv/pyproject.toml +3 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-uv/uv.lock +1 -0
- ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/rust/Cargo.toml +4 -0
- ai_dev_cli_tools-0.5.0a1/tests/integration/test_cli.py +19 -0
- ai_dev_cli_tools-0.5.0a1/tests/integration/test_cross_platform_paths.py +68 -0
- ai_dev_cli_tools-0.5.0a1/tests/integration/test_git.py +48 -0
- ai_dev_cli_tools-0.5.0a1/tests/integration/test_toolchain_e2e.py +55 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_baseline.py +77 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_bootstrap.py +242 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_cache.py +183 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_check.py +58 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_check_plan.py +195 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_check_scheduler.py +107 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_cli_more.py +94 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_completion.py +27 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_config.py +32 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_builder.py +237 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_profiles.py +46 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_symbols.py +79 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_diagnostics.py +53 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_doctor.py +63 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_feedback.py +137 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_finish.py +52 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_logs.py +21 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_more_coverage.py +49 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_package_smoke.py +31 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_progressive_reports.py +61 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_release_scripts.py +56 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_report.py +44 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_repository_map.py +42 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_runner_failures.py +52 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime.py +46 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime_runner.py +293 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime_supervisor.py +208 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_scan.py +23 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_secret_boundaries.py +97 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_secrets.py +13 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_tool_parsers.py +139 -0
- ai_dev_cli_tools-0.5.0a1/tests/unit/test_workspaces.py +71 -0
|
@@ -0,0 +1,71 @@
|
|
|
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@v4
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
- run: python -m pip install --upgrade pip
|
|
21
|
+
- run: python -m pip install -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@v4
|
|
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@v4
|
|
48
|
+
- uses: actions/setup-python@v5
|
|
49
|
+
with:
|
|
50
|
+
python-version: "3.13"
|
|
51
|
+
- uses: actions/setup-node@v4
|
|
52
|
+
with:
|
|
53
|
+
node-version: "22"
|
|
54
|
+
- uses: actions/setup-java@v4
|
|
55
|
+
with:
|
|
56
|
+
distribution: temurin
|
|
57
|
+
java-version: "17"
|
|
58
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
59
|
+
- uses: shivammathur/setup-php@v2
|
|
60
|
+
with:
|
|
61
|
+
php-version: "8.3"
|
|
62
|
+
tools: composer
|
|
63
|
+
- uses: gradle/actions/setup-gradle@v4
|
|
64
|
+
with:
|
|
65
|
+
gradle-version: "8.10"
|
|
66
|
+
- run: python -m pip install -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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
docs:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: actions/setup-python@v5
|
|
13
|
+
with:
|
|
14
|
+
python-version: "3.12"
|
|
15
|
+
- run: python -m pip install -e ".[dev]"
|
|
16
|
+
- run: python -m ai_dev_tools.cli --help
|
|
17
|
+
- run: python -m ai_dev_tools.cli check --help
|
|
18
|
+
- run: test -s README.md
|
|
19
|
+
- run: test -s docs/ARCHITECTURE.md
|
|
20
|
+
- run: test -s docs/REPORT_SCHEMA.md
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
name: Publish PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types:
|
|
6
|
+
- published
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
validate-release:
|
|
13
|
+
name: Validate manually promoted release artifacts
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
17
|
+
with:
|
|
18
|
+
persist-credentials: false
|
|
19
|
+
ref: ${{ github.event.release.tag_name }}
|
|
20
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.13"
|
|
23
|
+
- name: Download artifacts attached by the TestPyPI workflow
|
|
24
|
+
env:
|
|
25
|
+
GH_TOKEN: ${{ github.token }}
|
|
26
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
27
|
+
run: >-
|
|
28
|
+
gh release download "$RELEASE_TAG"
|
|
29
|
+
--pattern "ai_dev_cli_tools-*"
|
|
30
|
+
--dir dist/
|
|
31
|
+
- name: Validate tag and release artifacts
|
|
32
|
+
env:
|
|
33
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
34
|
+
run: |
|
|
35
|
+
python -m pip install --upgrade twine
|
|
36
|
+
python -m twine check dist/*
|
|
37
|
+
python scripts/validate_release.py --tag "$RELEASE_TAG" --dist dist
|
|
38
|
+
- name: Upload validated production artifact
|
|
39
|
+
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
40
|
+
with:
|
|
41
|
+
name: pypi-distributions
|
|
42
|
+
path: dist/
|
|
43
|
+
if-no-files-found: error
|
|
44
|
+
retention-days: 7
|
|
45
|
+
|
|
46
|
+
publish-pypi:
|
|
47
|
+
name: Publish manually approved release to PyPI
|
|
48
|
+
needs: validate-release
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
environment:
|
|
51
|
+
name: pypi
|
|
52
|
+
url: https://pypi.org/p/ai-dev-cli-tools
|
|
53
|
+
permissions:
|
|
54
|
+
id-token: write
|
|
55
|
+
steps:
|
|
56
|
+
- name: Download validated production artifact
|
|
57
|
+
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
58
|
+
with:
|
|
59
|
+
name: pypi-distributions
|
|
60
|
+
path: dist/
|
|
61
|
+
- name: Publish distribution to PyPI
|
|
62
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
63
|
+
with:
|
|
64
|
+
packages-dir: dist/
|
|
65
|
+
|
|
66
|
+
verify-pypi:
|
|
67
|
+
name: Verify PyPI pipx installation
|
|
68
|
+
needs: publish-pypi
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
72
|
+
with:
|
|
73
|
+
persist-credentials: false
|
|
74
|
+
ref: ${{ github.event.release.tag_name }}
|
|
75
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
76
|
+
with:
|
|
77
|
+
python-version: "3.13"
|
|
78
|
+
- name: Install and smoke test from PyPI through pipx
|
|
79
|
+
env:
|
|
80
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
81
|
+
run: >-
|
|
82
|
+
python scripts/verify_published_package.py
|
|
83
|
+
--version "${RELEASE_TAG#v}"
|
|
84
|
+
--index-url https://pypi.org/simple/
|
|
85
|
+
--installer pipx
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
name: Build and validate distribution
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
17
|
+
with:
|
|
18
|
+
persist-credentials: false
|
|
19
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.13"
|
|
22
|
+
- name: Validate tag and source version
|
|
23
|
+
run: python scripts/validate_release.py --tag "$GITHUB_REF_NAME"
|
|
24
|
+
- name: Install release tooling
|
|
25
|
+
run: python -m pip install --upgrade build twine
|
|
26
|
+
- name: Build wheel and source distribution
|
|
27
|
+
run: python -m build
|
|
28
|
+
- name: Validate distributions
|
|
29
|
+
run: |
|
|
30
|
+
python -m twine check dist/*
|
|
31
|
+
python scripts/validate_release.py --tag "$GITHUB_REF_NAME" --dist dist
|
|
32
|
+
python scripts/test_installed_package.py
|
|
33
|
+
- name: Upload immutable distribution artifact
|
|
34
|
+
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
35
|
+
with:
|
|
36
|
+
name: python-package-distributions
|
|
37
|
+
path: dist/
|
|
38
|
+
if-no-files-found: error
|
|
39
|
+
retention-days: 7
|
|
40
|
+
|
|
41
|
+
publish-testpypi:
|
|
42
|
+
name: Publish to TestPyPI
|
|
43
|
+
needs: build
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
environment:
|
|
46
|
+
name: testpypi
|
|
47
|
+
url: https://test.pypi.org/p/ai-dev-cli-tools
|
|
48
|
+
permissions:
|
|
49
|
+
id-token: write
|
|
50
|
+
steps:
|
|
51
|
+
- name: Download distribution artifact
|
|
52
|
+
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
53
|
+
with:
|
|
54
|
+
name: python-package-distributions
|
|
55
|
+
path: dist/
|
|
56
|
+
- name: Publish distribution to TestPyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
58
|
+
with:
|
|
59
|
+
repository-url: https://test.pypi.org/legacy/
|
|
60
|
+
packages-dir: dist/
|
|
61
|
+
attestations: false
|
|
62
|
+
|
|
63
|
+
verify-testpypi:
|
|
64
|
+
name: Verify TestPyPI installation
|
|
65
|
+
needs: publish-testpypi
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
69
|
+
with:
|
|
70
|
+
persist-credentials: false
|
|
71
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
72
|
+
with:
|
|
73
|
+
python-version: "3.13"
|
|
74
|
+
- name: Install and smoke test from TestPyPI
|
|
75
|
+
run: >-
|
|
76
|
+
python scripts/verify_published_package.py
|
|
77
|
+
--version "${GITHUB_REF_NAME#v}"
|
|
78
|
+
--index-url https://test.pypi.org/simple/
|
|
79
|
+
|
|
80
|
+
draft-release:
|
|
81
|
+
name: Create manually promoted release draft
|
|
82
|
+
needs: verify-testpypi
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
permissions:
|
|
85
|
+
contents: write
|
|
86
|
+
steps:
|
|
87
|
+
- name: Download TestPyPI-verified distribution artifact
|
|
88
|
+
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
89
|
+
with:
|
|
90
|
+
name: python-package-distributions
|
|
91
|
+
path: dist/
|
|
92
|
+
- name: Create draft GitHub release for manual PyPI promotion
|
|
93
|
+
env:
|
|
94
|
+
GH_TOKEN: ${{ github.token }}
|
|
95
|
+
run: >-
|
|
96
|
+
gh release create "$GITHUB_REF_NAME"
|
|
97
|
+
dist/*
|
|
98
|
+
--draft
|
|
99
|
+
--prerelease
|
|
100
|
+
--verify-tag
|
|
101
|
+
--generate-notes
|
|
102
|
+
--title "ai-dev $GITHUB_REF_NAME"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.5.0a1 - 2026-08-10
|
|
6
|
+
|
|
7
|
+
- Add workspace models and isolated check/bootstrap routing for mixed monorepos.
|
|
8
|
+
- Add cross-platform mixed-monorepo and Git path fixtures covering spaces, Unicode, rename, deletion, and non-UTF-8 output.
|
|
9
|
+
- Add runner failure matrices and real Python, Node, Rust, Maven, Gradle, and Composer fixture execution in CI.
|
|
10
|
+
- Detect and validate Python, Node.js, Java, Rust, and PHP runtime requirements.
|
|
11
|
+
- Implement safe managed `run` and `stop` with supervisor-owned process termination.
|
|
12
|
+
- Add HTTP/TCP readiness probes, bounded startup logs, and readiness-timeout cleanup.
|
|
13
|
+
- Add bounded parallel check execution with `--jobs`.
|
|
14
|
+
- Add a versioned repository index and content-addressed validation cache with bounded retention.
|
|
15
|
+
- Add incremental context manifests and `context build --incremental`.
|
|
16
|
+
- Add AST-aware Python symbol snippets for large context files.
|
|
17
|
+
- Add minimal, debug, review, and full context profiles.
|
|
18
|
+
- Add local diagnostics, efficiency estimates, a stable agent contract, and JSON integration example.
|
|
19
|
+
- Add dependency-free completion generators for Bash, Zsh, Fish, and PowerShell.
|
|
20
|
+
- Add stable failure signatures and a machine-readable report JSON Schema.
|
|
21
|
+
- Add an extensible tool-output parser registry with deterministic precedence.
|
|
22
|
+
- Add compatibility fixtures and prevent cross-line test-count overcounting.
|
|
23
|
+
- Apply defense-in-depth secret masking to command logs, diagnostics, runtime streams, and report writers.
|
|
24
|
+
- Raise and enforce the coverage threshold to 90%.
|
|
25
|
+
- Add agent-efficiency and execution TODO roadmaps.
|
|
26
|
+
|
|
27
|
+
## 0.4.0
|
|
28
|
+
|
|
29
|
+
- Add `ai-dev bootstrap` with safe explain, dry-run, and execution modes.
|
|
30
|
+
- Support bootstrap strategies for Python, Node.js, Maven, Gradle, Rust, and PHP.
|
|
31
|
+
- Add guarded `.env.example` to `.env` creation via `--create-env`.
|
|
32
|
+
- Add installed-wheel entrypoint smoke validation to local and CI standards.
|
|
33
|
+
- Keep cross-platform CI marked as externally blocked until GitHub Actions jobs actually run.
|
|
34
|
+
## 0.3.0
|
|
35
|
+
|
|
36
|
+
- Add `ai-dev context build` for bounded local AI context packages.
|
|
37
|
+
- Write `.ai/context/context-latest.md` and `.ai/context/context-latest.json` artifacts.
|
|
38
|
+
- Reuse scan, repository map, git inspect, changed-test selection, validation planning, and secret masking.
|
|
39
|
+
- Keep monorepo detection experimental, per-subproject runner isolation planned, and runtime validation partial.
|
|
40
|
+
## 0.2.0
|
|
41
|
+
|
|
42
|
+
- Add schema 1.1 reports with exit codes and metadata.
|
|
43
|
+
- Add tool-specific output parser layer with fixtures for Python, JavaScript, Java, Rust, and PHP logs.
|
|
44
|
+
- Add `ai-dev capabilities` and `ai-dev check --explain`.
|
|
45
|
+
- Add `logs summarize <path> --tool auto|name` with a 50 MB input limit.
|
|
46
|
+
- Improve changed-file strategies with configuration-change and changed-test-direct reporting.
|
|
47
|
+
- Prepare package version 0.2.0 without creating a release.
|
|
48
|
+
|
|
49
|
+
## 0.1.0
|
|
50
|
+
|
|
51
|
+
- Initial private foundation for cross-platform AI development CLI helpers.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Keep changes small, typed, tested, and conservative. Runtime code should avoid platform-specific assumptions and prefer `pathlib` for paths.
|
|
4
|
+
|
|
5
|
+
Before pushing a larger stage, run:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
python -m ruff check .
|
|
9
|
+
python -m mypy src tests scripts
|
|
10
|
+
python -m coverage run -m pytest
|
|
11
|
+
python -m coverage report --fail-under=90
|
|
12
|
+
python -m build
|
|
13
|
+
python scripts/validate_ci.py
|
|
14
|
+
python scripts/test_installed_package.py
|
|
15
|
+
git diff --check
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The installed package smoke test must use a built wheel, a clean virtual environment, and the installed `ai-dev` entrypoint. Do not replace it with editable install or `PYTHONPATH` smoke tests.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mateusz Lewandowski
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ai-dev-cli-tools
|
|
3
|
+
Version: 0.5.0a1
|
|
4
|
+
Summary: Cross-platform CLI helpers that give AI coding agents concise, deterministic development reports.
|
|
5
|
+
Project-URL: Homepage, https://github.com/MatthiasLew/ai-dev-cli-tools
|
|
6
|
+
Project-URL: Repository, https://github.com/MatthiasLew/ai-dev-cli-tools
|
|
7
|
+
Project-URL: Issues, https://github.com/MatthiasLew/ai-dev-cli-tools/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/MatthiasLew/ai-dev-cli-tools/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Mateusz Lewandowski
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agents,ai,automation,cli,developer-tools
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
24
|
+
Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
|
|
25
|
+
Requires-Dist: mypy>=1.11; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest>=8.3; extra == 'dev'
|
|
27
|
+
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# AI Dev CLI Tools
|
|
31
|
+
|
|
32
|
+
Cross-platform Python CLI helpers for AI coding agents and humans who want concise, deterministic development reports instead of huge logs.
|
|
33
|
+
|
|
34
|
+
`ai-dev` runs repeatable project checks locally, stores full logs under `.ai/logs/`, and returns compact Markdown/JSON summaries under `.ai/reports/`.
|
|
35
|
+
|
|
36
|
+
## Problem
|
|
37
|
+
|
|
38
|
+
AI coding agents often spend tokens reading full test output, repository trees, dependency noise, repeated warnings, and raw Git diffs. This project follows one rule:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
Scripts do the work and collect data.
|
|
42
|
+
AI reads a short report and decides what to do next.
|
|
43
|
+
Full logs stay on disk until needed.
|
|
44
|
+
|
|
45
|
+
Generated state under `.ai/logs/`, `.ai/reports/`, `.ai/context/`, `.ai/cache/`,
|
|
46
|
+
`.ai/runtime/`, and `.ai/tmp/` is local and ignored by Git. Logs, reports, and context
|
|
47
|
+
artifacts may be removed when no longer needed; cache, runtime, and temporary state must always
|
|
48
|
+
be safe for `ai-dev` to recreate.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Install
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
python -m pip install --upgrade pipx
|
|
55
|
+
pipx install ai-dev-cli-tools==0.5.0a1
|
|
56
|
+
ai-dev --help
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
For a source checkout before the public alpha is published, use `pipx install .`. See
|
|
60
|
+
`docs/DISTRIBUTION.md` for the Trusted Publishing and upgrade policy.
|
|
61
|
+
|
|
62
|
+
For development:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python -m pip install -e ".[dev]"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Windows
|
|
69
|
+
|
|
70
|
+
```powershell
|
|
71
|
+
.\ai.ps1 doctor
|
|
72
|
+
ai-dev scan --project "C:\path with spaces\project"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Linux and macOS
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
./ai.sh doctor
|
|
79
|
+
ai-dev check --mode fast --project "/path/with spaces/project"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Commands
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
ai-dev doctor
|
|
86
|
+
ai-dev scan
|
|
87
|
+
ai-dev map --max-files 500 --max-depth 6
|
|
88
|
+
ai-dev check --mode fast
|
|
89
|
+
ai-dev check --mode changed # reports changed files and falls back safely when test mapping is uncertain
|
|
90
|
+
ai-dev check --mode full --jobs 4
|
|
91
|
+
ai-dev check --mode changed --policy feedback-first --resume
|
|
92
|
+
ai-dev index update
|
|
93
|
+
ai-dev cache status
|
|
94
|
+
ai-dev baseline create main
|
|
95
|
+
ai-dev baseline compare main
|
|
96
|
+
ai-dev explain issue:<id> --tail 100
|
|
97
|
+
ai-dev feedback --task "fix authentication timeout"
|
|
98
|
+
ai-dev session status
|
|
99
|
+
ai-dev diagnostics
|
|
100
|
+
ai-dev completion bash
|
|
101
|
+
ai-dev test affected
|
|
102
|
+
ai-dev logs summarize
|
|
103
|
+
ai-dev context build
|
|
104
|
+
ai-dev git status
|
|
105
|
+
ai-dev git inspect
|
|
106
|
+
ai-dev finish
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version` at the top level.
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## Bootstrap
|
|
113
|
+
|
|
114
|
+
`ai-dev bootstrap` prepares a detected project with conservative, project-local commands. Use `--explain` to see the plan without modifications, `--dry-run` to validate planning without executing modifying commands, and `--create-env` to allow copying `.env.example` to `.env` only when `.env` is missing.
|
|
115
|
+
|
|
116
|
+
Supported strategies include Python uv, Poetry, pip with `pyproject.toml`, pip with `requirements.txt`, Node npm/pnpm/Yarn, Maven wrapper or system Maven, Gradle wrapper or system Gradle, Cargo, and Composer.
|
|
117
|
+
|
|
118
|
+
See `docs/BOOTSTRAP.md` for safety rules and configuration.
|
|
119
|
+
|
|
120
|
+
## Managed application runtime
|
|
121
|
+
|
|
122
|
+
`ai-dev run` supports explain, dry-run, foreground, and supervised background modes.
|
|
123
|
+
`ai-dev stop` sends a token-authenticated request to the matching local supervisor and never
|
|
124
|
+
kills an arbitrary PID read from stale state. See `docs/RUNTIME.md`.
|
|
125
|
+
|
|
126
|
+
## Context Builder
|
|
127
|
+
|
|
128
|
+
`ai-dev context build` creates a bounded local context package for coding agents without calling any LLM, embedding API, or cloud service.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
ai-dev context build --task "fix auth tests"
|
|
132
|
+
ai-dev context build --changed-only --max-chars 50000
|
|
133
|
+
ai-dev context build --incremental # emits only candidates changed since the last pack
|
|
134
|
+
ai-dev context build --profile review
|
|
135
|
+
ai-dev context build --include "src/**/*.py" --exclude "tests/fixtures/**"
|
|
136
|
+
ai-dev context build --explain --json
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Artifacts are written to `.ai/context/context-latest.md` and `.ai/context/context-latest.json` by default. The builder includes detected technologies, git state, changed files, related tests, validation plan, recent commits, selected snippets, limited diffs, latest check errors, masked secret findings, and budget/truncation metadata. Large Python files use AST-aware symbol snippets with line ranges instead of blindly returning only the beginning of the file.
|
|
140
|
+
|
|
141
|
+
Incremental mode stores a schema-versioned manifest under `.ai/cache/` and reports changed versus reused files. Default limits are `--max-chars 50000`, `--max-files 30`, `--max-file-chars 8000`, and `--max-diff-chars 15000`. Secret-bearing and generated paths such as `.env`, private keys, caches, build output, `.ai/logs`, and `.ai/reports` are excluded from snippets.
|
|
142
|
+
## Reports and Logs
|
|
143
|
+
|
|
144
|
+
Validation results are cached by default using repository, command, workspace, runtime, and platform fingerprints; use `check --no-cache` to force execution. `check --resume` reuses only exact successful checkpoint fingerprints. `--policy feedback-first` runs cheaper waves first and cancels later expensive waves after a required failure; `complete` retains comprehensive execution. `index status/update/rebuild` manages the reusable repository index, while `cache status/prune/clear` provides bounded local cache maintenance. See `docs/CACHE_AND_INDEX.md`.
|
|
145
|
+
|
|
146
|
+
Short reports are written to `.ai/reports/` as Markdown and JSON. Full command output is written to `.ai/logs/` and ignored by Git. Check summaries include exit codes, durations, first failure hints, grouped repeated messages, test counts, and full log paths.
|
|
147
|
+
|
|
148
|
+
JSON reports use schema `1.1` with `schema_version`, `tool_version`, `command`, `status`, `exit_code`, timestamps, `project_root`, `summary`, `issues`, `artifacts`, and `metadata`.
|
|
149
|
+
|
|
150
|
+
`ai-dev feedback` combines Git changes, changed validation, incremental context, focused rerun hints, stage timings, and local session state into one compact agent protocol report.
|
|
151
|
+
|
|
152
|
+
Every expandable issue, check, file, snippet, diff, workspace, and artifact receives a stable local `evidence_id`. The report metadata lists references; `ai-dev explain <evidence-id> --tail 100` retrieves only that evidence. `ai-dev baseline create <name>` stores a compact local snapshot under `.ai/cache/baselines/`, and `baseline compare <name>` leads with new/resolved failures, issue codes, and status regressions.
|
|
153
|
+
|
|
154
|
+
## Auto Detection
|
|
155
|
+
|
|
156
|
+
`scan` detects Python, Node.js, Java, Rust, PHP, Docker, Make, CI workflows, package managers, scripts, entrypoints, tests, lint, formatters, type checkers, and `.env.example` variables.
|
|
157
|
+
|
|
158
|
+
Supported examples:
|
|
159
|
+
|
|
160
|
+
- Python: `pyproject.toml`, `requirements.txt`, `pytest`, `ruff`, `black`, `mypy`, `coverage`.
|
|
161
|
+
- Node.js: `package.json`, npm, pnpm, yarn, Jest, Vitest, ESLint, Prettier, TypeScript.
|
|
162
|
+
- Java: Maven, Gradle, tests, Checkstyle, SpotBugs, JaCoCo when configured.
|
|
163
|
+
- Rust: Cargo test, fmt, clippy.
|
|
164
|
+
- PHP: Composer, PHPUnit, PHPStan, PHP-CS-Fixer when configured.
|
|
165
|
+
|
|
166
|
+
## Configuration
|
|
167
|
+
|
|
168
|
+
Optional `.ai-dev-tools.toml`:
|
|
169
|
+
|
|
170
|
+
```toml
|
|
171
|
+
[project]
|
|
172
|
+
name = "example-project"
|
|
173
|
+
|
|
174
|
+
[commands]
|
|
175
|
+
test = "pytest"
|
|
176
|
+
lint = "ruff check ."
|
|
177
|
+
typecheck = "mypy src"
|
|
178
|
+
|
|
179
|
+
[ignore]
|
|
180
|
+
paths = ["node_modules", ".venv", "dist", "build"]
|
|
181
|
+
|
|
182
|
+
[reports]
|
|
183
|
+
directory = ".ai/reports"
|
|
184
|
+
logs_directory = ".ai/logs"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Configuration takes precedence over auto detection. Invalid or unknown configuration is reported through `config_warnings` instead of crashing normal scans.
|
|
188
|
+
## Local Validation
|
|
189
|
+
|
|
190
|
+
Before pushing a larger stage, run:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
python -m ruff check .
|
|
194
|
+
python -m mypy src tests scripts
|
|
195
|
+
python -m coverage run -m pytest
|
|
196
|
+
python -m coverage report --fail-under=90
|
|
197
|
+
python -m build
|
|
198
|
+
python scripts/validate_ci.py
|
|
199
|
+
python scripts/test_installed_package.py
|
|
200
|
+
git diff --check
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`python scripts/test_installed_package.py` rebuilds the wheel, installs only that wheel into a clean virtual environment in a path containing spaces, and verifies the installed `ai-dev` entrypoint without editable install or `PYTHONPATH`.
|
|
204
|
+
|
|
205
|
+
## Command Status
|
|
206
|
+
|
|
207
|
+
| Command | Status |
|
|
208
|
+
| --- | --- |
|
|
209
|
+
| doctor | implemented |
|
|
210
|
+
| scan | implemented |
|
|
211
|
+
| map | implemented |
|
|
212
|
+
| check | implemented |
|
|
213
|
+
| check --explain | implemented |
|
|
214
|
+
| test affected | implemented |
|
|
215
|
+
| index status/update/rebuild | implemented |
|
|
216
|
+
| cache status/prune/clear | implemented |
|
|
217
|
+
| logs summarize | implemented |
|
|
218
|
+
| context build | implemented |
|
|
219
|
+
| diagnostics | implemented |
|
|
220
|
+
| capabilities | implemented |
|
|
221
|
+
| git status | implemented |
|
|
222
|
+
| git inspect | implemented |
|
|
223
|
+
| finish | implemented |
|
|
224
|
+
| bootstrap | implemented |
|
|
225
|
+
| run | implemented |
|
|
226
|
+
| stop | implemented |
|
|
227
|
+
|
|
228
|
+
## Scope Notes
|
|
229
|
+
|
|
230
|
+
- Monorepo/workspace detection and per-subproject command routing: implemented.
|
|
231
|
+
- Per-subproject check and bootstrap working directories: implemented.
|
|
232
|
+
- Runtime version validation: partial.
|
|
233
|
+
- `context build` is implemented as a bounded local context pack builder.
|
|
234
|
+
- `bootstrap` is implemented as a conservative local setup planner/executor.
|
|
235
|
+
- Auto-commit, auto-push, and GUI remain out of scope or planned.
|
|
236
|
+
|
|
237
|
+
## Intentional Limits
|
|
238
|
+
Version 0.5.0a1 does not reset, clean, commit, push, merge, clone organizations, synchronize repositories, delete containers, publish releases, or remove user files.
|
|
239
|
+
|
|
240
|
+
Shell completion scripts are generated with `ai-dev completion bash|zsh|fish|powershell` and can be sourced or installed using the normal mechanism for the selected shell.
|