From 5256597fe049dfb531fde8e130f855d946848c50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:56:07 +0000 Subject: [PATCH 1/3] Initial plan From 7d0ca30e7c3689d887be66e538b2e4531ca435fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:59:21 +0000 Subject: [PATCH 2/3] fix: harden api-proxy startup healthcheck timing Agent-Logs-Url: https://github.com/github/gh-aw-firewall/sessions/44091053-b674-4a52-9925-6638b3defeff --- src/docker-manager.test.ts | 7 +++++-- src/docker-manager.ts | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/docker-manager.test.ts b/src/docker-manager.test.ts index 7e3722ab..090dc010 100644 --- a/src/docker-manager.test.ts +++ b/src/docker-manager.test.ts @@ -2363,9 +2363,12 @@ describe('docker-manager', () => { it('should configure healthcheck for api-proxy', () => { const configWithProxy = { ...mockConfig, enableApiProxy: true, openaiApiKey: 'sk-test-key' }; const result = generateDockerCompose(configWithProxy, mockNetworkConfigWithProxy); - const proxy = result.services['api-proxy']; + const proxy = result.services['api-proxy'] as any; expect(proxy.healthcheck).toBeDefined(); - expect((proxy.healthcheck as any).test).toEqual(['CMD', 'curl', '-f', 'http://localhost:10000/health']); + expect(proxy.healthcheck.test).toEqual(['CMD', 'curl', '-f', 'http://localhost:10000/health']); + expect(proxy.healthcheck.timeout).toBe('2s'); + expect(proxy.healthcheck.retries).toBe(10); + expect(proxy.healthcheck.start_period).toBe('10s'); }); it('should drop all capabilities', () => { diff --git a/src/docker-manager.ts b/src/docker-manager.ts index 18c405b8..e60deb22 100644 --- a/src/docker-manager.ts +++ b/src/docker-manager.ts @@ -1773,9 +1773,9 @@ export function generateDockerCompose( healthcheck: { test: ['CMD', 'curl', '-f', `http://localhost:${API_PROXY_HEALTH_PORT}/health`], interval: '1s', - timeout: '1s', - retries: 5, - start_period: '2s', + timeout: '2s', + retries: 10, + start_period: '10s', }, // Security hardening: Drop all capabilities cap_drop: ['ALL'], From d0e87f318b1e203fb8f65eaf1911298180396b34 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:18:07 +0000 Subject: [PATCH 3/3] test: keep api-proxy healthcheck assertions type-safe Agent-Logs-Url: https://github.com/github/gh-aw-firewall/sessions/9a7c100d-699a-4d82-b62e-f1af7fcd53a4 --- src/docker-manager.test.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/docker-manager.test.ts b/src/docker-manager.test.ts index 090dc010..7663f381 100644 --- a/src/docker-manager.test.ts +++ b/src/docker-manager.test.ts @@ -2363,12 +2363,13 @@ describe('docker-manager', () => { it('should configure healthcheck for api-proxy', () => { const configWithProxy = { ...mockConfig, enableApiProxy: true, openaiApiKey: 'sk-test-key' }; const result = generateDockerCompose(configWithProxy, mockNetworkConfigWithProxy); - const proxy = result.services['api-proxy'] as any; + const proxy = result.services['api-proxy']; expect(proxy.healthcheck).toBeDefined(); - expect(proxy.healthcheck.test).toEqual(['CMD', 'curl', '-f', 'http://localhost:10000/health']); - expect(proxy.healthcheck.timeout).toBe('2s'); - expect(proxy.healthcheck.retries).toBe(10); - expect(proxy.healthcheck.start_period).toBe('10s'); + const healthcheck = proxy.healthcheck!; + expect(healthcheck.test).toEqual(['CMD', 'curl', '-f', 'http://localhost:10000/health']); + expect(healthcheck.timeout).toBe('2s'); + expect(healthcheck.retries).toBe(10); + expect(healthcheck.start_period).toBe('10s'); }); it('should drop all capabilities', () => {