Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 0 additions & 48 deletions .github/workflows/release-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,51 +154,3 @@ jobs:
- name: Publish to MCP Registry
run: ./mcp-publisher publish

deploy:
name: Deploy AWS
needs: publish-pypi
environment: aws
runs-on: ubuntu-latest
timeout-minutes: 45
permissions:
contents: read
concurrency:
group: aws-mcp-production
cancel-in-progress: false
env:
AWS_REGION: us-east-2
AWS_DEFAULT_REGION: us-east-2
IMAGE_TAG: release-${{ github.ref_name }}-${{ github.run_id }}-${{ github.run_attempt }}
steps:
- uses: actions/checkout@v7
- name: Build AWS image
run: python3 scripts/build_container.py --target aws --tag "deep-agentic-core-mcp:$IMAGE_TAG"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Publish immutable image
id: image
shell: bash
run: |
repository_uri=$(aws cloudformation describe-stacks --stack-name deep-agentic-core-mcp-assets --query 'Stacks[0].Outputs[?OutputKey==`RepositoryUri`].OutputValue | [0]' --output text)
registry="${repository_uri%%/*}"
repository="${repository_uri#*/}"
export DOCKER_CONFIG=$(mktemp -d)
trap 'docker logout "$registry" >/dev/null 2>&1; rm -rf "$DOCKER_CONFIG"' EXIT
aws ecr get-login-password | docker login --username AWS --password-stdin "$registry"
docker tag "deep-agentic-core-mcp:$IMAGE_TAG" "$repository_uri:$IMAGE_TAG"
docker push "$repository_uri:$IMAGE_TAG"
digest=$(aws ecr describe-images --repository-name "$repository" --image-ids "imageTag=$IMAGE_TAG" --query 'imageDetails[0].imageDigest' --output text)
echo "uri=$repository_uri@$digest" >> "$GITHUB_OUTPUT"
- name: Deploy image through CloudFormation
env:
IMAGE_URI: ${{ steps.image.outputs.uri }}
run: python3 scripts/aws_ci_deploy.py --image "$IMAGE_URI" --change-set "ci-$GITHUB_RUN_ID-$GITHUB_RUN_ATTEMPT"
- name: Verify hosted MCP
env:
MCP_API_KEY: ${{ secrets.MCP_SMOKE_KEY }}
MCP_ORIGIN: https://mcp.deepagentlabs.io
run: python3 scripts/ci_smoke.py
15 changes: 11 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,7 @@ Test transport-specific authorization and state isolation when changing dispatch
- Pull requests, pushes to `main`, and manual CI runs perform checks and package
builds without deploying AWS or publishing to PyPI.
- Pushing a `v*` tag runs `release-pypi.yml`: the full test matrix and packaging
checks, PyPI publication, GitHub Release, MCP Registry publication, and AWS
deployment. AWS depends on successful PyPI publication and deploys the tagged
source using an immutable image. Infrastructure changes use the operator flow.
checks, PyPI publication, GitHub Release, MCP Registry publication. AWS deployment is manual from 0.4.1. Infrastructure changes use the operator flow.
- Prepare matching versions in `pyproject.toml`, `__init__.py`, `server.json`,
and `uv.lock`, plus dated changelog notes, before pushing the release tag.
- Keep Docker files under `deploy/docker/` and infrastructure under `deploy/aws/`.
Expand Down Expand Up @@ -206,8 +204,17 @@ from the same tag and does all of the following:
- publishes the package to PyPI via Trusted Publishing (OIDC)
- creates the GitHub Release object for `vX.Y.Z`
- publishes the server to the MCP Registry
- deploys the tagged source to AWS after PyPI publication succeeds
- leaves AWS deployment to an explicit manual operator action

The GitHub Release title is the tag name, and its body is copied from the
matching `CHANGELOG.md` section so the changelog, tag, PyPI release,
GitHub Releases page, and MCP Registry publish all stay aligned.


## Release pipeline from 0.4.1

Tag releases validate, publish PyPI/GitHub Release and publish the MCP Registry.
Automatic AWS deployment is removed from GitHub Actions. Existing AWS build and
operator deployment scripts remain available for an explicit manual deployment;
publishing a package does not update the running AWS service. Standalone image
recipes include Sidecar 0.9.0 for package discovery, with no live runtime bridge.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@ This project follows [Semantic Versioning](https://semver.org/).
dispatch, stop/revoke, denial evidence, hosted Tower credentials) move to
Phase 5.

