OUT-3982 | Editor: Studio app toggles in Actions sidebar + preview rows - #224
Merged
Conversation
Internal users control each Studio app's presence in Your Actions from
the existing Actions sidebar panel. Apps appear automatically once
installed and registered, defaulted to on.
- useActions merges dynamic apps (keyed by appId) after built-ins;
toggle checked = !hiddenAppIds.includes(appId); flipping mutates
actions.hiddenAppIds, saved via the existing Save Changes flow.
- AppToggleItem renders a non-draggable toggle row (Studio-app rows are
excluded from dnd reorder in v1).
- Editor preview now shows every enabled dynamic row regardless of
count, matching built-in behavior, with the {{N}} placeholder chip.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Built-ins and dynamic Studio-app rows now share one drag-orderable list in the Actions sidebar; `order` holds a mix of ActionKeys and appIds, and useEnabledActions renders in that unified order (drops the v1 "apps last, non-draggable" restriction). Removes AppToggleItem; ActionItem icon widened to IconType. - Exclude the Tasks app (appId === TASKS_APP_ID) from actionable-installs discovery so it doesn't duplicate the built-in Tasks row. - Fan out notification-settings via mapWithConcurrency (limit 5) instead of Promise.all, avoiding a TLS-connection burst that tripped undici connect timeouts in dev. - Log both the raw platform installs and the final actionable list to aid debugging why an app does/doesn't surface. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryUpdates Studio app actions and completes the prior logging fix.
Confidence Score: 5/5The PR appears safe to merge. No blocking failures remain in the prior-thread logging fix. Important Files Changed
Reviews (2): Last reviewed commit: "chore(OUT-3982): remove discovery debug ..." | Re-trigger Greptile |
Drop the temporary logger.info calls for the raw platform installs and the final actionable list; keep the error log for failed notification-settings fetches. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
@greptile please re review |
arpandhakal
merged commit Jul 27, 2026
69d33d8
into
arpandhakal/out-3981-client-ui-dynamic-studio-app-rows-in-your-actions
10 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Lets internal users control each Studio app's presence in "Your Actions" from the existing Actions sidebar panel. Apps appear in the toggle list automatically once installed and registered (default on, zero setup), and can be dragged into any order alongside the built-in rows.
useActions— merges dynamic apps (from OUT-3979 discovery) into the toggle list. App toggles are keyed byappId;checked = !hiddenAppIds.includes(appId); flipping mutatesactions.hiddenAppIds(OUT-3978 deny-list) and saves via the existing "Save Changes" flow (useAppControlsdirty-check already covershiddenAppIds).actions.orderholds a mix ofActionKeys andappIds; items absent from it fall to the end until positioned.useEnabledActionsrenders the client card in the same unified order. (Supersedes the ticket's v1 "apps last, non-draggable" note per follow-up discussion.)AppToggleItem;ActionItem'siconwidened from the 4-valueActionItemIcontoIconTypeso app icons render. Dropped the now-unusedActionItemIcontype.{{N}}placeholder chip viaHandleBarTemplate; client/preview still resolves the real unread count and hides at 0.appId === TASKS_APP_ID) is excluded from actionable-installs discovery. Fixed server-side so both the sidebar and the rendered card are covered from one source.mapWithConcurrency(limit 5) instead ofPromise.all, avoiding a burst of TLS connections that tripped undici connect timeouts in dev. Addedlogger.infofor both the raw platform installs and the final actionable list to aid debugging.pnpm typecheckandpnpm lintpass.Testing Criteria
{{N}}chip; client view shows the resolved count and hides rows at 0.appId).Notes
feature/studio-apps-action.TASKS_APP_IDis the Tasks app'sappId; the built-in Tasks row identifies itself by the same value (/api/workspace/tasks-app-id→getAppId(TASKS_APP_ID)), so excluding it from discovery is exact.appId(e.g. a future "Tasks Beta") still surface as their own dynamic rows — only the canonical Tasks app is de-duped.Impact & Surface Area of Change
useActionsanduseEnabledActionsnow depend onuseInstalledApps(workspace-scoped React Query) and share theorderarray across built-in keys and appIds. Worth a regression check on drag-reorder + Save for the built-in-only case (no installed apps).ActionItem'siconprop widened toIconType— verify built-in action icons still render.mapWithConcurrencyreplacesPromise.allingetActionableInstalls; behavior identical apart from bounded concurrency.🤖 Generated with Claude Code