chore: integrate 10 pending PRs (#114 #115 #150 #153 #154 #156 #158 #164 #166 #176) - #181
Merged
Merged
Conversation
When some models/providers emit `pages: ""` instead of omitting the field, parsePdfPageRange rejects it and triggers invalid_tool_input. After 3 consecutive failures the agent_tool_error_loop circuit breaker terminates the session. Treat blank pages values the same as omitted before validation runs. Closes OpenBMB#108 Co-authored-by: Cursor <cursoragent@cursor.com>
Block new discovery fires when the active cycle reaches the configured plan limit (default 3). The system resumes automatically after the user applies or archives the cycle. Co-authored-by: Cursor <cursoragent@cursor.com>
…ings UI
Wire a top-level `telemetry: { enabled: false }` field in
pilotdeck.yaml so the analytics opt-in can be controlled from the
Web UI Settings > Advanced section instead of raw env vars.
Co-authored-by: Cursor <cursoragent@cursor.com>
…ale YAML updateRaw now writes rawRef.current synchronously so that callers who invoke setRaw + save in the same event loop (e.g. the telemetry toggle) no longer race against React's batched re-render. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the env-var-based ANALYTICS_ENABLED mapping with a direct YAML config path: gateway now parses telemetry.enabled from the config snapshot and subscribes to config changes via configStore. - Add setEnabled() to TelemetryClient/TelemetrySender for runtime enable/disable (starts/stops the flush timer accordingly) - Parse telemetry section in loadPilotConfig and add to PilotConfig - Pass initial enabled value from config snapshot in pilotdeck.ts - Subscribe to telemetry.* changes for hot-reload - Remove ANALYTICS_ENABLED env var mapping from buildRuntimeEnv Co-authored-by: Cursor <cursoragent@cursor.com>
…invoked (OpenBMB#148) When the report-phase agent produces text but does not call always_on_report, the run was incorrectly marked as failed with reason "report_tool_not_invoked". Now the runtime extracts assistant_text_delta events, runs them through parseReportMarkdown, and persists the result — so the outcome reflects the actual execution success rather than a missed tool call. Co-authored-by: Cursor <cursoragent@cursor.com>
…alse-positives (OpenBMB#147) diffValues treated arrays as leaf values and compared them by reference (Object.is), so every reload created new array instances that were always reported as changed. This caused spurious runtime invalidation and always-on stop/start cycles. Add recursive element-wise comparison for arrays alongside the existing object diff logic. Co-authored-by: Cursor <cursoragent@cursor.com>
…ort code
Replace undici ProxyAgent with EnvHttpProxyAgent so that NO_PROXY is
respected and 127.0.0.1/localhost are always excluded — the gateway
WebSocket connection must never be routed through an external proxy.
Also fix `require("undici")` → `await import("undici")` in
src/cli/proxy.ts to resolve the ESM "require is not defined" error.
Remove the deprecated local LLM proxy port (18080) infrastructure:
dead functions in index.js, proxyPort config field, ANTHROPIC_BASE_URL
override, CCR sentinel logic, restart-proxy event hook, and the
corresponding UI settings entry.
Closes OpenBMB#149
Co-authored-by: Cursor <cursoragent@cursor.com>
…-reload Move proxy configuration from webui.runtime.httpsProxy to a top-level proxy.url / proxy.noProxy field in pilotdeck.yaml so both Gateway and UI Server share the same proxy setting. - Add PilotProxyConfig type and parseProxyConfig() with backward-compat migration from webui.runtime.httpsProxy - Classify proxy.* changes as runtime-live for immediate hot-reload - Add reinstallGlobalProxy() to support runtime proxy updates via configStore.subscribe in the Gateway process - Migrate UI frontend and i18n from httpsProxy to proxy.url/noProxy Co-authored-by: Cursor <cursoragent@cursor.com>
Use a Promise lock (pendingInstall) so concurrent async callers share
the same in-flight install instead of racing past the `installed` guard
during the dynamic `import("undici")` await gap.
Co-authored-by: Cursor <cursoragent@cursor.com>
…iscovery Started PHASE_META and AlwaysOnDashboardEventPhase were missing workspace_started, report_started, apply_started, and apply_completed — causing those events to fall back to the discovery_started icon/label in the Dashboard. Also fix runningCount double-counting the same runId when multiple start phases exist without a terminal phase. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
clearActiveWorkCycleId was defined but never called, leaving a stale reference in state.json after a cycle was archived or applied. Call it in DiscoveryPlanService.archiveCycle() and updateCycleExecution() via a new optional StateManager dependency, keeping backward compatibility. Co-authored-by: Cursor <cursoragent@cursor.com>
… as inline images The browser-use MCP process inherited an unpredictable CWD from the parent PilotDeck process, so screenshots saved with a user-specified `filename` parameter ended up in the wrong directory. Set `cwd: outDir` on the per-session spec so both auto-generated and named screenshots land in `projectRoot/.pilotdeck/browser_screenshots/<sid>/`. When @playwright/mcp returns only a text block with a Markdown file reference (no base64 image block — happens when `filename` is provided), read the referenced image from disk and inject it as an inline image block so it renders in the chat UI through the existing toolResultImages pipeline. Co-authored-by: Cursor <cursoragent@cursor.com>
… prevent validation loop
… to eliminate reload false-positives
…ate after archive/apply
…d inline rendering
… cap plans per work cycle
…en report tool is not invoked
… prevent fallback to Discovery Started
…hot-reload for telemetry
…vel config, and fix race condition Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Integrates the following 10 PRs into main in a tested merge order:
Merge conflict resolution
src/pilot/config/types.tsandsrc/pilot/config/loadPilotConfig.ts(both add new top-level config fields). Resolved by keeping bothtelemetryandproxyfields side by side.Test plan
Supersedes: #114, #115, #150, #153, #154, #156, #158, #164, #166, #176
Made with Cursor