From 2bfaaa582d408c63d5a2e2ea405fb2b172195bd7 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Tue, 7 Apr 2026 08:57:28 -0700 Subject: [PATCH 01/12] feat(orchestrator): extract ComputeStrategy interface from hardcoded AgentCore logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce ComputeStrategy interface with SessionHandle/SessionStatus types and resolveComputeStrategy factory. Extract AgentCoreComputeStrategy from orchestrator.ts. Refactor orchestrate-task handler to use strategy pattern for session lifecycle (start/poll/stop). Pure refactor — no behavior change, identical CloudFormation output. --- cdk/src/handlers/orchestrate-task.ts | 19 ++- cdk/src/handlers/shared/compute-strategy.ts | 53 +++++++ cdk/src/handlers/shared/orchestrator.ts | 43 ------ .../shared/strategies/agentcore-strategy.ts | 90 ++++++++++++ cdk/test/handlers/orchestrate-task.test.ts | 32 +---- .../handlers/shared/compute-strategy.test.ts | 47 +++++++ .../strategies/agentcore-strategy.test.ts | 129 ++++++++++++++++++ 7 files changed, 337 insertions(+), 76 deletions(-) create mode 100644 cdk/src/handlers/shared/compute-strategy.ts create mode 100644 cdk/src/handlers/shared/strategies/agentcore-strategy.ts create mode 100644 cdk/test/handlers/shared/compute-strategy.test.ts create mode 100644 cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts diff --git a/cdk/src/handlers/orchestrate-task.ts b/cdk/src/handlers/orchestrate-task.ts index a4ae206..af6edd5 100644 --- a/cdk/src/handlers/orchestrate-task.ts +++ b/cdk/src/handlers/orchestrate-task.ts @@ -19,6 +19,7 @@ import { withDurableExecution, type DurableExecutionHandler } from '@aws/durable-execution-sdk-js'; import { TaskStatus, TERMINAL_STATUSES } from '../constructs/task-status'; +import { resolveComputeStrategy } from './shared/compute-strategy'; import { admissionControl, emitTaskEvent, @@ -28,7 +29,7 @@ import { loadBlueprintConfig, loadTask, pollTaskStatus, - startSession, + transitionTask, type PollState, } from './shared/orchestrator'; import { runPreflightChecks } from './shared/preflight'; @@ -116,10 +117,22 @@ const durableHandler: DurableExecutionHandler = asyn } }); - // Step 4: Start agent session — invoke runtime and transition to RUNNING + // Step 4: Start agent session — resolve compute strategy, invoke runtime, transition to RUNNING await context.step('start-session', async () => { try { - return await startSession(task, payload, blueprintConfig); + const strategy = resolveComputeStrategy(blueprintConfig); + const handle = await strategy.startSession({ taskId, payload, blueprintConfig }); + + await transitionTask(taskId, TaskStatus.HYDRATING, TaskStatus.RUNNING, { + session_id: handle.sessionId, + started_at: new Date().toISOString(), + }); + await emitTaskEvent(taskId, 'session_started', { + session_id: handle.sessionId, + strategy_type: handle.strategyType, + }); + + return handle.sessionId; } catch (err) { await failTask(taskId, TaskStatus.HYDRATING, `Session start failed: ${String(err)}`, task.user_id, true); throw err; diff --git a/cdk/src/handlers/shared/compute-strategy.ts b/cdk/src/handlers/shared/compute-strategy.ts new file mode 100644 index 0000000..c4465f0 --- /dev/null +++ b/cdk/src/handlers/shared/compute-strategy.ts @@ -0,0 +1,53 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import type { BlueprintConfig } from './repo-config'; +import { AgentCoreComputeStrategy } from './strategies/agentcore-strategy'; + +export interface SessionHandle { + readonly sessionId: string; + readonly strategyType: string; + readonly metadata: Record; +} + +export type SessionStatus = + | { readonly status: 'running' } + | { readonly status: 'completed' } + | { readonly status: 'failed'; readonly error: string }; + +export interface ComputeStrategy { + readonly type: string; + startSession(input: { + taskId: string; + payload: Record; + blueprintConfig: BlueprintConfig; + }): Promise; + pollSession(handle: SessionHandle): Promise; + stopSession(handle: SessionHandle): Promise; +} + +export function resolveComputeStrategy(blueprintConfig: BlueprintConfig): ComputeStrategy { + const computeType = blueprintConfig.compute_type; + switch (computeType) { + case 'agentcore': + return new AgentCoreComputeStrategy({ runtimeArn: blueprintConfig.runtime_arn }); + default: + throw new Error(`Unknown compute_type: '${computeType}'`); + } +} diff --git a/cdk/src/handlers/shared/orchestrator.ts b/cdk/src/handlers/shared/orchestrator.ts index 0c2e9d2..d4d251d 100644 --- a/cdk/src/handlers/shared/orchestrator.ts +++ b/cdk/src/handlers/shared/orchestrator.ts @@ -17,11 +17,6 @@ * SOFTWARE. */ -// Task lifecycle engine: state transitions, runtime invoke, finalization. Design: docs/design/ORCHESTRATOR.md -// Tests: cdk/test/handlers/orchestrate-task.test.ts, cdk/test/constructs/task-orchestrator.test.ts - -import { randomUUID } from 'crypto'; -import { InvokeAgentRuntimeCommand, BedrockAgentCoreClient } from '@aws-sdk/client-bedrock-agentcore'; import { DynamoDBClient } from '@aws-sdk/client-dynamodb'; import { DynamoDBDocumentClient, GetCommand, PutCommand, UpdateCommand } from '@aws-sdk/lib-dynamodb'; import { ulid } from 'ulid'; @@ -35,7 +30,6 @@ import { computeTtlEpoch, DEFAULT_MAX_TURNS } from './validation'; import { TaskStatus, TERMINAL_STATUSES, VALID_TRANSITIONS, type TaskStatusType } from '../../constructs/task-status'; const ddb = DynamoDBDocumentClient.from(new DynamoDBClient({})); -const agentCoreClient = new BedrockAgentCoreClient({}); const TABLE_NAME = process.env.TASK_TABLE_NAME!; const EVENTS_TABLE_NAME = process.env.TASK_EVENTS_TABLE_NAME!; @@ -350,43 +344,6 @@ export async function hydrateAndTransition(task: TaskRecord, blueprintConfig?: B return payload; } -/** - * Start an AgentCore runtime session and transition task to RUNNING. - * @param task - the task record. - * @param payload - the hydrated invocation payload. - * @param blueprintConfig - optional per-repo blueprint config for runtime ARN override. - * @returns the session ID. - */ -export async function startSession( - task: TaskRecord, - payload: Record, - blueprintConfig?: BlueprintConfig, -): Promise { - // AgentCore requires runtimeSessionId >= 33 chars; UUID v4 is 36 chars. - const sessionId = randomUUID(); - const runtimeArn = blueprintConfig?.runtime_arn ?? RUNTIME_ARN; - - const command = new InvokeAgentRuntimeCommand({ - agentRuntimeArn: runtimeArn, - runtimeSessionId: sessionId, - contentType: 'application/json', - accept: 'application/json', - payload: new TextEncoder().encode(JSON.stringify({ input: payload })), - }); - - await agentCoreClient.send(command); - - await transitionTask(task.task_id, TaskStatus.HYDRATING, TaskStatus.RUNNING, { - session_id: sessionId, - started_at: new Date().toISOString(), - }); - await emitTaskEvent(task.task_id, 'session_started', { session_id: sessionId }); - - logger.info('Session started', { task_id: task.task_id, session_id: sessionId }); - - return sessionId; -} - /** * Poll the task record in DynamoDB to check if the agent wrote a terminal status. * Returns the updated PollState; the waitStrategy decides whether to continue. diff --git a/cdk/src/handlers/shared/strategies/agentcore-strategy.ts b/cdk/src/handlers/shared/strategies/agentcore-strategy.ts new file mode 100644 index 0000000..92ce335 --- /dev/null +++ b/cdk/src/handlers/shared/strategies/agentcore-strategy.ts @@ -0,0 +1,90 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { randomUUID } from 'crypto'; +import { BedrockAgentCoreClient, InvokeAgentRuntimeCommand, StopRuntimeSessionCommand } from '@aws-sdk/client-bedrock-agentcore'; +import type { ComputeStrategy, SessionHandle, SessionStatus } from '../compute-strategy'; +import { logger } from '../logger'; +import type { BlueprintConfig } from '../repo-config'; + +export class AgentCoreComputeStrategy implements ComputeStrategy { + readonly type = 'agentcore'; + private readonly client: BedrockAgentCoreClient; + private readonly runtimeArn: string; + + constructor(options: { runtimeArn: string }) { + this.runtimeArn = options.runtimeArn; + this.client = new BedrockAgentCoreClient({}); + } + + async startSession(input: { + taskId: string; + payload: Record; + blueprintConfig: BlueprintConfig; + }): Promise { + // AgentCore requires runtimeSessionId >= 33 chars; UUID v4 is 36 chars. + const sessionId = randomUUID(); + const runtimeArn = input.blueprintConfig.runtime_arn ?? this.runtimeArn; + + const command = new InvokeAgentRuntimeCommand({ + agentRuntimeArn: runtimeArn, + runtimeSessionId: sessionId, + contentType: 'application/json', + accept: 'application/json', + payload: new TextEncoder().encode(JSON.stringify({ input: input.payload })), + }); + + await this.client.send(command); + + logger.info('AgentCore session invoked', { task_id: input.taskId, session_id: sessionId, runtime_arn: runtimeArn }); + + return { + sessionId, + strategyType: this.type, + metadata: { runtimeArn }, + }; + } + + async pollSession(_handle: SessionHandle): Promise { + // Polling is currently done at the orchestrator level via DDB reads. + // This method exists for PR 2 where different strategies may poll differently. + return { status: 'running' }; + } + + async stopSession(handle: SessionHandle): Promise { + const runtimeArn = handle.metadata.runtimeArn as string | undefined; + if (!runtimeArn) { + logger.warn('No runtimeArn in session handle, cannot stop session', { session_id: handle.sessionId }); + return; + } + + try { + await this.client.send(new StopRuntimeSessionCommand({ + agentRuntimeArn: runtimeArn, + runtimeSessionId: handle.sessionId, + })); + logger.info('AgentCore session stopped', { session_id: handle.sessionId }); + } catch (err) { + logger.warn('Failed to stop AgentCore session (best-effort)', { + session_id: handle.sessionId, + error: err instanceof Error ? err.message : String(err), + }); + } + } +} diff --git a/cdk/test/handlers/orchestrate-task.test.ts b/cdk/test/handlers/orchestrate-task.test.ts index e08627c..d1d5728 100644 --- a/cdk/test/handlers/orchestrate-task.test.ts +++ b/cdk/test/handlers/orchestrate-task.test.ts @@ -27,10 +27,10 @@ jest.mock('@aws-sdk/lib-dynamodb', () => ({ UpdateCommand: jest.fn((input: unknown) => ({ _type: 'Update', input })), })); -const mockAgentCoreSend = jest.fn(); jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ - BedrockAgentCoreClient: jest.fn(() => ({ send: mockAgentCoreSend })), + BedrockAgentCoreClient: jest.fn(() => ({ send: jest.fn() })), InvokeAgentRuntimeCommand: jest.fn((input: unknown) => ({ _type: 'InvokeAgentRuntime', input })), + StopRuntimeSessionCommand: jest.fn((input: unknown) => ({ _type: 'StopRuntimeSession', input })), })); const mockHydrateContext = jest.fn(); @@ -75,7 +75,6 @@ import { loadBlueprintConfig, loadTask, pollTaskStatus, - startSession, transitionTask, } from '../../src/handlers/shared/orchestrator'; @@ -235,18 +234,6 @@ describe('hydrateAndTransition', () => { }); }); -describe('startSession', () => { - test('invokes agent runtime and transitions to RUNNING', async () => { - mockAgentCoreSend.mockResolvedValueOnce({}); // InvokeAgentRuntime - mockDdbSend.mockResolvedValue({}); // transitionTask + emitTaskEvent - - const sessionId = await startSession(baseTask as any, { repo_url: 'org/repo', task_id: 'TASK001' }); - // Session ID is a UUID v4 (36 chars), not a ULID - expect(sessionId).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/); - expect(mockAgentCoreSend).toHaveBeenCalledTimes(1); - }); -}); - describe('pollTaskStatus', () => { test('increments attempt count and reads status', async () => { mockDdbSend.mockResolvedValueOnce({ Item: { status: 'RUNNING' } }); @@ -428,21 +415,6 @@ describe('hydrateAndTransition with blueprint config', () => { }); }); -describe('startSession with blueprint config', () => { - test('uses blueprint runtime ARN override', async () => { - mockAgentCoreSend.mockResolvedValueOnce({}); - mockDdbSend.mockResolvedValue({}); - - await startSession(baseTask as any, { repo_url: 'org/repo', task_id: 'TASK001' }, { - compute_type: 'agentcore', - runtime_arn: 'arn:aws:bedrock-agentcore:us-east-1:123:runtime/custom', - }); - - const invokeCall = mockAgentCoreSend.mock.calls[0][0]; - expect(invokeCall.input.agentRuntimeArn).toBe('arn:aws:bedrock-agentcore:us-east-1:123:runtime/custom'); - }); -}); - describe('finalizeTask', () => { test('handles already-terminal task', async () => { mockDdbSend diff --git a/cdk/test/handlers/shared/compute-strategy.test.ts b/cdk/test/handlers/shared/compute-strategy.test.ts new file mode 100644 index 0000000..7013dd6 --- /dev/null +++ b/cdk/test/handlers/shared/compute-strategy.test.ts @@ -0,0 +1,47 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ + BedrockAgentCoreClient: jest.fn(() => ({ send: jest.fn() })), + InvokeAgentRuntimeCommand: jest.fn(), + StopRuntimeSessionCommand: jest.fn(), +})); + +import { resolveComputeStrategy } from '../../../src/handlers/shared/compute-strategy'; +import { AgentCoreComputeStrategy } from '../../../src/handlers/shared/strategies/agentcore-strategy'; + +describe('resolveComputeStrategy', () => { + test('returns AgentCoreComputeStrategy for compute_type agentcore', () => { + const strategy = resolveComputeStrategy({ + compute_type: 'agentcore', + runtime_arn: 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/test', + }); + expect(strategy).toBeInstanceOf(AgentCoreComputeStrategy); + expect(strategy.type).toBe('agentcore'); + }); + + test('throws for unknown compute_type', () => { + expect(() => + resolveComputeStrategy({ + compute_type: 'unknown', + runtime_arn: 'arn:test', + }), + ).toThrow("Unknown compute_type: 'unknown'"); + }); +}); diff --git a/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts new file mode 100644 index 0000000..1359248 --- /dev/null +++ b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts @@ -0,0 +1,129 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const mockSend = jest.fn(); +jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ + BedrockAgentCoreClient: jest.fn(() => ({ send: mockSend })), + InvokeAgentRuntimeCommand: jest.fn((input: unknown) => ({ _type: 'InvokeAgentRuntime', input })), + StopRuntimeSessionCommand: jest.fn((input: unknown) => ({ _type: 'StopRuntimeSession', input })), +})); + +import { AgentCoreComputeStrategy } from '../../../../src/handlers/shared/strategies/agentcore-strategy'; + +const defaultRuntimeArn = 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/default'; + +beforeEach(() => { + jest.clearAllMocks(); +}); + +describe('AgentCoreComputeStrategy', () => { + test('type is agentcore', () => { + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + expect(strategy.type).toBe('agentcore'); + }); + + describe('startSession', () => { + test('invokes agent runtime and returns SessionHandle', async () => { + mockSend.mockResolvedValueOnce({}); + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + + const handle = await strategy.startSession({ + taskId: 'TASK001', + payload: { repo_url: 'org/repo', task_id: 'TASK001' }, + blueprintConfig: { compute_type: 'agentcore', runtime_arn: defaultRuntimeArn }, + }); + + expect(handle.sessionId).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/); + expect(handle.strategyType).toBe('agentcore'); + expect(handle.metadata.runtimeArn).toBe(defaultRuntimeArn); + expect(mockSend).toHaveBeenCalledTimes(1); + }); + + test('uses blueprint runtime_arn override', async () => { + mockSend.mockResolvedValueOnce({}); + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const overrideArn = 'arn:aws:bedrock-agentcore:us-east-1:123:runtime/custom'; + + const handle = await strategy.startSession({ + taskId: 'TASK001', + payload: { repo_url: 'org/repo', task_id: 'TASK001' }, + blueprintConfig: { compute_type: 'agentcore', runtime_arn: overrideArn }, + }); + + expect(handle.metadata.runtimeArn).toBe(overrideArn); + const invokeCall = mockSend.mock.calls[0][0]; + expect(invokeCall.input.agentRuntimeArn).toBe(overrideArn); + }); + }); + + describe('pollSession', () => { + test('returns running status', async () => { + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const result = await strategy.pollSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }); + expect(result.status).toBe('running'); + }); + }); + + describe('stopSession', () => { + test('sends StopRuntimeSessionCommand', async () => { + mockSend.mockResolvedValueOnce({}); + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + + await strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }); + + expect(mockSend).toHaveBeenCalledTimes(1); + const call = mockSend.mock.calls[0][0]; + expect(call.input.agentRuntimeArn).toBe(defaultRuntimeArn); + expect(call.input.runtimeSessionId).toBe('test-session'); + }); + + test('does not throw when stop fails', async () => { + mockSend.mockRejectedValueOnce(new Error('Access denied')); + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + + await expect( + strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }), + ).resolves.toBeUndefined(); + }); + + test('skips stop when no runtimeArn in metadata', async () => { + const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + + await strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: {}, + }); + + expect(mockSend).not.toHaveBeenCalled(); + }); + }); +}); From 9af81abc3321c1f6aaf76102b3f319db80208ca5 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Tue, 7 Apr 2026 10:28:56 -0700 Subject: [PATCH 02/12] fix(ci): pass GITHUB_TOKEN to mise to avoid API rate limits The mise install step downloads tools (trivy) from GitHub releases. Without GITHUB_TOKEN, unauthenticated requests hit the 60 req/hr rate limit, causing flaky CI failures. --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index db9cf55..6c7312e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,6 +29,7 @@ jobs: env: CI: "true" MISE_EXPERIMENTAL: "1" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout uses: actions/checkout@v5 From c4466612d4015630322a7c485c639b3a3edb7993 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Tue, 7 Apr 2026 10:32:36 -0700 Subject: [PATCH 03/12] fix(ci): set GITHUB_API_TOKEN for mise tool downloads Mise uses GITHUB_API_TOKEN (not GITHUB_TOKEN) for authenticated GitHub API requests when downloading aqua tools like trivy. --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c7312e..dbb95e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,6 +30,7 @@ jobs: CI: "true" MISE_EXPERIMENTAL: "1" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout uses: actions/checkout@v5 @@ -39,6 +40,8 @@ jobs: uses: jdx/mise-action@v3.6.2 with: cache: true + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Setup Node.js uses: actions/setup-node@v5 with: From 573fa53e665d36afcef2d3b74211e6fed59fe466 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Tue, 7 Apr 2026 10:38:14 -0700 Subject: [PATCH 04/12] fix(ci): disable security-only tools in build workflow Trivy, grype, semgrep, osv-scanner, and gitleaks are only needed for security scanning tasks, not for the build/test/synth pipeline. Disable them via MISE_DISABLE_TOOLS to avoid GitHub API rate limits when mise tries to download them on every PR build. --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dbb95e7..30aa8a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,8 @@ jobs: MISE_EXPERIMENTAL: "1" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + AQUA_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MISE_DISABLE_TOOLS: "aqua:aquasecurity/trivy,grype,semgrep,osv-scanner,gitleaks" steps: - name: Checkout uses: actions/checkout@v5 @@ -40,8 +42,6 @@ jobs: uses: jdx/mise-action@v3.6.2 with: cache: true - env: - GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Setup Node.js uses: actions/setup-node@v5 with: From 3856511955e0b6e3670fdacec18ef81483c7617b Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Wed, 8 Apr 2026 10:56:12 -0700 Subject: [PATCH 05/12] fix: address PR review comments - Keep gitleaks and osv-scanner enabled in CI build (only disable trivy/grype/semgrep which need GitHub API downloads) - Remove unused @aws-sdk/client-bedrock-agentcore mock from orchestrate-task.test.ts (SDK is no longer imported by orchestrator) - Update PR description to note additive strategy_type event field --- .github/workflows/build.yml | 4 +++- cdk/test/handlers/orchestrate-task.test.ts | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30aa8a1..3d05dd2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} AQUA_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - MISE_DISABLE_TOOLS: "aqua:aquasecurity/trivy,grype,semgrep,osv-scanner,gitleaks" + # Security-only tools not needed for build/test/synth; disable to avoid + # GitHub API rate limits when mise downloads them on every PR. + MISE_DISABLE_TOOLS: "aqua:aquasecurity/trivy,grype,semgrep" steps: - name: Checkout uses: actions/checkout@v5 diff --git a/cdk/test/handlers/orchestrate-task.test.ts b/cdk/test/handlers/orchestrate-task.test.ts index d1d5728..cb9067a 100644 --- a/cdk/test/handlers/orchestrate-task.test.ts +++ b/cdk/test/handlers/orchestrate-task.test.ts @@ -27,12 +27,6 @@ jest.mock('@aws-sdk/lib-dynamodb', () => ({ UpdateCommand: jest.fn((input: unknown) => ({ _type: 'Update', input })), })); -jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ - BedrockAgentCoreClient: jest.fn(() => ({ send: jest.fn() })), - InvokeAgentRuntimeCommand: jest.fn((input: unknown) => ({ _type: 'InvokeAgentRuntime', input })), - StopRuntimeSessionCommand: jest.fn((input: unknown) => ({ _type: 'StopRuntimeSession', input })), -})); - const mockHydrateContext = jest.fn(); jest.mock('../../src/handlers/shared/context-hydration', () => ({ hydrateContext: mockHydrateContext, From 6ad51f41db1d9175fe55db86a692c99577743245 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Wed, 8 Apr 2026 11:21:16 -0700 Subject: [PATCH 06/12] fix: address Alain's PR review findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Single source of truth for runtimeArn — removed constructor param, strategy now reads exclusively from blueprintConfig.runtime_arn 2. Lazy singleton for BedrockAgentCoreClient — module-level shared client avoids creating new TLS sessions per invocation 3. ComputeType union type ('agentcore' | 'ecs') with exhaustive switch and never-pattern in resolveComputeStrategy 4. Differentiated error handling in stopSession — ResourceNotFoundException (info), ThrottlingException/AccessDeniedException (error), others (warn) 5. Added logger.info('Session started') after full invoke+transition+event sequence in orchestrate-task.ts 6. Added start-session-composition.test.ts with integration tests for happy path, error path (failTask), and partial failure (transitionTask throws) 7. pollSession now throws NotImplementedError instead of returning stale 'running' status — clear signal for future developers --- cdk/src/handlers/orchestrate-task.ts | 7 + cdk/src/handlers/shared/compute-strategy.ts | 14 +- cdk/src/handlers/shared/repo-config.ts | 6 +- .../shared/strategies/agentcore-strategy.ts | 48 ++++-- .../handlers/shared/compute-strategy.test.ts | 6 +- cdk/test/handlers/shared/preflight.test.ts | 2 +- .../strategies/agentcore-strategy.test.ts | 115 ++++++++++--- .../start-session-composition.test.ts | 158 ++++++++++++++++++ 8 files changed, 307 insertions(+), 49 deletions(-) create mode 100644 cdk/test/handlers/start-session-composition.test.ts diff --git a/cdk/src/handlers/orchestrate-task.ts b/cdk/src/handlers/orchestrate-task.ts index af6edd5..e5eb9d2 100644 --- a/cdk/src/handlers/orchestrate-task.ts +++ b/cdk/src/handlers/orchestrate-task.ts @@ -20,6 +20,7 @@ import { withDurableExecution, type DurableExecutionHandler } from '@aws/durable-execution-sdk-js'; import { TaskStatus, TERMINAL_STATUSES } from '../constructs/task-status'; import { resolveComputeStrategy } from './shared/compute-strategy'; +import { logger } from './shared/logger'; import { admissionControl, emitTaskEvent, @@ -132,6 +133,12 @@ const durableHandler: DurableExecutionHandler = asyn strategy_type: handle.strategyType, }); + logger.info('Session started', { + task_id: taskId, + session_id: handle.sessionId, + strategy_type: handle.strategyType, + }); + return handle.sessionId; } catch (err) { await failTask(taskId, TaskStatus.HYDRATING, `Session start failed: ${String(err)}`, task.user_id, true); diff --git a/cdk/src/handlers/shared/compute-strategy.ts b/cdk/src/handlers/shared/compute-strategy.ts index c4465f0..5bf2093 100644 --- a/cdk/src/handlers/shared/compute-strategy.ts +++ b/cdk/src/handlers/shared/compute-strategy.ts @@ -17,7 +17,7 @@ * SOFTWARE. */ -import type { BlueprintConfig } from './repo-config'; +import type { BlueprintConfig, ComputeType } from './repo-config'; import { AgentCoreComputeStrategy } from './strategies/agentcore-strategy'; export interface SessionHandle { @@ -43,11 +43,15 @@ export interface ComputeStrategy { } export function resolveComputeStrategy(blueprintConfig: BlueprintConfig): ComputeStrategy { - const computeType = blueprintConfig.compute_type; + const computeType: ComputeType = blueprintConfig.compute_type; switch (computeType) { case 'agentcore': - return new AgentCoreComputeStrategy({ runtimeArn: blueprintConfig.runtime_arn }); - default: - throw new Error(`Unknown compute_type: '${computeType}'`); + return new AgentCoreComputeStrategy(); + case 'ecs': + throw new Error("compute_type 'ecs' is not yet implemented"); + default: { + const _exhaustive: never = computeType; + throw new Error(`Unknown compute_type: '${_exhaustive}'`); + } } } diff --git a/cdk/src/handlers/shared/repo-config.ts b/cdk/src/handlers/shared/repo-config.ts index 5376063..2e05f7e 100644 --- a/cdk/src/handlers/shared/repo-config.ts +++ b/cdk/src/handlers/shared/repo-config.ts @@ -25,12 +25,14 @@ import { logger } from './logger'; * Per-repository configuration written by the Blueprint CDK construct * and read at runtime by the task API gate and the orchestrator. */ +export type ComputeType = 'agentcore' | 'ecs'; + export interface RepoConfig { readonly repo: string; readonly status: 'active' | 'removed'; readonly onboarded_at: string; readonly updated_at: string; - readonly compute_type?: string; + readonly compute_type?: ComputeType; readonly runtime_arn?: string; readonly model_id?: string; readonly max_turns?: number; @@ -46,7 +48,7 @@ export interface RepoConfig { * settings with platform defaults. */ export interface BlueprintConfig { - readonly compute_type: string; + readonly compute_type: ComputeType; readonly runtime_arn: string; readonly model_id?: string; readonly max_turns?: number; diff --git a/cdk/src/handlers/shared/strategies/agentcore-strategy.ts b/cdk/src/handlers/shared/strategies/agentcore-strategy.ts index 92ce335..689e468 100644 --- a/cdk/src/handlers/shared/strategies/agentcore-strategy.ts +++ b/cdk/src/handlers/shared/strategies/agentcore-strategy.ts @@ -23,15 +23,16 @@ import type { ComputeStrategy, SessionHandle, SessionStatus } from '../compute-s import { logger } from '../logger'; import type { BlueprintConfig } from '../repo-config'; +let sharedClient: BedrockAgentCoreClient | undefined; +function getClient(): BedrockAgentCoreClient { + if (!sharedClient) { + sharedClient = new BedrockAgentCoreClient({}); + } + return sharedClient; +} + export class AgentCoreComputeStrategy implements ComputeStrategy { readonly type = 'agentcore'; - private readonly client: BedrockAgentCoreClient; - private readonly runtimeArn: string; - - constructor(options: { runtimeArn: string }) { - this.runtimeArn = options.runtimeArn; - this.client = new BedrockAgentCoreClient({}); - } async startSession(input: { taskId: string; @@ -40,7 +41,7 @@ export class AgentCoreComputeStrategy implements ComputeStrategy { }): Promise { // AgentCore requires runtimeSessionId >= 33 chars; UUID v4 is 36 chars. const sessionId = randomUUID(); - const runtimeArn = input.blueprintConfig.runtime_arn ?? this.runtimeArn; + const runtimeArn = input.blueprintConfig.runtime_arn; const command = new InvokeAgentRuntimeCommand({ agentRuntimeArn: runtimeArn, @@ -50,7 +51,7 @@ export class AgentCoreComputeStrategy implements ComputeStrategy { payload: new TextEncoder().encode(JSON.stringify({ input: input.payload })), }); - await this.client.send(command); + await getClient().send(command); logger.info('AgentCore session invoked', { task_id: input.taskId, session_id: sessionId, runtime_arn: runtimeArn }); @@ -61,10 +62,12 @@ export class AgentCoreComputeStrategy implements ComputeStrategy { }; } + /** + * Not implemented for AgentCore — polling is done at the orchestrator level via DDB reads. + * Future strategies (e.g. ECS/Fargate) will implement compute-level polling here. + */ async pollSession(_handle: SessionHandle): Promise { - // Polling is currently done at the orchestrator level via DDB reads. - // This method exists for PR 2 where different strategies may poll differently. - return { status: 'running' }; + throw new Error('pollSession is not implemented for AgentCore — use orchestrator-level DDB polling'); } async stopSession(handle: SessionHandle): Promise { @@ -75,16 +78,27 @@ export class AgentCoreComputeStrategy implements ComputeStrategy { } try { - await this.client.send(new StopRuntimeSessionCommand({ + await getClient().send(new StopRuntimeSessionCommand({ agentRuntimeArn: runtimeArn, runtimeSessionId: handle.sessionId, })); logger.info('AgentCore session stopped', { session_id: handle.sessionId }); } catch (err) { - logger.warn('Failed to stop AgentCore session (best-effort)', { - session_id: handle.sessionId, - error: err instanceof Error ? err.message : String(err), - }); + const errName = err instanceof Error ? (err as Error & { name?: string }).name : undefined; + if (errName === 'ResourceNotFoundException') { + logger.info('AgentCore session already gone', { session_id: handle.sessionId }); + } else if (errName === 'ThrottlingException' || errName === 'AccessDeniedException') { + logger.error('Failed to stop AgentCore session', { + session_id: handle.sessionId, + error_type: errName, + error: err instanceof Error ? err.message : String(err), + }); + } else { + logger.warn('Failed to stop AgentCore session (best-effort)', { + session_id: handle.sessionId, + error: err instanceof Error ? err.message : String(err), + }); + } } } } diff --git a/cdk/test/handlers/shared/compute-strategy.test.ts b/cdk/test/handlers/shared/compute-strategy.test.ts index 7013dd6..92f589c 100644 --- a/cdk/test/handlers/shared/compute-strategy.test.ts +++ b/cdk/test/handlers/shared/compute-strategy.test.ts @@ -36,12 +36,12 @@ describe('resolveComputeStrategy', () => { expect(strategy.type).toBe('agentcore'); }); - test('throws for unknown compute_type', () => { + test("throws 'not yet implemented' for compute_type ecs", () => { expect(() => resolveComputeStrategy({ - compute_type: 'unknown', + compute_type: 'ecs', runtime_arn: 'arn:test', }), - ).toThrow("Unknown compute_type: 'unknown'"); + ).toThrow("compute_type 'ecs' is not yet implemented"); }); }); diff --git a/cdk/test/handlers/shared/preflight.test.ts b/cdk/test/handlers/shared/preflight.test.ts index 194909f..2e2d842 100644 --- a/cdk/test/handlers/shared/preflight.test.ts +++ b/cdk/test/handlers/shared/preflight.test.ts @@ -40,7 +40,7 @@ const mockFetch = jest.fn(); global.fetch = mockFetch as unknown as typeof fetch; const baseBlueprintConfig: BlueprintConfig = { - compute_type: 'AGENTCORE', + compute_type: 'agentcore', runtime_arn: 'arn:aws:bedrock:us-east-1:123456789012:agent-runtime/test', github_token_secret_arn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:github-token', }; diff --git a/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts index 1359248..0310f3c 100644 --- a/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts +++ b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts @@ -34,14 +34,14 @@ beforeEach(() => { describe('AgentCoreComputeStrategy', () => { test('type is agentcore', () => { - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const strategy = new AgentCoreComputeStrategy(); expect(strategy.type).toBe('agentcore'); }); describe('startSession', () => { test('invokes agent runtime and returns SessionHandle', async () => { mockSend.mockResolvedValueOnce({}); - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const strategy = new AgentCoreComputeStrategy(); const handle = await strategy.startSession({ taskId: 'TASK001', @@ -55,39 +55,67 @@ describe('AgentCoreComputeStrategy', () => { expect(mockSend).toHaveBeenCalledTimes(1); }); - test('uses blueprint runtime_arn override', async () => { + test('uses runtime_arn from blueprintConfig (single source of truth)', async () => { mockSend.mockResolvedValueOnce({}); - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); - const overrideArn = 'arn:aws:bedrock-agentcore:us-east-1:123:runtime/custom'; + const strategy = new AgentCoreComputeStrategy(); + const runtimeArn = 'arn:aws:bedrock-agentcore:us-east-1:123:runtime/custom'; const handle = await strategy.startSession({ taskId: 'TASK001', payload: { repo_url: 'org/repo', task_id: 'TASK001' }, - blueprintConfig: { compute_type: 'agentcore', runtime_arn: overrideArn }, + blueprintConfig: { compute_type: 'agentcore', runtime_arn: runtimeArn }, }); - expect(handle.metadata.runtimeArn).toBe(overrideArn); + expect(handle.metadata.runtimeArn).toBe(runtimeArn); const invokeCall = mockSend.mock.calls[0][0]; - expect(invokeCall.input.agentRuntimeArn).toBe(overrideArn); + expect(invokeCall.input.agentRuntimeArn).toBe(runtimeArn); + }); + + test('reuses shared BedrockAgentCoreClient across instances', async () => { + const { BedrockAgentCoreClient } = require('@aws-sdk/client-bedrock-agentcore'); + // The lazy singleton may already be initialized from prior tests. + // Record the current call count, then verify no additional constructor calls happen. + const callsBefore = BedrockAgentCoreClient.mock.calls.length; + + mockSend.mockResolvedValue({}); + const strategy1 = new AgentCoreComputeStrategy(); + const strategy2 = new AgentCoreComputeStrategy(); + + await strategy1.startSession({ + taskId: 'T1', + payload: {}, + blueprintConfig: { compute_type: 'agentcore', runtime_arn: defaultRuntimeArn }, + }); + await strategy2.startSession({ + taskId: 'T2', + payload: {}, + blueprintConfig: { compute_type: 'agentcore', runtime_arn: defaultRuntimeArn }, + }); + + // Lazy singleton: at most one constructor call total across all strategy instances + const callsAfter = BedrockAgentCoreClient.mock.calls.length; + expect(callsAfter - callsBefore).toBeLessThanOrEqual(1); + expect(mockSend).toHaveBeenCalledTimes(2); }); }); describe('pollSession', () => { - test('returns running status', async () => { - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); - const result = await strategy.pollSession({ - sessionId: 'test-session', - strategyType: 'agentcore', - metadata: { runtimeArn: defaultRuntimeArn }, - }); - expect(result.status).toBe('running'); + test('throws because AgentCore polling is done at orchestrator level', async () => { + const strategy = new AgentCoreComputeStrategy(); + await expect( + strategy.pollSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }), + ).rejects.toThrow('pollSession is not implemented for AgentCore'); }); }); describe('stopSession', () => { test('sends StopRuntimeSessionCommand', async () => { mockSend.mockResolvedValueOnce({}); - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const strategy = new AgentCoreComputeStrategy(); await strategy.stopSession({ sessionId: 'test-session', @@ -101,9 +129,54 @@ describe('AgentCoreComputeStrategy', () => { expect(call.input.runtimeSessionId).toBe('test-session'); }); - test('does not throw when stop fails', async () => { - mockSend.mockRejectedValueOnce(new Error('Access denied')); - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + test('logs info for ResourceNotFoundException (session already gone)', async () => { + const err = new Error('Not found'); + err.name = 'ResourceNotFoundException'; + mockSend.mockRejectedValueOnce(err); + const strategy = new AgentCoreComputeStrategy(); + + await expect( + strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }), + ).resolves.toBeUndefined(); + }); + + test('logs error for ThrottlingException', async () => { + const err = new Error('Rate exceeded'); + err.name = 'ThrottlingException'; + mockSend.mockRejectedValueOnce(err); + const strategy = new AgentCoreComputeStrategy(); + + await expect( + strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }), + ).resolves.toBeUndefined(); + }); + + test('logs error for AccessDeniedException', async () => { + const err = new Error('Access denied'); + err.name = 'AccessDeniedException'; + mockSend.mockRejectedValueOnce(err); + const strategy = new AgentCoreComputeStrategy(); + + await expect( + strategy.stopSession({ + sessionId: 'test-session', + strategyType: 'agentcore', + metadata: { runtimeArn: defaultRuntimeArn }, + }), + ).resolves.toBeUndefined(); + }); + + test('logs warn for unknown errors (best-effort)', async () => { + mockSend.mockRejectedValueOnce(new Error('Network error')); + const strategy = new AgentCoreComputeStrategy(); await expect( strategy.stopSession({ @@ -115,7 +188,7 @@ describe('AgentCoreComputeStrategy', () => { }); test('skips stop when no runtimeArn in metadata', async () => { - const strategy = new AgentCoreComputeStrategy({ runtimeArn: defaultRuntimeArn }); + const strategy = new AgentCoreComputeStrategy(); await strategy.stopSession({ sessionId: 'test-session', diff --git a/cdk/test/handlers/start-session-composition.test.ts b/cdk/test/handlers/start-session-composition.test.ts new file mode 100644 index 0000000..5aab773 --- /dev/null +++ b/cdk/test/handlers/start-session-composition.test.ts @@ -0,0 +1,158 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Integration-style tests for the start-session step composition: + * resolveComputeStrategy → strategy.startSession → transitionTask → emitTaskEvent + * These verify that the orchestrate-task handler's step 4 logic correctly + * wires the strategy, state transitions, and event emission together. + */ + +const mockDdbSend = jest.fn(); +jest.mock('@aws-sdk/client-dynamodb', () => ({ DynamoDBClient: jest.fn(() => ({})) })); +jest.mock('@aws-sdk/lib-dynamodb', () => ({ + DynamoDBDocumentClient: { from: jest.fn(() => ({ send: mockDdbSend })) }, + GetCommand: jest.fn((input: unknown) => ({ _type: 'Get', input })), + PutCommand: jest.fn((input: unknown) => ({ _type: 'Put', input })), + UpdateCommand: jest.fn((input: unknown) => ({ _type: 'Update', input })), +})); + +const mockAgentCoreSend = jest.fn(); +jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ + BedrockAgentCoreClient: jest.fn(() => ({ send: mockAgentCoreSend })), + InvokeAgentRuntimeCommand: jest.fn((input: unknown) => ({ _type: 'InvokeAgentRuntime', input })), + StopRuntimeSessionCommand: jest.fn((input: unknown) => ({ _type: 'StopRuntimeSession', input })), +})); + +jest.mock('../../src/handlers/shared/repo-config', () => ({ + loadRepoConfig: jest.fn(), + checkRepoOnboarded: jest.fn(), +})); + +jest.mock('../../src/handlers/shared/memory', () => ({ + writeMinimalEpisode: jest.fn(), +})); + +jest.mock('../../src/handlers/shared/prompt-version', () => ({ + computePromptVersion: jest.fn().mockReturnValue('abc123'), +})); + +jest.mock('../../src/handlers/shared/context-hydration', () => ({ + hydrateContext: jest.fn(), +})); + +let ulidCounter = 0; +jest.mock('ulid', () => ({ ulid: jest.fn(() => `ULID${ulidCounter++}`) })); + +process.env.TASK_TABLE_NAME = 'Tasks'; +process.env.TASK_EVENTS_TABLE_NAME = 'TaskEvents'; +process.env.USER_CONCURRENCY_TABLE_NAME = 'UserConcurrency'; +process.env.RUNTIME_ARN = 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/test'; +process.env.MAX_CONCURRENT_TASKS_PER_USER = '3'; +process.env.TASK_RETENTION_DAYS = '90'; + +import { resolveComputeStrategy } from '../../src/handlers/shared/compute-strategy'; +import { transitionTask, emitTaskEvent, failTask } from '../../src/handlers/shared/orchestrator'; +import { TaskStatus } from '../../src/constructs/task-status'; +import type { BlueprintConfig } from '../../src/handlers/shared/repo-config'; + +beforeEach(() => { + jest.clearAllMocks(); + ulidCounter = 0; +}); + +describe('start-session step composition', () => { + const taskId = 'TASK001'; + const userId = 'user-123'; + const blueprintConfig: BlueprintConfig = { + compute_type: 'agentcore', + runtime_arn: 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/test', + }; + const payload = { repo_url: 'org/repo', task_id: taskId }; + + test('happy path: strategy.startSession → transitionTask → emitTaskEvent', async () => { + mockAgentCoreSend.mockResolvedValueOnce({}); + mockDdbSend.mockResolvedValue({}); // transitionTask + emitTaskEvent + + const strategy = resolveComputeStrategy(blueprintConfig); + const handle = await strategy.startSession({ taskId, payload, blueprintConfig }); + + await transitionTask(taskId, TaskStatus.HYDRATING, TaskStatus.RUNNING, { + session_id: handle.sessionId, + started_at: expect.any(String), + }); + await emitTaskEvent(taskId, 'session_started', { + session_id: handle.sessionId, + strategy_type: handle.strategyType, + }); + + // Verify AgentCore was invoked + expect(mockAgentCoreSend).toHaveBeenCalledTimes(1); + // Verify DDB was called for transition + event + expect(mockDdbSend).toHaveBeenCalledTimes(2); + // Verify handle shape + expect(handle.strategyType).toBe('agentcore'); + expect(handle.sessionId).toBeDefined(); + }); + + test('error path: strategy.startSession fails → failTask is called', async () => { + mockAgentCoreSend.mockRejectedValueOnce(new Error('InvokeAgent failed')); + mockDdbSend.mockResolvedValue({}); // failTask transitions + + const strategy = resolveComputeStrategy(blueprintConfig); + + try { + await strategy.startSession({ taskId, payload, blueprintConfig }); + fail('Expected startSession to throw'); + } catch (err) { + await failTask(taskId, TaskStatus.HYDRATING, `Session start failed: ${String(err)}`, userId, true); + } + + // failTask should have been called — transitions to FAILED + emits event + decrements concurrency + // transitionTask (1) + emitTaskEvent (1) + decrementConcurrency (1) = 3 DDB calls + expect(mockDdbSend).toHaveBeenCalledTimes(3); + }); + + test('partial failure: strategy succeeds but transitionTask throws', async () => { + mockAgentCoreSend.mockResolvedValueOnce({}); + const condErr = new Error('Conditional check failed'); + condErr.name = 'ConditionalCheckFailedException'; + mockDdbSend + .mockRejectedValueOnce(condErr) // transitionTask fails + .mockResolvedValue({}); // failTask calls + + const strategy = resolveComputeStrategy(blueprintConfig); + const handle = await strategy.startSession({ taskId, payload, blueprintConfig }); + + try { + await transitionTask(taskId, TaskStatus.HYDRATING, TaskStatus.RUNNING, { + session_id: handle.sessionId, + started_at: new Date().toISOString(), + }); + fail('Expected transitionTask to throw'); + } catch (err) { + await failTask(taskId, TaskStatus.HYDRATING, `Session start failed: ${String(err)}`, userId, true); + } + + // AgentCore was invoked + expect(mockAgentCoreSend).toHaveBeenCalledTimes(1); + // transitionTask failed (1) + failTask: transitionTask (1) + emitTaskEvent (1) + decrement (1) = 4 + expect(mockDdbSend).toHaveBeenCalledTimes(4); + }); +}); From 83287f45f4a68b66ea0d7342a7f70f957cccb669 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Wed, 8 Apr 2026 11:46:28 -0700 Subject: [PATCH 07/12] fix: resolve ESLint errors in test files - Replace require() with ES import for BedrockAgentCoreClient mock - Fix import ordering in start-session-composition test --- .../handlers/shared/strategies/agentcore-strategy.test.ts | 7 ++++--- cdk/test/handlers/start-session-composition.test.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts index 0310f3c..c544a71 100644 --- a/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts +++ b/cdk/test/handlers/shared/strategies/agentcore-strategy.test.ts @@ -24,8 +24,10 @@ jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ StopRuntimeSessionCommand: jest.fn((input: unknown) => ({ _type: 'StopRuntimeSession', input })), })); +import { BedrockAgentCoreClient } from '@aws-sdk/client-bedrock-agentcore'; import { AgentCoreComputeStrategy } from '../../../../src/handlers/shared/strategies/agentcore-strategy'; +const MockedClient = jest.mocked(BedrockAgentCoreClient); const defaultRuntimeArn = 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/default'; beforeEach(() => { @@ -72,10 +74,9 @@ describe('AgentCoreComputeStrategy', () => { }); test('reuses shared BedrockAgentCoreClient across instances', async () => { - const { BedrockAgentCoreClient } = require('@aws-sdk/client-bedrock-agentcore'); // The lazy singleton may already be initialized from prior tests. // Record the current call count, then verify no additional constructor calls happen. - const callsBefore = BedrockAgentCoreClient.mock.calls.length; + const callsBefore = MockedClient.mock.calls.length; mockSend.mockResolvedValue({}); const strategy1 = new AgentCoreComputeStrategy(); @@ -93,7 +94,7 @@ describe('AgentCoreComputeStrategy', () => { }); // Lazy singleton: at most one constructor call total across all strategy instances - const callsAfter = BedrockAgentCoreClient.mock.calls.length; + const callsAfter = MockedClient.mock.calls.length; expect(callsAfter - callsBefore).toBeLessThanOrEqual(1); expect(mockSend).toHaveBeenCalledTimes(2); }); diff --git a/cdk/test/handlers/start-session-composition.test.ts b/cdk/test/handlers/start-session-composition.test.ts index 5aab773..e9592d6 100644 --- a/cdk/test/handlers/start-session-composition.test.ts +++ b/cdk/test/handlers/start-session-composition.test.ts @@ -67,9 +67,9 @@ process.env.RUNTIME_ARN = 'arn:aws:bedrock-agentcore:us-east-1:123456789012:runt process.env.MAX_CONCURRENT_TASKS_PER_USER = '3'; process.env.TASK_RETENTION_DAYS = '90'; +import { TaskStatus } from '../../src/constructs/task-status'; import { resolveComputeStrategy } from '../../src/handlers/shared/compute-strategy'; import { transitionTask, emitTaskEvent, failTask } from '../../src/handlers/shared/orchestrator'; -import { TaskStatus } from '../../src/constructs/task-status'; import type { BlueprintConfig } from '../../src/handlers/shared/repo-config'; beforeEach(() => { From 49ea161ec128de7ab0059eff900a09f557c46acd Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Wed, 8 Apr 2026 15:33:42 -0700 Subject: [PATCH 08/12] feat(compute): implement ECS Fargate backend via ComputeStrategy pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wire ECS Fargate as a compute backend behind the existing ComputeStrategy interface, using the existing durable Lambda orchestrator. No separate stacks or Step Functions — ECS is a strategy option alongside AgentCore. Changes: - EcsComputeStrategy: startSession (RunTask), pollSession (DescribeTasks state mapping), stopSession (StopTask with graceful error handling) - EcsAgentCluster construct: ECS Cluster (container insights), Fargate task def (2 vCPU/4GB/ARM64), security group (TCP 443 egress only), CloudWatch log group, task role (DynamoDB, SecretsManager, Bedrock) - TaskOrchestrator: optional ECS props for env vars and IAM policies (ecs:RunTask/DescribeTasks/StopTask conditioned on cluster ARN, iam:PassRole conditioned on ecs-tasks.amazonaws.com) - Orchestrator polling: ECS compute-level crash detection alongside existing DDB polling (non-fatal, wrapped in try/catch) - AgentStack: conditional ECS infrastructure (ABCA_ENABLE_ECS env var) - Full test coverage: 15 ECS strategy tests, 9 construct tests, 5 orchestrator ECS tests. All 563 tests pass. Deployed and verified: stack deploys cleanly, CDK synth passes cdk-nag, agent task running on AgentCore path unaffected. --- .github/workflows/build.yml | 4 +- cdk/package.json | 1 + cdk/src/constructs/ecs-agent-cluster.ts | 156 +++++ cdk/src/constructs/task-orchestrator.ts | 75 +- cdk/src/handlers/orchestrate-task.ts | 45 +- cdk/src/handlers/shared/compute-strategy.ts | 7 +- .../shared/strategies/ecs-strategy.ts | 179 +++++ cdk/src/stacks/agent.ts | 34 + cdk/test/constructs/ecs-agent-cluster.test.ts | 198 ++++++ cdk/test/constructs/task-orchestrator.test.ts | 134 +++- .../handlers/shared/compute-strategy.test.ts | 22 +- .../shared/strategies/ecs-strategy.test.ts | 319 +++++++++ local-docs/2026_RFP_Website-Design.pdf | Bin 0 -> 172390 bytes yarn.lock | 652 ++++++++++++++++++ 14 files changed, 1803 insertions(+), 23 deletions(-) create mode 100644 cdk/src/constructs/ecs-agent-cluster.ts create mode 100644 cdk/src/handlers/shared/strategies/ecs-strategy.ts create mode 100644 cdk/test/constructs/ecs-agent-cluster.test.ts create mode 100644 cdk/test/handlers/shared/strategies/ecs-strategy.test.ts create mode 100644 local-docs/2026_RFP_Website-Design.pdf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3d05dd2..49608f0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,8 +32,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} AQUA_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Security-only tools not needed for build/test/synth; disable to avoid - # GitHub API rate limits when mise downloads them on every PR. + # Keep secret and dependency scanning enabled in CI; only disable the + # remaining tools that are intentionally skipped here. MISE_DISABLE_TOOLS: "aqua:aquasecurity/trivy,grype,semgrep" steps: - name: Checkout diff --git a/cdk/package.json b/cdk/package.json index 85a046b..0feaf5b 100644 --- a/cdk/package.json +++ b/cdk/package.json @@ -18,6 +18,7 @@ "@aws-cdk/mixins-preview": "2.238.0-alpha.0", "@aws-sdk/client-bedrock-agentcore": "^3.1021.0", "@aws-sdk/client-bedrock-runtime": "^3.1021.0", + "@aws-sdk/client-ecs": "^3.1021.0", "@aws-sdk/client-dynamodb": "^3.1021.0", "@aws-sdk/client-lambda": "^3.1021.0", "@aws-sdk/client-secrets-manager": "^3.1021.0", diff --git a/cdk/src/constructs/ecs-agent-cluster.ts b/cdk/src/constructs/ecs-agent-cluster.ts new file mode 100644 index 0000000..c7867c3 --- /dev/null +++ b/cdk/src/constructs/ecs-agent-cluster.ts @@ -0,0 +1,156 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { RemovalPolicy } from 'aws-cdk-lib'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; +import * as ecs from 'aws-cdk-lib/aws-ecs'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as logs from 'aws-cdk-lib/aws-logs'; +import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager'; +import { NagSuppressions } from 'cdk-nag'; +import { Construct } from 'constructs'; + +export interface EcsAgentClusterProps { + readonly vpc: ec2.IVpc; + readonly agentImageAsset: ecr_assets.DockerImageAsset; + readonly taskTable: dynamodb.ITable; + readonly taskEventsTable: dynamodb.ITable; + readonly userConcurrencyTable: dynamodb.ITable; + readonly githubTokenSecret: secretsmanager.ISecret; + readonly memoryId?: string; +} + +export class EcsAgentCluster extends Construct { + public readonly cluster: ecs.Cluster; + public readonly taskDefinition: ecs.FargateTaskDefinition; + public readonly securityGroup: ec2.SecurityGroup; + public readonly containerName: string; + public readonly taskRoleArn: string; + public readonly executionRoleArn: string; + + constructor(scope: Construct, id: string, props: EcsAgentClusterProps) { + super(scope, id); + + this.containerName = 'AgentContainer'; + + // ECS Cluster with Fargate capacity provider and container insights + this.cluster = new ecs.Cluster(this, 'Cluster', { + vpc: props.vpc, + containerInsights: true, + }); + + // Security group — egress TCP 443 only + this.securityGroup = new ec2.SecurityGroup(this, 'TaskSG', { + vpc: props.vpc, + description: 'ECS Agent Tasks - egress TCP 443 only', + allowAllOutbound: false, + }); + + this.securityGroup.addEgressRule( + ec2.Peer.anyIpv4(), + ec2.Port.tcp(443), + 'Allow HTTPS egress (GitHub API, AWS services)', + ); + + // CloudWatch log group for agent task output + const logGroup = new logs.LogGroup(this, 'TaskLogGroup', { + logGroupName: '/ecs/abca-agent-tasks', + retention: logs.RetentionDays.THREE_MONTHS, + removalPolicy: RemovalPolicy.DESTROY, + }); + + // Task execution role (used by ECS agent to pull images, write logs) + // CDK creates this automatically via taskDefinition, but we need to + // grant additional permissions to the task role. + + // Fargate task definition + this.taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', { + cpu: 2048, + memoryLimitMiB: 4096, + runtimePlatform: { + cpuArchitecture: ecs.CpuArchitecture.ARM64, + operatingSystemFamily: ecs.OperatingSystemFamily.LINUX, + }, + }); + + // Container + this.taskDefinition.addContainer(this.containerName, { + image: ecs.ContainerImage.fromDockerImageAsset(props.agentImageAsset), + logging: ecs.LogDrivers.awsLogs({ + logGroup, + streamPrefix: 'agent', + }), + environment: { + CLAUDE_CODE_USE_BEDROCK: '1', + TASK_TABLE_NAME: props.taskTable.tableName, + TASK_EVENTS_TABLE_NAME: props.taskEventsTable.tableName, + USER_CONCURRENCY_TABLE_NAME: props.userConcurrencyTable.tableName, + LOG_GROUP_NAME: logGroup.logGroupName, + ...(props.memoryId && { MEMORY_ID: props.memoryId }), + }, + }); + + // Task role permissions + const taskRole = this.taskDefinition.taskRole; + + // DynamoDB read/write on task tables + props.taskTable.grantReadWriteData(taskRole); + props.taskEventsTable.grantReadWriteData(taskRole); + props.userConcurrencyTable.grantReadWriteData(taskRole); + + // Secrets Manager read for GitHub token + props.githubTokenSecret.grantRead(taskRole); + + // Bedrock model invocation + taskRole.addToPrincipalPolicy(new iam.PolicyStatement({ + actions: [ + 'bedrock:InvokeModel', + 'bedrock:InvokeModelWithResponseStream', + ], + resources: ['*'], + })); + + // CloudWatch Logs write + logGroup.grantWrite(taskRole); + + // Expose role ARNs for scoped iam:PassRole in the orchestrator + this.taskRoleArn = taskRole.roleArn; + this.executionRoleArn = this.taskDefinition.executionRole!.roleArn; + + NagSuppressions.addResourceSuppressions(this.taskDefinition, [ + { + id: 'AwsSolutions-IAM5', + reason: 'DynamoDB index/* wildcards generated by CDK grantReadWriteData; Bedrock InvokeModel requires * resource; Secrets Manager wildcards from CDK grantRead; CloudWatch Logs wildcards from CDK grantWrite', + }, + { + id: 'AwsSolutions-ECS2', + reason: 'Environment variables contain table names and configuration, not secrets — GitHub token is fetched from Secrets Manager at runtime', + }, + ], true); + + NagSuppressions.addResourceSuppressions(this.cluster, [ + { + id: 'AwsSolutions-ECS4', + reason: 'Container insights is enabled via the containerInsights prop', + }, + ], true); + } +} diff --git a/cdk/src/constructs/task-orchestrator.ts b/cdk/src/constructs/task-orchestrator.ts index 7da3030..22634f7 100644 --- a/cdk/src/constructs/task-orchestrator.ts +++ b/cdk/src/constructs/task-orchestrator.ts @@ -112,6 +112,39 @@ export interface TaskOrchestratorProps { * Bedrock Guardrail version. Required when guardrailId is provided. */ readonly guardrailVersion?: string; + + /** + * ARN of the ECS cluster for ECS compute strategy. + * When provided, ECS-related env vars and IAM policies are added. + */ + readonly ecsClusterArn?: string; + + /** + * ARN of the ECS task definition for ECS compute strategy. + */ + readonly ecsTaskDefinitionArn?: string; + + /** + * Comma-separated subnet IDs for ECS tasks. + */ + readonly ecsSubnets?: string; + + /** + * Security group ID for ECS tasks. + */ + readonly ecsSecurityGroup?: string; + + /** + * Container name in the ECS task definition. + */ + readonly ecsContainerName?: string; + + /** + * ARNs of the ECS task role and execution role for scoped iam:PassRole. + * Required when ecsClusterArn is provided. + */ + readonly ecsTaskRoleArn?: string; + readonly ecsExecutionRoleArn?: string; } /** @@ -144,6 +177,13 @@ export class TaskOrchestrator extends Construct { throw new Error('guardrailId is required when guardrailVersion is provided'); } + // Validate ECS props are all-or-nothing + const ecsProps = [props.ecsClusterArn, props.ecsTaskDefinitionArn, props.ecsSubnets, props.ecsSecurityGroup, props.ecsContainerName]; + const ecsPropsProvided = ecsProps.filter(p => p !== undefined); + if (ecsPropsProvided.length > 0 && ecsPropsProvided.length < ecsProps.length) { + throw new Error('ECS compute strategy requires all of: ecsClusterArn, ecsTaskDefinitionArn, ecsSubnets, ecsSecurityGroup, ecsContainerName'); + } + const handlersDir = path.join(__dirname, '..', 'handlers'); const maxConcurrent = props.maxConcurrentTasksPerUser ?? 3; @@ -173,6 +213,11 @@ export class TaskOrchestrator extends Construct { ...(props.memoryId && { MEMORY_ID: props.memoryId }), ...(props.guardrailId && { GUARDRAIL_ID: props.guardrailId }), ...(props.guardrailVersion && { GUARDRAIL_VERSION: props.guardrailVersion }), + ...(props.ecsClusterArn && { ECS_CLUSTER_ARN: props.ecsClusterArn }), + ...(props.ecsTaskDefinitionArn && { ECS_TASK_DEFINITION_ARN: props.ecsTaskDefinitionArn }), + ...(props.ecsSubnets && { ECS_SUBNETS: props.ecsSubnets }), + ...(props.ecsSecurityGroup && { ECS_SECURITY_GROUP: props.ecsSecurityGroup }), + ...(props.ecsContainerName && { ECS_CONTAINER_NAME: props.ecsContainerName }), }, bundling: { externalModules: ['@aws-sdk/*'], @@ -213,6 +258,34 @@ export class TaskOrchestrator extends Construct { resources: runtimeResources, })); + // ECS compute strategy permissions (only when ECS is configured) + if (props.ecsClusterArn) { + this.fn.addToRolePolicy(new iam.PolicyStatement({ + actions: [ + 'ecs:RunTask', + 'ecs:DescribeTasks', + 'ecs:StopTask', + ], + resources: ['*'], + conditions: { + ArnEquals: { + 'ecs:cluster': props.ecsClusterArn, + }, + }, + })); + + const passRoleResources = [props.ecsTaskRoleArn, props.ecsExecutionRoleArn].filter(Boolean) as string[]; + this.fn.addToRolePolicy(new iam.PolicyStatement({ + actions: ['iam:PassRole'], + resources: passRoleResources.length > 0 ? passRoleResources : ['*'], + conditions: { + StringEquals: { + 'iam:PassedToService': 'ecs-tasks.amazonaws.com', + }, + }, + })); + } + // Per-repo Secrets Manager grants (e.g. per-repo GitHub tokens from Blueprints) for (const [index, secretArn] of (props.additionalSecretArns ?? []).entries()) { const secret = secretsmanager.Secret.fromSecretCompleteArn( @@ -264,7 +337,7 @@ export class TaskOrchestrator extends Construct { }, { id: 'AwsSolutions-IAM5', - reason: 'DynamoDB index/* wildcards generated by CDK grantReadWriteData; AgentCore runtime/* required for sub-resource invocation; Secrets Manager wildcards generated by CDK grantRead; AgentCore Memory wildcards generated by CDK grantRead/grantWrite', + reason: 'DynamoDB index/* wildcards generated by CDK grantReadWriteData; AgentCore runtime/* required for sub-resource invocation; Secrets Manager wildcards generated by CDK grantRead; AgentCore Memory wildcards generated by CDK grantRead/grantWrite; ECS RunTask/DescribeTasks/StopTask conditioned on cluster ARN; iam:PassRole scoped to ECS task/execution roles and conditioned on ecs-tasks.amazonaws.com', }, ], true); } diff --git a/cdk/src/handlers/orchestrate-task.ts b/cdk/src/handlers/orchestrate-task.ts index e5eb9d2..94c8a49 100644 --- a/cdk/src/handlers/orchestrate-task.ts +++ b/cdk/src/handlers/orchestrate-task.ts @@ -119,7 +119,8 @@ const durableHandler: DurableExecutionHandler = asyn }); // Step 4: Start agent session — resolve compute strategy, invoke runtime, transition to RUNNING - await context.step('start-session', async () => { + // Returns the full SessionHandle (serializable) so ECS polling can use it in step 5. + const sessionHandle = await context.step('start-session', async () => { try { const strategy = resolveComputeStrategy(blueprintConfig); const handle = await strategy.startSession({ taskId, payload, blueprintConfig }); @@ -128,6 +129,7 @@ const durableHandler: DurableExecutionHandler = asyn session_id: handle.sessionId, started_at: new Date().toISOString(), }); + // Note: strategy_type is an additive field (not present in pre-strategy events) await emitTaskEvent(taskId, 'session_started', { session_id: handle.sessionId, strategy_type: handle.strategyType, @@ -139,7 +141,7 @@ const durableHandler: DurableExecutionHandler = asyn strategy_type: handle.strategyType, }); - return handle.sessionId; + return handle; } catch (err) { await failTask(taskId, TaskStatus.HYDRATING, `Session start failed: ${String(err)}`, task.user_id, true); throw err; @@ -147,16 +149,41 @@ const durableHandler: DurableExecutionHandler = asyn }); // Step 5: Wait for agent to finish - // NOTE: Polls DynamoDB every 30s rather than re-invoking the AgentCore session. - // The agent writes terminal status directly to DDB. If the agent crashes without - // writing a terminal status, we detect it via the HYDRATING early-exit check - // (MAX_NON_RUNNING_POLLS ~5min); otherwise the loop runs up to MAX_POLL_ATTEMPTS - // (~8.5h). A future improvement could add AgentCore session status checks for - // faster crash detection. + // Polls DynamoDB every 30s. For ECS compute, also polls the ECS task to detect + // container crashes that don't write terminal status to DDB. For AgentCore, + // crash detection relies on the HYDRATING early-exit (MAX_NON_RUNNING_POLLS ~5min). const finalPollState = await context.waitForCondition( 'await-agent-completion', async (state) => { - return pollTaskStatus(taskId, state); + const ddbState = await pollTaskStatus(taskId, state); + + // ECS compute-level crash detection: if DDB is not terminal, check ECS task status + if ( + ddbState.lastStatus && + !TERMINAL_STATUSES.includes(ddbState.lastStatus) && + blueprintConfig.compute_type === 'ecs' + ) { + try { + const strategy = resolveComputeStrategy(blueprintConfig); + const ecsStatus = await strategy.pollSession(sessionHandle); + if (ecsStatus.status === 'failed') { + const errorMsg = 'error' in ecsStatus ? ecsStatus.error : 'ECS task failed'; + logger.warn('ECS task failed before DDB terminal write', { + task_id: taskId, + error: errorMsg, + }); + await failTask(taskId, ddbState.lastStatus, `ECS container failed: ${errorMsg}`, task.user_id, true); + return { attempts: ddbState.attempts, lastStatus: TaskStatus.FAILED }; + } + } catch (err) { + logger.warn('ECS pollSession check failed (non-fatal)', { + task_id: taskId, + error: err instanceof Error ? err.message : String(err), + }); + } + } + + return ddbState; }, { initialState: { attempts: 0 }, diff --git a/cdk/src/handlers/shared/compute-strategy.ts b/cdk/src/handlers/shared/compute-strategy.ts index 5bf2093..cc93993 100644 --- a/cdk/src/handlers/shared/compute-strategy.ts +++ b/cdk/src/handlers/shared/compute-strategy.ts @@ -19,10 +19,11 @@ import type { BlueprintConfig, ComputeType } from './repo-config'; import { AgentCoreComputeStrategy } from './strategies/agentcore-strategy'; +import { EcsComputeStrategy } from './strategies/ecs-strategy'; export interface SessionHandle { readonly sessionId: string; - readonly strategyType: string; + readonly strategyType: ComputeType; readonly metadata: Record; } @@ -32,7 +33,7 @@ export type SessionStatus = | { readonly status: 'failed'; readonly error: string }; export interface ComputeStrategy { - readonly type: string; + readonly type: ComputeType; startSession(input: { taskId: string; payload: Record; @@ -48,7 +49,7 @@ export function resolveComputeStrategy(blueprintConfig: BlueprintConfig): Comput case 'agentcore': return new AgentCoreComputeStrategy(); case 'ecs': - throw new Error("compute_type 'ecs' is not yet implemented"); + return new EcsComputeStrategy(); default: { const _exhaustive: never = computeType; throw new Error(`Unknown compute_type: '${_exhaustive}'`); diff --git a/cdk/src/handlers/shared/strategies/ecs-strategy.ts b/cdk/src/handlers/shared/strategies/ecs-strategy.ts new file mode 100644 index 0000000..d7b32c1 --- /dev/null +++ b/cdk/src/handlers/shared/strategies/ecs-strategy.ts @@ -0,0 +1,179 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { ECSClient, RunTaskCommand, DescribeTasksCommand, StopTaskCommand } from '@aws-sdk/client-ecs'; +import type { ComputeStrategy, SessionHandle, SessionStatus } from '../compute-strategy'; +import { logger } from '../logger'; +import type { BlueprintConfig } from '../repo-config'; + +let sharedClient: ECSClient | undefined; +function getClient(): ECSClient { + if (!sharedClient) { + sharedClient = new ECSClient({}); + } + return sharedClient; +} + +const ECS_CLUSTER_ARN = process.env.ECS_CLUSTER_ARN; +const ECS_TASK_DEFINITION_ARN = process.env.ECS_TASK_DEFINITION_ARN; +const ECS_SUBNETS = process.env.ECS_SUBNETS; +const ECS_SECURITY_GROUP = process.env.ECS_SECURITY_GROUP; +const ECS_CONTAINER_NAME = process.env.ECS_CONTAINER_NAME ?? 'AgentContainer'; + +export class EcsComputeStrategy implements ComputeStrategy { + readonly type = 'ecs'; + + async startSession(input: { + taskId: string; + payload: Record; + blueprintConfig: BlueprintConfig; + }): Promise { + if (!ECS_CLUSTER_ARN || !ECS_TASK_DEFINITION_ARN || !ECS_SUBNETS || !ECS_SECURITY_GROUP) { + throw new Error( + 'ECS compute strategy requires ECS_CLUSTER_ARN, ECS_TASK_DEFINITION_ARN, ECS_SUBNETS, and ECS_SECURITY_GROUP environment variables', + ); + } + + const subnets = ECS_SUBNETS.split(',').map(s => s.trim()).filter(Boolean); + const { taskId, payload, blueprintConfig } = input; + + const containerEnv = [ + { name: 'TASK_ID', value: taskId }, + { name: 'REPO_URL', value: String(payload.repo_url ?? '') }, + ...(payload.prompt ? [{ name: 'TASK_DESCRIPTION', value: String(payload.prompt) }] : []), + ...(payload.issue_number ? [{ name: 'ISSUE_NUMBER', value: String(payload.issue_number) }] : []), + { name: 'MAX_TURNS', value: String(payload.max_turns ?? 100) }, + ...(payload.max_budget_usd !== undefined ? [{ name: 'MAX_BUDGET_USD', value: String(payload.max_budget_usd) }] : []), + ...(blueprintConfig.model_id ? [{ name: 'ANTHROPIC_MODEL', value: blueprintConfig.model_id }] : []), + ...(blueprintConfig.system_prompt_overrides ? [{ name: 'SYSTEM_PROMPT_OVERRIDES', value: blueprintConfig.system_prompt_overrides }] : []), + { name: 'CLAUDE_CODE_USE_BEDROCK', value: '1' }, + ]; + + const command = new RunTaskCommand({ + cluster: ECS_CLUSTER_ARN, + taskDefinition: ECS_TASK_DEFINITION_ARN, + launchType: 'FARGATE', + networkConfiguration: { + awsvpcConfiguration: { + subnets, + securityGroups: [ECS_SECURITY_GROUP], + assignPublicIp: 'DISABLED', + }, + }, + overrides: { + containerOverrides: [{ + name: ECS_CONTAINER_NAME, + environment: containerEnv, + }], + }, + }); + + const result = await getClient().send(command); + + const ecsTask = result.tasks?.[0]; + if (!ecsTask?.taskArn) { + const failures = result.failures?.map(f => `${f.arn}: ${f.reason}`).join('; ') ?? 'unknown'; + throw new Error(`ECS RunTask returned no task: ${failures}`); + } + + logger.info('ECS Fargate task started', { + task_id: taskId, + ecs_task_arn: ecsTask.taskArn, + cluster: ECS_CLUSTER_ARN, + }); + + return { + sessionId: ecsTask.taskArn, + strategyType: this.type, + metadata: { + clusterArn: ECS_CLUSTER_ARN, + taskArn: ecsTask.taskArn, + }, + }; + } + + async pollSession(handle: SessionHandle): Promise { + const clusterArn = handle.metadata.clusterArn as string; + const taskArn = handle.metadata.taskArn as string; + + if (!clusterArn || !taskArn) { + return { status: 'failed', error: 'Missing clusterArn or taskArn in session handle' }; + } + + const result = await getClient().send(new DescribeTasksCommand({ + cluster: clusterArn, + tasks: [taskArn], + })); + + const ecsTask = result.tasks?.[0]; + if (!ecsTask) { + return { status: 'failed', error: `ECS task ${taskArn} not found` }; + } + + const lastStatus = ecsTask.lastStatus; + + if (lastStatus === 'STOPPED') { + const container = ecsTask.containers?.[0]; + const exitCode = container?.exitCode; + const stoppedReason = ecsTask.stoppedReason ?? container?.reason ?? 'unknown'; + + if (exitCode === 0) { + return { status: 'completed' }; + } + if (exitCode === undefined || exitCode === null) { + return { status: 'failed', error: `Task stopped: ${stoppedReason}` }; + } + return { status: 'failed', error: `Exit code ${exitCode}: ${stoppedReason}` }; + } + + // PENDING, PROVISIONING, ACTIVATING, RUNNING, DEACTIVATING, DEPROVISIONING + return { status: 'running' }; + } + + async stopSession(handle: SessionHandle): Promise { + const clusterArn = handle.metadata.clusterArn as string; + const taskArn = handle.metadata.taskArn as string; + + if (!clusterArn || !taskArn) { + logger.warn('No clusterArn/taskArn in session handle, cannot stop ECS task', { + session_id: handle.sessionId, + }); + return; + } + + try { + await getClient().send(new StopTaskCommand({ + cluster: clusterArn, + task: taskArn, + reason: 'Stopped by orchestrator', + })); + logger.info('ECS task stopped', { task_arn: taskArn }); + } catch (err) { + const errName = err instanceof Error ? (err as Error & { name?: string }).name : undefined; + if (errName === 'InvalidParameterException' || errName === 'ResourceNotFoundException') { + logger.info('ECS task already stopped or not found', { task_arn: taskArn }); + } else { + logger.error('Failed to stop ECS task', { + task_arn: taskArn, + error: err instanceof Error ? err.message : String(err), + }); + } + } + } +} diff --git a/cdk/src/stacks/agent.ts b/cdk/src/stacks/agent.ts index afb81f5..9378423 100644 --- a/cdk/src/stacks/agent.ts +++ b/cdk/src/stacks/agent.ts @@ -23,6 +23,7 @@ import * as bedrock from '@aws-cdk/aws-bedrock-alpha'; import * as agentcoremixins from '@aws-cdk/mixins-preview/aws-bedrockagentcore'; import { Stack, StackProps, RemovalPolicy, CfnOutput, CfnResource } from 'aws-cdk-lib'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; import * as iam from 'aws-cdk-lib/aws-iam'; import * as logs from 'aws-cdk-lib/aws-logs'; import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager'; @@ -34,6 +35,7 @@ import { AgentVpc } from '../constructs/agent-vpc'; import { Blueprint } from '../constructs/blueprint'; import { ConcurrencyReconciler } from '../constructs/concurrency-reconciler'; import { DnsFirewall } from '../constructs/dns-firewall'; +import { EcsAgentCluster } from '../constructs/ecs-agent-cluster'; import { RepoTable } from '../constructs/repo-table'; import { TaskApi } from '../constructs/task-api'; import { TaskDashboard } from '../constructs/task-dashboard'; @@ -273,6 +275,29 @@ export class AgentStack extends Stack { inputGuardrail.createVersion('Initial version'); + // --- ECS Fargate compute backend (conditional) --- + // ECS infrastructure is opt-in via the ABCA_ENABLE_ECS env flag. + // Repos can then use compute_type: 'ecs' in their blueprint config. + const needsEcs = process.env.ABCA_ENABLE_ECS === 'true'; + + let ecsCluster: EcsAgentCluster | undefined; + if (needsEcs) { + const agentImageAsset = new ecr_assets.DockerImageAsset(this, 'AgentImage', { + directory: runnerPath, + platform: ecr_assets.Platform.LINUX_ARM64, + }); + + ecsCluster = new EcsAgentCluster(this, 'EcsAgentCluster', { + vpc: agentVpc.vpc, + agentImageAsset, + taskTable: taskTable.table, + taskEventsTable: taskEventsTable.table, + userConcurrencyTable: userConcurrencyTable.table, + githubTokenSecret, + memoryId: agentMemory.memory.memoryId, + }); + } + // --- Task Orchestrator (durable Lambda function) --- const orchestrator = new TaskOrchestrator(this, 'TaskOrchestrator', { taskTable: taskTable.table, @@ -284,6 +309,15 @@ export class AgentStack extends Stack { memoryId: agentMemory.memory.memoryId, guardrailId: inputGuardrail.guardrailId, guardrailVersion: inputGuardrail.guardrailVersion, + ...(ecsCluster && { + ecsClusterArn: ecsCluster.cluster.clusterArn, + ecsTaskDefinitionArn: ecsCluster.taskDefinition.taskDefinitionArn, + ecsSubnets: agentVpc.vpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }).subnetIds.join(','), + ecsSecurityGroup: ecsCluster.securityGroup.securityGroupId, + ecsContainerName: ecsCluster.containerName, + ecsTaskRoleArn: ecsCluster.taskRoleArn, + ecsExecutionRoleArn: ecsCluster.executionRoleArn, + }), }); // Grant the orchestrator Lambda read+write access to memory diff --git a/cdk/test/constructs/ecs-agent-cluster.test.ts b/cdk/test/constructs/ecs-agent-cluster.test.ts new file mode 100644 index 0000000..151253e --- /dev/null +++ b/cdk/test/constructs/ecs-agent-cluster.test.ts @@ -0,0 +1,198 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import * as path from 'path'; +import { App, Stack } from 'aws-cdk-lib'; +import { Template, Match } from 'aws-cdk-lib/assertions'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets'; +import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager'; +import { EcsAgentCluster } from '../../src/constructs/ecs-agent-cluster'; + +function createStack(overrides?: { memoryId?: string }): { stack: Stack; template: Template } { + const app = new App(); + const stack = new Stack(app, 'TestStack'); + + const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2 }); + + const agentImageAsset = new ecr_assets.DockerImageAsset(stack, 'AgentImage', { + directory: path.join(__dirname, '..', '..', '..', 'agent'), + }); + + const taskTable = new dynamodb.Table(stack, 'TaskTable', { + partitionKey: { name: 'task_id', type: dynamodb.AttributeType.STRING }, + }); + + const taskEventsTable = new dynamodb.Table(stack, 'TaskEventsTable', { + partitionKey: { name: 'task_id', type: dynamodb.AttributeType.STRING }, + sortKey: { name: 'event_id', type: dynamodb.AttributeType.STRING }, + }); + + const userConcurrencyTable = new dynamodb.Table(stack, 'UserConcurrencyTable', { + partitionKey: { name: 'user_id', type: dynamodb.AttributeType.STRING }, + }); + + const githubTokenSecret = new secretsmanager.Secret(stack, 'GitHubTokenSecret'); + + new EcsAgentCluster(stack, 'EcsAgentCluster', { + vpc, + agentImageAsset, + taskTable, + taskEventsTable, + userConcurrencyTable, + githubTokenSecret, + memoryId: overrides?.memoryId, + }); + + const template = Template.fromStack(stack); + return { stack, template }; +} + +describe('EcsAgentCluster construct', () => { + test('creates an ECS Cluster with container insights', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::ECS::Cluster', { + ClusterSettings: Match.arrayWith([ + Match.objectLike({ + Name: 'containerInsights', + Value: 'enabled', + }), + ]), + }); + }); + + test('creates a Fargate task definition with 2 vCPU and 4 GB', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::ECS::TaskDefinition', { + Cpu: '2048', + Memory: '4096', + RequiresCompatibilities: ['FARGATE'], + RuntimePlatform: { + CpuArchitecture: 'ARM64', + OperatingSystemFamily: 'LINUX', + }, + }); + }); + + test('creates a security group with TCP 443 egress only', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::EC2::SecurityGroup', { + GroupDescription: 'ECS Agent Tasks - egress TCP 443 only', + SecurityGroupEgress: Match.arrayWith([ + Match.objectLike({ + IpProtocol: 'tcp', + FromPort: 443, + ToPort: 443, + CidrIp: '0.0.0.0/0', + }), + ]), + }); + }); + + test('creates a CloudWatch log group with 3-month retention', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::Logs::LogGroup', { + LogGroupName: '/ecs/abca-agent-tasks', + RetentionInDays: 90, + }); + }); + + test('task role has DynamoDB read/write permissions', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: { + Statement: Match.arrayWith([ + Match.objectLike({ + Action: Match.arrayWith([ + 'dynamodb:PutItem', + 'dynamodb:UpdateItem', + ]), + Effect: 'Allow', + }), + ]), + }, + }); + }); + + test('task role has Secrets Manager read permission', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: { + Statement: Match.arrayWith([ + Match.objectLike({ + Action: Match.arrayWith([ + 'secretsmanager:GetSecretValue', + ]), + Effect: 'Allow', + }), + ]), + }, + }); + }); + + test('task role has Bedrock InvokeModel permissions', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: { + Statement: Match.arrayWith([ + Match.objectLike({ + Action: [ + 'bedrock:InvokeModel', + 'bedrock:InvokeModelWithResponseStream', + ], + Effect: 'Allow', + Resource: '*', + }), + ]), + }, + }); + }); + + test('container has required environment variables', () => { + const { template } = createStack(); + template.hasResourceProperties('AWS::ECS::TaskDefinition', { + ContainerDefinitions: Match.arrayWith([ + Match.objectLike({ + Name: 'AgentContainer', + Environment: Match.arrayWith([ + Match.objectLike({ Name: 'CLAUDE_CODE_USE_BEDROCK', Value: '1' }), + Match.objectLike({ Name: 'TASK_TABLE_NAME', Value: Match.anyValue() }), + Match.objectLike({ Name: 'TASK_EVENTS_TABLE_NAME', Value: Match.anyValue() }), + Match.objectLike({ Name: 'USER_CONCURRENCY_TABLE_NAME', Value: Match.anyValue() }), + Match.objectLike({ Name: 'LOG_GROUP_NAME', Value: Match.anyValue() }), + ]), + }), + ]), + }); + }); + + test('includes MEMORY_ID in container env when provided', () => { + const { template } = createStack({ memoryId: 'mem-test-123' }); + template.hasResourceProperties('AWS::ECS::TaskDefinition', { + ContainerDefinitions: Match.arrayWith([ + Match.objectLike({ + Environment: Match.arrayWith([ + Match.objectLike({ Name: 'MEMORY_ID', Value: 'mem-test-123' }), + ]), + }), + ]), + }); + }); +}); diff --git a/cdk/test/constructs/task-orchestrator.test.ts b/cdk/test/constructs/task-orchestrator.test.ts index 0b2c2ef..b7008ba 100644 --- a/cdk/test/constructs/task-orchestrator.test.ts +++ b/cdk/test/constructs/task-orchestrator.test.ts @@ -32,6 +32,13 @@ interface StackOverrides { memoryId?: string; guardrailId?: string; guardrailVersion?: string; + ecsClusterArn?: string; + ecsTaskDefinitionArn?: string; + ecsSubnets?: string; + ecsSecurityGroup?: string; + ecsContainerName?: string; + ecsTaskRoleArn?: string; + ecsExecutionRoleArn?: string; } function createStack(overrides?: StackOverrides): { stack: Stack; template: Template } { @@ -57,7 +64,22 @@ function createStack(overrides?: StackOverrides): { stack: Stack; template: Temp }) : undefined; - const { includeRepoTable: _, additionalRuntimeArns, additionalSecretArns, memoryId, guardrailId, guardrailVersion, ...rest } = overrides ?? {}; + const { + includeRepoTable: _, + additionalRuntimeArns, + additionalSecretArns, + memoryId, + guardrailId, + guardrailVersion, + ecsClusterArn, + ecsTaskDefinitionArn, + ecsSubnets, + ecsSecurityGroup, + ecsContainerName, + ecsTaskRoleArn, + ecsExecutionRoleArn, + ...rest + } = overrides ?? {}; new TaskOrchestrator(stack, 'TaskOrchestrator', { taskTable, @@ -70,6 +92,13 @@ function createStack(overrides?: StackOverrides): { stack: Stack; template: Temp ...(memoryId && { memoryId }), ...(guardrailId && { guardrailId }), ...(guardrailVersion && { guardrailVersion }), + ...(ecsClusterArn && { ecsClusterArn }), + ...(ecsTaskDefinitionArn && { ecsTaskDefinitionArn }), + ...(ecsSubnets && { ecsSubnets }), + ...(ecsSecurityGroup && { ecsSecurityGroup }), + ...(ecsContainerName && { ecsContainerName }), + ...(ecsTaskRoleArn && { ecsTaskRoleArn }), + ...(ecsExecutionRoleArn && { ecsExecutionRoleArn }), ...rest, }); @@ -415,4 +444,107 @@ describe('TaskOrchestrator construct', () => { 'guardrailId is required when guardrailVersion is provided', ); }); + + describe('ECS compute strategy', () => { + const ecsOverrides = { + ecsClusterArn: 'arn:aws:ecs:us-east-1:123456789012:cluster/agent-cluster', + ecsTaskDefinitionArn: 'arn:aws:ecs:us-east-1:123456789012:task-definition/agent:1', + ecsSubnets: 'subnet-aaa,subnet-bbb', + ecsSecurityGroup: 'sg-12345', + ecsContainerName: 'AgentContainer', + ecsTaskRoleArn: 'arn:aws:iam::123456789012:role/TaskRole', + ecsExecutionRoleArn: 'arn:aws:iam::123456789012:role/ExecutionRole', + }; + + test('includes ECS env vars when ECS props are provided', () => { + const { template } = createStack(ecsOverrides); + template.hasResourceProperties('AWS::Lambda::Function', { + Environment: { + Variables: Match.objectLike({ + ECS_CLUSTER_ARN: 'arn:aws:ecs:us-east-1:123456789012:cluster/agent-cluster', + ECS_TASK_DEFINITION_ARN: 'arn:aws:ecs:us-east-1:123456789012:task-definition/agent:1', + ECS_SUBNETS: 'subnet-aaa,subnet-bbb', + ECS_SECURITY_GROUP: 'sg-12345', + ECS_CONTAINER_NAME: 'AgentContainer', + }), + }, + }); + }); + + test('does not include ECS env vars when ECS props are omitted', () => { + const { template } = createStack(); + const functions = template.findResources('AWS::Lambda::Function'); + for (const [, fn] of Object.entries(functions)) { + const envVars = (fn as any).Properties.Environment?.Variables ?? {}; + expect(envVars).not.toHaveProperty('ECS_CLUSTER_ARN'); + expect(envVars).not.toHaveProperty('ECS_TASK_DEFINITION_ARN'); + } + }); + + test('grants ECS RunTask/DescribeTasks/StopTask permissions when ECS props are provided', () => { + const { template } = createStack(ecsOverrides); + template.hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: { + Statement: Match.arrayWith([ + Match.objectLike({ + Action: [ + 'ecs:RunTask', + 'ecs:DescribeTasks', + 'ecs:StopTask', + ], + Effect: 'Allow', + Resource: '*', + Condition: { + ArnEquals: { + 'ecs:cluster': 'arn:aws:ecs:us-east-1:123456789012:cluster/agent-cluster', + }, + }, + }), + ]), + }, + }); + }); + + test('grants iam:PassRole scoped to task/execution role ARNs', () => { + const { template } = createStack(ecsOverrides); + template.hasResourceProperties('AWS::IAM::Policy', { + PolicyDocument: { + Statement: Match.arrayWith([ + Match.objectLike({ + Action: 'iam:PassRole', + Effect: 'Allow', + Resource: Match.arrayWith([ + 'arn:aws:iam::123456789012:role/TaskRole', + 'arn:aws:iam::123456789012:role/ExecutionRole', + ]), + Condition: { + StringEquals: { + 'iam:PassedToService': 'ecs-tasks.amazonaws.com', + }, + }, + }), + ]), + }, + }); + }); + + test('throws when only some ECS props are provided', () => { + expect(() => createStack({ + ecsClusterArn: 'arn:aws:ecs:us-east-1:123456789012:cluster/agent-cluster', + })).toThrow('ECS compute strategy requires all of'); + }); + + test('does not grant ECS permissions when ECS props are omitted', () => { + const { template } = createStack(); + const policies = template.findResources('AWS::IAM::Policy'); + for (const [, policy] of Object.entries(policies)) { + const statements = (policy as any).Properties.PolicyDocument.Statement; + for (const stmt of statements) { + if (Array.isArray(stmt.Action)) { + expect(stmt.Action).not.toContain('ecs:RunTask'); + } + } + } + }); + }); }); diff --git a/cdk/test/handlers/shared/compute-strategy.test.ts b/cdk/test/handlers/shared/compute-strategy.test.ts index 92f589c..1fac73d 100644 --- a/cdk/test/handlers/shared/compute-strategy.test.ts +++ b/cdk/test/handlers/shared/compute-strategy.test.ts @@ -23,8 +23,16 @@ jest.mock('@aws-sdk/client-bedrock-agentcore', () => ({ StopRuntimeSessionCommand: jest.fn(), })); +jest.mock('@aws-sdk/client-ecs', () => ({ + ECSClient: jest.fn(() => ({ send: jest.fn() })), + RunTaskCommand: jest.fn(), + DescribeTasksCommand: jest.fn(), + StopTaskCommand: jest.fn(), +})); + import { resolveComputeStrategy } from '../../../src/handlers/shared/compute-strategy'; import { AgentCoreComputeStrategy } from '../../../src/handlers/shared/strategies/agentcore-strategy'; +import { EcsComputeStrategy } from '../../../src/handlers/shared/strategies/ecs-strategy'; describe('resolveComputeStrategy', () => { test('returns AgentCoreComputeStrategy for compute_type agentcore', () => { @@ -36,12 +44,12 @@ describe('resolveComputeStrategy', () => { expect(strategy.type).toBe('agentcore'); }); - test("throws 'not yet implemented' for compute_type ecs", () => { - expect(() => - resolveComputeStrategy({ - compute_type: 'ecs', - runtime_arn: 'arn:test', - }), - ).toThrow("compute_type 'ecs' is not yet implemented"); + test('returns EcsComputeStrategy for compute_type ecs', () => { + const strategy = resolveComputeStrategy({ + compute_type: 'ecs', + runtime_arn: 'arn:test', + }); + expect(strategy).toBeInstanceOf(EcsComputeStrategy); + expect(strategy.type).toBe('ecs'); }); }); diff --git a/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts b/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts new file mode 100644 index 0000000..5b36bec --- /dev/null +++ b/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts @@ -0,0 +1,319 @@ +/** + * MIT No Attribution + * + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const CLUSTER_ARN = 'arn:aws:ecs:us-east-1:123456789012:cluster/test-cluster'; +const TASK_DEF_ARN = 'arn:aws:ecs:us-east-1:123456789012:task-definition/agent:1'; +const TASK_ARN = 'arn:aws:ecs:us-east-1:123456789012:task/test-cluster/abc123'; + +// Set env vars BEFORE import — EcsComputeStrategy reads them as module-level constants +process.env.ECS_CLUSTER_ARN = CLUSTER_ARN; +process.env.ECS_TASK_DEFINITION_ARN = TASK_DEF_ARN; +process.env.ECS_SUBNETS = 'subnet-aaa,subnet-bbb'; +process.env.ECS_SECURITY_GROUP = 'sg-12345'; +process.env.ECS_CONTAINER_NAME = 'AgentContainer'; + +const mockSend = jest.fn(); +jest.mock('@aws-sdk/client-ecs', () => ({ + ECSClient: jest.fn(() => ({ send: mockSend })), + RunTaskCommand: jest.fn((input: unknown) => ({ _type: 'RunTask', input })), + DescribeTasksCommand: jest.fn((input: unknown) => ({ _type: 'DescribeTasks', input })), + StopTaskCommand: jest.fn((input: unknown) => ({ _type: 'StopTask', input })), +})); + +import { EcsComputeStrategy } from '../../../../src/handlers/shared/strategies/ecs-strategy'; + +beforeEach(() => { + jest.clearAllMocks(); +}); + +describe('EcsComputeStrategy', () => { + test('type is ecs', () => { + const strategy = new EcsComputeStrategy(); + expect(strategy.type).toBe('ecs'); + }); + + describe('startSession', () => { + test('sends RunTaskCommand with correct params and returns SessionHandle', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ taskArn: TASK_ARN }], + }); + + const strategy = new EcsComputeStrategy(); + const handle = await strategy.startSession({ + taskId: 'TASK001', + payload: { repo_url: 'org/repo', prompt: 'Fix the bug', issue_number: 42, max_turns: 50 }, + blueprintConfig: { compute_type: 'ecs', runtime_arn: '' }, + }); + + expect(handle.sessionId).toBe(TASK_ARN); + expect(handle.strategyType).toBe('ecs'); + expect(handle.metadata.clusterArn).toBe(CLUSTER_ARN); + expect(handle.metadata.taskArn).toBe(TASK_ARN); + expect(mockSend).toHaveBeenCalledTimes(1); + + const call = mockSend.mock.calls[0][0]; + expect(call.input.cluster).toBe(CLUSTER_ARN); + expect(call.input.taskDefinition).toBe(TASK_DEF_ARN); + expect(call.input.launchType).toBe('FARGATE'); + expect(call.input.networkConfiguration.awsvpcConfiguration.subnets).toEqual(['subnet-aaa', 'subnet-bbb']); + expect(call.input.networkConfiguration.awsvpcConfiguration.securityGroups).toEqual(['sg-12345']); + expect(call.input.networkConfiguration.awsvpcConfiguration.assignPublicIp).toBe('DISABLED'); + + const envVars = call.input.overrides.containerOverrides[0].environment; + expect(envVars).toEqual(expect.arrayContaining([ + { name: 'TASK_ID', value: 'TASK001' }, + { name: 'REPO_URL', value: 'org/repo' }, + { name: 'TASK_DESCRIPTION', value: 'Fix the bug' }, + { name: 'ISSUE_NUMBER', value: '42' }, + { name: 'MAX_TURNS', value: '50' }, + { name: 'CLAUDE_CODE_USE_BEDROCK', value: '1' }, + ])); + }); + + test('throws when RunTask returns no task', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [], + failures: [{ arn: 'arn:test', reason: 'RESOURCE:ENI' }], + }); + + const strategy = new EcsComputeStrategy(); + await expect( + strategy.startSession({ + taskId: 'TASK001', + payload: { repo_url: 'org/repo' }, + blueprintConfig: { compute_type: 'ecs', runtime_arn: '' }, + }), + ).rejects.toThrow('ECS RunTask returned no task: arn:test: RESOURCE:ENI'); + }); + + test('includes model_id and system_prompt_overrides from blueprintConfig', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ taskArn: TASK_ARN }], + }); + + const strategy = new EcsComputeStrategy(); + await strategy.startSession({ + taskId: 'TASK001', + payload: { repo_url: 'org/repo' }, + blueprintConfig: { + compute_type: 'ecs', + runtime_arn: '', + model_id: 'anthropic.claude-sonnet-4-6', + system_prompt_overrides: 'Be concise', + }, + }); + + const call = mockSend.mock.calls[0][0]; + const envVars = call.input.overrides.containerOverrides[0].environment; + expect(envVars).toEqual(expect.arrayContaining([ + { name: 'ANTHROPIC_MODEL', value: 'anthropic.claude-sonnet-4-6' }, + { name: 'SYSTEM_PROMPT_OVERRIDES', value: 'Be concise' }, + ])); + }); + }); + + describe('pollSession', () => { + const makeHandle = () => ({ + sessionId: TASK_ARN, + strategyType: 'ecs' as const, + metadata: { clusterArn: CLUSTER_ARN, taskArn: TASK_ARN }, + }); + + test('returns running for RUNNING status', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ lastStatus: 'RUNNING' }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ status: 'running' }); + }); + + test('returns running for PENDING status', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ lastStatus: 'PENDING' }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ status: 'running' }); + }); + + test('returns completed for STOPPED with exit code 0', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ + lastStatus: 'STOPPED', + containers: [{ exitCode: 0 }], + }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ status: 'completed' }); + }); + + test('returns failed for STOPPED with undefined exit code (container never started)', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ + lastStatus: 'STOPPED', + stoppedReason: 'CannotPullContainerError', + containers: [{}], + }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ + status: 'failed', + error: 'Task stopped: CannotPullContainerError', + }); + }); + + test('returns failed for STOPPED with no containers', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ + lastStatus: 'STOPPED', + stoppedReason: 'EssentialContainerExited', + containers: [], + }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ + status: 'failed', + error: 'Task stopped: EssentialContainerExited', + }); + }); + + test('returns failed for STOPPED with non-zero exit code', async () => { + mockSend.mockResolvedValueOnce({ + tasks: [{ + lastStatus: 'STOPPED', + stoppedReason: 'OutOfMemoryError', + containers: [{ exitCode: 137 }], + }], + }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ + status: 'failed', + error: 'Exit code 137: OutOfMemoryError', + }); + }); + + test('returns failed when task not found', async () => { + mockSend.mockResolvedValueOnce({ tasks: [] }); + + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession(makeHandle()); + expect(result).toEqual({ + status: 'failed', + error: `ECS task ${TASK_ARN} not found`, + }); + }); + + test('returns failed when metadata is missing', async () => { + const strategy = new EcsComputeStrategy(); + const result = await strategy.pollSession({ + sessionId: 'test', + strategyType: 'ecs', + metadata: {}, + }); + expect(result).toEqual({ + status: 'failed', + error: 'Missing clusterArn or taskArn in session handle', + }); + }); + }); + + describe('stopSession', () => { + test('sends StopTaskCommand', async () => { + mockSend.mockResolvedValueOnce({}); + + const strategy = new EcsComputeStrategy(); + await strategy.stopSession({ + sessionId: TASK_ARN, + strategyType: 'ecs', + metadata: { clusterArn: CLUSTER_ARN, taskArn: TASK_ARN }, + }); + + expect(mockSend).toHaveBeenCalledTimes(1); + const call = mockSend.mock.calls[0][0]; + expect(call.input.cluster).toBe(CLUSTER_ARN); + expect(call.input.task).toBe(TASK_ARN); + expect(call.input.reason).toBe('Stopped by orchestrator'); + }); + + test('handles InvalidParameterException gracefully', async () => { + const err = new Error('Invalid'); + err.name = 'InvalidParameterException'; + mockSend.mockRejectedValueOnce(err); + + const strategy = new EcsComputeStrategy(); + await expect( + strategy.stopSession({ + sessionId: TASK_ARN, + strategyType: 'ecs', + metadata: { clusterArn: CLUSTER_ARN, taskArn: TASK_ARN }, + }), + ).resolves.toBeUndefined(); + }); + + test('handles ResourceNotFoundException gracefully', async () => { + const err = new Error('Not found'); + err.name = 'ResourceNotFoundException'; + mockSend.mockRejectedValueOnce(err); + + const strategy = new EcsComputeStrategy(); + await expect( + strategy.stopSession({ + sessionId: TASK_ARN, + strategyType: 'ecs', + metadata: { clusterArn: CLUSTER_ARN, taskArn: TASK_ARN }, + }), + ).resolves.toBeUndefined(); + }); + + test('skips stop when metadata is missing', async () => { + const strategy = new EcsComputeStrategy(); + await strategy.stopSession({ + sessionId: 'test', + strategyType: 'ecs', + metadata: {}, + }); + + expect(mockSend).not.toHaveBeenCalled(); + }); + + test('logs error for unknown errors (best-effort)', async () => { + mockSend.mockRejectedValueOnce(new Error('Network error')); + + const strategy = new EcsComputeStrategy(); + await expect( + strategy.stopSession({ + sessionId: TASK_ARN, + strategyType: 'ecs', + metadata: { clusterArn: CLUSTER_ARN, taskArn: TASK_ARN }, + }), + ).resolves.toBeUndefined(); + }); + }); +}); diff --git a/local-docs/2026_RFP_Website-Design.pdf b/local-docs/2026_RFP_Website-Design.pdf new file mode 100644 index 0000000000000000000000000000000000000000..03febbc2f939434eba63d0b91a02ef486be2bc35 GIT binary patch literal 172390 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%0DIMv)6RBl?g@s;o4^*gIX|Lf#X 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 Date: Thu, 9 Apr 2026 09:56:06 -0700 Subject: [PATCH 09/12] fix: address Copilot PR review comments on PR #8 - Keep gitleaks/osv-scanner enabled in CI (only disable trivy/grype/semgrep) - Type ComputeStrategy.type and SessionHandle.strategyType as ComputeType - Trim/filter ECS_SUBNETS to handle whitespace and trailing commas - Handle undefined exit code in ECS pollSession (container never started) - Scope iam:PassRole to specific ECS task/execution role ARNs - Validate all-or-nothing ECS props in TaskOrchestrator constructor - Remove dead hasEcsBlueprint detection; document env-flag driven approach - Add comment noting strategy_type as additive event field --- cdk/src/constructs/task-orchestrator.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cdk/src/constructs/task-orchestrator.ts b/cdk/src/constructs/task-orchestrator.ts index 22634f7..c58c41c 100644 --- a/cdk/src/constructs/task-orchestrator.ts +++ b/cdk/src/constructs/task-orchestrator.ts @@ -187,6 +187,13 @@ export class TaskOrchestrator extends Construct { const handlersDir = path.join(__dirname, '..', 'handlers'); const maxConcurrent = props.maxConcurrentTasksPerUser ?? 3; + // Validate ECS props are all-or-nothing + const ecsProps = [props.ecsClusterArn, props.ecsTaskDefinitionArn, props.ecsSubnets, props.ecsSecurityGroup, props.ecsContainerName]; + const ecsPropsProvided = ecsProps.filter(p => p !== undefined); + if (ecsPropsProvided.length > 0 && ecsPropsProvided.length < ecsProps.length) { + throw new Error('ECS compute strategy requires all of: ecsClusterArn, ecsTaskDefinitionArn, ecsSubnets, ecsSecurityGroup, ecsContainerName'); + } + this.fn = new lambda.NodejsFunction(this, 'OrchestratorFn', { entry: path.join(handlersDir, 'orchestrate-task.ts'), handler: 'handler', From eb0bfa9e4bab1a829f4c1d93a0c944484ee8f6b0 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Thu, 9 Apr 2026 13:42:39 -0700 Subject: [PATCH 10/12] fix: remove duplicate ECS validation block after rebase --- cdk/src/constructs/task-orchestrator.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cdk/src/constructs/task-orchestrator.ts b/cdk/src/constructs/task-orchestrator.ts index c58c41c..22634f7 100644 --- a/cdk/src/constructs/task-orchestrator.ts +++ b/cdk/src/constructs/task-orchestrator.ts @@ -187,13 +187,6 @@ export class TaskOrchestrator extends Construct { const handlersDir = path.join(__dirname, '..', 'handlers'); const maxConcurrent = props.maxConcurrentTasksPerUser ?? 3; - // Validate ECS props are all-or-nothing - const ecsProps = [props.ecsClusterArn, props.ecsTaskDefinitionArn, props.ecsSubnets, props.ecsSecurityGroup, props.ecsContainerName]; - const ecsPropsProvided = ecsProps.filter(p => p !== undefined); - if (ecsPropsProvided.length > 0 && ecsPropsProvided.length < ecsProps.length) { - throw new Error('ECS compute strategy requires all of: ecsClusterArn, ecsTaskDefinitionArn, ecsSubnets, ecsSecurityGroup, ecsContainerName'); - } - this.fn = new lambda.NodejsFunction(this, 'OrchestratorFn', { entry: path.join(handlersDir, 'orchestrate-task.ts'), handler: 'handler', From 5ec46fe18b447480bedaa85a1005c00ea9a01556 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Thu, 9 Apr 2026 14:22:06 -0700 Subject: [PATCH 11/12] fix: remove local-docs from repo and add to .gitignore --- .gitignore | 1 + local-docs/2026_RFP_Website-Design.pdf | Bin 172390 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 local-docs/2026_RFP_Website-Design.pdf diff --git a/.gitignore b/.gitignore index 2d6c245..4c18cdf 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ junit.xml .cdk.staging/ .parcel-cache/ !/.github/workflows/docs.yml +local-docs/ diff --git a/local-docs/2026_RFP_Website-Design.pdf b/local-docs/2026_RFP_Website-Design.pdf deleted file mode 100644 index 03febbc2f939434eba63d0b91a02ef486be2bc35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172390 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%0DIMv)6RBl?g@s;o4^*gIX|Lf#X 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 Date: Thu, 9 Apr 2026 15:39:32 -0700 Subject: [PATCH 12/12] fix(ecs): override container command to run agent in batch mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ECS container's default CMD starts uvicorn server:app which waits for HTTP POST to /invocations — but in standalone ECS nobody sends that request, leaving the agent idle. Override the container command to invoke entrypoint.run_task() directly with the full orchestrator payload via AGENT_PAYLOAD env var. Also add GITHUB_TOKEN_SECRET_ARN to the ECS task definition base environment. --- cdk/src/constructs/ecs-agent-cluster.ts | 1 + .../shared/strategies/ecs-strategy.ts | 47 +++++++++++++++++++ .../shared/strategies/ecs-strategy.test.ts | 14 +++++- 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/cdk/src/constructs/ecs-agent-cluster.ts b/cdk/src/constructs/ecs-agent-cluster.ts index c7867c3..44387a3 100644 --- a/cdk/src/constructs/ecs-agent-cluster.ts +++ b/cdk/src/constructs/ecs-agent-cluster.ts @@ -104,6 +104,7 @@ export class EcsAgentCluster extends Construct { TASK_EVENTS_TABLE_NAME: props.taskEventsTable.tableName, USER_CONCURRENCY_TABLE_NAME: props.userConcurrencyTable.tableName, LOG_GROUP_NAME: logGroup.logGroupName, + GITHUB_TOKEN_SECRET_ARN: props.githubTokenSecret.secretArn, ...(props.memoryId && { MEMORY_ID: props.memoryId }), }, }); diff --git a/cdk/src/handlers/shared/strategies/ecs-strategy.ts b/cdk/src/handlers/shared/strategies/ecs-strategy.ts index d7b32c1..76a974d 100644 --- a/cdk/src/handlers/shared/strategies/ecs-strategy.ts +++ b/cdk/src/handlers/shared/strategies/ecs-strategy.ts @@ -53,6 +53,13 @@ export class EcsComputeStrategy implements ComputeStrategy { const subnets = ECS_SUBNETS.split(',').map(s => s.trim()).filter(Boolean); const { taskId, payload, blueprintConfig } = input; + // The ECS container's default CMD starts the FastAPI server (uvicorn) which + // waits for HTTP POST to /invocations — but in standalone ECS nobody sends + // that request. We override the container command to invoke run_task() + // directly with the full orchestrator payload (including hydrated_context). + // This avoids the server entirely and runs the agent in batch mode. + const payloadJson = JSON.stringify(payload); + const containerEnv = [ { name: 'TASK_ID', value: taskId }, { name: 'REPO_URL', value: String(payload.repo_url ?? '') }, @@ -63,6 +70,45 @@ export class EcsComputeStrategy implements ComputeStrategy { ...(blueprintConfig.model_id ? [{ name: 'ANTHROPIC_MODEL', value: blueprintConfig.model_id }] : []), ...(blueprintConfig.system_prompt_overrides ? [{ name: 'SYSTEM_PROMPT_OVERRIDES', value: blueprintConfig.system_prompt_overrides }] : []), { name: 'CLAUDE_CODE_USE_BEDROCK', value: '1' }, + // Full orchestrator payload as JSON — the Python wrapper reads this to + // call run_task() with all fields including hydrated_context. + { name: 'AGENT_PAYLOAD', value: payloadJson }, + ...(payload.github_token_secret_arn + ? [{ name: 'GITHUB_TOKEN_SECRET_ARN', value: String(payload.github_token_secret_arn) }] + : []), + ...(payload.memory_id ? [{ name: 'MEMORY_ID', value: String(payload.memory_id) }] : []), + ]; + + // Override the container command to run a Python one-liner that: + // 1. Reads the AGENT_PAYLOAD env var (full orchestrator payload JSON) + // 2. Calls entrypoint.run_task() directly with all fields + // 3. Exits with code 0 on success, 1 on failure + // This bypasses the uvicorn server entirely — no HTTP, no OTEL noise. + const bootCommand = [ + 'python', '-c', + 'import json, os, sys; ' + + 'sys.path.insert(0, "/app"); ' + + 'from entrypoint import run_task; ' + + 'p = json.loads(os.environ["AGENT_PAYLOAD"]); ' + + 'r = run_task(' + + 'repo_url=p.get("repo_url",""), ' + + 'task_description=p.get("prompt",""), ' + + 'issue_number=str(p.get("issue_number","")), ' + + 'github_token=p.get("github_token",""), ' + + 'anthropic_model=p.get("model_id",""), ' + + 'max_turns=int(p.get("max_turns",100)), ' + + 'max_budget_usd=p.get("max_budget_usd"), ' + + 'aws_region=os.environ.get("AWS_REGION",""), ' + + 'task_id=p.get("task_id",""), ' + + 'hydrated_context=p.get("hydrated_context"), ' + + 'system_prompt_overrides=p.get("system_prompt_overrides",""), ' + + 'prompt_version=p.get("prompt_version",""), ' + + 'memory_id=p.get("memory_id",""), ' + + 'task_type=p.get("task_type","new_task"), ' + + 'branch_name=p.get("branch_name",""), ' + + 'pr_number=str(p.get("pr_number",""))' + + '); ' + + 'sys.exit(0 if r.get("status")=="success" else 1)', ]; const command = new RunTaskCommand({ @@ -80,6 +126,7 @@ export class EcsComputeStrategy implements ComputeStrategy { containerOverrides: [{ name: ECS_CONTAINER_NAME, environment: containerEnv, + command: bootCommand, }], }, }); diff --git a/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts b/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts index 5b36bec..aa9a70e 100644 --- a/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts +++ b/cdk/test/handlers/shared/strategies/ecs-strategy.test.ts @@ -75,7 +75,8 @@ describe('EcsComputeStrategy', () => { expect(call.input.networkConfiguration.awsvpcConfiguration.securityGroups).toEqual(['sg-12345']); expect(call.input.networkConfiguration.awsvpcConfiguration.assignPublicIp).toBe('DISABLED'); - const envVars = call.input.overrides.containerOverrides[0].environment; + const override = call.input.overrides.containerOverrides[0]; + const envVars = override.environment; expect(envVars).toEqual(expect.arrayContaining([ { name: 'TASK_ID', value: 'TASK001' }, { name: 'REPO_URL', value: 'org/repo' }, @@ -84,6 +85,17 @@ describe('EcsComputeStrategy', () => { { name: 'MAX_TURNS', value: '50' }, { name: 'CLAUDE_CODE_USE_BEDROCK', value: '1' }, ])); + + // AGENT_PAYLOAD contains the full orchestrator payload for direct run_task() invocation + const agentPayload = envVars.find((e: { name: string }) => e.name === 'AGENT_PAYLOAD'); + expect(agentPayload).toBeDefined(); + const parsed = JSON.parse(agentPayload.value); + expect(parsed.repo_url).toBe('org/repo'); + expect(parsed.prompt).toBe('Fix the bug'); + + // Container command override — runs Python directly instead of uvicorn + expect(override.command).toBeDefined(); + expect(override.command[0]).toBe('python'); }); test('throws when RunTask returns no task', async () => {