[poc]feat: Devfile Creator and Workspace Loader with AI Agent#1515
[poc]feat: Devfile Creator and Workspace Loader with AI Agent#1515olexii4 wants to merge 16 commits into
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: olexii4 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
fa13de6 to
c7681f7
Compare
9a70845 to
b656324
Compare
28d6567 to
e59939f
Compare
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
5 similar comments
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
6 similar comments
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Sonnet 4.5 Signed-off-by: Oleksii Orel <oorel@redhat.com>
…nal integration Assisted-by: Claude Opus 4.6 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Assisted-by: Claude Opus 4.6 Signed-off-by: Oleksii Orel <oorel@redhat.com>
Add comprehensive unit tests for Devfile Creator components, stores, containers, pages, and services to meet the 92%/85% coverage thresholds. Assisted-by: Claude Opus 4.6 Signed-off-by: Oleksii Orel <oorel@redhat.com>
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64) kubectl patch commandkubectl patch -n eclipse-che "checluster/eclipse-che" --type=json -p="[{"op": "replace", "path": "/spec/components/dashboard/deployment", "value": {containers: [{image: "quay.io/eclipse/che-dashboard:pr-1515", name: che-dashboard}]}}]" |
|
/retest |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1515 +/- ##
==========================================
- Coverage 92.52% 91.57% -0.96%
==========================================
Files 562 609 +47
Lines 55927 63630 +7703
Branches 4224 4852 +628
==========================================
+ Hits 51746 58266 +6520
- Misses 4134 5303 +1169
- Partials 47 61 +14 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
PR needs rebase. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
WCAG 2.2.2 (Pause, Stop, Hide, Level A) requires a mechanism to stop any auto-updating animation lasting more than 5 seconds. The workspace start page showed a continuous spinner with no way to stop the process. Add a kebab actions dropdown (EllipsisVIcon) to the loader page header, matching the pattern used in PR #1515. The dropdown contains: - Start: enabled when workspace is stopped/failed, calls startWorkspace() - Stop: enabled when workspace is starting/running, calls stopWorkspace() Implementation follows PR #1515: - Header: accepts optional 'actions' prop rendered right-aligned - LoaderPage: builds the Dropdown with Start/Stop DropdownItems; visible only when a workspace object exists (not during factory-create) workspaceStatus is passed explicitly (not derived inside the page) - LoaderContainer: connects startWorkspace + stopWorkspace dispatch, derives workspaceStatus, forwards onStartWorkspace/onStopWorkspace Signed-off-by: Oleksii Orel <oorel@redhat.com>
WCAG 2.2.2 (Pause, Stop, Hide, Level A) requires a mechanism to stop any auto-updating animation lasting more than 5 seconds. The workspace start page showed a continuous spinner with no way to stop the process. Add a kebab actions dropdown (EllipsisVIcon) to the loader page header, matching the pattern used in PR #1515. The dropdown contains: - Start: enabled when workspace is stopped/failed, calls startWorkspace() - Stop: enabled when workspace is starting/running, calls stopWorkspace() Also preserve Events tab content after stopping: remove the STOPPED guard in WorkspaceEvents so users can review startup events after pressing Stop (the event data stays in the Redux store and is still useful for debugging a failed start). Implementation follows PR #1515: - Header: accepts optional 'actions' prop rendered right-aligned - LoaderPage: builds the Dropdown with Start/Stop DropdownItems; visible only when a workspace object exists - LoaderContainer: connects startWorkspace + stopWorkspace dispatch Signed-off-by: Oleksii Orel <oorel@redhat.com>
WCAG 2.2.2 (Pause, Stop, Hide, Level A) requires a mechanism to stop any auto-updating animation lasting more than 5 seconds. The workspace start page showed a continuous spinner with no way to stop the process. Add a kebab actions dropdown (EllipsisVIcon) to the loader page header, matching the pattern used in PR #1515. The dropdown contains: - Start: enabled when workspace is stopped/failed, calls startWorkspace() - Stop: enabled when workspace is starting/running, calls stopWorkspace() Also preserve Events tab on the loader page after stopping: add hideWhenStopped prop to WorkspaceEvents (default true, keeping the original behavior on WorkspaceDetails). Set hideWhenStopped={false} on the loader page so startup events remain visible after pressing Stop. The Workspace Details page still hides events when the workspace is STOPPED. Implementation follows PR #1515: - Header: accepts optional 'actions' prop rendered right-aligned - LoaderPage: builds the Dropdown with Start/Stop DropdownItems; passes hideWhenStopped={false} to WorkspaceEvents - LoaderContainer: connects startWorkspace + stopWorkspace dispatch Signed-off-by: Oleksii Orel <oorel@redhat.com>
What does this PR do?
Adds a Devfile Creator feature to the Eclipse Che Dashboard — a full-lifecycle devfile authoring tool with an embedded AI agent that helps users build and refine devfiles interactively. Also extends the Workspace Loader with a DevWorkspace editor tab and AI agent integration for troubleshooting failing workspaces.
Devfile Creator List Page (
/devfiles)Devfile Detail / Editor Page (
/devfile/:namespace/:devfileName)Workspace Loader — DevWorkspace Tab
Backend API
Devfile Creator API (
/dashboard/api/devfile-creator/namespace/:namespace)/:id/raw) returns the YAML content directly (used by Create Workspace factory flow).Agent API (
/dashboard/api/agents/namespace/:namespace)only talk to the dashboard origin.).
AI Agent Registry API (
/dashboard/api/ai-agent-registry)SERVICE_ACCOUNT_TOKENfor Kubernetes API authentication.Schema APIs
GET /dashboard/api/devfile?version=— serves static devfile JSON schemas (versions 2.0.0 – 2.3.0).GET /dashboard/api/devworkspace-schema— serves the DevWorkspace CRD JSON schema.WebSocket Channels
CONFIGMAP_WATCH— real-time ConfigMap change notifications for editor sync.AGENT_POD_STATUS— agent pod phase and readiness updates.Terminal Theming
AgentTerminalcomponent wraps a gritty iframe with bi-directional theme sync.CodeMirror Editor
DevfileEditorcomponent) with:Screenshot/screencast of this PR
Demo link
What issues does this PR fix or reference?
Proof of Concept: Devfile Creator with AI Agent
Is it tested? How?
Repositories
Manual testing
1. Prepare Eclipse Che with AI Authentication
ANTHROPIC_API_KEYsecret withcontroller.devfile.io/mount-as=envannotation so it auto-mounts into agent pods2. Create a devfile with the AI Agent
args: [tail, '-f', /dev/null]on non-UDI containers, and build/run commands3. Create and test the workspace
4. Test workspace troubleshooting with the AI Agent
argsfrom the non-UDI containers (e.g. nodejs, mysql):Container nodejs has state [postStart hook] failed with an unknown error (see pod events or container logs for more details)args, and suggest adding them back