## 0.4.1 - 2026-10-19

- Discover installed Sidecar 0.9 task-authority, revocation and redacted-evidence
APIs without constructing a task or exposing runtime controls.
- Pin Sidecar 0.9.0 in standalone hosted image recipes; native evidence remains
compatible and no new remote authority API is claimed.
- Remove automatic AWS deployment from the release pipeline. Package/GitHub/MCP
Registry publication remains; existing deployment scripts are manual operator tools.
- Document Sidecar authority, privacy, evidence and ownership boundaries.

## 0.4.0 - 2026-10-19

First Phase 4 (Unified Workflows) slice. No sibling release, dependency range
Expand Down
23 changes: 8 additions & 15 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,24 +69,17 @@ Never commit credentials, generated API keys, or local deployment state.
Pull requests, pushes to `main`, and manual CI runs perform lint, format, typing,
tests across Python 3.10–3.13, and package build checks without deploying AWS.
A pushed `v*` version tag runs the same validation before package publication.
After PyPI succeeds, the release workflow deploys the tagged source to AWS.
It publishes an immutable ECR image, updates the existing CloudFormation
stack, and verifies MCP authentication and integration readiness. It preserves
infrastructure parameters and rejects unrelated infrastructure changes.

AWS deployment requires repository secrets `AWS_ACCESS_KEY_ID`,
`AWS_SECRET_ACCESS_KEY`, and `MCP_SMOKE_KEY`. See
[deploy/aws/CI-CD.md](deploy/aws/CI-CD.md) for permissions and operational limits.
Infrastructure changes use the separate reviewed operator deployment flow.
AWS deployment is a downstream release job; it does not publish to PyPI itself.
From 0.4.1, tag releases do not deploy AWS. Existing immutable-image,
CloudFormation and smoke-check scripts remain manual operator tools; package
publication does not update the hosted service. See
[deploy/aws/CI-CD.md](deploy/aws/CI-CD.md) for the separate operator flow.

## Releases

Package releases start when a `v*` version tag is pushed. Creating a GitHub
Release manually is not the trigger. `release-pypi.yml` publishes to PyPI using
Trusted Publishing (OIDC), creates the GitHub Release from the changelog, and
then publishes to the MCP Registry. AWS deployment runs after successful PyPI
publication.
then publishes to the MCP Registry. AWS deployment is a separate manual action.

1. On a feature branch, update `pyproject.toml`,
`src/deep_agentic_core_mcp/__init__.py`, both version fields in `server.json`,
Expand All @@ -98,7 +91,7 @@ publication.
`git tag -a vX.Y.Z -F <release-notes-file> --cleanup=verbatim`.
4. Push that tag: `git push origin vX.Y.Z`.
5. Approve the existing `pypi` environment gate when required, then verify PyPI,
GitHub Release, MCP Registry, and AWS deployment jobs.
GitHub Release and MCP Registry jobs.

AWS updates through CI only as part of a version-tag release after PyPI succeeds.
A `main` push does not publish a package or deploy the hosted service.
Neither a tag release nor a `main` push deploys the hosted service.
A `main` push does not publish a package.
16 changes: 11 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ The exported report is MCP-local, not an AIOS artifact. No sibling release or
dependency floor changes. See the [unified workflows guide](docs/unified-workflows.md)
and [`examples/unified_release_check.py`](examples/unified_release_check.py).

## MCP Surface (current, `0.4.0`)
## MCP Surface (current, `0.4.1`)
Comment thread
pramodbn27 marked this conversation as resolved.
Resolved

- `core.health` — rich diagnostics: adapter availability/version, loaded
tool/resource/prompt counts, workspace root, recent successful calls
Expand Down Expand Up @@ -369,11 +369,11 @@ PyPI `0.2.0` release provides local stdio.
|---|---|---|
| `.github/workflows/ci.yml` | Pull request | Tests Python 3.10–3.13 and builds distributions; no AWS deployment |
| `.github/workflows/ci.yml` | Push/merge to `main`, or manual run | Runs tests and package checks; no AWS deployment |
| `.github/workflows/release-pypi.yml` | Push a `v*` version tag | Runs checks, publishes to PyPI, creates the GitHub Release, publishes MCP Registry metadata, and deploys AWS after PyPI succeeds |
| `.github/workflows/release-pypi.yml` | Push a `v*` version tag | Runs checks, publishes to PyPI, creates the GitHub Release, publishes MCP Registry metadata; no AWS deployment |

