Skip to content

fix(continue): generate IDE-facing API endpoints - #4975

Closed
tang-vu wants to merge 2 commits into
Osmantic:public-betafrom
tang-vu:fix/beta-continue-client-endpoint-20260914
Closed

tang-vu wants to merge 2 commits into
Osmantic:public-betafrom
tang-vu:fix/beta-continue-client-endpoint-20260914

Conversation

@tang-vu

@tang-vu tang-vu commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Ready for independent review (2026-09-15). Candidate a7fc21e00a21e824d0405655074ef2ab5414cd14 has a successful GitHub check rollup and no base-branch conflict at this review snapshot. This supersedes earlier draft-status wording only. All validation gaps, migration requirements, live gates and independent human review requirements below remain in force; this is not a merge-ready approval.

The Continue config server currently publishes http://ods-llama-server:8080/v1 to IDE clients outside Docker. A custom base already ending in /v1 also gets a second suffix, and Windows /api/v1 endpoints cannot be represented faithfully. The setup instructions additionally suggest a legacy JSON property in a YAML configuration.

Why this matters

An operator can enable a healthy config server yet receive a configuration their IDE cannot use. This change requires the complete, IDE-reachable CONTINUE_API_BASE in .env, preserves its API path for chat and autocomplete, and documents downloading and merging the generated models into the local Continue YAML file. Docker's internal LLM_API_URL remains owned by container consumers. No ports are exposed by this setting.

The invariant is that both generated apiBase values equal the operator's complete client-facing base, apart from a trailing slash. Missing settings fail with an actionable message; credentials, queries and YAML-breaking characters are rejected before generating this unauthenticated public config. Provider keys belong only in the private IDE config.

Overlap check

Searched open and closed upstream PRs for Continue apiBase, Continue endpoint, and Continue configuration; also inspected the recent 3,000-PR production-file index for extensions/library/services/continue/ and its pre-rename location. #896 fixes bind-mount paths, #563 volume layout, #539 CORS, #943/#1045 config synchronization, and #1032 dependency ordering. #1626 is the repository rename. None fixes the generated IDE-facing endpoint or YAML setup contract. Shared .env metadata is additive and does not change another consumer.

Validation

  • python3 ods/tests/test-continue-client-config.py: 3 tests pass, including loopback/LAN/IPv6, /v1, /api/v1, proxy prefixes, trailing slash, required setup metadata, and rejected invalid bases. The old generator failed the new boundary assertions.
  • Exact shipped nginx:1.27-alpine, digest sha256:65645c7bb6a0661892a8b03b89d0743208a18dd2f3f17a54ef4b76fb8e2f2a10: actual entrypoint generation, /health 200, /config.yaml 200, and both model bases verified. The served file passes @continuedev/config-yaml@1.23.0 schema and semantic validation. Fixture container removed. An initial fixture used a private mode-0700 temporary mount and returned 404; the corrected fixture uses the production directory mode and passes.
  • 35 library manifests pass validation; ShellCheck, scoped pre-commit, and git diff --check pass.
  • make gate reaches the existing root/WSL no-sudo fixture failure (promoted Docker to sudo / invoked raw sudo); it is not reported as green.

Reference: Continue YAML configuration contract.

Compatibility and remaining gates

Existing installations must set CONTINUE_API_BASE before updating and recreate the container to regenerate the file. Downloaded IDE copies must be merged again; existing user config is never overwritten automatically. Keep its backup for rollback. The common container path affects Linux, WSL and macOS; the live probe ran on Linux x86-64 under WSL. Native macOS/Windows IDE activation, actual model requests, chat quality and autocomplete were not exercised. Awaiting independent review and an IDE activation check. This is configuration release correctness, not a claim about an untrusted network boundary.

Final candidate a7fc21e00a21e824d0405655074ef2ab5414cd14: 32 successful CI checks, 4 conditionally skipped; no pending or failed checks.

Batch integration receipt

This is one of 30 independently branched public-beta PRs. The published synthetic integration head is 61f4c6fccc81bea697f4941683fefb5089ba77f4, built from baseline d49ad4bbc760be319de7f4c9b9a93b1f18fe3922 in this reproducible order:

#4946 → #4948 → #4951 → #4954 → #4972 → #4960 → #4961 → #4957 → #4964 → #4967 → #4968 → #4971 → #4975 → #4976 → #4984 → #4982 → #4990 → #4988 → #4989 → #4997 → #5003 → #5006 → #5007 → #5009 → #5012 → #5011 → #5013 → #5014 → #5020 → #5021

Reconciliation preserved all 146 files owned by a single PR byte-for-byte against their exact candidate heads. The eight shared paths preserve both CLI STT/TTS commands and help, every added Makefile test, both environment schema additions and all Extensions UI behavior. LanguageTool and Kroki both remain headless API entries. Canonical regeneration yields 76 catalog entries and 47 library manifests; all README rows are retained. Shared-file changes need these additive resolutions when merged independently.

Combined validation: 2,852 API tests passed / 1 skipped; 1,082 UI tests passed; 47 manifests passed; all 12 added Makefile commands passed; 12 catalog boundary tests passed / 12 opt-in runtime tests skipped in this combined run. Individual exact-image results remain documented above. UI lint/build, scoped secret hooks, diff checks, four platform smoke tests and installer simulation passed. Compose plans for NVIDIA/AMD/Apple each contain 20 services and no duplicate published bindings across the core plus 12 new recipes; this is static plan evidence, not simultaneous startup or GPU inference.

The first unrestricted UI run timed out in two tests under concurrent load; the complete rerun used --maxWorkers=2 with unchanged assertions and timeouts and passed. ESLint reports zero errors and 603 warnings, including the existing JSX usage-detection pattern. Full local make gate still fails the no-sudo Docker baseline covered by #3158. BATS records 416 passed / 5 failed on this root/WSL host (platform detection, root preflight and a 15 GiB versus 20 GiB free-space expectation). Neither full local gate nor BATS is described as green.

This integration receipt supplements each PR's own regression and does not waive its independent review, live hardware/browser/upgrade gates or rollback requirements. The PRs remain drafts; none was merged upstream.

This was referenced Sep 14, 2026
@tang-vu
tang-vu marked this pull request as ready for review September 15, 2026 01:32
@Lightheartdevs

Copy link
Copy Markdown
Collaborator

Thanks for this contribution. public-beta was promoted into main on 2026-09-24 and no longer receives changes, so we're closing pull requests that target it. This isn't a judgment on the change itself. If it's still needed, please rebase onto main and open a focused PR. See #7253 for details and the contribution policy.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants