feat(settings): add Dev Workflow config panel#2703
Conversation
Add ComposioGithubRepo and ComposioGithubReposResponse types to the Composio types module, and a listGithubRepos() wrapper in composioApi.ts that calls the dedicated openhuman.composio_list_github_repos RPC. This provides a typed frontend API for listing GitHub repositories through the user's Composio connection, used by the Dev Workflow panel.
Add devWorkflow.title, devWorkflow.desc, and devWorkflow.panelDesc keys to the English locale (en.ts and en-5 chunk) for the new Dev Workflow settings panel under Developer Options.
New settings panel at Settings > Advanced > Dev Workflow that lets users configure an autonomous developer agent to pick GitHub issues and raise PRs on a schedule. The panel: - Pre-checks GitHub connection status via listConnections() - Fetches repos via the dedicated composio_list_github_repos RPC - Auto-detects forks and shows upstream repo info - Fetches branches from upstream for PR target selection - Offers schedule presets (30min, 1hr, 2hr, 6hr, daily) - Saves config to localStorage (Phase 2 will wire to cron_add RPC) Note: The backend endpoint GET /agent-integrations/composio/github/repos is not yet deployed on staging (tinyhumansai/backend#842). The panel shows a clear error message until the backend is updated.
- Add 'dev-workflow' to SettingsRoute type union and path matching - Add breadcrumb under Developer Options section - Register /settings/dev-workflow route in Settings.tsx - Add nav menu item with code icon in DeveloperOptionsPanel
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a new "dev-workflow" settings panel with Composio GitHub integration (repo/branch selection, schedule presets, localStorage persistence), wires navigation/menu/i18n for /settings/dev-workflow, and updates the GitHub memory-sync provider and curated tool slugs to use updated Composio action names. ChangesDev Workflow Configuration Panel
GitHub Provider Composio Action Updates
Sequence DiagramsequenceDiagram
participant UI as DevWorkflowPanel
participant ComposioApi as ComposioApi.listGithubRepos
participant RepoActions as Composio GITHUB_* actions
participant Storage as localStorage
UI->>Storage: load saved config
UI->>ComposioApi: listGithubRepos(connectionId?)
ComposioApi-->>UI: repositories
UI->>RepoActions: GITHUB_GET_A_REPOSITORY (fork check)
RepoActions-->>UI: repo metadata
UI->>RepoActions: GITHUB_LIST_BRANCHES
RepoActions-->>UI: branches
UI->>Storage: save DevWorkflowConfig
Storage-->>UI: saved
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Replace the dedicated listGithubRepos RPC (which 404s on staging) with a direct composio_execute call using the correct Composio tool slug GITHUB_LIST_REPOSITORIES_FOR_AUTHENTICATED_USER. Both paths currently fail because the staging backend's Composio integration doesn't have this tool enabled (tinyhumansai/backend#842). The panel shows a clear error message referencing the backend issue.
Composio renamed several GitHub tool slugs. Update the curated catalog and all references: - GITHUB_GET_AUTHENTICATED_USER → GITHUB_GET_THE_AUTHENTICATED_USER - GITHUB_LIST_REPOSITORIES_FOR_AUTHENTICATED_USER → GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER - GITHUB_SEARCH_ISSUES → GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS - GITHUB_CREATE_A_REPOSITORY_FOR_AUTHENTICATED_USER → GITHUB_CREATE_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER - GITHUB_CANCEL_WORKFLOW_RUN → GITHUB_CANCEL_A_WORKFLOW_RUN Removed tools no longer in Composio catalog: - GITHUB_COMMIT_MULTIPLE_FILES (removed) - GITHUB_CLOSE_AN_ISSUE (use GITHUB_UPDATE_AN_ISSUE with state=closed) - GITHUB_DELETE_A_BRANCH (use GITHUB_DELETE_A_REFERENCE)
Update the panel to use GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER (the current Composio slug) instead of the old slug that was returning ToolNotFound.
Remove the temporary DEBUG button and composioListTools import that were used to discover the correct Composio GitHub tool slugs. Also fix branch listing to handle Composio's nested data wrappers and always show a fallback when branches can't be parsed.
When GITHUB_LIST_BRANCHES returns unparseable data, deduplicate the fallback branch list (defaultBranch was duplicating 'main') and log the raw response data to help debug the Composio response shape.
Composio wraps GitHub LIST_BRANCHES response as { data: { details: [...] } }
not { data: [...] } or { branches: [...] }. Update the parser to probe
the 'details' key first. Also remove debug console.logs.
- Add devWorkflow.title, devWorkflow.desc, devWorkflow.panelDesc keys to all 12 non-English locale chunk files (ar, bn, de, es, fr, hi, id, it, ko, pt, ru, zh-CN) with English placeholder values - Run Prettier on DevWorkflowPanel.tsx, composioApi.ts, Settings.tsx
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (2)
src/openhuman/memory_sync/composio/providers/github/provider.rs (1)
34-35: ⚖️ Poor tradeoffConsider renaming constants to better reflect their values.
The constant names are abbreviated and don't fully match the action identifiers they represent:
ACTION_GET_AUTHENTICATED_USER→"GITHUB_GET_THE_AUTHENTICATED_USER"(missing "THE")ACTION_SEARCH_ISSUES→"GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS"(missing "AND_PULL_REQUESTS")While functional, this naming could confuse maintainers who expect the constant name to match the action identifier more closely.
♻️ Suggested rename for clarity
-pub(crate) const ACTION_GET_AUTHENTICATED_USER: &str = "GITHUB_GET_THE_AUTHENTICATED_USER"; -pub(crate) const ACTION_SEARCH_ISSUES: &str = "GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS"; +pub(crate) const ACTION_GET_THE_AUTHENTICATED_USER: &str = "GITHUB_GET_THE_AUTHENTICATED_USER"; +pub(crate) const ACTION_SEARCH_ISSUES_AND_PULL_REQUESTS: &str = "GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS";Note: This would require updating all usages of these constants throughout the file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/openhuman/memory_sync/composio/providers/github/provider.rs` around lines 34 - 35, The constant names ACTION_GET_AUTHENTICATED_USER and ACTION_SEARCH_ISSUES do not exactly match their action identifier strings; rename them to exactly reflect the identifiers (e.g., ACTION_GET_THE_AUTHENTICATED_USER -> "GITHUB_GET_THE_AUTHENTICATED_USER" and ACTION_SEARCH_ISSUES_AND_PULL_REQUESTS -> "GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS") and update every usage in this module (and any imports) to use the new constant names (search for ACTION_GET_AUTHENTICATED_USER and ACTION_SEARCH_ISSUES to locate all references such as in provider.rs functions and match arms) so names and values are consistent.src/openhuman/memory_sync/composio/providers/github/tools.rs (1)
106-106: ⚡ Quick winAdd migration guidance for removed
GITHUB_COMMIT_MULTIPLE_FILESaction.The comment notes this action was removed from Composio's catalog but doesn't provide an alternative, unlike the other removed actions (lines 120 and 166). If agents previously used this action, they need clear guidance on the replacement workflow.
📝 Suggested comment improvement
- // GITHUB_COMMIT_MULTIPLE_FILES removed from Composio catalog + // GITHUB_COMMIT_MULTIPLE_FILES removed from Composio catalog — use multiple GITHUB_CREATE_A_COMMIT calls or GITHUB_CREATE_OR_UPDATE_FILE_CONTENTS🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/openhuman/memory_sync/composio/providers/github/tools.rs` at line 106, Add migration guidance explaining that the GITHUB_COMMIT_MULTIPLE_FILES action was removed and should be replaced by a branch+per-file commit workflow: instruct agents to create a branch, commit each file individually using the existing single-file commit action(s) (e.g., the provider's commit/put-file action), and then open a PR or merge the branch (describe using the repository's "create branch", "commit file", and "open PR" actions in sequence). Reference the removed symbol GITHUB_COMMIT_MULTIPLE_FILES in the comment and show the explicit replacement sequence (create branch → commit files one-by-one → open PR/merge) so callers know how to migrate existing usages; mirror the style used for the other removed actions' comments.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/src/components/settings/panels/DevWorkflowPanel.tsx`:
- Around line 105-114: The effect synchronously sets multiple states on mount;
replace this pattern by reading loadSavedConfig once and using lazy useState
initializers (or a single initializer that returns an object) so state is
populated during initial render instead of inside useEffect: call
loadSavedConfig in lazy initializers for savedConfig, selectedRepo, forkInfo,
targetBranch and schedule (or compute a single initial object and derive each
piece) and remove the synchronous
setSavedConfig/setSelectedRepo/setForkInfo/setTargetBranch/setSchedule calls
from the useEffect; keep loadSavedConfig, useEffect, and all setter names
(setSavedConfig, setSelectedRepo, setForkInfo, setTargetBranch, setSchedule) to
locate and update the code.
- Around line 58-74: The code is directly reading/writing localStorage in
loadSavedConfig, saveConfig, and clearConfig for DevWorkflowConfig; replace this
ad-hoc persistence with a Redux Toolkit slice under app/src/store that holds the
DevWorkflowConfig state, wire it up to redux-persist so the slice is persisted,
and update all call sites to use the new slice's actions/selectors (e.g.,
dispatch save/update actions instead of calling saveConfig, use selector instead
of loadSavedConfig, and dispatch a clear/reset action instead of clearConfig);
remove localStorage usage from DevWorkflowPanel.tsx and any other occurrences
(including the other block noted) once the slice is used.
- Around line 49-54: DevWorkflowPanel renders hard-coded user-visible strings
(cron option labels and other UI text) instead of using translations; update the
component to call useT() and replace all literal labels/options (the schedule
options array shown, any button text, helper copy and status text within
DevWorkflowPanel) with t('devWorkflow.<key>') keys, then add those corresponding
keys and English values to the i18n entries in en.ts; ensure you use the
existing useT() hook (call t = useT()) and replace every literal in the
component (including the ranges noted around 355-516) so no user-facing string
remains hard-coded.
In `@app/src/lib/composio/composioApi.ts`:
- Around line 193-208: Run Prettier on the updated TypeScript sources (including
this file) to fix the formatting CI failure; specifically format the file
containing listGithubRepos (which calls callCoreRpc and returns
unwrapCliEnvelope) so the code matches the project's Prettier rules (e.g., run
prettier --write "**/*.{ts,tsx,js,jsx}" or your project's formatter script) and
re-run the build/CI.
In `@app/src/lib/i18n/en.ts`:
- Around line 2972-2976: The new i18n keys
'settings.developerMenu.devWorkflow.title',
'settings.developerMenu.devWorkflow.desc', and
'settings.developerMenu.devWorkflow.panelDesc' were added in en.ts (and en-5
chunk) but are missing from the non-English chunk 5 files; open each locale
chunk file (ar-5.ts, bn-5.ts, de-5.ts, es-5.ts, fr-5.ts, hi-5.ts, id-5.ts,
it-5.ts, ko-5.ts, pt-5.ts, ru-5.ts, zh-CN-5.ts) and add those three keys with
the English strings as placeholders so each chunk contains the exact keys and
values present in en.ts.
---
Nitpick comments:
In `@src/openhuman/memory_sync/composio/providers/github/provider.rs`:
- Around line 34-35: The constant names ACTION_GET_AUTHENTICATED_USER and
ACTION_SEARCH_ISSUES do not exactly match their action identifier strings;
rename them to exactly reflect the identifiers (e.g.,
ACTION_GET_THE_AUTHENTICATED_USER -> "GITHUB_GET_THE_AUTHENTICATED_USER" and
ACTION_SEARCH_ISSUES_AND_PULL_REQUESTS ->
"GITHUB_SEARCH_ISSUES_AND_PULL_REQUESTS") and update every usage in this module
(and any imports) to use the new constant names (search for
ACTION_GET_AUTHENTICATED_USER and ACTION_SEARCH_ISSUES to locate all references
such as in provider.rs functions and match arms) so names and values are
consistent.
In `@src/openhuman/memory_sync/composio/providers/github/tools.rs`:
- Line 106: Add migration guidance explaining that the
GITHUB_COMMIT_MULTIPLE_FILES action was removed and should be replaced by a
branch+per-file commit workflow: instruct agents to create a branch, commit each
file individually using the existing single-file commit action(s) (e.g., the
provider's commit/put-file action), and then open a PR or merge the branch
(describe using the repository's "create branch", "commit file", and "open PR"
actions in sequence). Reference the removed symbol GITHUB_COMMIT_MULTIPLE_FILES
in the comment and show the explicit replacement sequence (create branch →
commit files one-by-one → open PR/merge) so callers know how to migrate existing
usages; mirror the style used for the other removed actions' comments.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 9c4068b7-a381-49cc-819e-c600f2ce9c87
📒 Files selected for processing (12)
app/src/components/settings/hooks/useSettingsNavigation.tsapp/src/components/settings/panels/DevWorkflowPanel.tsxapp/src/components/settings/panels/DeveloperOptionsPanel.tsxapp/src/lib/composio/composioApi.tsapp/src/lib/composio/types.tsapp/src/lib/i18n/chunks/en-5.tsapp/src/lib/i18n/en.tsapp/src/pages/Settings.tsxsrc/openhuman/memory_sync/composio/providers/github/provider.rssrc/openhuman/memory_sync/composio/providers/github/sync.rssrc/openhuman/memory_sync/composio/providers/github/tests.rssrc/openhuman/memory_sync/composio/providers/github/tools.rs
… init Address CodeRabbit review findings: 1. Replace all hardcoded English strings with t() i18n calls under settings.devWorkflow.* namespace (37 new keys). Schedule presets use labelKey resolved at render time. 2. Replace synchronous setState in useEffect with lazy useState initializers from loadSavedConfig() — removes the mount-only effect and avoids the react-hooks/set-state-in-effect violation. Keys added to en.ts, en-5.ts, and all 12 non-English chunk files.
graycyrus
left a comment
There was a problem hiding this comment.
code looks solid overall — the slug renames are clean and the panel is well-structured. holding off on approval until CI is green.
CI status: Rust Core Coverage is failing and E2E (Windows / macOS Appium) is still pending. once those resolve, i'll flip this to approved.
one minor observation not covered by CodeRabbit: listGithubRepos() is exported from composioApi.ts (referencing openhuman.composio_list_github_repos RPC) but DevWorkflowPanel never imports or calls it — the panel does its own inline composioExecute + manual response parsing instead. the structured ComposioGithubRepo/ComposioGithubReposResponse types are also orphaned for now. i assume these are prep scaffolding for #2707 which will wire up the backend endpoint — if so, a brief comment on listGithubRepos noting it's intended for #2707 would make that intent explicit and prevent future devs from wondering why it exists unused.
not a blocker. fix the CI and this is good to go.
Merge upstream/main to pick up fix(test): eliminate memory::ops flakes under cargo-llvm-cov (tinyhumansai#2722/tinyhumansai#2737) which fixes the pre-existing execute_success_path_persists_rule_in_isolated_workspace test failure. Also add devWorkflow i18n keys to the new Polish (pl) locale chunk added upstream.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/dev-workflow-plan.md`:
- Around line 29-30: Add a single blank line between the "### Files
created/modified" heading and the table line "| File | Action |" so the Markdown
has an empty line before the table; update the content around the heading and
the table row to insert that blank line.
- Line 194: The table row with text "Backend repo endpoint" contains a stale
link to https://github.com/tinyhumansai/backend/issues/842; verify the correct
repo/issue and update that URL in docs/dev-workflow-plan.md (the row starting
with "Backend repo endpoint | [backend#842]") to point to the current
repository/issue or remove the link and adjust the table cell text if the issue
was deleted or made private. Ensure the markdown link text (backend#842) matches
the new target or is removed to avoid a broken link.
- Line 172: The fenced code block containing "Phase 1 (Config UI) ──── ✅
DONE" lacks a language identifier; update that fenced block to include a
language tag such as "text" (i.e., replace ``` with ```text) so the code block
is properly identified for accessibility and tooling.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: df9e0551-b218-4898-a12a-5f55d4e7e095
📒 Files selected for processing (16)
app/src/lib/i18n/chunks/ar-5.tsapp/src/lib/i18n/chunks/bn-5.tsapp/src/lib/i18n/chunks/de-5.tsapp/src/lib/i18n/chunks/en-5.tsapp/src/lib/i18n/chunks/es-5.tsapp/src/lib/i18n/chunks/fr-5.tsapp/src/lib/i18n/chunks/hi-5.tsapp/src/lib/i18n/chunks/id-5.tsapp/src/lib/i18n/chunks/it-5.tsapp/src/lib/i18n/chunks/ko-5.tsapp/src/lib/i18n/chunks/pl-5.tsapp/src/lib/i18n/chunks/pt-5.tsapp/src/lib/i18n/chunks/ru-5.tsapp/src/lib/i18n/chunks/zh-CN-5.tsapp/src/lib/i18n/en.tsdocs/dev-workflow-plan.md
✅ Files skipped from review due to trivial changes (5)
- app/src/lib/i18n/chunks/ko-5.ts
- app/src/lib/i18n/chunks/zh-CN-5.ts
- app/src/lib/i18n/chunks/de-5.ts
- app/src/lib/i18n/chunks/bn-5.ts
- app/src/lib/i18n/chunks/id-5.ts
🚧 Files skipped from review as they are similar to previous changes (10)
- app/src/lib/i18n/chunks/es-5.ts
- app/src/lib/i18n/chunks/hi-5.ts
- app/src/lib/i18n/chunks/en-5.ts
- app/src/lib/i18n/chunks/pl-5.ts
- app/src/lib/i18n/chunks/it-5.ts
- app/src/lib/i18n/chunks/ru-5.ts
- app/src/lib/i18n/en.ts
- app/src/lib/i18n/chunks/ar-5.ts
- app/src/lib/i18n/chunks/fr-5.ts
- app/src/lib/i18n/chunks/pt-5.ts
The link checker can't access tinyhumansai/backend (private), so use the GitHub shorthand notation instead of a full URL.
9 tests covering the main render paths: - Header renders, repo dropdown populates on successful fetch - Not-connected error when no GitHub connection - Fork detection shows upstream info - Branch dropdown populates from Composio response (data.details) - Save stores config to localStorage, Remove clears it - Branches fetched from upstream coords when fork detected - Panel handles listConnections rejection gracefully Covers the changed lines to meet the ≥80% diff-coverage gate.
Summary
composio_execute, auto-detects forks, and lists branches for PR target selectionskills_runRPC from feat(codegraph,skills): code-retrieval engine + agent tools + skill registry & skills_run (D1–D3) [draft] #2707)Test plan
pnpm typecheckpassespnpm lintpasses (0 errors)Summary by CodeRabbit
New Features
Localization
Documentation