A push to `main` does not publish to PyPI or deploy AWS. A version-tag release
deploys the same tagged source to AWS only after PyPI publication succeeds. Package releases use PyPI Trusted Publishing;
AWS deployment uses the dedicated IAM user's GitHub secrets. See
A push to `main` does not publish to PyPI or deploy AWS. Version-tag releases
publish packages using PyPI Trusted Publishing. AWS deployment is an explicit
manual operator action from 0.4.1. See
[CONTRIBUTING.md](CONTRIBUTING.md) for releases and
[the AWS CI guide](deploy/aws/CI-CD.md) for deployment setup and limits.

Expand Down Expand Up @@ -642,3 +642,9 @@ the existing registry discovers faults. Workflows, experiments and fuzzing
are Python/CLI orchestration, not new MCP tools. Hosted HTTP continues to
reject `chaos.run_experiment`, so no experiment target is executed by the
hosted service.

## Sidecar 0.9.0 interoperability

Task-authority/delegation and reader-safe summaries are available in Sidecar.
See [compatibility and ownership boundaries](docs/sidecar-0.9.md). Existing
native decisions/correlation stay compatible; no new normative schema is claimed.
10 changes: 8 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ entry below have been updated accordingly; see the audit for full detail.

## Release Status

Release version: `0.4.0` — see [CHANGELOG.md](CHANGELOG.md). It completes
Phase 4: `core.compare_runs`, a fail-closed `core.release_check`
Release version: `0.4.1` (2026-10-19) — see [CHANGELOG.md](CHANGELOG.md). It adds Sidecar 0.9 discovery and manual AWS deployment.
The 0.4.0 release completed Phase 4: `core.compare_runs`, a fail-closed `core.release_check`
over Lens, Evals and Chaos evidence, `core.incident_summary` and
`core.export_report` ([guide](docs/unified-workflows.md)). Hosted image pins and
sibling dependency ranges are unchanged.
Expand Down Expand Up @@ -817,3 +817,9 @@ the existing registry discovers faults. Workflows, experiments and fuzzing
are Python/CLI orchestration, not new MCP tools. Hosted HTTP continues to
reject `chaos.run_experiment`, so no experiment target is executed by the
hosted service.

## Sidecar 0.9.0 interoperability

Task-authority/delegation and reader-safe summaries are available in Sidecar.
See [compatibility and ownership boundaries](docs/sidecar-0.9.md). Existing
Comment thread
pramodbn27 marked this conversation as resolved.
Resolved
native decisions/correlation stay compatible; no new normative schema is claimed.
63 changes: 16 additions & 47 deletions deploy/aws/CI-CD.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,16 @@
# AWS continuous deployment

CI checks pull requests, pushes to `main`, and manual runs without deploying.
A pushed `v*` version tag starts `release-pypi.yml`, which runs the full test
matrix and package checks before publishing to PyPI. AWS deployment depends on
successful PyPI publication and builds the same tagged source. It publishes an
immutable ECR image, updates ECS through CloudFormation, and verifies the public
HTTPS endpoint and authenticated MCP integrations. A failed PyPI publication
prevents AWS deployment.

## GitHub secrets

Configure repository secrets in `DeepAgentLabs/mcp-server`:

- `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`: credentials for the dedicated
`deep-agentic-core-mcp-github-deploy` IAM user.
- `MCP_SMOKE_KEY`: a dedicated application API key for authenticated health checks.

These secrets have been installed using the operator's AWS profile. Region
`us-east-2` is configured in the workflow. Never put credentials in the repo.

The scoped IAM policy is managed in AWS IAM. It allows ECR publishing,
CloudFormation change sets on the existing deployment, ECS revision/service
updates, and passing the two existing runtime roles. Read permissions for load-balancer and CloudFront attributes and deployment
events allow CloudFormation to resolve existing resource references and report
failures. Task-definition registration, reads, and deregistration use wildcard
resources where AWS requires them; service and pass-role permissions are scoped.
Infrastructure provisioning and database access are handled separately using the operator profile.

