Skip to content

Conversation

@vinod0m
Copy link
Contributor

@vinod0m vinod0m commented Aug 19, 2025

Adds a reproducible test runner script (Using venv: /workspaces/SDLC_core/.venv_ci
Requirement already satisfied: pip in ./.venv_ci/lib/python3.12/site-packages (25.2)
Requirement already satisfied: setuptools in ./.venv_ci/lib/python3.12/site-packages (80.9.0)
Requirement already satisfied: wheel in ./.venv_ci/lib/python3.12/site-packages (0.45.1)
Requirement already satisfied: langchain==0.3.27 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 2)) (0.3.27)
Requirement already satisfied: langchain-google-genai==2.1.9 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 9)) (2.1.9)
Requirement already satisfied: langchain-community==0.3.27 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 10)) (0.3.27)
Requirement already satisfied: langchain-ollama==0.3.6 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 12)) (0.3.6)
Requirement already satisfied: python-dotenv==1.1.1 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 15)) (1.1.1)
Requirement already satisfied: pytest==8.4.1 in ./.venv_ci/lib/python3.12/site-packages (from -r /workspaces/SDLC_core/requirements.txt (line 18)) (8.4.1)
Requirement already satisfied: langchain-core<1.0.0,>=0.3.72 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.3.74)
Requirement already satisfied: langchain-text-splitters<1.0.0,>=0.3.9 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.3.9)
Requirement already satisfied: langsmith>=0.1.17 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.4.14)
Requirement already satisfied: pydantic<3.0.0,>=2.7.4 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2.11.7)
Requirement already satisfied: SQLAlchemy<3,>=1.4 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2.0.43)
Requirement already satisfied: requests<3,>=2 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2.32.5)
Requirement already satisfied: PyYAML>=5.3 in ./.venv_ci/lib/python3.12/site-packages (from langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (6.0.2)
Requirement already satisfied: filetype<2.0.0,>=1.2.0 in ./.venv_ci/lib/python3.12/site-packages (from langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (1.2.0)
Requirement already satisfied: google-ai-generativelanguage<0.7.0,>=0.6.18 in ./.venv_ci/lib/python3.12/site-packages (from langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (0.6.18)
Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (3.12.15)
Requirement already satisfied: tenacity!=8.4.0,<10,>=8.1.0 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (9.1.2)
Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (0.6.7)
Requirement already satisfied: pydantic-settings<3.0.0,>=2.4.0 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (2.10.1)
Requirement already satisfied: httpx-sse<1.0.0,>=0.4.0 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (0.4.1)
Requirement already satisfied: numpy>=1.26.2 in ./.venv_ci/lib/python3.12/site-packages (from langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (2.3.2)
Requirement already satisfied: ollama<1.0.0,>=0.5.1 in ./.venv_ci/lib/python3.12/site-packages (from langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (0.5.3)
Requirement already satisfied: iniconfig>=1 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1->-r /workspaces/SDLC_core/requirements.txt (line 18)) (2.1.0)
Requirement already satisfied: packaging>=20 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1->-r /workspaces/SDLC_core/requirements.txt (line 18)) (25.0)
Requirement already satisfied: pluggy<2,>=1.5 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1->-r /workspaces/SDLC_core/requirements.txt (line 18)) (1.6.0)
Requirement already satisfied: pygments>=2.7.2 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1->-r /workspaces/SDLC_core/requirements.txt (line 18)) (2.19.2)
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (2.6.1)
Requirement already satisfied: aiosignal>=1.4.0 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (1.4.0)
Requirement already satisfied: attrs>=17.3.0 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (25.3.0)
Requirement already satisfied: frozenlist>=1.1.1 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (1.7.0)
Requirement already satisfied: multidict<7.0,>=4.5 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (6.6.4)
Requirement already satisfied: propcache>=0.2.0 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (0.3.2)
Requirement already satisfied: yarl<2.0,>=1.17.0 in ./.venv_ci/lib/python3.12/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (1.20.1)
Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in ./.venv_ci/lib/python3.12/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (3.26.1)
Requirement already satisfied: typing-inspect<1,>=0.4.0 in ./.venv_ci/lib/python3.12/site-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (0.9.0)
Requirement already satisfied: google-api-core!=2.0.,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1 in ./.venv_ci/lib/python3.12/site-packages (from google-api-core[grpc]!=2.0.,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (2.25.1)
Requirement already satisfied: google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1 in ./.venv_ci/lib/python3.12/site-packages (from google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (2.40.3)
Requirement already satisfied: proto-plus<2.0.0,>=1.22.3 in ./.venv_ci/lib/python3.12/site-packages (from google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (1.26.1)
Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<7.0.0,>=3.20.2 in ./.venv_ci/lib/python3.12/site-packages (from google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (6.32.0)
Requirement already satisfied: googleapis-common-protos<2.0.0,>=1.56.2 in ./.venv_ci/lib/python3.12/site-packages (from google-api-core!=2.0.,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1->google-api-core[grpc]!=2.0.,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (1.70.0)
Requirement already satisfied: grpcio<2.0.0,>=1.33.2 in ./.venv_ci/lib/python3.12/site-packages (from google-api-core[grpc]!=2.0.,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (1.74.0)
Requirement already satisfied: grpcio-status<2.0.0,>=1.33.2 in ./.venv_ci/lib/python3.12/site-packages (from google-api-core[grpc]!=2.0.
,!=2.1.,!=2.10.,!=2.2.,!=2.3.,!=2.4.,!=2.5.,!=2.6.,!=2.7.,!=2.8.,!=2.9.,<3.0.0,>=1.34.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (1.74.0)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in ./.venv_ci/lib/python3.12/site-packages (from google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (5.5.2)
Requirement already satisfied: pyasn1-modules>=0.2.1 in ./.venv_ci/lib/python3.12/site-packages (from google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (0.4.2)
Requirement already satisfied: rsa<5,>=3.1.4 in ./.venv_ci/lib/python3.12/site-packages (from google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (4.9.1)
Requirement already satisfied: jsonpatch<2.0,>=1.33 in ./.venv_ci/lib/python3.12/site-packages (from langchain-core<1.0.0,>=0.3.72->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (1.33)
Requirement already satisfied: typing-extensions>=4.7 in ./.venv_ci/lib/python3.12/site-packages (from langchain-core<1.0.0,>=0.3.72->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (4.14.1)
Requirement already satisfied: jsonpointer>=1.9 in ./.venv_ci/lib/python3.12/site-packages (from jsonpatch<2.0,>=1.33->langchain-core<1.0.0,>=0.3.72->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (3.0.0)
Requirement already satisfied: httpx>=0.27 in ./.venv_ci/lib/python3.12/site-packages (from ollama<1.0.0,>=0.5.1->langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (0.28.1)
Requirement already satisfied: annotated-types>=0.6.0 in ./.venv_ci/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.7.4->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.7.0)
Requirement already satisfied: pydantic-core==2.33.2 in ./.venv_ci/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.7.4->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2.33.2)
Requirement already satisfied: typing-inspection>=0.4.0 in ./.venv_ci/lib/python3.12/site-packages (from pydantic<3.0.0,>=2.7.4->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.4.1)
Requirement already satisfied: charset_normalizer<4,>=2 in ./.venv_ci/lib/python3.12/site-packages (from requests<3,>=2->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (3.4.3)
Requirement already satisfied: idna<4,>=2.5 in ./.venv_ci/lib/python3.12/site-packages (from requests<3,>=2->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in ./.venv_ci/lib/python3.12/site-packages (from requests<3,>=2->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in ./.venv_ci/lib/python3.12/site-packages (from requests<3,>=2->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (2025.8.3)
Requirement already satisfied: pyasn1>=0.1.3 in ./.venv_ci/lib/python3.12/site-packages (from rsa<5,>=3.1.4->google-auth!=2.24.0,!=2.25.0,<3.0.0,>=2.14.1->google-ai-generativelanguage<0.7.0,>=0.6.18->langchain-google-genai==2.1.9->-r /workspaces/SDLC_core/requirements.txt (line 9)) (0.6.1)
Requirement already satisfied: greenlet>=1 in ./.venv_ci/lib/python3.12/site-packages (from SQLAlchemy<3,>=1.4->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (3.2.4)
Requirement already satisfied: mypy-extensions>=0.3.0 in ./.venv_ci/lib/python3.12/site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 10)) (1.1.0)
Requirement already satisfied: anyio in ./.venv_ci/lib/python3.12/site-packages (from httpx>=0.27->ollama<1.0.0,>=0.5.1->langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (4.10.0)
Requirement already satisfied: httpcore==1.* in ./.venv_ci/lib/python3.12/site-packages (from httpx>=0.27->ollama<1.0.0,>=0.5.1->langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (1.0.9)
Requirement already satisfied: h11>=0.16 in ./.venv_ci/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.27->ollama<1.0.0,>=0.5.1->langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (0.16.0)
Requirement already satisfied: orjson>=3.9.14 in ./.venv_ci/lib/python3.12/site-packages (from langsmith>=0.1.17->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (3.11.2)
Requirement already satisfied: requests-toolbelt>=1.0.0 in ./.venv_ci/lib/python3.12/site-packages (from langsmith>=0.1.17->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (1.0.0)
Requirement already satisfied: zstandard>=0.23.0 in ./.venv_ci/lib/python3.12/site-packages (from langsmith>=0.1.17->langchain==0.3.27->-r /workspaces/SDLC_core/requirements.txt (line 2)) (0.24.0)
Requirement already satisfied: sniffio>=1.1 in ./.venv_ci/lib/python3.12/site-packages (from anyio->httpx>=0.27->ollama<1.0.0,>=0.5.1->langchain-ollama==0.3.6->-r /workspaces/SDLC_core/requirements.txt (line 12)) (1.3.1)
Requirement already satisfied: pytest==8.4.1 in ./.venv_ci/lib/python3.12/site-packages (8.4.1)
Requirement already satisfied: iniconfig>=1 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1) (2.1.0)
Requirement already satisfied: packaging>=20 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1) (25.0)
Requirement already satisfied: pluggy<2,>=1.5 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1) (1.6.0)
Requirement already satisfied: pygments>=2.7.2 in ./.venv_ci/lib/python3.12/site-packages (from pytest==8.4.1) (2.19.2)
============================= test session starts ==============================
platform linux -- Python 3.12.1, pytest-8.4.1, pluggy-1.6.0
rootdir: /workspaces/SDLC_core
plugins: anyio-4.10.0, langsmith-0.4.14
collected 5 items

test/unit/test_deepagent.py . [ 20%]
test/unit/test_deepagent_providers.py .... [100%]

============================== 5 passed in 1.58s ===============================), fixes unavailable pins in (remove , update ), and updates CI to create and use a virtualenv for test installs. Tests for deepagent run locally and pass (5 passed).

Copy link
Contributor

@github-advanced-security github-advanced-security bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check-spelling found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

Comment on lines 17 to 48
name: Static analysis & unit tests (one python)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies for static
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov mypy
- name: Run unit tests with coverage
run: |
PYTHONPATH=. pytest --cov=src/ --cov-report=xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./coverage.xml
fail_ci_if_error: false
- name: Run mypy static analysis
run: mypy src/

tests:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment on lines +49 to +80
name: Run tests matrix
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.11, 3.12]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m venv .venv_ci
. .venv_ci/bin/activate
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
- name: Run tests
env:
PYTHONPATH: .
run: |
python -m pytest -q

deepagent-test:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 3 months ago

To fix the problem, add a permissions block at the root of the workflow file, specifying the minimum required permissions. For most CI jobs that only check out code and run tests, contents: read is sufficient. This block should be added immediately after the name: line and before the on: block, so it applies to all jobs unless overridden. No additional imports or definitions are needed; this is a YAML configuration change.

Suggested changeset 1
.github/workflows/python-test.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml
--- a/.github/workflows/python-test.yml
+++ b/.github/workflows/python-test.yml
@@ -1,3 +1,5 @@
+permissions:
+  contents: read
 name: Python Tests (consolidated)
 
 on:
EOF
@@ -1,3 +1,5 @@
permissions:
contents: read
name: Python Tests (consolidated)

on:
Copilot is powered by AI and may make mistakes. Always verify output.
Comment on lines +81 to +110
name: DeepAgent focused tests (fast)
runs-on: ubuntu-latest
needs: tests
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-3.12-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install test deps only
run: |
python -m pip install --upgrade pip
python -m venv .venv_ci
. .venv_ci/bin/activate
pip install --upgrade pip setuptools wheel
pip install pytest python-dotenv
- name: Run deepagent unit tests
env:
PYTHONPATH: .
run: |
python -m pytest -q test/unit/test_deepagent.py test/unit/test_deepagent_providers.py

provider-smoke:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 3 months ago

To fix the problem, add a permissions block to the deepagent-test job in .github/workflows/python-test.yml, setting it to the minimum required permissions. Since the job only checks out code and runs tests, it only needs contents: read. This change should be made directly under the deepagent-test: job definition, before the runs-on key. No other changes are required.


Suggested changeset 1
.github/workflows/python-test.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml
--- a/.github/workflows/python-test.yml
+++ b/.github/workflows/python-test.yml
@@ -84,6 +84,8 @@
 
   deepagent-test:
     name: DeepAgent focused tests (fast)
+    permissions:
+      contents: read
     runs-on: ubuntu-latest
     needs: tests
     steps:
EOF
@@ -84,6 +84,8 @@

deepagent-test:
name: DeepAgent focused tests (fast)
permissions:
contents: read
runs-on: ubuntu-latest
needs: tests
steps:
Copilot is powered by AI and may make mistakes. Always verify output.
Comment on lines 111 to 133
name: Provider smoke (manual)
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install provider packages
run: |
python -m pip install --upgrade pip
python -m venv .venv_ci
. .venv_ci/bin/activate
pip install --upgrade pip setuptools wheel
pip install langchain-google-genai langchain-community langchain-ollama python-dotenv
- name: Quick deepagent smoke (dry-run disabled)
env:
PYTHONPATH: .
run: |
python -c "from src.agents import deepagent; a=deepagent.SDLCFlexibleAgent(provider='gemini', model='chat-bison-001', dry_run=True); print('constructed', getattr(a, 'llm', None))"

providers:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 3 months ago

To fix the problem, add a permissions block to the workflow YAML file. The block should be placed at the top level (before jobs:) so that it applies to all jobs in the workflow, unless a job overrides it. For this workflow, the jobs only need to read repository contents (to check out code), so the minimal required permission is contents: read. This change should be made at the root of the file, after the name: and before the on: block. No additional imports or definitions are needed.

Suggested changeset 1
.github/workflows/python-test.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml
--- a/.github/workflows/python-test.yml
+++ b/.github/workflows/python-test.yml
@@ -1,5 +1,8 @@
 name: Python Tests (consolidated)
 
+permissions:
+  contents: read
+
 on:
   push:
     branches: [ main ]
EOF
@@ -1,5 +1,8 @@
name: Python Tests (consolidated)

permissions:
contents: read

on:
push:
branches: [ main ]
Copilot is powered by AI and may make mistakes. Always verify output.
Comment on lines 134 to 155
name: Providers matrix (optional)
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_providers == 'true'
strategy:
matrix:
provider: [gemini, openai, ollama]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.12
- name: Install provider packages
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install langchain-google-genai langchain-community langchain-ollama
- name: Run provider smoke for matrix provider
env:
PYTHONPATH: .
run: |
python -c "from src.agents import deepagent; p='${{ matrix.provider }}'; d = deepagent.SDLCFlexibleAgent(provider=p, dry_run=True); print('provider', p, 'dry_run', getattr(d, 'dry_run', False))"

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 3 months ago

To fix the problem, add a permissions block to the workflow file .github/workflows/python-test.yml. The best way is to add it at the top level (just after the name: and before jobs:), so it applies to all jobs unless overridden. The minimal required permission for running tests is contents: read, which allows jobs to read repository contents but not modify them. No additional imports or definitions are needed; this is a YAML configuration change.


Suggested changeset 1
.github/workflows/python-test.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml
--- a/.github/workflows/python-test.yml
+++ b/.github/workflows/python-test.yml
@@ -1,5 +1,8 @@
 name: Python Tests (consolidated)
 
+permissions:
+  contents: read
+
 on:
   push:
     branches: [ main ]
EOF
@@ -1,5 +1,8 @@
name: Python Tests (consolidated)

permissions:
contents: read

on:
push:
branches: [ main ]
Copilot is powered by AI and may make mistakes. Always verify output.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions
Copy link
Contributor

@check-spelling-bot Report

🔴 Please review

See the 📂 files view, the 📜action log, or 📝 job summary for details.

Unrecognized words (207)
addbuildtag
aoa
apiscan
apng
appicable
armhf
artifactsize
AZDOAPI
bdd
Biuld
BPriority
breif
buildagent
builddirectory
BUILDSECMON
buildtask
builtindepshash
cachesalt
causign
Ccore
cdn
CETCOMPAT
chkconfig
CIBUILD
claude
clippy
coc
COLLECTIONURI
Colortool
connor
corehub
Counterarguments
Counterforces
credscan
crt
Ctarget
CXXFLAGS
debian
deemon
deepagent
detials
devdiv
Devlabs
dri
DSPDLOG
DVT
Edg
embeddings
esac
esrpcli
euo
evolutiona
filedownloadlinkgeneration
flto
forlder
fsplit
futher
Gdn
gdnsuppress
genai
githubcustomers
glibcxx
gnueabihf
gosec
gpg
gpt
gpu
grd
HOSTTYPE
HRESULT
inno
ipynb
isystem
joao
joaomoreno
JOBID
jomo
jrieken
jws
killproc
kmaetzel
kotlin
langchain
languageservice
lastexitcode
LDFLAGS
LIBCPP
libcxx
libcxxabi
LIBDIR
libgbm
libkrb
libnotify
libx
libxkbfile
linting
listprocesses
llm
lowlighter
lto
MMdd
monacotools
mooncake
moreno
mozilla
msal
MSRUSTUP
msvs
neede
nlogin
nlsmetadata
nocerts
nokeys
nostdinc
npassword
NPH
NTSTATUS
occcured
oldheader
ollama
openai
OSARM
OSCLI
osx
Oustanding
outome
packagelockhash
Pankaj
passin
pgp
pipefail
pkgconf
PLANID
postconditions
prebuilds
prependpath
princple
processname
productjson
prss
psake
pscore
Qspectre
QUEUEDBY
relevants
rpi
rpmbuild
rustc
RUSTFLAGS
rustup
sas
scanbin
SCHEDULEDBUILD
securedevelopmentteam
securego
shorttag
skillsets
smoketest
snapcraft
softwaredevlabs
softwaremodule
SOURCEBRANCH
SOURCESDIRECTORY
SOURCEVERSION
Spn
srv
STAGEATTEMPT
STAGINGDIRECTORY
statecharts
subsys
symbolify
sysroots
TAEF
TEAMPROJECTID
teh
tempdirectory
tfs
tgz
timeframe
transormatoin
tsaoptions
tsec
txns
typehints
tzip
Univesrsal
Unti
uploadtotsa
usecase
userconfig
UWP
Valiate
valididty
varients
VCCL
verison
versio
vnd
vscodeesrp
vscodehub
vscodeweb
vsts
WPF
xcb
Xry
xutils
xvfbd
These words are not needed and should be removed aaaaabbb aabbcc ABANDONFONT abbcc abcc ABCG ABE abgr ABORTIFHUNG acidev ACIOSS acp actctx ACTCTXW ADDALIAS ADDREF ADDSTRING ADDTOOL adml admx AFill AFX AHelper ahicon ahz AImpl AInplace ALIGNRIGHT allocing alpc ALTERNATENAME ALTF ALTNUMPAD ALWAYSTIP ansicpg ANSISYS ANSISYSRC ANSISYSSC answerback ANSWERBACKMESSAGE antialiasing ANull anycpu APARTMENTTHREADED APCA APCs APIENTRY apiset APPBARDATA appcontainer appletname APPLMODAL Applocal appmodel appshellintegration APPWINDOW APPXMANIFESTVERSION APrep APSTUDIO ARRAYSIZE ARROWKEYS ASBSET ASetting ASingle ASYNCDONTCARE ASYNCWINDOWPOS atch ATest atg aumid Authenticode AUTOBUDDY AUTOCHECKBOX autohide AUTOHSCROLL automagically autopositioning AUTORADIOBUTTON autoscrolling Autowrap AVerify awch AZZ backgrounded Backgrounder backgrounding backstory Bazz bbccb BBDM BBGGRR bbwe bcount bcx bcz BEFOREPARENT beginthread benchcat bgfx bgidx Bgk bgra BHID bigobj binlog binplace binplaced bitcoin bitcrazed BITMAPINFO BITMAPINFOHEADER bitmasks BITOPERATION BKCOLOR BKGND BKMK Blt blu BLUESCROLL bmi bodgy BOLDFONT Borland boutput boxheader BPBF bpp BPPF branchconfig Browsable Bspace BTNFACE bufferout buffersize buflen buildsystems buildtransitive BValue Cacafire CALLCONV CANDRABINDU capslock CARETBLINKINGENABLED CARRIAGERETURN cascadia catid cazamor CBash cbiex CBN cbt Ccc cch CCHAR CCmd ccolor CCom CConsole CCRT cdd cds CELLSIZE cfae cfie cfiex cfte CFuzz cgscrn chafa changelists CHARSETINFO chshdng CHT CLASSSTRING cleartype CLICKACTIVE clickdown CLIENTID clipbrd CLIPCHILDREN CLIPSIBLINGS closetest cloudconsole cloudvault CLSCTX clsids cmatrix cmder CMDEXT cmh CMOUSEBUTTONS Cmts cmw CNL cnn codepages coinit colorizing COLORONCOLOR COLORREFs colorschemes colorspec colortable colortbl colortest colortool COLORVALUE comctl commdlg conapi conattrs conbufferout concfg conclnt concretizations conddkrefs condrv conechokey conemu CONIME conintegrity conintegrityuwp coninteractivitybase coninteractivityonecore coninteractivitywin coniosrv CONKBD conlibk conmsgl CONNECTINFO connyection CONOUT conprops conpropsp conptylib conserv consoleaccessibility consoleapi CONSOLECONTROL CONSOLEENDTASK consolegit consolehost CONSOLEIME CONSOLESETFOREGROUND consoletaeftemplates consoleuwp Consolewait CONSOLEWINDOWOWNER consrv constexprable contentfiles conterm contsf contypes conwinuserrefs coordnew COPYCOLOR COPYDATA COPYDATASTRUCT CORESYSTEM cotaskmem countof CPG cpinfo CPINFOEX CPLINFO cplusplus CPPCORECHECK cppcorecheckrules cpprestsdk cppwinrt cpx CREATESCREENBUFFER CREATESTRUCT CREATESTRUCTW createvpack crisman crloew CRTLIBS csbi csbiex CSHORT Cspace CSRSS csrutil CSTYLE CSwitch CTerminal ctl ctlseqs CTRLEVENT CTRLFREQUENCY CTRLKEYSHORTCUTS Ctrls CTRLVOLUME CUAS CUF cupxy CURRENTFONT currentmode CURRENTPAGE CURSORCOLOR CURSORSIZE CURSORTYPE CUsers CUU Cwa cwch CXFRAME CXFULLSCREEN CXHSCROLL CXMIN CXPADDEDBORDER CXSIZE CXSMICON CXVIRTUALSCREEN CXVSCROLL CYFRAME CYFULLSCREEN cygdrive CYHSCROLL CYMIN CYPADDEDBORDER CYSIZE CYSIZEFRAME CYSMICON CYVIRTUALSCREEN CYVSCROLL dai DATABLOCK DBatch dbcs DBCSFONT DBGALL DBGCHARS DBGFONTS DBGOUTPUT dbh dblclk DBUILD Dcd DColor DCOMMON DComposition DDESHARE DDevice DEADCHAR Debian debugtype DECAC DECALN DECANM DECARM DECAUPSS decawm DECBI DECBKM DECCARA DECCIR DECCKM DECCKSR DECCOLM deccra DECCTR DECDC DECDHL decdld DECDMAC DECDWL DECECM DECEKBD DECERA DECFI DECFNK decfra DECGCI DECGCR DECGNL DECGRA DECGRI DECIC DECID DECINVM DECKPAM DECKPM DECKPNM DECLRMM DECMSR DECNKM DECNRCM DECOM decommit DECPCCM DECPCTERM DECPS DECRARA decrc DECREQTPARM DECRLM DECRPM DECRQCRA DECRQDE DECRQM DECRQPSR DECRQSS DECRQTSR DECRQUPSS DECRSPS decrst DECSACE DECSASD decsc DECSCA DECSCNM DECSCPP DECSCUSR DECSDM DECSED DECSEL DECSERA DECSET DECSLPP DECSLRM DECSMKR DECSR DECST DECSTBM DECSTGLT DECSTR DECSWL DECSWT DECTABSR DECTCEM DECXCPR DEFAPP DEFAULTBACKGROUND DEFAULTFOREGROUND DEFAULTTONEAREST DEFAULTTONULL DEFAULTTOPRIMARY defectdefs DEFERERASE deff DEFFACE defing DEFPUSHBUTTON defterm DELAYLOAD DELETEONRELEASE depersist deprioritized devicecode Dext DFactory DFF dialogbox DINLINE directio DIRECTX DISABLEDELAYEDEXPANSION DISABLENOSCROLL DISPLAYATTRIBUTE DISPLAYCHANGE dlg DLGC DLLGETVERSIONPROC dllinit dllmain DLLVERSIONINFO DLOOK DONTCARE doskey DPG DPIAPI DPICHANGE DPICHANGED DPIs dpix dpiy dpnx DRAWFRAME DRAWITEM DRAWITEMSTRUCT drcs DROPFILES drv DSBCAPS DSBLOCK DSBPLAY DSBUFFERDESC DSBVOLUME dsm dsound DSSCL DSwap DTo DTTERM DUNICODE DUNIT dup'ed dvi dwl DWLP dwm dwmapi DWORDs dwrite dxgi dxsm dxttbmp Dyreen EASTEUROPE ECH echokey ecount ECpp Edgium EDITKEYS EDITTEXT EDITUPDATE Efast efg efgh EHsc EINS ELEMENTNOTAVAILABLE EMPTYBOX enabledelayedexpansion ENDCAP endptr ENTIREBUFFER ENU ENUMLOGFONT ENUMLOGFONTEX EOB EOK EPres EQU ERASEBKGND ERRORONEXIT ESFCIB ESV ETW EUDC eventing evflags evt execd executionengine exemain EXETYPE exeuwp exewin exitwin EXPUNGECOMMANDHISTORY EXSTYLE EXTENDEDEDITKEY EXTKEY EXTTEXTOUT facename FACENODE FACESIZE FAILIFTHERE fastlink fcharset fdw fesb ffd FFFD fgbg FGCOLOR FGHIJ fgidx FGs FILEDESCRIPTION FILESUBTYPE FILESYSPATH FILEW FILLATTR FILLCONSOLEOUTPUT FILTERONPASTE FINDCASE FINDDLG FINDDOWN FINDREGEX FINDSTRINGEXACT FITZPATRICK FIXEDFILEINFO Flg flyouts fmodern fmtarg fmtid FOLDERID FONTCHANGE fontdlg FONTENUMDATA FONTENUMPROC FONTFACE FONTHEIGHT fontinfo FONTOK FONTSTRING FONTTYPE FONTWIDTH FONTWINDOW foob FORCEOFFFEEDBACK FORCEONFEEDBACK FRAMECHANGED fre fsanitize Fscreen FSINFOCLASS fte Ftm Fullscreens Fullwidth FUNCTIONCALL fuzzmain fuzzmap fuzzwrapper fuzzyfinder fwdecl fwe fwlink fzf gcx gdi gdip gdirenderer gdnbaselines Geddy geopol GETALIAS GETALIASES GETALIASESLENGTH GETALIASEXES GETALIASEXESLENGTH GETAUTOHIDEBAREX GETCARETWIDTH GETCLIENTAREAANIMATION GETCOMMANDHISTORY GETCOMMANDHISTORYLENGTH GETCONSOLEINPUT GETCONSOLEPROCESSLIST GETCONSOLEWINDOW GETCOUNT GETCP GETCURSEL GETCURSORINFO GETDISPLAYMODE GETDISPLAYSIZE GETDLGCODE GETDPISCALEDSIZE GETFONTINFO GETHARDWARESTATE GETHUNGAPPTIMEOUT GETICON GETITEMDATA GETKEYBOARDLAYOUTNAME GETKEYSTATE GETLARGESTWINDOWSIZE GETLBTEXT GETMINMAXINFO GETMOUSEINFO GETMOUSEVANISH GETNUMBEROFFONTS GETNUMBEROFINPUTEVENTS GETOBJECT GETSELECTIONINFO getset GETTEXTLEN GETTITLE GETWAITTOKILLSERVICETIMEOUT GETWAITTOKILLTIMEOUT GETWHEELSCROLLCHARACTERS GETWHEELSCROLLCHARS GETWHEELSCROLLLINES Gfun gfx gfycat GGI GHgh GHIJK GHIJKL gitcheckin gitfilters gitlab gle GLOBALFOCUS GLYPHENTRY GMEM Goldmine gonce goutput GREENSCROLL Grehan Greyscale gridline gset gsl Guake guc GUIDATOM GValue GWL GWLP gwsz HABCDEF Hackathon HALTCOND HANGEUL hardlinks hashalg HASSTRINGS hbitmap hbm HBMMENU hbmp hbr hbrush HCmd hdc hdr HDROP hdrstop HEIGHTSCROLL hfind hfont hfontresource hglobal hhook hhx HIBYTE hicon HIDEWINDOW hinst HISTORYBUFS HISTORYNODUP HISTORYSIZE hittest HIWORD HKCU hkey hkl HKLM hlsl HMB HMK hmod hmodule hmon homoglyph hostable hostlib HPA hpcon hpen HPR HProvider HREDRAW hresult hscroll hstr HTBOTTOMLEFT HTBOTTOMRIGHT HTCAPTION HTCLIENT HTLEFT HTMAXBUTTON HTMINBUTTON HTRIGHT HTTOP HTTOPLEFT HTTOPRIGHT hungapp HVP hwheel hwnd HWNDPARENT iccex ICONERROR ICONINFORMATION ICONSTOP ICONWARNING IDCANCEL IDD IDISHWND idl idllib IDOK IDR IDTo IDXGI IFACEMETHODIMP ification IGNORELANGUAGE iid IIo ILC ILCo ILD ime IMPEXP inclusivity INCONTEXT INFOEX inheritcursor INITCOMMONCONTROLSEX INITDIALOG INITGUID INITMENU inkscape INLINEPREFIX inproc Inputkeyinfo Inputreadhandledata INPUTSCOPE INSERTMODE INTERACTIVITYBASE INTERCEPTCOPYPASTE INTERNALNAME intsafe INVALIDARG INVALIDATERECT Ioctl ipch ipsp iterm itermcolors itf Ith IUI IWIC IXP jconcpp JOBOBJECT JOBOBJECTINFOCLASS JONGSEONG JPN jsoncpp jsprovider jumplist JUNGSEONG KAttrs kawa Kazu kazum kernelbase kernelbasestaging KEYBDINPUT keychord keydowns KEYFIRST KEYLAST Keymapping keystate keyups Kickstart KILLACTIVE KILLFOCUS kinda KIYEOK KLF KLMNO KOK KPRIORITY KVM kyouhaishaheiku langid LANGUAGELIST lasterror LASTEXITCODE LAYOUTRTL lbl LBN LBUTTON LBUTTONDBLCLK LBUTTONDOWN LBUTTONUP lcb lci LCONTROL LCTRL lcx LEFTALIGN libsancov libtickit LIMITTEXT LINEDOWN LINESELECTION LINEWRAP LINKERRCAP LINKERROR linputfile listptr listptrsize llx LMENU lnkd lnkfile LNM LOADONCALL LOBYTE localappdata locsrc Loewen LOGBRUSH LOGFONT LOGFONTA LOGFONTW logissue losslessly loword lparam lpch LPCPLINFO LPCREATESTRUCT lpcs LPCTSTR lpdata LPDBLIST lpdis LPDRAWITEMSTRUCT lpdw lpelfe lpfn LPFNADDPROPSHEETPAGE LPMEASUREITEMSTRUCT LPMINMAXINFO lpmsg LPNEWCPLINFO LPNEWCPLINFOA LPNEWCPLINFOW LPNMHDR lpntme LPPROC LPPROPSHEETPAGE LPPSHNOTIFY lprc lpstr lpsz LPTSTR LPTTFONTLIST lpv LPW LPWCH lpwfx LPWINDOWPOS lpwpos lpwstr LRESULT lsb lsconfig lstatus lstrcmp lstrcmpi LTEXT ltsc LUID luma lval LVB LVERTICAL LVT LWA LWIN lwkmvj majorly MAKEINTRESOURCE MAKEINTRESOURCEW MAKELANGID MAKELONG MAKELPARAM MAKELRESULT MAPBITMAP MAPVIRTUALKEY MAPVK MAXDIMENSTRING MAXSHORT maxval maxversiontested MAXWORD maybenull MBUTTON MBUTTONDBLCLK MBUTTONDOWN MBUTTONUP mdmerge MDs mdtauk MEASUREITEM megamix memallocator meme MENUCHAR MENUCONTROL MENUDROPALIGNMENT MENUITEMINFO MENUSELECT metaproj Mgrs microsoftpublicsymbols midl mii MIIM milli mincore mindbogglingly minkernel MINMAXINFO minwin minwindef MMBB mmcc MMCPL MNC MNOPQ MNOPQR MODALFRAME MODERNCORE MONITORINFO MONITORINFOEXW MONITORINFOF MOUSEACTIVATE MOUSEFIRST MOUSEHWHEEL MOVESTART msb msbuildcache msctls msdata MSDL MSGCMDLINEF MSGF MSGFILTER MSGFLG MSGMARKMODE MSGSCROLLMODE MSGSELECTMODE msiexec MSIL msix MSRC MSVCRTD MTSM murmurhash muxes myapplet mybranch mydir Mypair Myval NAMELENGTH namestream NCCALCSIZE NCCREATE NCLBUTTONDOWN NCLBUTTONUP NCMBUTTONDOWN NCMBUTTONUP NCPAINT NCRBUTTONDOWN NCRBUTTONUP NCXBUTTONDOWN NCXBUTTONUP NEL nerf nerror netcoreapp netstandard NEWCPLINFO NEWCPLINFOA NEWCPLINFOW Newdelete NEWINQUIRE NEWINQURE NEWPROCESSWINDOW NEWTEXTMETRIC NEWTEXTMETRICEX Newtonsoft NEXTLINE nfe NLSMODE NOACTIVATE NOAPPLYNOW NOCLIP NOCOMM NOCONTEXTHELP NOCOPYBITS NODUP noexcepts NOFONT NOHIDDENTEXT NOINTEGRALHEIGHT NOINTERFACE NOLINKINFO nologo NOMCX NOMINMAX NOMOVE NONALERT nonbreaking nonclient NONINFRINGEMENT NONPREROTATED nonspace NOOWNERZORDER NOPAINT noprofile NOREDRAW NOREMOVE NOREPOSITION NORMALDISPLAY NOSCRATCH NOSEARCH noselect NOSELECTION NOSENDCHANGING NOSIZE NOSNAPSHOT NOTHOUSANDS NOTICKS NOTIMEOUTIFNOTHUNG NOTIMPL NOTOPMOST NOTRACK NOTSUPPORTED nouicompat nounihan NOYIELD NOZORDER NPFS nrcs NSTATUS ntapi ntdef NTDEV ntdll ntifs ntm ntstatus nttree ntuser NTVDM nugetversions NUKTA nullness nullonfailure nullopts NUMSCROLL NUnit nupkg NVIDIA NVT OACR ocolor oemcp OEMFONT OEMFORMAT OEMs OLEAUT OLECHAR onecore ONECOREBASE ONECORESDKTOOLS ONECORESHELL onecoreuap onecoreuapuuid onecoreuuid ONECOREWINDOWS onehalf oneseq oob openbash opencode opencon openconsole openconsoleproxy openps openvt ORIGINALFILENAME osc OSDEPENDSROOT OSGENG outdir OUTOFCONTEXT Outptr outstr OVERLAPPEDWINDOW OWNDC owneralias OWNERDRAWFIXED packagename packageuwp PACKAGEVERSIONNUMBER PACKCOORD PACKVERSION pacp pagedown pageup PAINTPARAMS PAINTSTRUCT PALPC pankaj parentable PATCOPY PATTERNID pbstr pcb pcch PCCHAR PCCONSOLE PCD pcg pch PCIDLIST PCIS PCLONG pcon PCONSOLE PCONSOLEENDTASK PCONSOLESETFOREGROUND PCONSOLEWINDOWOWNER pcoord pcshell PCSHORT PCSR PCSTR PCWCH PCWCHAR PCWSTR pdbs pdbstr pdcs PDPs pdtobj pdw pdx peb PEMAGIC pfa PFACENODE pfed pfi PFILE pfn PFNCONSOLECREATEIOTHREAD PFONT PFONTENUMDATA PFS pgd pgomgr PGONu pguid phhook phico phicon phwnd pidl PIDLIST piml pimpl pinvoke pipename pipestr pixelheight PIXELSLIST PJOBOBJECT platforming playsound ploc ploca plocm PLOGICAL pnm PNMLINK pntm POBJECT Podcast POINTERUPDATE POINTSLIST policheck POLYTEXTW POPUPATTR popups PORFLG POSTCHARBREAKS POSX POSXSCROLL POSYSCROLL ppbstr PPEB ppf ppidl pprg PPROC ppropvar ppsi ppsl ppsp ppsz ppv ppwch PQRST prc prealigned prect prefast preflighting prepopulate presorted PREVENTPINNING PREVIEWLABEL PREVIEWWINDOW PREVLINE prg pri processhost PROCESSINFOCLASS PRODEXT PROPERTYID PROPERTYKEY propertyval propsheet PROPSHEETHEADER PROPSHEETPAGE propslib propsys PROPTITLE propvar propvariant psa PSECURITY pseudoconsole psh pshn PSHNOTIFY PSINGLE psl psldl PSNRET PSobject psp PSPCB psr PSTR psz ptch ptsz PTYIn PUCHAR pvar pwch PWDDMCONSOLECONTEXT Pwease pweview pws pwstr pwsz pythonw Qaabbcc QUERYOPEN quickedit QUZ QWER qwerty qwertyuiopasdfg Qxxxxxxxxxxxxxxx qzmp RAII RALT rasterbar rasterfont rasterization RAWPATH raytracers razzlerc rbar RBUTTON RBUTTONDBLCLK RBUTTONDOWN RBUTTONUP rcch rcelms rclsid RCOA RCOCA RCOCW RCONTROL RCOW rcv readback READCONSOLE READCONSOLEOUTPUT READCONSOLEOUTPUTSTRING READMODE rectread redef redefinable redist REDSCROLL REFCLSID REFGUID REFIID REFPROPERTYKEY REGISTEROS REGISTERVDM regkey REGSTR RELBINPATH rendersize reparented reparenting REPH replatformed Replymessage reportfileaccesses repositorypath rerasterize rescap RESETCONTENT resheader resmimetype resultmacros resw resx rfa rfid rftp rgbi RGBQUAD rgbs rgfae rgfte rgn rgp rgpwsz rgrc rguid rgw RIGHTALIGN RIGHTBUTTON riid ris robomac rodata rosetta RRF RRRGGGBB rsas rtcore RTEXT RTLREADING Rtn runas RUNDLL runformat runft RUNFULLSCREEN runfuzz runsettings runtest runtimeclass runuia runut runxamlformat RVERTICAL rvpa RWIN rxvt safemath sba SBCS SBCSDBCS sbi sbiex scancodes scanline schemename SCL SCRBUF SCRBUFSIZE screenbuffer SCREENBUFFERINFO screeninfo scriptload scrollback SCROLLFORWARD SCROLLINFO scrolllock scrolloffset SCROLLSCALE SCROLLSCREENBUFFER scursor sddl SDKDDK segfault SELCHANGE SELECTEDFONT SELECTSTRING Selfhosters Serbo SERVERDLL SETACTIVE SETBUDDYINT setcp SETCURSEL SETCURSOR SETCURSORINFO SETCURSORPOSITION SETDISPLAYMODE SETFOCUS SETFOREGROUND SETHARDWARESTATE SETHOTKEY SETICON setintegritylevel SETITEMDATA SETITEMHEIGHT SETKEYSHORTCUTS SETMENUCLOSE SETNUMBEROFCOMMANDS SETOS SETPALETTE SETRANGE SETSCREENBUFFERSIZE SETSEL SETTEXTATTRIBUTE SETTINGCHANGE Setwindow SETWINDOWINFO SFGAO SFGAOF sfi SFINAE SFolder SFUI sgr SHCo shcore shellex SHFILEINFO SHGFI SHIFTJIS shlwapi SHORTPATH SHOWCURSOR SHOWDEFAULT SHOWMAXIMIZED SHOWMINNOACTIVE SHOWNA SHOWNOACTIVATE SHOWNORMAL SHOWWINDOW sidebyside SIF SIGDN SINGLETHREADED siup sixel SIZEBOX SIZESCROLL SKIPFONT SKIPOWNPROCESS SKIPOWNTHREAD sku sldl SLGP SLIST slmult sln slpit SManifest SMARTQUOTE SMTO snapcx snapcy snk SOLIDBOX Solutiondir sourced SRCAND SRCCODEPAGE SRCCOPY SRCINVERT SRCPAINT srcsrv SRCSRVTRG srctool srect SRGS srvinit srvpipe ssa startdir STARTF STARTUPINFO STARTUPINFOEX STARTUPINFOEXW STARTUPINFOW STARTWPARMS STARTWPARMSA STARTWPARMSW stdafx STDAPI stdc stdcpp STDEXT STDMETHODCALLTYPE STDMETHODIMP STGM STRINGTABLE STRSAFE STUBHEAD STUVWX stylecop SUA subcompartment subkeys SUBLANG swapchain swapchainpanel SWMR SWP swrapped SYMED SYNCPAINT syscalls SYSCHAR SYSCOLOR SYSCOMMAND SYSDEADCHAR SYSKEYDOWN SYSKEYUP SYSLIB SYSLINK SYSMENU sysparams SYSTEMHAND SYSTEMMENU SYSTEMTIME tabview taef TARG targetentrypoint TARGETLIBS TARGETNAME targetver tbc tbi Tbl TBM TCHAR TCHFORMAT TCI tcommands tdbuild Tdd TDP Teb Techo tellp teraflop terminalcore terminalinput terminalrenderdata TERMINALSCROLLING terminfo testcon testd testenvs testlab testlist testmd testname TESTNULL testpass testpasses TEXCOORD textattribute TEXTATTRIBUTEID textboxes textbuffer TEXTINCLUDE textinfo TEXTMETRIC TEXTMETRICW textmode texttests THUMBPOSITION THUMBTRACK tilunittests titlebars TITLEISLINKNAME TLDP TLEN TMAE TMPF tmultiple tofrom toolbars TOOLINFO TOOLWINDOW TOPDOWNDIB tosign tracelogging traceviewpp trackbar trackpad transitioning Trd TRIMZEROHEADINGS trx tsgr tsm TSTRFORMAT TTBITMAP TTFONT TTFONTLIST TTM TTo tvpp tvtseq TYUI uap uapadmin UAX UBool ucd uch UChars udk uer UError uia UIACCESS uiacore uiautomationcore uielem UINTs uld uldash uldb ulwave Unadvise unattend UNCPRIORITY unexpand unhighlighting unhosted UNICODETEXT UNICRT Unintense unittesting unittests unk unknwn UNORM unparseable untextured UPDATEDISPLAY UPDOWN UPKEY upss uregex URegular usebackq USECALLBACK USECOLOR USECOUNTCHARS USEDEFAULT USEDX USEFILLATTRIBUTE USEGLYPHCHARS USEHICON USEPOSITION userdpiapi Userp userprivapi USERSRV USESHOWWINDOW USESIZE USESTDHANDLES usp USRDLL utext utr UVWXY uwa uwp uwu uxtheme Vanara vararg vclib vcxitems VERCTRL VERTBAR VFT vga vgaoem viewkind VIRAMA Virt VIRTTERM visualstudiosdk vkey VKKEYSCAN VMs VPA vpack vpackdirectory VPACKMANIFESTDIRECTORY VPR VREDRAW vsc vsconfig vscprintf VSCROLL vsdevshell vse vsinfo vsinstalldir vspath VSTAMP vstest VSTS VSTT vswhere vtapp VTE VTID vtmode vtpipeterm VTRGB VTRGBTo vtseq vtterm vttest WANSUNG WANTARROWS WANTTAB wapproj WAVEFORMATEX wbuilder wch wchars WCIA WCIW wcs WCSHELPER wcsrev wcswidth wddm wddmcon WDDMCONSOLECONTEXT wdm webpage websites wekyb wewoad wex wextest WFill wfopen WHelper wic WIDTHSCROLL Widthx Wiggum WImpl WINAPI winbasep wincon winconp winconpty winconptydll winconptylib wincontypes WINCORE windbg WINDEF windir windll WINDOWALPHA windowdpiapi WINDOWEDGE WINDOWINFO windowio WINDOWPLACEMENT windowpos WINDOWPOSCHANGED WINDOWPOSCHANGING windowproc windowrect windowsapp WINDOWSIZE windowsshell windowsterminal windowtheme winevent winget wingetcreate WINIDE winmd winmgr winmm WINMSAPP winnt Winperf WInplace winres winrt winternl winui winuser WINVER wistd wmain WMSZ wnd WNDALLOC WNDCLASS WNDCLASSEX WNDCLASSEXW WNDCLASSW Wndproc WNegative WNull wordi wordiswrapped workarea WOutside WOWARM WOWx wparam WPartial wpf wpfdotnet WPR WPrep WPresent wprp wprpi wrappe wregex writeback WRITECONSOLE WRITECONSOLEINPUT WRITECONSOLEOUTPUT WRITECONSOLEOUTPUTSTRING wrkstr WRL wrp WRunoff WSLENV wstr wstrings wsz wtd WTest WTEXT WTo wtof WTs WTSOFTFONT wtw Wtypes WUX WVerify WWith wxh wyhash wymix wyr xact Xamlmeta xamls xaz xbf xbutton XBUTTONDBLCLK XBUTTONDOWN XBUTTONUP XCast XCENTER xcopy XCount xdy XEncoding xes XFG XFile XFORM XIn xkcd XManifest XMath XNamespace xorg XPan XResource xsi xstyler XSubstantial XTest XTPOPSGR XTPUSHSGR xtr XTWINOPS xunit xutr XVIRTUALSCREEN yact YCast YCENTER YCount yizz YLimit YPan YSubstantial YVIRTUALSCREEN zabcd Zabcdefghijklmn Zabcdefghijklmnopqrstuvwxyz ZCmd ZCtrl ZWJs ZYXWVU ZYXWVUT ZYXWVUTd zzf

Some files were automatically ignored 🙈

These sample patterns would exclude them:

(?:^|/)sample\.json$
(?:|$^ 97% - excluded 43/44)[^/]\.py$
^config/logging_config\.yaml$
^config/model_config\.yaml$
^config/prompt_templates\.yaml$
^Dockerfile$

You should consider excluding directory paths (e.g. (?:^|/)vendor/), filenames (e.g. (?:^|/)yarn\.lock$), or file extensions (e.g. \.gz$)

You should consider adding them to:

.github/actions/spelling/excludes.txt

File matching is via Perl regular expressions.

To check these files, more of their words need to be in the dictionary than not. You can use patterns.txt to exclude portions, add items to the dictionary (e.g. by adding them to allow.txt), or fix typos.

To accept these unrecognized words as correct, update file exclusions, and remove the previously acknowledged and now absent words, you could run the following commands

... in a clone of the git@github.com:SoftwareDevLabs/SDLC_core.git repository
on the fix/deepagent-ci-test-runner branch (ℹ️ how do I use this?):

curl -s -S -L 'https://raw.githubusercontent.com/check-spelling/check-spelling/v0.0.25/apply.pl' |
perl - 'https://github.com/SoftwareDevLabs/SDLC_core/actions/runs/17067705841/attempts/1' &&
git commit -m 'Update check-spelling metadata'

OR

To have the bot accept them for you, comment in the PR quoting the following line:
@check-spelling-bot apply updates.

Forbidden patterns 🙅 (1)

In order to address this, you could change the content to not match the forbidden patterns (comments before forbidden patterns may help explain why they're forbidden), add patterns for acceptable instances, or adjust the forbidden patterns themselves.

These forbidden patterns matched content:

Should be socioeconomic

https://dictionary.cambridge.org/us/dictionary/english/socioeconomic

socio-economic
Pattern suggestions ✂️ (10)

You could add these patterns to .github/actions/spelling/patterns/41cde4ccebf82fc57723ff4aa535f5c6f3eb11fa.txt:

# Automatically suggested patterns

# hit-count: 7 file-count: 1
# URL escaped characters
%[0-9A-F][A-F](?=[A-Za-z])

# hit-count: 6 file-count: 6
# JavaScript regular expressions
# javascript test regex
/.{3,}/[gim]*\.test\(

# hit-count: 4 file-count: 4
# node packages
(["'])@[^/'" ]+/[^/'" ]+\g{-1}

# hit-count: 3 file-count: 3
# imports
^import\s+(?:(?:static|type)\s+|)(?:[\w.]|\{\s*\w*?(?:,\s*(?:\w*|\*))+\s*\})+

# hit-count: 2 file-count: 2
# container images
image: [-\w./:@]+

# hit-count: 1 file-count: 1
# GitHub actions
\buses:\s+[-\w.]+/[-\w./]+@[-\w.]+

# hit-count: 1 file-count: 1
# python
\b(?i)py(?!gments|gmy|lon|ramid|ro|th)(?=[a-z]{2,})

# hit-count: 1 file-count: 1
# go install
go install(?:\s+[a-z]+\.[-@\w/.]+)+

# hit-count: 1 file-count: 1
# bearer auth
(['"])[Bb]ear[e][r] .{3,}?\g{-1}

# hit-count: 1 file-count: 1
# set arguments
\b(?:bash|sh|set)(?:\s+[-+][abefimouxE]{1,2})*\s+[-+][abefimouxE]{3,}(?:\s+[-+][abefimouxE]+)*

Alternatively, if a pattern suggestion doesn't make sense for this project, add a #
to the beginning of the line in the candidates file with the pattern to stop suggesting it.

Errors, Warnings, and Notices ❌ (4)

See the 📂 files view, the 📜action log, or 📝 job summary for details.

❌ Errors, Warnings, and Notices Count
⚠️ binary-file 49
ℹ️ candidate-pattern 17
❌ check-file-path 17
❌ forbidden-pattern 1

See ❌ Event descriptions for more information.

✏️ Contributor please read this

By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later.

If the listed items are:

  • ... misspelled, then please correct them instead of using the command.
  • ... names, please add them to .github/actions/spelling/allow/names.txt.
  • ... APIs, you can add them to a file in .github/actions/spelling/allow/.
  • ... just things you're using, please add them to an appropriate file in .github/actions/spelling/expect/.
  • ... tokens you only need in one place and shouldn't generally be used, you can add an item in an appropriate file in .github/actions/spelling/patterns/.

See the README.md in each directory for more information.

🔬 You can test your commits without appending to a PR by creating a new branch with that extra change and pushing it to your fork. The check-spelling action will run in response to your push -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. 😉

If the flagged items are 🤯 false positives

If items relate to a ...

  • binary file (or some other file you wouldn't want to check at all).

    Please add a file path to the excludes.txt file matching the containing file.

    File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.

    ^ refers to the file's path from the root of the repository, so ^README\.md$ would exclude README.md (on whichever branch you're using).

  • well-formed pattern.

    If you can write a pattern that would match it,
    try adding it to the patterns.txt file.

    Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.

    Note that patterns can't match multiline strings.

Copy link
Contributor Author

vinod0m commented Aug 19, 2025

CI and testability improvements for DeepAgent (dry-run, tests, CI)

  • Added dry-run / MockAgent and an EchoTool to make DeepAgent importable and testable without provider APIs.
  • Added offline unit tests for DeepAgent and provider selection. Local run: 5 tests passed.
  • Added reproducible test runner (scripts/run-tests.sh), Makefile targets, and updated README with instructions.
  • Adjusted requirements.txt to remove unavailable pins and pin validated provider adapters.
  • Consolidated CI workflow .github/workflows/python-test.yml (ruff + mypy + pytest + codecov). Provider matrix is manual and must be dispatched by a user with repo:actions permissions.

Static checks: src/agents/deepagent.py passes ruff; repo-wide ruff still reports ~115 items (plan to fix in small batches).

Notes:

  • mypy reports a duplicate-module issue for router modules; CI excludes src/llm/router.py until a refactor is done.
  • Provider matrix run needs a manual dispatch in Actions (set run_providers=true) or a user with proper gh permissions.

Copy link
Contributor Author

vinod0m commented Aug 19, 2025

Consolidating this work into PR #24 and PR #25 for smaller, reviewable commits; see #24 and #25. Closing this PR.

@vinod0m vinod0m closed this Aug 19, 2025
@vinod0m vinod0m reopened this Aug 19, 2025
@vinod0m vinod0m merged commit 624ea3e into main Aug 19, 2025
31 of 72 checks passed
@vinod0m vinod0m deleted the fix/deepagent-ci-test-runner branch August 19, 2025 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants