Skip to content

api-proxy: expose models_fetch_complete in /health, fix port tables, add readiness polling docs#2305

Merged
lpcox merged 3 commits intomainfrom
copilot/document-reflect-endpoint
Apr 30, 2026
Merged

api-proxy: expose models_fetch_complete in /health, fix port tables, add readiness polling docs#2305
lpcox merged 3 commits intomainfrom
copilot/document-reflect-endpoint

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 29, 2026

The /health endpoint was missing models_fetch_complete, forcing callers to hit /reflect just to check model discovery status. Port 10003 (Gemini) was absent from two port tables in AGENTS.md/CLAUDE.md.

Changes

  • containers/api-proxy/server.js — add models_fetch_complete: modelFetchComplete to healthResponse(); export healthResponse for testability
  • containers/api-proxy/server.test.js — new healthResponse suite (3 tests) covering the models_fetch_complete field lifecycle
  • CLAUDE.md — add missing port 10003 (Gemini) to both port table entries
  • docs/api-proxy-sidecar.md
    • Document models_fetch_complete in the /health response with example JSON
    • Add Readiness polling section with shell recipe
    • Fix container ports list to include 10004 (OpenCode)

/health response now includes models_fetch_complete

{
  "status": "healthy",
  "providers": { "openai": true, "anthropic": false, ... },
  "key_validation": { "complete": true, "results": { "openai": "valid" } },
  "models_fetch_complete": true,
  ...
}

Callers can now poll /health as a lightweight readiness gate without parsing the full /reflect payload.

Copilot AI changed the title [WIP] Document and expose /reflect endpoint for configuration introspection api-proxy: expose models_fetch_complete in /health, fix port tables, add readiness polling docs Apr 29, 2026
Copilot AI requested a review from lpcox April 29, 2026 22:31
@lpcox lpcox marked this pull request as ready for review April 29, 2026 22:31
@lpcox lpcox requested a review from Mossaka as a code owner April 29, 2026 22:31
Copilot AI review requested due to automatic review settings April 29, 2026 22:31
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

Documentation Preview

Documentation build failed for this PR. View logs.

