feat: cas personal connections parity - #122
Conversation
📊 Coverage Report
|
| type="button" | ||
| onClick={() => | ||
| window.open( | ||
| item.connectionsUrl ?? item.configurationUrl, |
There was a problem hiding this comment.
SDK falls back to connectionsUrl first, then configurationUrl.
CAS goes straight to configurationUrl.
- ConnectionsUrl is the Orchestrator page.
- configurationUrl is the Studio Web automation-configuration page — the URL that CAS builds in the controller
That's intentional and correct because of the use case difference:
- CAS runs inside the UiPath platform —
getConnectionAuthUrlwill succeed, and if it somehow fails,configurationUrl(the Studio Web automation-configuration page) still works because the user is already in the portal - SDK/widgets can run externally —
getConnectionAuthUrlwill fail for external apps, andconfigurationUrlis useless outside the portal, so falling back toconnectionsUrl(the Orchestrator connections page) is more useful since a logged-in user can at least manage connections there
So same core behavior (auth URL first), smarter fallback for the broader audience.
There was a problem hiding this comment.
Pull request overview
Adds UI support in conversational-agent-chat for CAS “personal connections” by surfacing a Connections section inside the Settings dialog, wired with agentId/folderId and backed by new i18n strings.
Changes:
- Introduces
ConnectionsSectionUI for viewing/selecting/clearing and saving connector bindings (with search/grouping and “add connection” flows). - Extends Settings plumbing to pass
agentId/folderIddown into Settings/Connections. - Adds new i18n keys/English strings for the connections experience.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/conversational-agent-chat/src/i18n/locales/keys/index.json | Adds new i18n keys for connections UI. |
| packages/conversational-agent-chat/src/i18n/locales/en/index.json | Adds English strings for the new connections UI. |
| packages/conversational-agent-chat/src/ConversationalAgentChat.tsx | Passes agentId/folderId into SettingsDialog. |
| packages/conversational-agent-chat/src/components/SettingsDialog/SettingsDialog.tsx | Adds optional agentId/folderId props and conditionally renders the new Connections accordion section. |
| packages/conversational-agent-chat/src/components/SettingsDialog/ConnectionsSection.tsx | New component implementing connections listing, selection, refresh-on-visibility, and save/cancel behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <button | ||
| type="button" | ||
| onClick={() => { setOpen(!open); setSearch(""); }} |
| "country_name_zimbabwe": "Zimbabwe", | ||
| "connections_title": "Connections", | ||
| "connections_loading": "Loading connections…", | ||
| "connections_no_configurable": "No configurable connections for this agent.", |
| export const ConnectionsSection = ({ | ||
| conversationalAgent, | ||
| agentId, | ||
| folderId, | ||
| }: ConnectionsSectionProps) => { |
There was a problem hiding this comment.
+1 to adding tests here, that would be great
| const fetchConnections = useCallback(() => { | ||
| return conversationalAgent | ||
| .getAvailableConnections(agentId, folderId) | ||
| .then((items) => { | ||
| const selections = getInitialSelections(items); | ||
| setAvailableConnections(items); | ||
| setInitialSelections(selections); | ||
| setStagedSelections(selections); | ||
| }); | ||
| }, [conversationalAgent, agentId, folderId]); |
| useEffect(() => { | ||
| let cancelled = false; | ||
| setLoading(true); | ||
| setLoadError(null); | ||
| setSaveResult(null); | ||
| fetchConnections() | ||
| .catch((err: unknown) => { | ||
| if (cancelled) return; | ||
| setLoadError(err instanceof Error ? err.message : String(err)); | ||
| }) | ||
| .finally(() => { | ||
| if (!cancelled) setLoading(false); | ||
| }); | ||
| return () => { | ||
| cancelled = true; | ||
| }; | ||
| }, [fetchConnections]); |
| variant={STATUS_VARIANT[selectedConnection.state] ?? "secondary"} | ||
| > | ||
| {t( | ||
| STATUS_LABEL_KEY[selectedConnection.state] ?? |
There was a problem hiding this comment.
For the PR check failure above it should be easy to fix with a coding agent - it's a nuance of having a script to check for string localization to protect against community contributions not being properly localized.
There was a problem hiding this comment.
Oh yeah - havent gotten around back to this PR, but I was going to check with Claude haha. Thanks for the context
Changes Summary
Support for CAS personal connections feature: https://github.com/UiPath/AgentInterfaces/pull/1035
1. uipath-typescript (
feat/cas-personal-connections)AvailableConnection,AvailableConnectionsItem,ConnectionSelection,UpdateConnectionSelectionsRequest,ConnectionAuthRequest/Responseinsrc/models/conversational-agent/connections/ConversationalAgentService:getAvailableConnections(agentId, folderId)— fetches configurable connector bindingsupdateConnectionSelections(agentId, folderId, request)— saves user's connection picksgetConnectionAuthUrl(connectorKey)— internal, gets platform auth URLgetAddConnectionUrl(item)— public helper with fallback chain: auth URL →connectionsUrl→configurationUrl→nullCONNECTIONS,CONNECTION_AUTHIS.Connections.Readto combined scopesconnections.test.ts— 13 tests covering all 4 methods + fallback logic + error paths2. uipath-ui-widgets (
feat/cas-personal-connections)Blocked on uipath-typescript publish.**
ConnectionsSection.tsx— matches CAS two-line row layout (icon+name, selection+badge+clear), inline dropdown picker, search, grouped connections, "+ Connection" button, visibility refreshSettingsDialog.tsx— addedagentId/folderIdprops, renders ConnectionsSection in accordionConversationalAgentChat.tsx— passesagentId/folderIdthroughen/index.jsonandkeys/index.jsonConnectionsSection.test.tsx— 17 tests covering loading, error, empty, rendering, picker, clear, dirty state, save/cancel, status badge, multiple connectorsMerge Order & Blockers
package.jsonto new uipath-typescript version, commit and merge PR (blocked on step 1)Waiting On
allFolders=truefor user-scoped external app tokens.allFolders: false) only returns the user's personal workspace connections for external apps. Full shared + personal folder support requires IS to lift this restriction.Typescript-sdk sample app:

Widgets sample app:
