Skip to content

feat(dashboard): add live provider config editor#276

Open
sozercan wants to merge 45 commits into
mainfrom
ui
Open

feat(dashboard): add live provider config editor#276
sozercan wants to merge 45 commits into
mainfrom
ui

Conversation

@sozercan

@sozercan sozercan commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Summary

  • add an atomic, generation-pinned runtime control plane for provider, route, and policy configuration
  • add strict config codecs, source-scoped managed persistence, optimistic apply/reset flows, secret operations, and loopback/CSRF protections
  • add the accessible dashboard configuration editor plus CLI and menubar recovery integration
  • add JSON/YAML draft import with strict server-side YAML conversion, canonical JSON output, and secret redaction
  • add target-revision continuation fencing, tests, CI coverage, benchmarks, and documentation

Validation

  • make test
  • make vet
  • make lint
  • go test -race ./... -count=1
  • frontend node:test suite
  • Windows and macOS proxy cross-compilation
  • runtime snapshot and existing Responses/Chat/WebSocket benchmarks

sozercan added 21 commits July 17, 2026 22:31
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings July 20, 2026 14:39
@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 14:40

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Adds a local dashboard control plane for atomically editing provider, route, and policy configuration while preserving runtime-generation isolation and continuation safety.

Changes:

  • Adds strict managed-config persistence, validation, apply/reset workflows, and recovery controls.
  • Adds a secured, accessible dashboard editor with secret-operation handling.
  • Pins requests and continuations to runtime and physical-target revisions.
Show a summary per file
File Description
.github/workflows/ci.yaml Adds cross-platform config-store checks.
Makefile Adds frontend test integration.
README.md Links dashboard configuration docs.
cmd/menubar/config.go Resolves managed configuration sources.
cmd/menubar/config_test.go Tests menubar config resolution.
cmd/menubar/main.go Adds reset and recovery integration.
cmd/menubar/startup_test.go Tests menubar startup recovery.
docs/README.md Indexes the new documentation.
docs/agent-launchers.md Documents launch-mode limitations.
docs/api.md Documents configuration endpoints.
docs/architecture.md Describes runtime control architecture.
docs/configuration.md Documents managed precedence and flags.
docs/dashboard-config.md Provides the complete editor guide.
docs/dashboard.md Links the configuration editor.
docs/development.md Documents new tests and benchmarks.
docs/getting-started.md Adds editor onboarding.
docs/menubar.md Documents menubar recovery actions.
docs/policy-routing.md Covers live policy updates.
docs/provider-api-keys.md Explains managed secret handling.
docs/provider-routing.md Documents live provider routing edits.
docs/responses-websocket.md Documents generation pinning.
docs/responses.md Documents continuation fencing.
main.go Adds managed recovery and editor startup wiring.
main_test.go Tests CLI recovery and startup behavior.
proxy/chat_execution.go Adds replay target revisions.
proxy/chat_handlers.go Uses request-pinned runtime routing.
proxy/chat_policy_planner.go Uses generation-pinned policy planners.
proxy/chat_route_discovery.go Isolates discovery caches by generation.
proxy/dashboard/config.css Styles the accessible editor.
proxy/dashboard/config.html Defines the editor interface.
proxy/dashboard/config.js Implements editor state and mutations.
proxy/dashboard/config.test.mjs Tests frontend serialization helpers.
proxy/dashboard/dashboard.html Links to configuration management.
proxy/dashboard_config.go Implements configuration HTTP APIs.
proxy/dashboard_config_access.go Tracks editor capability and access.
proxy/dashboard_config_test.go Tests apply, reset, and redaction.
proxy/dashboard_insight.go Pins insight requests to runtimes.
proxy/gemini_handler.go Pins Gemini routing and contexts.
proxy/handler.go Initializes runtime control state.
proxy/model_routes.go Adds setup-specific route resolution.
proxy/model_routes_config.go Supports candidate config validation.
proxy/policy_controller.go Supports candidate policy initialization.
proxy/policy_routing.go Binds policy routing to snapshots.
proxy/providers.go Adds context-aware provider resolution.
proxy/providers_config_codec.go Adds strict canonical config codecs.
proxy/providers_config_codec_test.go Tests strict codec behavior.
proxy/providers_config_source.go Implements managed persistence.
proxy/providers_config_source_test.go Tests source isolation and durability.
proxy/providers_config_source_unix.go Implements Unix locking and replacement.
proxy/providers_config_source_windows.go Implements Windows locking and replacement.
proxy/request_summary.go Uses pinned routing for attribution.
proxy/response_model_normalization.go Carries physical target revisions.
proxy/responses_chat_replay.go Fences replay by target revision.
proxy/responses_chat_replay_test.go Tests replay revision compatibility.
proxy/responses_handler.go Pins Responses routing and rewriting.
proxy/responses_websocket.go Pins WebSocket runtime and target state.
proxy/responses_websocket_test.go Tests WebSocket revision fencing.
proxy/route_executor.go Propagates selected target revisions.
proxy/route_state_binding.go Validates physical state ownership.
proxy/route_state_binding_test.go Tests state-binding compatibility.
proxy/runtime_control.go Implements transactional apply/reset jobs.
proxy/runtime_snapshot.go Defines immutable runtime generations.
proxy/runtime_snapshot_bench_test.go Benchmarks snapshot lookup overhead.
proxy/runtime_snapshot_test.go Tests generation and cache isolation.
proxy/state_binding.go Stores target revisions with bindings.
proxy/stats.go Exposes active config generation.
proxy/target_revision.go Derives opaque physical-target fingerprints.
proxy/target_revision_test.go Tests target fingerprint semantics.
proxy/tool_optimizer_responses.go Uses pinned Responses rewriting.
proxy/upstream_http.go Propagates runtime snapshots upstream.
server/dashboard_config_control.go Enforces loopback, origin, and CSRF checks.
server/dashboard_config_control_test.go Tests control-plane security.
server/server.go Registers APIs and coordinates shutdown.