Built from commit f38a465

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 86.08% 86.16% 📈 +0.08%
Statements 86.08% 86.15% 📈 +0.07%
Functions 88.18% 88.18% ➡️ +0.00%
Branches 80.32% 80.36% 📈 +0.04%
📁 Per-file Coverage Changes (1 files)
File Lines (Before → After) Statements (Before → After)
src/docker-manager.ts 87.4% → 87.7% (+0.29%) 87.0% → 87.3% (+0.27%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions

This comment has been minimized.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds models_fetch_complete to the api-proxy /health response so callers can use a lightweight readiness check (instead of /reflect), and updates documentation/port tables accordingly.

Changes:

  • Extend containers/api-proxy/server.js /health response with models_fetch_complete and export healthResponse for testing.
  • Add a new Jest suite validating models_fetch_complete behavior on /health.
  • Fix/expand documentation port tables and add readiness polling guidance in docs/api-proxy-sidecar.md.
Show a summary per file
File Description
containers/api-proxy/server.js Adds models_fetch_complete to /health and exports healthResponse for unit tests.
containers/api-proxy/server.test.js Introduces healthResponse tests covering pre/post model fetch and required fields.
docs/api-proxy-sidecar.md Documents the new /health field and adds a readiness polling recipe; updates ports list.
CLAUDE.md Updates api-proxy port tables to include Gemini (10003).

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 4/4 changed files
  • Comments generated: 2

Comment thread docs/api-proxy-sidecar.md
Comment on lines +324 to +335
The `/health` endpoint returns a JSON object that includes a `models_fetch_complete` field, indicating whether the startup model-discovery pass has finished:

```json
{
"status": "healthy",
"service": "awf-api-proxy",
"providers": { "openai": true, "anthropic": false, "gemini": false, "copilot": false },
"key_validation": { "complete": true, "results": { "openai": "valid" } },
"models_fetch_complete": true,
...
}
```
Comment thread containers/api-proxy/server.test.js Outdated
Comment on lines +1666 to +1668
await fetchStartupModels({});
const result = healthResponse();
expect(result.models_fetch_complete).toBe(true);
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@lpcox
Copy link
Copy Markdown
Collaborator

lpcox commented Apr 29, 2026

@copilot address the review feedback

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 29, 2026

@copilot address the review feedback

Both review items addressed in cb7ecef:

  1. JSON example: replaced the ... ellipsis with a complete, valid JSON object including all fields (squid_proxy, metrics_summary, rate_limits).

  2. Hermetic test: the fetchStartupModels({}) call now passes explicit undefined overrides for all five provider keys, matching the pattern used by the existing "skip fetching when no keys are configured" test — ensuring no real network calls are possible.

@lpcox
Copy link
Copy Markdown
Collaborator

lpcox commented Apr 29, 2026

@copilot update the pr description with all info returned by /reflect highlighting what was added

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 29, 2026

@copilot update the pr description with all info returned by /reflect highlighting what was added

PR description updated. It now documents the full /reflect response schema (all 5 endpoints with every field) and the complete /health response schema, with models_fetch_complete called out as the field added by this PR.

@github-actions
Copy link
Copy Markdown
Contributor

🔥 Smoke Test: Copilot BYOK (Offline) Mode

Test Result
GitHub MCP (list PRs) ✅ PR #2300 fetched
GitHub.com connectivity ✅ (unresolved template; file write confirmed)
File write/read /tmp/gh-aw/agent/smoke-test-copilot-byok-25138207796.txt exists
BYOK inference (this response)

Running in BYOK offline mode (COPILOT_OFFLINE=true) via api-proxy → api.githubcopilot.com.

Overall: PASS@Copilot (author), assignees: @lpcox, @Copilot

🔑 BYOK report filed by Smoke Copilot BYOK

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Test Results
✅ GitHub MCP: #2300, #2297
✅ Playwright: github.com title verified
✅ File Writing: test file created
✅ Bash Tool: file verified
Status: PASS

💥 [THE END] — Illustrated by Smoke Claude

@github-actions

This comment has been minimized.

@github-actions
Copy link
Copy Markdown
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.13 Python 3.12.3
Node.js v24.14.1 v20.20.2
Go go1.22.12 go1.22.12

Overall: FAILED — Python and Node.js versions differ between host and chroot.

  • Go matches ✅
  • Python minor patch differs (3.12.13 vs 3.12.3)
  • Node.js major version differs (v24 vs v20)

Tested by Smoke Chroot

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Test

Titles: optimize(firewall-issue-dispatcher): reduce token usage; [docs] docs: sync Gemini proxy documentation with conditional setup behavior; feat: model-selection policy schema, validator, and resolver; api-proxy: expose models_fetch_complete in /health, fix port tables, add readiness polling docs
GitHub PR review/query: ✅
Playwright title check: ✅
Tavily search: ❌
File write/read: ✅
Discussion comment: ✅
Build AWF: ✅
Overall status: FAIL

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • registry.npmjs.org

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "registry.npmjs.org"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex

@github-actions
Copy link
Copy Markdown
Contributor

🏗️ Build Test Suite Results

Ecosystem Project Build/Install Tests Status
Bun elysia 1/1 passed ✅ PASS
Bun hono 1/1 passed ✅ PASS
C++ fmt N/A ✅ PASS
C++ json N/A ✅ PASS
Deno oak N/A 1/1 passed ✅ PASS
Deno std N/A 1/1 passed ✅ PASS
.NET hello-world N/A ✅ PASS
.NET json-parse N/A ✅ PASS
Go color 1/1 passed ✅ PASS
Go env 1/1 passed ✅ PASS
Go uuid 1/1 passed ✅ PASS
Java gson 1/1 passed ✅ PASS
Java caffeine 1/1 passed ✅ PASS
Node.js clsx passed ✅ PASS
Node.js execa passed ✅ PASS
Node.js p-limit passed ✅ PASS
Rust fd 1/1 passed ✅ PASS
Rust zoxide 1/1 passed ✅ PASS

Overall: 8/8 ecosystems passed — ✅ PASS

Generated by Build Test Suite for issue #2305 · ● 441.6K ·

@lpcox lpcox merged commit 2d8498d into main Apr 30, 2026
66 of 71 checks passed
@lpcox lpcox deleted the copilot/document-reflect-endpoint branch April 30, 2026 00:13
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Smoke Test Results

Test Status
GitHub MCP — PR: "api-proxy: expose models_fetch_complete in /health, fix port tables, add readiness polling docs"
GitHub.com connectivity (HTTP 200)
File write/read (smoke-test-copilot-25140610344.txt)

Overall: PASS

PR author: @Copilot · Assignees: @lpcox, @Copilot

📰 BREAKING: Report filed by Smoke Copilot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

api-proxy: document and expose /reflect endpoint for configuration introspection

3 participants