feat: ability to manage sub recipes in desktop ui#6360
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds the ability to manage sub-recipes in the desktop UI, addressing issue #6083. Sub-recipes are recipes that can be called as tools during recipe execution, enabling multi-step workflows and reusable components.
Key changes:
- Added schema definition for sub-recipes with validation
- Created modal and editor components for managing sub-recipes
- Integrated sub-recipe management into the recipe creation/editing workflow
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
ui/desktop/src/components/recipes/shared/recipeFormSchema.ts |
Added Zod schema for SubRecipe type with validation rules matching the API |
ui/desktop/src/components/recipes/shared/SubRecipeModal.tsx |
New modal component for adding/editing individual sub-recipes with form fields |
ui/desktop/src/components/recipes/shared/SubRecipeEditor.tsx |
New editor component for managing the list of sub-recipes in a recipe |
ui/desktop/src/components/recipes/shared/RecipeFormFields.tsx |
Integrated SubRecipeEditor into the main recipe form |
ui/desktop/src/components/recipes/CreateEditRecipeModal.tsx |
Added sub-recipe handling when creating/editing recipes |
ui/desktop/src/components/recipes/CreateRecipeFromSessionModal.tsx |
Initialized empty sub-recipes array in form data |
ui/desktop/src/components/recipes/shared/__tests__/recipeFormSchema.test.ts |
Updated test data to include empty subRecipes array |
ui/desktop/src/components/recipes/shared/__tests__/RecipeFormFields.test.tsx |
Updated test data across multiple test cases to include subRecipes field |
ui/desktop/package-lock.json |
Dependency tree reorganization from npm install |
Files not reviewed (1)
- ui/desktop/package-lock.json: Language not supported
|
Tested it out looks great! |
|
Only feedback is it would be nice for the user to be able to define the entire subrecipe on the fly also rather than have it predefined and a path etc.. or if they could at least browse for the file that would help for now and we can come back to the subrecipe creation ui later. |
|
@Abhijay007 Abhijay007 Thanks for your contributions! It looks great! I have 2 small feedback on the UI. 1. "Edit Subrecipe" Screen
The title The section WDYT? cc: @zanesq |
a993ee7 to
dd31795
Compare
ui/desktop/src/components/recipes/shared/CreateSubRecipeInline.tsx
Outdated
Show resolved
Hide resolved
5f70c8c to
7615dd5
Compare
|
Hi @Abhijay007, Thank you so much for your contribution! The PR looks good! I checked this PR out and did some testing, and found 2 bugs:
It took me a while to connect this with the new sub recipe, and it seems does not work when I start a new session to run the subrecipe. I feel we need to fix this so that user won't be confused.
|
Thanks @lifeizhou-ap for the review I will surely fix it today |
d8c32bd to
a3bc0a4
Compare
ui/desktop/src/components/recipes/shared/CreateSubRecipeInline.tsx
Outdated
Show resolved
Hide resolved
|
@lifeizhou-ap can you take another look? |
9353280 to
1cb2d0b
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9884262df3
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
ui/desktop/src/components/recipes/shared/CreateSubRecipeInline.tsx
Outdated
Show resolved
Hide resolved
ui/desktop/src/components/recipes/shared/CreateSubRecipeInline.tsx
Outdated
Show resolved
Hide resolved
|
Thanks @Abhijay007 this looks good to me, the two Codex review comments above look like genuine issues to resolve though. |
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
…recipe UI Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
Signed-off-by: Abhijay007 <[email protected]>
…before save Signed-off-by: Abhijay Jain <[email protected]>
9884262 to
96fedd6
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 96fedd65ff
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
Signed-off-by: Abhijay Jain <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d67eeeb856
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| disabled={ | ||
| !name.trim() || | ||
| !form.state.values.title.trim() || | ||
| !form.state.values.description.trim() || | ||
| !form.state.values.instructions.trim() || |
There was a problem hiding this comment.
Subscribe form state before gating subrecipe save button
The create button is disabled from form.state.values even though this component never subscribes to the form store, so these reads are not guaranteed to re-render with field edits. In practice, if the user enters name first and then fills title/description/instructions, the button can remain disabled until an unrelated local-state change happens, blocking the normal top-to-bottom flow. Drive this disabled state from form.Subscribe (or mirrored component state) so it updates whenever those form fields change.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Minor regression can be done under small ui patch
* origin/main: fix: handle reasoning content blocks in OpenAI-compat streaming parser (#8078) chore(acp): build native packages on latest mac (#8075) Display delegate sub agents logs in UI (#7519) Update tar version to avoid CVE-2026-33056 (#8073) refactor: consolidate duplicated dependencies into workspace (#8041) tui: set up for publishing via github actions (#8020) feat: feature-gate local inference dependencies (#7976) feat: ability to manage sub recipes in desktop ui (#6360)
* main: (37 commits) fix: handle reasoning content blocks in OpenAI-compat streaming parser (#8078) chore(acp): build native packages on latest mac (#8075) Display delegate sub agents logs in UI (#7519) Update tar version to avoid CVE-2026-33056 (#8073) refactor: consolidate duplicated dependencies into workspace (#8041) tui: set up for publishing via github actions (#8020) feat: feature-gate local inference dependencies (#7976) feat: ability to manage sub recipes in desktop ui (#6360) Tweak the release process: no more merge to main (#7994) fix: gemini models via databricks (#8042) feat(apps): Pass toolInfo to MCP Apps via hostContext (#7506) fix: remove configured marker when deleting oauth provider configuration (#7887) docs: add vmware-aiops MCP extension documentation (#8055) Show setup instructions for ACP providers in settings modal (#8065) deps: replace sigstore-verification with sigstore-verify to kill vulns (#8064) feat(acp): add session/set_config and stabilize list, delete and close (#7984) docs: Correct `gosoe` typo to `goose` (#8062) fix: use default provider and model when provider in session no longer exists (#8035) feat: add GOOSE_SHELL env var to configure preferred shell (#7909) fix(desktop): fullscreen header bar + always-visible close controls (#8033) ...




closes #6083
PR Description
This PR adds the ability to manage sub-recipes in the desktop UI. Sub-recipes are recipes that can be called as tools during recipe execution, enabling multi-step workflows and reusable components.
Changes Made:
Type of Change
AI Assistance
Testing