diff --git a/.agents/skills/missing_docs/references/feature_surface_map.md b/.agents/skills/missing_docs/references/feature_surface_map.md index 6e1732a2..ddcab293 100644 --- a/.agents/skills/missing_docs/references/feature_surface_map.md +++ b/.agents/skills/missing_docs/references/feature_surface_map.md @@ -323,13 +323,40 @@ POST /oauth/token -> internal GET /oauth/jwks.json -> internal GET /.well-known/openid-configuration -> internal +# Consent endpoints backing the web consent screen for third-party OAuth clients +# (router/handlers/public_api/oauth2.go). GET /consent/info maps a client_id to +# the display name shown on the screen, and POST /consent records the grant that +# GET /oauth/authorize redirects to. They are browser-facing plumbing for the +# authorize flow above, absent from warp-server's canonical public spec, so they +# are not a documentable public API surface. +POST /oauth/consent -> internal +GET /oauth/consent/info -> internal + +# The per-user grant list behind the consent screen: GET /grants lists the +# third-party clients a user has approved, and DELETE /grants/{client_id} +# revokes one. Same browser-facing plumbing as the consent endpoints above, and +# likewise absent from warp-server's canonical public spec. +GET /oauth/grants -> internal +DELETE /oauth/grants/{client_id} -> internal + +# RFC 7591 dynamic client registration (registered only when the separate +# oauth_dcr flag is on) and RFC 7009 token revocation. Machine-facing OAuth +# protocol endpoints for third-party MCP clients, not part of the released +# public Oz Agent API. +POST /oauth/register -> internal +POST /oauth/revoke -> internal + # RFC 8414 / RFC 9728 OAuth discovery documents that MCP clients fetch # automatically before authenticating against the hosted Factory MCP endpoint -# (router/handlers/public_api/oauth2.go, registered only when the dogfood-only -# factory_mcp flag is on). They are machine-facing protocol metadata for an -# unreleased product, absent from warp-server's canonical public spec, so they -# are not a documentable public API surface. +# (router/handlers/public_api/oauth2.go, registered by registerMCPDiscoveryRoutes +# only when the dogfood-only factory_mcp flag is on). They are machine-facing +# protocol metadata for an unreleased product, absent from warp-server's +# canonical public spec, so they are not a documentable public API surface. The +# path-suffixed variants implement RFC 8414 section 5 path-aware discovery for +# the /api/v1/mcp/factory resource. GET /.well-known/oauth-authorization-server -> internal +GET /.well-known/oauth-authorization-server/api/v1/mcp/factory -> internal +GET /.well-known/openid-configuration/api/v1/mcp/factory -> internal GET /.well-known/oauth-protected-resource/api/v1/mcp/factory -> internal # Anonymous-viewer redirect probes (documented exceptions to auth, not API surfaces). @@ -361,6 +388,9 @@ POST /harness-support/notify-user -> internal POST /harness-support/finish-task -> internal POST /harness-support/report-shutdown -> internal POST /harness-support/upload-snapshot -> internal +# Also marked `x-internal: true` in warp-server's canonical spec, so the publish +# filter strips it from the public docs copy. +POST /harness-support/commit-snapshot -> internal # Oz Factory REST API (router/handlers/public_api/factory*.go). Factory is a # private, not-yet-released product (the FactoryMcp flag is dogfood and the @@ -393,6 +423,12 @@ GET /factory/{uid}/metrics -> internal GET /factory/{uid}/integrations/linear/teams -> internal GET /factory/{uid}/integrations/linear/teams/{team_id}/labels -> internal PUT /factory/{uid}/integrations/linear/teams/{team_id}/labels -> internal +GET /factory/{uid}/integrations/linear/issues -> internal +GET /factory/{uid}/integrations/linear/projects -> internal +GET /factory/{uid}/integrations/linear/users -> internal +GET /factory/{uid}/integrations/linear/workflow-states -> internal +GET /factory/{uid}/integrations/slack/conversations -> internal +GET /factory/{uid}/integrations/slack/users -> internal GET /factory/automations -> internal POST /factory/automations -> internal GET /factory/automations/events/{provider} -> internal @@ -400,10 +436,14 @@ GET /factory/automations/{id} -> internal PUT /factory/automations/{id} -> internal DELETE /factory/automations/{id} -> internal PUT /factory/automations/{id}/subscriptions -> internal +PUT /factory/automations/{id}/subscriptions/{subscription_id} -> internal DELETE /factory/automations/{id}/subscriptions/{subscription_id} -> internal GET /factory/scorers -> internal POST /factory/scorers -> internal GET /factory/scorers/{scorer_id}/results -> internal +GET /factory/scorers/{scorer_id}/results/reasons -> internal +POST /factory/scorers/{scorer_id}/pause -> internal +POST /factory/scorers/{scorer_id}/resume -> internal GET /factory/scorers/{scorer_id}/autofix-config -> internal PUT /factory/scorers/{scorer_id}/autofix-config -> internal DELETE /factory/scorers/{scorer_id}/autofix-config -> internal @@ -448,43 +488,44 @@ GET /memory_stores/{uid}/memories/{memoryUid}/versions -> gated:AIMemories # slash-commands page content; add entries here only for exceptions. # Gated by the dogfood-only LocalDockerSandbox flag — not user-facing yet. /docker-sandbox -> internal -# Warp Agent CLI-only (crates/warp_tui) slash commands — added only when the -# settings mode is the Warp Agent CLI (see static_commands/commands.rs). They -# aren't present in the GUI desktop app, so they aren't documented on the public -# slash-commands page. Consistent with the general.autoupdate_enabled Warp Agent -# CLI-only setting mapped to `internal` above. -/exit -> internal -/view-logs -> internal -/auto-approve -> internal -/logout -> internal -# The paired /enable- and /disable-natural-language-detection commands were -# replaced by a single toggle, /natural-language-detection. Like the other Warp -# Agent CLI-only commands above, it isn't in the GUI, so it stays internal. -/natural-language-detection -> internal -# TUI-only voice input command (Warp Agent CLI surface). The /version command was -# removed from code; its entry has been pruned. -/voice -> internal -# More Warp Agent CLI-only (SlashCommandSurfaces::TuiOnly in static_commands/ -# commands.rs) commands. None are present in the GUI desktop app, so they aren't -# documented on the public slash-commands page: +# Warp Agent CLI-only (SlashCommandSurfaces::TuiOnly in static_commands/ +# commands.rs) slash commands — added only when the settings mode is the Warp +# Agent CLI. They aren't present in the GUI desktop app, so they aren't on the +# public slash-commands page; they are documented in the Warp Agent CLI slash +# command reference instead: +# - /exit: exit the CLI +# - /view-logs: bundle logs into a zip archive +# - /auto-approve: toggle auto-approve for agent actions +# - /logout: log out of Warp +# - /natural-language-detection: single toggle that replaced the removed +# /enable- and /disable-natural-language-detection pair +# - /voice: start voice input (the /version command was removed from code; its +# entry has been pruned) # - /status: show session and account status # - /clear: clear the transcript and start a new conversation -# - /statusline: configure the Warp Agent CLI statusline (agents.statusline, internal) -# - /reset-statusline: restore the statusline to its default items and ordering +# - /statusline and /reset-statusline: configure or reset the CLI statusline # - /api-keys: view and manage model-provider API keys. It replaced the removed # /add-api-key and /clear-provider-api-key pair, whose entries were pruned. -# - /vim-mode: toggle Vim keybindings in the Warp Agent CLI input -/status -> internal -/clear -> internal -/statusline -> internal -/reset-statusline -> internal -/api-keys -> internal -/vim-mode -> internal -# TUI-only color-theme picker (Warp Agent CLI surface, SlashCommandSurfaces::TuiOnly -# in static_commands/commands.rs). It sets the Warp Agent CLI theme -# (appearance.theme, mapped internal below) and isn't present in the GUI, so it -# stays internal like the other Warp Agent CLI-only commands. -/theme -> internal +# - /connect-grok: connect an X Premium or SuperGrok subscription +# - /manage-billing and /upgrade: open the team billing and upgrade pages +# - /vim-mode: toggle Vim keybindings in the CLI input +# - /theme: set the CLI color theme (appearance.theme, mapped below) +/exit -> src/content/docs/cli/reference.mdx +/view-logs -> src/content/docs/cli/reference.mdx +/auto-approve -> src/content/docs/cli/reference.mdx +/logout -> src/content/docs/cli/reference.mdx +/natural-language-detection -> src/content/docs/cli/reference.mdx +/voice -> src/content/docs/cli/reference.mdx +/status -> src/content/docs/cli/reference.mdx +/clear -> src/content/docs/cli/reference.mdx +/statusline -> src/content/docs/cli/reference.mdx +/reset-statusline -> src/content/docs/cli/reference.mdx +/api-keys -> src/content/docs/cli/reference.mdx +/connect-grok -> src/content/docs/cli/reference.mdx +/manage-billing -> src/content/docs/cli/reference.mdx +/upgrade -> src/content/docs/cli/reference.mdx +/vim-mode -> src/content/docs/cli/reference.mdx +/theme -> src/content/docs/cli/reference.mdx ## Settings -> doc pages @@ -498,42 +539,45 @@ GET /memory_stores/{uid}/memories/{memoryUid}/versions -> gated:AIMemories warpify.ssh.ssh_tmux_deprecation_notice_pending -> internal # Warp Agent CLI-only (crates/warp_tui) background auto-updater toggle (surface: -# Warp Agent CLI). It isn't present in the GUI settings UI, so it isn't -# documented in the all-settings reference. -general.autoupdate_enabled -> internal +# Warp Agent CLI). It isn't present in the GUI settings UI, so instead of the +# all-settings reference it is documented with the CLI's update behavior. +general.autoupdate_enabled -> src/content/docs/cli/index.mdx # Warp Agent CLI-only (crates/warp_tui) statusline configuration (surface: # SettingSurfaces::TUI in app/src/settings/ai.rs; controls the order and # visibility of the Warp Agent CLI bottom statusline items). It isn't present in -# the GUI settings UI, so it isn't documented in the all-settings reference. -# Paired with the /statusline Warp Agent CLI slash command mapped internal above. -agents.statusline -> internal +# the GUI settings UI, so it is documented on the CLI configuration page rather +# than the all-settings reference, alongside the /statusline and +# /reset-statusline slash commands. +agents.statusline -> src/content/docs/cli/configuration.mdx # Warp Agent CLI-only (crates/warp_tui) color theme (surface: Warp Agent CLI, # SettingSurfaces::TUI in tui_theme.rs; "auto|light|dark" matching the host -# terminal background). It isn't present in the GUI settings UI, so it isn't -# documented in the all-settings reference. The GUI theme setting is the separate -# appearance.themes.theme, which is documented. Paired with the /theme Warp Agent -# CLI slash command mapped internal above. -appearance.theme -> internal +# terminal background). It isn't present in the GUI settings UI, so it is +# documented on the CLI configuration page rather than the all-settings +# reference. The GUI theme setting is the separate appearance.themes.theme. +appearance.theme -> src/content/docs/cli/configuration.mdx # Warp Agent CLI-only (crates/warp_tui) zero-state animation knobs (surface: Warp # Agent CLI, SettingSurfaces::TUI). They tune the rotating object shown in the # empty Warp Agent CLI state and aren't present in the GUI settings UI, so they -# aren't documented in the all-settings reference. -appearance.zero_state.object -> internal -appearance.zero_state.rotation_period_seconds -> internal +# are documented in the CLI configuration page's start screen section. +# extrusion_depth stays internal: it is a rendering detail of the built-in +# object with no documented user-facing behavior. +appearance.zero_state.object -> src/content/docs/cli/configuration.mdx +appearance.zero_state.rotation_period_seconds -> src/content/docs/cli/configuration.mdx appearance.zero_state.extrusion_depth -> internal # Warp Agent CLI-only (crates/warp_tui) per-section visibility toggles for the # zero state (surface: SettingSurfaces::TUI in app/src/settings/tui_zero_state.rs). # Each hides one section of the Warp Agent CLI empty state. They aren't present in -# the GUI settings UI, so they aren't documented in the all-settings reference. -appearance.zero_state.show_signed_in_user -> internal -appearance.zero_state.show_changelog -> internal -appearance.zero_state.show_project_info -> internal -appearance.zero_state.show_mcp -> internal -appearance.zero_state.show_animation -> internal +# the GUI settings UI, so they are documented in the CLI configuration page's +# start screen section. +appearance.zero_state.show_signed_in_user -> src/content/docs/cli/configuration.mdx +appearance.zero_state.show_changelog -> src/content/docs/cli/configuration.mdx +appearance.zero_state.show_project_info -> src/content/docs/cli/configuration.mdx +appearance.zero_state.show_mcp -> src/content/docs/cli/configuration.mdx +appearance.zero_state.show_animation -> src/content/docs/cli/configuration.mdx # Warp Agent CLI-only toggle that stops the zero-state animation from repainting # while the terminal is unfocused (app/src/settings/tui_zero_state.rs). Like the @@ -618,6 +662,11 @@ OpenWarpLaunchModal # One-time launch modal announcing multi-agent orchestration; the feature itself # is documented via RunAgentsTool -> orchestration/multi-agent-runs.mdx. OrchestrationLaunchModal +# One-time launch modal announcing the Warp Agent CLI (app/src/workspace/view/ +# agent_cli_launch_modal/). It shows once, links out to the CLI's get-started +# page, and has no recurring user-facing surface of its own. The CLI it +# announces is documented at src/content/docs/cli/. +AgentCliLaunchModal GetStartedTab CreateProjectFlow # Account-first onboarding is an internal login/onboarding flow variant with no diff --git a/.agents/skills/missing_docs/references/surface_snapshot.json b/.agents/skills/missing_docs/references/surface_snapshot.json index ef037781..3b7f7ba1 100644 --- a/.agents/skills/missing_docs/references/surface_snapshot.json +++ b/.agents/skills/missing_docs/references/surface_snapshot.json @@ -12,6 +12,7 @@ "APIKeyManagement": "ga", "AccountFirstOnboarding": "ga", "ActiveConversationRequiresInteraction": "ga", + "AgentCliLaunchModal": "ga", "AgentDecidesCommandExecution": "ga", "AgentHarness": "ga", "AgentManagementDetailsView": "ga", @@ -182,6 +183,7 @@ "McpOauth": "ga", "McpServer": "ga", "MinimalistUI": "ga", + "MultiLevelOrchestration": "dogfood", "MultiProfile": "ga", "MultiWorkspace": "dogfood", "NamedAgents": "ga", @@ -820,9 +822,12 @@ "DELETE /api/v1/factory/{uid}/tasks/{task_uid}", "DELETE /api/v1/memory_stores/{uid}", "DELETE /api/v1/memory_stores/{uid}/memories/{memoryUid}", + "DELETE /api/v1/oauth/grants/{client_id}", "GET /.well-known/oauth-authorization-server", + "GET /.well-known/oauth-authorization-server/api/v1/mcp/factory", "GET /.well-known/oauth-protected-resource/api/v1/mcp/factory", "GET /.well-known/openid-configuration", + "GET /.well-known/openid-configuration/api/v1/mcp/factory", "GET /api/v1/agent", "GET /api/v1/agent/artifacts/{uid}", "GET /api/v1/agent/artifacts/{uid}/download", @@ -854,9 +859,16 @@ "GET /api/v1/factory/scorers", "GET /api/v1/factory/scorers/{scorer_id}/autofix-config", "GET /api/v1/factory/scorers/{scorer_id}/results", + "GET /api/v1/factory/scorers/{scorer_id}/results/reasons", "GET /api/v1/factory/{uid}", + "GET /api/v1/factory/{uid}/integrations/linear/issues", + "GET /api/v1/factory/{uid}/integrations/linear/projects", "GET /api/v1/factory/{uid}/integrations/linear/teams", "GET /api/v1/factory/{uid}/integrations/linear/teams/{team_id}/labels", + "GET /api/v1/factory/{uid}/integrations/linear/users", + "GET /api/v1/factory/{uid}/integrations/linear/workflow-states", + "GET /api/v1/factory/{uid}/integrations/slack/conversations", + "GET /api/v1/factory/{uid}/integrations/slack/users", "GET /api/v1/factory/{uid}/metrics", "GET /api/v1/factory/{uid}/source", "GET /api/v1/factory/{uid}/syncs", @@ -871,6 +883,8 @@ "GET /api/v1/memory_stores/{uid}/memories/{memoryUid}", "GET /api/v1/memory_stores/{uid}/memories/{memoryUid}/versions", "GET /api/v1/oauth/authorize", + "GET /api/v1/oauth/consent/info", + "GET /api/v1/oauth/grants", "GET /api/v1/oauth/jwks.json", "PATCH /api/v1/agent/runs/{runId}/event-sequence", "PATCH /api/v1/factory/{uid}", @@ -897,10 +911,13 @@ "POST /api/v1/factory/automations", "POST /api/v1/factory/avatar", "POST /api/v1/factory/scorers", + "POST /api/v1/factory/scorers/{scorer_id}/pause", + "POST /api/v1/factory/scorers/{scorer_id}/resume", "POST /api/v1/factory/{uid}/apply", "POST /api/v1/factory/{uid}/plan", "POST /api/v1/factory/{uid}/tasks", "POST /api/v1/harness-support/block-snapshot", + "POST /api/v1/harness-support/commit-snapshot", "POST /api/v1/harness-support/external-conversation", "POST /api/v1/harness-support/finish-task", "POST /api/v1/harness-support/notify-user", @@ -911,13 +928,17 @@ "POST /api/v1/harness-support/upload-snapshot", "POST /api/v1/memory_stores", "POST /api/v1/memory_stores/{uid}/memories", + "POST /api/v1/oauth/consent", "POST /api/v1/oauth/device/auth", + "POST /api/v1/oauth/register", + "POST /api/v1/oauth/revoke", "POST /api/v1/oauth/session", "POST /api/v1/oauth/token", "PUT /api/v1/agent/identities/{uid}", "PUT /api/v1/agent/schedules/{id}", "PUT /api/v1/factory/automations/{id}", "PUT /api/v1/factory/automations/{id}/subscriptions", + "PUT /api/v1/factory/automations/{id}/subscriptions/{subscription_id}", "PUT /api/v1/factory/scorers/{scorer_id}/autofix-config", "PUT /api/v1/factory/{uid}/integrations/linear/teams/{team_id}/labels", "PUT /api/v1/factory/{uid}/source", @@ -936,6 +957,7 @@ "/cloud-agent", "/compact", "/compact-and", + "/connect-grok", "/continue-locally", "/conversations", "/copy-debugging-id", @@ -957,6 +979,7 @@ "/index", "/init", "/logout", + "/manage-billing", "/mcp", "/model", "/natural-language-detection", @@ -982,6 +1005,7 @@ "/status", "/statusline", "/theme", + "/upgrade", "/usage", "/view-logs", "/vim-mode", @@ -1321,6 +1345,7 @@ "claude-api": "bundled", "create-skill": "bundled", "create-tab-config": "bundled", + "factory-mcp": "bundled", "modify-settings": "bundled", "oz-platform": "bundled", "pr-comments": "bundled", @@ -1332,5 +1357,5 @@ "verify-ui-change-in-cloud": "dogfood", "warpctrl": "bundled" }, - "changelog_last_version": "2026.07.31" + "changelog_last_version": "2026.08.07" } diff --git a/.agents/skills/missing_docs/scripts/audit_docs.py b/.agents/skills/missing_docs/scripts/audit_docs.py index 16fa5b6c..ee32cbf1 100755 --- a/.agents/skills/missing_docs/scripts/audit_docs.py +++ b/.agents/skills/missing_docs/scripts/audit_docs.py @@ -745,9 +745,20 @@ def _split_top_level_args(s: str) -> list[str]: return args +def _is_route_registrar(name: str) -> bool: + """Whether a Go function name looks like a route-registration helper. + + Matches both the exported `RegisterFooRoutes` entry points and unexported + helpers like `registerMCPDiscoveryRoutes`, which real handlers use to split + a large registration function up. Missing the unexported ones silently + dropped their routes from the audit universe. + """ + return name.startswith(("Register", "register")) + + def _iter_register_calls(body: str): - """Yield (callee, start_pos, args) for Register*(...) calls, paren-matched.""" - for match in re.finditer(r"\b(Register\w+)\(", body): + """Yield (callee, start_pos, args) for [Rr]egister*(...) calls, paren-matched.""" + for match in re.finditer(r"\b([Rr]egister\w+)\(", body): start = match.end() depth = 1 i = start @@ -911,7 +922,7 @@ def emit(fn_name: str, param_prefix: str): # to hang off the /api/v1 group (conservative default so routes are never # silently dropped). for fn_name in sorted(analyzed): - if fn_name.startswith("Register") and fn_name not in emitted_fns: + if _is_route_registrar(fn_name) and fn_name not in emitted_fns: emit(fn_name, "/api/v1") routes = []