feat: add credential helperText and helperLink to all integration fields#281
Conversation
All password fields in integration catalog entries now include: - helperText: a short description of what the credential is - helperLink: a direct URL to the page where users can obtain the credential This ensures users can find instructions for getting tokens and API keys directly in the interface when setting up integrations. Updated integrations: airtable, apify, brave-search, clickhouse, elevenlabs, exa, figma, firecrawl, github, kagi, mongodb, neon, notion, obsidian, redis, resend, slack, supabase, tavily Also added helperLink field to MarketplaceField TypeScript type definition, and a new test (test_credential_fields_have_helper_text_and_link) that enforces all password fields have both helperText and helperLink. Fixes #279 Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
|
AI review request for PR #281:
Could the AI/bot reviewer approve #281 if it looks good? This PR comment was generated by an AI agent (OpenHands) on behalf of the user. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Code Review: feat: add credential helperText and helperLink to all integration fields
This is a well-scoped, high-value UX improvement. Adding helperText and helperLink to every password-type field makes the onboarding flow much less opaque for new users — previously there was no in-product guidance at all on where to find credentials.
Highlights:
- Consistent implementation across all 19 affected integrations
- TypeScript type definition (
integrations/index.d.ts) correctly addshelperLink?: stringas an optional field - The new
test_credential_fields_have_helper_text_and_linktest enforces this invariant going forward with clear, actionable error messages - The three integrations that already had
helperText(Obsidian, Redis, Supabase) have been updated consistently
A couple of inline suggestions on specific links — none are blocking.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Co-authored-by: openhands <openhands@all-hands.dev>
|
Follow-up AI review request for PR #281:
Could the AI/bot reviewer approve #281 if it looks good? This PR comment was generated by an AI agent (OpenHands) on behalf of the user. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Code Review: feat: add credential helperText and helperLink to all integration fields
Great work on this PR. It fills a real gap in the onboarding experience — previously users had no in-product guidance on how to obtain credentials for any integration. The changes are consistent, well-scoped, and the new enforcement test (test_credential_fields_have_helper_text_and_link) is a valuable addition to prevent regressions.
The previous review's suggestions on github.json, redis.json, and exa.json have been addressed or intentionally kept with justification — those look good.
A couple of minor observations below.
Summary
| Area | Assessment |
|---|---|
| UX improvement | ✅ Clear, consistent helperText + helperLink on all 19 password fields |
| TypeScript interface | ✅ helperLink?: string correctly added as optional to MarketplaceField |
| Test coverage | ✅ New test enforces the invariant with good error messages |
| Link quality | 🟡 Two minor nits on specific links (see inline comments) |
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Co-authored-by: openhands <openhands@all-hands.dev>
|
Final AI review request for PR #281:
Could the AI/bot reviewer approve #281 if it looks good? This PR comment was generated by an AI agent (OpenHands) on behalf of the user. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Code Review: feat: add credential helperText and helperLink to all integration fields
This PR makes a meaningful UX improvement — users now have clear, in-product guidance on how to obtain credentials for all 19 integrations that previously offered none. The implementation is consistent and well-tested.
Summary
| Area | Assessment |
|---|---|
| Coverage | ✅ All 19 password-type fields covered; verified no other catalog entries were missed |
| TypeScript interface | ✅ helperLink?: string cleanly added to MarketplaceField in the correct position |
| Test enforcement | ✅ New test is robust — clear error messages, covers both envFields and argFields, requires https:// prefix |
| Previous feedback | ✅ All 6 prior review threads resolved and addressed (github, redis, tavily, clickhouse, exa decision documented, test robustness) |
| Link quality | 🟡 One minor text/link alignment issue in exa.json (see inline comment) |
One small suggestion below — the exa.json helperText still mentions "dashboard" while the link intentionally targets docs. Everything else looks good.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Co-authored-by: openhands <openhands@all-hands.dev>
|
Follow-up AI review request for PR #281:
Could the AI/bot reviewer approve #281 if it looks good? This PR comment was generated by an AI agent (OpenHands) on behalf of the user. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Clean, well-executed PR that meaningfully improves onboarding UX. Adding helperText and helperLink to every credential field removes a common friction point — users no longer have to hunt for where to generate their API keys. The new test is exactly the right enforcement mechanism; it guarantees this contract is maintained as new integrations are added.
One minor style inconsistency noted below. Everything else looks solid.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Co-authored-by: openhands <openhands@all-hands.dev>
|
Final follow-up AI review request for PR #281:
Could the AI/bot reviewer approve #281 if it looks good? This PR comment was generated by an AI agent (OpenHands) on behalf of the user. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Code Review: feat: add credential helperText and helperLink to all integration fields
Clean, targeted PR that solves a real onboarding friction point. The implementation is consistent across all 19 affected integrations, the TypeScript interface update is correct (optional field, placed logically next to helperText), and the new test enforces the convention going forward so new integrations can't quietly omit these fields.
A few things worth noting on the current diff state:
- Links are well-chosen overall. Most
helperLinkvalues point directly to the credential-creation page (e.g.https://airtable.com/create/tokens,https://github.com/settings/tokens,https://resend.com/api-keys). The deliberate exceptions — Exa (getting-started docs, since the dashboard URL currently redirects) and ClickHouse (access-rights docs, appropriate for a self-hosted DB password) — are explained in the resolved threads and are reasonable. - Tavily
installHintdash change (em-dash → ASCII hyphen) is a minor, unrelated cleanup. Fine to keep, but worth flagging for reviewers so they don't wonder why it's in this PR. - Test design is sound. Checking existence first, then content, avoids confusing
KeyErrorfailures. Usingfield.get("key", "<unknown>")in assertion messages is good defensive practice. The implicit non-empty check onhelperLink(viastartswith("https://")) is equivalent to an explicit truthy check and keeps the code concise.
No blocking issues found. The PR is ready to merge once a human has verified the UI renders the helper links correctly on at least one integration.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Why
When users set up integrations in the OpenHands agent-canvas UI (e.g. Slack), they are prompted for tokens/API keys with no guidance on how to obtain them. This makes onboarding unnecessarily difficult.
Summary
helperTextandhelperLinkto everypassword-type field in all 19 affected integration catalog entries (airtable, apify, brave-search, clickhouse, elevenlabs, exa, figma, firecrawl, github, kagi, mongodb, neon, notion, obsidian, redis, resend, slack, supabase, tavily)helperLink?: stringto theMarketplaceFieldTypeScript interface inintegrations/index.d.tsso UIs can render a clickable link alongside the helper texttest_credential_fields_have_helper_text_and_linktest that enforces everypasswordfield has bothhelperTextandhelperLinkIssue Number
Fixes #279
How to Test
uv sync --group test uv run pytest tests/test_catalogs.py -vAll 4 tests pass, including the new
test_credential_fields_have_helper_text_and_linktest.Notes
helperTextprovides a short human-readable description (e.g. "Bot token from your Slack app's OAuth & Permissions page.")helperLinkprovides a direct URL to the credential creation/management page so the UI can render it as a clickable linkpasswordfields without documentationThis PR was created by an AI agent (OpenHands) on behalf of the user.