From bac1e463e5759add52b34e0555d2530d671b2251 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 27 Oct 2026 00:40:39 +0100 Subject: [PATCH] feat: add ai review to fork deploys and deployment requests (#12029) * feat: add ai review to deployment requests Co-Authored-By: Claude Opus 5.5 * fix: bound ai review fetches and surface unreadable items Co-Authored-By: Claude Opus 5.5 * feat: add fix in ai session and model picker to deployment ai review Co-Authored-By: Claude Opus 5.5 * feat: add workspace instructions for deployment ai review Co-Authored-By: Claude Opus 5.5 * fix: read review instructions from the parent and bind ai review to the fork Co-Authored-By: Claude Opus 5.5 * fix: pin the fix-all session preview to the fork's compare page Co-Authored-By: Claude Opus 5.5 * refactor: drop workspace-settings instructions from deployment ai review Co-Authored-By: Claude Opus 5.5 * feat: review the selected items with ai on compare and deploy Co-Authored-By: Claude Opus 5.5 * fix: mark an ai review out of date when its items change Co-Authored-By: Claude Opus 5.5 * feat: post all ai review findings as comments at once Co-Authored-By: Claude Opus 5.5 * chore: update ee-repo-ref to 77703cf32e58964906d87ee83ddda44b5b8d1b7e This commit updates the EE repository reference after PR #926 was merged in windmill-ee-private. Previous ee-repo-ref: e30ab9e69d1854fcaed5620c934ace32acb0a729 New ee-repo-ref: 77703cf32e58964906d87ee83ddda44b5b8d1b7e Automated by sync-ee-ref workflow. --------- Co-authored-by: Claude Opus 5.5 Co-authored-by: windmill-internal-app[bot] --- backend/ee-repo-ref.txt | 2 +- docs/feature-telemetry.md | 9 +- .../lib/components/CompareWorkspaces.svelte | 18 +- .../deploymentRequest/AiReview.svelte | 273 ++++++++++++++++++ .../DeploymentRequestPanel.svelte | 46 ++- .../deploymentRequest/aiReview.test.ts | 84 ++++++ .../components/deploymentRequest/aiReview.ts | 188 ++++++++++++ 7 files changed, 610 insertions(+), 10 deletions(-) create mode 100644 frontend/src/lib/components/deploymentRequest/AiReview.svelte create mode 100644 frontend/src/lib/components/deploymentRequest/aiReview.test.ts create mode 100644 frontend/src/lib/components/deploymentRequest/aiReview.ts diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index a0a07e91e0..b29a21d710 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -747336910e5c7498544613ad7863cea59f4db6a1 +77703cf32e58964906d87ee83ddda44b5b8d1b7e diff --git a/docs/feature-telemetry.md b/docs/feature-telemetry.md index 0862453020..af0dd55942 100644 --- a/docs/feature-telemetry.md +++ b/docs/feature-telemetry.md @@ -4,12 +4,13 @@ anonymous usage-stats payload. It answers "does anyone use this, and which variant do they pick" without any identifying data leaving the instance. -It currently carries 78 registered actions across twenty-nine features (`ai_session`, `ai_chat`, +It currently carries 86 registered actions across thirty-three features (`ai_session`, `ai_chat`, `ai_fix`, `ai_agent`, `ai_decision`, `ai_agent_eval`, `app_sandbox`, `datatable`, `db_manager`, `flow_editor`, `flow_run`, `flow_step`, `home`, `header_nav`, `run_form`, `debugger`, `trigger`, `command_script`, -`hub_script`, `usage_meter`, `sso_groups_claim`, `cloud_trial_offer`, `job_token_scopes`, -`worker_draining`, `worker_group`, `worker_resource_stats`, `dev_workspace_isolation`, -`slack_agent`, `variable_expiration`). Nearly all of the +`mcp`, `mcp_workspace`, `hub_script`, `usage_meter`, `sso_groups_claim`, `cloud_trial_offer`, +`job_token_scopes`, `worker_draining`, `worker_group`, `worker_resource_stats`, +`dev_workspace_isolation`, `slack_agent`, `variable_expiration`, `anthropic_federation`, +`deployment_request`). Nearly all of the product is uninstrumented, so new user-facing work is the opportunity to change that. ## When to instrument diff --git a/frontend/src/lib/components/CompareWorkspaces.svelte b/frontend/src/lib/components/CompareWorkspaces.svelte index 096bc290c4..083437f8f7 100644 --- a/frontend/src/lib/components/CompareWorkspaces.svelte +++ b/frontend/src/lib/components/CompareWorkspaces.svelte @@ -65,6 +65,8 @@ import { deepEqual } from 'fast-equals' import WorkspaceDeployLayout from './WorkspaceDeployLayout.svelte' import DeploymentRequestPanel from './deploymentRequest/DeploymentRequestPanel.svelte' + import AiReview from './deploymentRequest/AiReview.svelte' + import { copilotInfo } from '$lib/aiStore' import { userStore } from '$lib/stores' import CompareModeToggle, { type CompareMode } from './CompareModeToggle.svelte' import CompareTargetPicker from './CompareTargetPicker.svelte' @@ -430,6 +432,7 @@ ) let selectedItems = $state([]) + let selectedDiffs = $derived(selectableDiffs.filter((d) => selectedItems.includes(getItemKey(d)))) // Selected items that carry a pending draft. They're opt-in (excluded from the // default selection), so a non-empty list means the user explicitly picked an @@ -1807,8 +1810,18 @@ {#snippet footer()} {#if !nothingToAct} -
-
+
+
+ + {#if mergeIntoParent && $copilotInfo.enabled && !hasOpenDeploymentRequest && !deploymentRequestPanel?.isDialogOpen()} + + {/if} +