## Deployment behavior

Deployments are serialized. Each image tag includes the release tag, run ID,
and attempt; ECS receives the image digest. Release tags should advance in order;
rerunning an older release deployment would deploy that older version.

The deployment script uses the existing CloudFormation template and preserves
all parameters except `ImageUri`, including the domain and cache credentials.
It refuses changes outside the ECS task definition and service, and refuses
service replacement. ECS's deployment circuit breaker rolls back tasks that fail
to become healthy. A failure of the final MCP smoke check fails the workflow;
it does not automatically roll back an otherwise completed deployment.

For infrastructure changes, use the reviewed operator flow in [README.md](README.md).
To retry a failed release deployment, rerun its failed job in GitHub Actions.
To deploy new code, prepare and publish a new version tag. Rotate the IAM access key by updating both repository secrets, then
remove the old key after a successful run. Rotate or revoke the MCP smoke key
through its application account and update `MCP_SMOKE_KEY` when rotating.
# AWS deployment and package releases

From **0.4.1**, GitHub Actions does not deploy AWS. Pull requests and main pushes
run checks; a `v*` tag validates and publishes PyPI, GitHub Release and MCP Registry
metadata. Publishing or retrying a release does not update the running AWS service.
Comment on lines +3 to +5

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Update the remaining automatic-deployment instructions

After this release removes the AWS job, CONTRIBUTING.md lines 72–103 still tell release operators that a version tag deploys AWS, requires the deployment secrets, and should produce an AWS job, while ROADMAP.md lines 95–101 still describe automatic deployment after PyPI publication. Anyone following those documents can mistake a successful package release for a hosted rollout or wait for a job that no longer exists; update both to describe the new explicit operator deployment flow.

AGENTS.md reference: AGENTS.md:L130-L133

Useful? React with 👍 / 👎.

Comment thread
pramodbn27 marked this conversation as resolved.
Resolved

The existing Docker build, ECR/CloudFormation deployment and smoke-check scripts
remain manual operator tools. Follow the reviewed operator flow in
[README.md](README.md) for an explicit deployment. The service template and runtime
resources are unchanged by this pipeline change. Do not infer hosted deployment
version or health from a successful package release.

Standalone image recipes pin Sidecar 0.9.0 for package discovery; they expose no
live Sidecar task controls. Use an immutable image reference for manual deployments.
Existing GitHub AWS secrets are not consumed by the release workflow. Credential
rotation and infrastructure provisioning remain separate operator responsibilities.
2 changes: 1 addition & 1 deletion deploy/docker/Dockerfile.aws
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ COPY src ./src
# Evals 0.9.0 (the producer of the native report/gate schemas bundled for evals.validate_artifact).
# Chaos is installed for its exporter and fault catalog only; HTTP always
# rejects chaos.run_experiment, so no target script is ever executed here.
RUN pip install --no-cache-dir ".[http]" "agenticlens==0.10.0" "agentic-chaos==0.8.0" "agentic-evals==0.9.0"
RUN pip install --no-cache-dir ".[http]" "agenticlens==0.10.0" "agentic-chaos==0.8.0" "agentic-evals==0.9.0" "agentic-sidecar==0.9.0"
COPY scripts/fetch_schema_assets.py /tmp/fetch_schema_assets.py
RUN python /tmp/fetch_schema_assets.py /opt/workspace/ai-operations-spec
RUN useradd --create-home --uid 10001 mcp
Expand Down
2 changes: 1 addition & 1 deletion deploy/docker/Dockerfile.render
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ COPY src ./src
# Evals 0.9.0 (the producer of the native report/gate schemas bundled for evals.validate_artifact).
# Chaos is installed for its exporter and fault catalog only; HTTP always
# rejects chaos.run_experiment, so no target script is ever executed here.
RUN pip install --no-cache-dir ".[http]" "agenticlens==0.10.0" "agentic-chaos==0.8.0" "agentic-evals==0.9.0"
RUN pip install --no-cache-dir ".[http]" "agenticlens==0.10.0" "agentic-chaos==0.8.0" "agentic-evals==0.9.0" "agentic-sidecar==0.9.0"
COPY scripts/fetch_schema_assets.py /tmp/fetch_schema_assets.py
RUN python /tmp/fetch_schema_assets.py /opt/workspace/ai-operations-spec
RUN useradd --create-home --uid 10001 mcp
Expand Down
9 changes: 9 additions & 0 deletions deploy/docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,12 @@ docker build -f deploy/docker/Dockerfile.render -t deep-agentic-core-mcp:render

