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
46 changes: 1 addition & 45 deletions .github/workflows/pull-request-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -497,48 +497,6 @@ jobs:
project-version: 0.0.0-SNAPSHOT
artifact-name: sbom-container-images-ssh

build-agi-container-images:
name: Build AGI Container Images
runs-on: ubuntu-latest
needs: build
permissions:
contents: read
actions: read
packages: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Set nx shas
uses: nrwl/nx-set-shas@v5

- name: Download build artifacts
uses: actions/download-artifact@v8
with:
name: build-artifacts
path: .

- name: Setup environment
uses: ./.github/actions/setup-env

- name: Build AGI container images
run: |
npx nx affected --target=agi-container-image --configuration=test --parallel=3

- name: Scan AGI container images with Trivy
uses: ./.github/actions/trivy-scan-local-images
with:
sarif-category: trivy-images-agi

- name: Generate container image SBOMs
uses: ./.github/actions/generate-container-image-sboms
with:
project-version: 0.0.0-SNAPSHOT
artifact-name: sbom-container-images-agi

build-server-container-images:
name: Build Server Container Images
runs-on: ubuntu-latest
Expand Down Expand Up @@ -591,7 +549,6 @@ jobs:
- build-worker-container-images
- build-vnc-container-images
- build-ssh-container-images
- build-agi-container-images
- build-server-container-images
if: always() && needs.detect-affected.outputs.has_affected == 'true'
steps:
Expand Down Expand Up @@ -635,10 +592,9 @@ jobs:
WORKER: ${{ needs.build-worker-container-images.result }}
VNC: ${{ needs.build-vnc-container-images.result }}
SSH: ${{ needs.build-ssh-container-images.result }}
AGI: ${{ needs.build-agi-container-images.result }}
SERVER: ${{ needs.build-server-container-images.result }}
run: |
for result in "$BUILD" "$API" "$WORKER" "$VNC" "$SSH" "$AGI" "$SERVER"; do
for result in "$BUILD" "$API" "$WORKER" "$VNC" "$SSH" "$SERVER"; do
if [ "$result" = "failure" ]; then
echo "::error::An upstream SBOM build job failed"
exit 1
Expand Down
49 changes: 0 additions & 49 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -270,53 +270,6 @@ jobs:
project-version: ${{ needs.publish.outputs.new_release_version }}
artifact-name: sbom-container-images-ssh

build-agi-container-images:
name: Build AGI Container Images
runs-on: ubuntu-latest
needs: publish
if: needs.publish.outputs.new_release_published == 'true'
permissions:
contents: read
actions: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
persist-credentials: false
fetch-depth: 0

- name: Set nx shas
uses: nrwl/nx-set-shas@v5

- name: Download build artifacts
uses: actions/download-artifact@v8
with:
name: build-artifacts
path: .

- name: Setup environment
uses: ./.github/actions/setup-env

- name: 'Login to container registry'
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Publish AGI container images
env:
VERSION: ${{ needs.publish.outputs.new_release_version }}
run: |
npx nx run-many --target=agi-container-image --configuration=release --parallel=3

- name: Generate container image SBOMs
uses: ./.github/actions/generate-container-image-sboms
with:
project-version: ${{ needs.publish.outputs.new_release_version }}
artifact-name: sbom-container-images-agi

build-server-container-images:
name: Build Server Container Images
runs-on: ubuntu-latest
Expand Down Expand Up @@ -673,7 +626,6 @@ jobs:
- build-worker-container-images
- build-vnc-container-images
- build-ssh-container-images
- build-agi-container-images
- build-server-container-images
if: needs.publish.outputs.new_release_published == 'true'
environment: production
Expand Down Expand Up @@ -962,7 +914,6 @@ jobs:
- build-worker-container-images
- build-vnc-container-images
- build-ssh-container-images
- build-agi-container-images
- build-server-container-images
if: needs.publish.outputs.new_release_published == 'true'
env:
Expand Down
62 changes: 0 additions & 62 deletions apps/agenstra/backend-agent-manager/Dockerfile.agi

This file was deleted.

