@lindsey-shelton Could you review this MR
Move agent_status_icon.vue from duo_agents_platform/components/common/ to ai/shared/widgets/ so it can be reused across multiple AI features. Also consolidates the scattered utils.js files under ai/shared/ into a single ai/shared/utils/ directory with descriptive names (model_selection_utils.js, trusted_urls_utils.js), and adds a README.md documenting the purpose and structure of the ai/shared/ directory.
No UI changes — this is a pure refactor.
| Before | After |
|---|---|
| N/A | N/A |
yarn jest ee/spec/frontend/ai/shared/widgets/agent_status_icon_spec.js
yarn jest ee/spec/frontend/ai/duo_agents_platform/components/common/agent_flow_list_item_spec.js
yarn jest ee/spec/frontend/ai/shared/utils/
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Resolves #594081.
Move agent_status_icon.vue from duo_agents_platform/components/common/ to the shared widgets directory (ai/shared/widgets/) so it can be reused across multiple agentic Duo Chat features. Also consolidates the two scattered utils.js files under ai/shared/ into a single ai/shared/utils/ directory with descriptive names (model_selection_utils.js, trusted_urls_utils.js), and adds a README.md documenting the purpose and structure of the ai/shared/ directory.
No UI changes — this is a pure refactor.
| Before | After |
|---|---|
| N/A | N/A |
yarn jest ee/spec/frontend/ai/shared/widgets/agent_status_icon_spec.js
yarn jest ee/spec/frontend/ai/duo_agents_platform/components/common/agent_flow_list_item_spec.js
yarn jest ee/spec/frontend/ai/shared/utils/
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Resolves #594081.
Move agent_status_icon.vue from duo_agents_platform/components/common/ to the shared widgets directory (ai/shared/widgets/) so it can be reused across multiple agentic Duo Chat features. Also consolidates the two scattered utils.js files under ai/shared/ into a single ai/shared/utils/ directory with descriptive names (model_selection_utils.js, trusted_urls_utils.js), and adds a README.md documenting the purpose and structure of the ai/shared/ directory.
No UI changes — this is a pure refactor.
| Before | After |
|---|---|
| N/A | N/A |
yarn jest ee/spec/frontend/ai/shared/widgets/agent_status_icon_spec.js
yarn jest ee/spec/frontend/ai/duo_agents_platform/components/common/agent_flow_list_item_spec.js
yarn jest ee/spec/frontend/ai/shared/utils/
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Resolves #594081.
Move agent_status_icon.vue from duo_agents_platform/components/common/ to the shared widgets directory (ai/shared/widgets/) so it can be reused across multiple agentic Duo Chat features. Also consolidates the two scattered utils.js files under ai/shared/ into a single ai/shared/utils/ directory with descriptive names (model_selection_utils.js, trusted_urls_utils.js), and adds a README.md documenting the purpose and structure of the ai/shared/ directory.
No UI changes — this is a pure refactor.
| Before | After |
|---|---|
| N/A | N/A |
yarn jest ee/spec/frontend/ai/shared/widgets/agent_status_icon_spec.js
yarn jest ee/spec/frontend/ai/duo_agents_platform/components/common/agent_flow_list_item_spec.js
yarn jest ee/spec/frontend/ai/shared/utils/
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Resolves #594081.
Move agent_status_icon.vue from duo_agents_platform/components/common/ to the shared widgets directory (ai/shared/widgets/) so it can be reused across multiple agentic Duo Chat features. Also consolidates the two scattered utils.js files under ai/shared/ into a single ai/shared/utils/ directory with descriptive names (model_selection_utils.js, trusted_urls_utils.js), and adds a README.md documenting the purpose and structure of the ai/shared/ directory.
No UI changes — this is a pure refactor.
| Before | After |
|---|---|
| N/A | N/A |
yarn jest ee/spec/frontend/ai/shared/widgets/agent_status_icon_spec.js
yarn jest ee/spec/frontend/ai/duo_agents_platform/components/common/agent_flow_list_item_spec.js
yarn jest ee/spec/frontend/ai/shared/utils/
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Enrique Alcántara (ea0290ee) at 19 Mar 15:39
Add README.md to ai/shared directory
... and 2 more commits
This is a good suggestion. WDYT @mrincon ?
Thanks for the review, @iamphill. This is ready for another round
start_flow tool: gitlab-org/modelops/applied-ml/code-suggestions/ai-assist!4777 (comment 3169710597)
messageRenderers API in the monolith./cc @juan-silva @dashaadu @emilybauman @tbulva @dillonwheeler
Good idea. I'll log a warning to make it more evident the error's root cause.
Enrique Alcántara (7bfce810) at 19 Mar 12:08
chore: Code review feedback
external_url either.@dillonwheeler @evakadlecova @lulalala
I checked the workhorse logs and I noticed that the duo workflow client in Workhorse is receiving this error response that indicates the /api/graphql endpoint is not found:
2026-03-19_11:33:02.78119 gitlab-workhorse : {"correlation_id":"01KM2XXMXDHJK5WPHJG1XCT72F","duration_ms":3,"error":"handleAgentMessages: failed to read a gRPC message: rpc error: code = Internal desc = workflow execution failure: Exception: Invalid JSON response from GraphQL: Not found "/api/graphql"\n","level":"error","method":"GET","msg":"error executing workflow","time":"2026-03-19T12:33:02+01:00","uri":"/gdk-instance/api/v4/ai/duo_workflows/ws?root_namespace_id=&namespace_id=&user_selected_model_identifier=claude_haiku_4_5_20251001&workflow_definition=chat&client_type=browser"}
My interpretation of this error is that there is another component (ai-gateway, duo-workflow-service, etc.) that doesn't respect the external_url GitLab instance configuration.
I added the external_url to the AIGW_GITLAB_URL and AIGW_GITLAB_API_URL env variables in <gdk-dir>/gitlab-ai-gateway/.env but it didn't solve the problem.
Do you know where does this HTTP request originate? I'm out of my depth here so any help is greatly appreciated.
Enrique Alcántara (b1c73593) at 19 Mar 11:24
Use external URL in duo agentic chat workflow URL
This change refactors how the application builds WebSocket URLs for AI agentic chat. Instead of using a hardcoded URL path, the code now uses a centralized API utility that dynamically constructs the URL based on the current API version and configuration. . The functionality remains the same - it still connects to the same AI workflow WebSocket endpoint - but the implementation is now more robust and follows better coding practices.
This MR doesn't introduce user-facing changes.
Follow https://gitlab-org.gitlab.io/gitlab-development-kit/howto/ai/ to set up Gitlab Duo in your GDK.
Set the relative_url_root property in the gdk.yml file, for example:
Run gdk reconfigure && gdk restart.
Open your GDK GitLab instance at <gdk-url>/gdk-instance, for example: https://gdk.test:3443/gdk-instance/.
Send a prompt using agentic chat. You should get a successful response.
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Enrique Alcántara (cf71cc1a) at 19 Mar 11:05
Fix external url
Enrique Alcántara (67aa945a) at 19 Mar 10:29
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Snowplow events are currently sent directly from the editor extensions. We want to route these events through the GitLab instance for a number of reasons:
We need to support any versions of GitLab and both self-managed and gitlab.com.
| GitLab instance | snowplowprd.trx.gitlab.net | Event forwarding |
|---|---|---|
| Gitlab.com - any version | X | |
SM - version < 18.0
|
X | |
SM - version >= 18.0
|
X |
The extensions should still respect the do-not-track configuration.
The language server should look at the version of GitLab that it's connected to and only forward events to the instance if the instance support event forwarding. Otherwise it should keep sending events to the event collector (snowplowprd.trx.gitlab.net).
It should still be easy to verify that telemetry is sent correctly when working on IDE extensions. This might require running a local GDK + snowplow-micro.