The adjacent `Dockerfile.*.dockerignore` files filter those direct build
contexts. The helper is the portable option across Docker builders.


## Release pipeline from 0.4.1

Tag releases validate, publish PyPI/GitHub Release and publish the MCP Registry.
Automatic AWS deployment is removed from GitHub Actions. Existing AWS build and
operator deployment scripts remain available for an explicit manual deployment;
publishing a package does not update the running AWS service. Standalone image
recipes include Sidecar 0.9.0 for package discovery, with no live runtime bridge.
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Unified MCP interface for agentic workflows

**Version:** 0.4.0
**Version:** 0.4.1
**Maturity:** Alpha

`deep-agentic-core-mcp` is the shared MCP server layer for the DeepAgentLabs ecosystem. It provides one MCP interface for workflow analysis, resilience testing, server diagnostics, and supervision-readiness discovery.
Expand Down
2 changes: 1 addition & 1 deletion docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ interface across the DeepAgentLabs ecosystem.

## Current Release

**Version:** `0.4.0`
**Version:** `0.4.1`
**Released:** 2026-10-19

## Development Status
Expand Down
23 changes: 23 additions & 0 deletions docs/sidecar-0.9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Sidecar 0.9.0 compatibility

Sidecar 0.9.0 adds explicit task-authority tool bindings, narrowed delegation,
ancestor revocation, dispatch-time expiry checks, context reader permissions and
redacted evidence summaries. Private scope goals/values use explicit host delivery.

MCP discovery detects installed task-authority/revocation and redacted-evidence APIs without constructing a task. Discovery does not connect to or govern a runtime. Protected MCP servers/credential issuers remain responsible for remote access revocation; Sidecar registries are process-local.

The core package remains standalone. No new mandatory sibling dependency or
shared schema is introduced. Constraint-only guardians retain expiry WARN;
authority-bearing tasks BLOCK on expiry/revocation. Stop revokes descendants;
restart does not revive grants. Operator intent modification cannot reset a
delegated grant. Reader/actor identities must come from the trusted harness.

The fixed comparison has 24 offline synthetic runs (12 per variant): Agent Alone
dispatches 6/6 unsafe proposals; Sidecar dispatches 0/6, with 2/6 false interventions
on clean gate/provider-outage controls. Zero live inference cost/tokens are
synthetic accounting, not an economic or production-reliability claim. Raw
arguments/journals/operator views remain privileged; redaction is allowlisted,
not arbitrary secret detection or process isolation.

See the [Sidecar v0.9 guide](https://github.com/DeepAgentLabs/agentic-sidecar/blob/v0.9.0/website/docs/v0.9.md)
and [paired evidence](https://github.com/DeepAgentLabs/agentic-sidecar/blob/v0.9.0/tests/validation/v0_9_supervision.json).
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "deep-agentic-core-mcp"
version = "0.4.0"
version = "0.4.1"
description = "Unified MCP server for AgenticLens and Agentic Chaos workflows."
readme = "README.md"
requires-python = ">=3.10"
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "io.github.DeepAgentLabs/deep-agentic-core-mcp",
"title": "Deep Agentic Core MCP",
"description": "Unified MCP server for AgenticLens and Agentic Chaos capabilities.",
"version": "0.4.0",
"version": "0.4.1",
"repository": {
"url": "https://github.com/DeepAgentLabs/mcp-server",
"source": "github"
Expand All @@ -12,7 +12,7 @@
{
"registryType": "pypi",
"identifier": "deep-agentic-core-mcp",
"version": "0.4.0",
"version": "0.4.1",
"transport": {
"type": "stdio"
}
Expand Down
2 changes: 1 addition & 1 deletion src/deep_agentic_core_mcp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

__all__ = ["__version__"]

__version__ = "0.4.0"
__version__ = "0.4.1"
Loading
Loading