1 change: 0 additions & 1 deletion apps/agenstra/backend-agent-manager/Dockerfile.ssh
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ RUN printf '%s\n' \
'#!/bin/bash' \
'set -euo pipefail' \
'sudo chown -R agenstra:agenstra /app 2>/dev/null || true' \
'sudo chown -R agenstra:agenstra /openclaw 2>/dev/null || true' \
'if [ -z "${SSH_PASSWORD:-}" ]; then' \
' echo "SSH_PASSWORD is required" >&2' \
' exit 1' \
Expand Down
3 changes: 0 additions & 3 deletions apps/agenstra/backend-agent-manager/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,6 @@ services:
CURSOR_AGENT_DOCKER_IMAGE: ${CURSOR_AGENT_DOCKER_IMAGE:-}
CURSOR_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE: ${CURSOR_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE:-}
CURSOR_AGENT_SSH_CONNECTION_DOCKER_IMAGE: ${CURSOR_AGENT_SSH_CONNECTION_DOCKER_IMAGE:-}
OPENCLAW_AGENT_DOCKER_IMAGE: ${OPENCLAW_AGENT_DOCKER_IMAGE:-}
OPENCLAW_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE: ${OPENCLAW_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE:-}
OPENCLAW_AGENT_SSH_CONNECTION_DOCKER_IMAGE: ${OPENCLAW_AGENT_SSH_CONNECTION_DOCKER_IMAGE:-}
OPENCODE_AGENT_DOCKER_IMAGE: ${OPENCODE_AGENT_DOCKER_IMAGE:-}
OPENCODE_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE: ${OPENCODE_AGENT_VIRTUAL_WORKSPACE_DOCKER_IMAGE:-}
OPENCODE_AGENT_SSH_CONNECTION_DOCKER_IMAGE: ${OPENCODE_AGENT_SSH_CONNECTION_DOCKER_IMAGE:-}
Expand Down
2 changes: 2 additions & 0 deletions apps/agenstra/backend-agent-manager/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"license": "AGPL-3.0-or-later",
"private": true,
"dependencies": {
"@agentclientprotocol/sdk": "0.23.0",
"@nestjs/common": "11.1.6",
"@nestjs/core": "11.1.6",
"@nestjs/jwt": "11.0.2",
Expand Down Expand Up @@ -35,6 +36,7 @@
"ssh2": "1.17.0",
"sshpk": "1.18.0",
"uuid": "11.1.1",
"zod": "4.3.6",
"@opentelemetry/api": "1.9.1",
"@opentelemetry/auto-instrumentations-node": "0.79.0",
"@opentelemetry/exporter-logs-otlp-http": "0.221.0",
Expand Down
30 changes: 1 addition & 29 deletions apps/agenstra/backend-agent-manager/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -216,40 +216,12 @@
},
"defaultConfiguration": "test"
},
"agi-container-image": {
"dependsOn": ["prune"],
"cache": false,
"executor": "@nx-tools/nx-container:build",
"options": {
"engine": "docker",
"file": "apps/agenstra/backend-agent-manager/Dockerfile.agi",
"context": "dist/apps/agenstra/backend-agent-manager",
"build-args": ["VERSION"]
},
"configurations": {
"test": {
"load": true,
"tags": [
"registry.forenet.internal/forepath/agenstra-manager-agi:test"
]
},
"release": {
"push": true,
"tags": [
"ghcr.io/forepath/agenstra-manager-agi:latest",
"ghcr.io/forepath/agenstra-manager-agi:$VERSION"
]
}
},
"defaultConfiguration": "test"
},
"start-containers": {
"dependsOn": [
"api-container-image",
"worker-container-image",
"vnc-container-image",
"ssh-container-image",
"agi-container-image"
"ssh-container-image"
],
"cache": false,
"executor": "nx:run-commands",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm';

/**
* Persist agent-issued ACP session ids so chat can resume after API restarts.
*/
export class AddAcpSessionColumnsToAgentsTable1781000000000 implements MigrationInterface {
name = 'AddAcpSessionColumnsToAgentsTable1781000000000';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.addColumn(
'agents',
new TableColumn({
name: 'acp_session_id',
type: 'varchar',
length: '512',
isNullable: true,
}),
);
await queryRunner.addColumn(
'agents',
new TableColumn({
name: 'acp_session_container_id',
type: 'varchar',
length: '255',
isNullable: true,
}),
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropColumn('agents', 'acp_session_container_id');
await queryRunner.dropColumn('agents', 'acp_session_id');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm';

/**
* Store ACP session ids per resumeSessionSuffix (primary + automation / helper sessions).
*/
export class MigrateAcpSessionsToJsonbBySuffix1781100000000 implements MigrationInterface {
name = 'MigrateAcpSessionsToJsonbBySuffix1781100000000';

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.addColumn(
'agents',
new TableColumn({
name: 'acp_sessions',
type: 'jsonb',
isNullable: true,
}),
);

await queryRunner.query(`
UPDATE "agents"
SET "acp_sessions" = jsonb_build_object('', "acp_session_id")
WHERE "acp_session_id" IS NOT NULL
`);

await queryRunner.dropColumn('agents', 'acp_session_id');
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.addColumn(
'agents',
new TableColumn({
name: 'acp_session_id',
type: 'varchar',
length: '512',
isNullable: true,
}),
);

await queryRunner.query(`
UPDATE "agents"
SET "acp_session_id" = "acp_sessions"->>''
WHERE "acp_sessions" IS NOT NULL
AND ("acp_sessions"->>'') IS NOT NULL
`);

await queryRunner.dropColumn('agents', 'acp_sessions');
}
}
Loading
Loading