Review details

Tip

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

  • Files reviewed: 72/73 changed files
  • Comments generated: 2
  • Review effort level: Medium

Comment thread proxy/dashboard/config.js
Comment thread proxy/dashboard_config.go Outdated
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>

Copy link
Copy Markdown
Owner Author

@codex review

@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 15:13
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: d196d20f36

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
sozercan added 2 commits July 20, 2026 10:32
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 17:49
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 17:52
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>

# Conflicts:
#	cmd/menubar/main.go
#	proxy/policy_routing.go
@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 18:03
Copilot AI review requested due to automatic review settings July 20, 2026 18:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 18:04
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 18:06
Copilot AI review requested due to automatic review settings July 20, 2026 18:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 18:07

Copy link
Copy Markdown
Owner Author

Final automated-review status for head 7fea286:

  • Copilot’s final re-review produced no code finding; it stopped solely at its hard 20,000-line review limit. This is not an actionable code issue. All earlier Copilot inline findings have been addressed, replied to, and resolved.
  • The stacked PR remains intentionally scoped to the provider-config editor plan; splitting it now would separate the runtime-generation, persistence, continuation-fencing, and UI changes that must be reviewed together.
  • Codex added a 👍 reaction after this final head was pushed.
  • All current CI checks are green.

sozercan added 4 commits July 20, 2026 13:09
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 20:40
Copilot AI review requested due to automatic review settings July 20, 2026 20:41

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 20:43
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>

# Conflicts:
#	docs/development.md
@sozercan
sozercan changed the base branch from classifiers to main July 20, 2026 20:46
Copilot AI review requested due to automatic review settings July 20, 2026 20:46

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@sozercan
sozercan changed the base branch from main to classifiers July 20, 2026 20:47
Base automatically changed from classifiers to main July 20, 2026 23:56
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