[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}]}}]" |
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>
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>
|
Docker image build succeeded: quay.io/eclipse/che-dashboard:pr-1515 (linux/amd64, linux/arm64, linux/s390x) 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, linux/s390x) 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>
…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>
- Remove IUserProfileApi from devworkspaceClient mocks (deleted in main via refactor: remove user profile API #1587) - Remove duplicate 'actions' prop from Header component (artifact of conflict resolution) - Add @codemirror/state and @codemirror/view to resolutions to prevent duplicate module instances between project-level and theme-one-dark's nested copy, which caused TypeScript type incompatibility errors - Update EXCLUDED/prod.md with bumped @codemirror package versions (autocomplete 6.20.1→6.20.3, language 6.12.3→6.12.4, state 6.6.0→6.7.1, view 6.41.0→6.43.6) that resolved differently after yarn.lock regeneration - Regenerate .deps/dev.md and .deps/prod.md for updated dependencies Assisted-by: Claude Sonnet 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, linux/s390x) 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}]}}]" |
|
@olexii4: The following test failed, say
Full PR test history. Your PR dashboard. 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. I understand the commands that are listed here. |
|
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. |
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