v0.6.6: landing improvements, styling consistency, mothership table renaming#3692
v0.6.6: landing improvements, styling consistency, mothership table renaming#3692waleedlatif1 merged 5 commits intomainfrom
Conversation
waleedlatif1
commented
Mar 20, 2026
- fix(landing): update broken links, change colors (fix(landing): update broken links, change colors #3687)
- improvement(toast): match notification styling with countdown ring and consistent design (improvement(toast): match notification styling with countdown ring and consistent design #3688)
- fix(preview): show actual nested workflow name in log snapshots (fix(preview): show actual nested workflow name in log snapshots #3689)
- chore(templates): disable templates page and related UI (chore(templates): disable templates page and related UI #3690)
- feat(copilot): add rename operation to user_table tool (feat(copilot): add rename operation to user_table tool #3691)
* fix(landing): update broken links, change colors
* update integration pages
* update icons
* link to tag
* fix(landing): resolve build errors and address PR review comments
- Extract useEffect redirect into ExternalRedirect client component to fix
fs/promises bundling error in privacy/terms server pages
- Fix InfisicalIcon fill='black' → fill='currentColor' for theme compatibility
- Add target="_blank" + rel="noopener noreferrer" to enterprise Typeform link
- Install @types/micromatch to fix missing type declarations build error
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(icons): fix InfisicalIcon fill='black' → fill='currentColor' in docs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* remove hardcoded ff
* fix(generate-docs): fix tool description extraction for two-step and name-mismatch patterns
Replace the fragile first-id/first-description heuristic with a per-id
window search: for each id: 'tool_id' match, scan the next 600 chars
(stopping before any params: block) for description: and name: fields.
This correctly handles the two-step pattern used by Intercom and others
where the ToolConfig export comes after a separate base object whose
params: would have cut off the old approach.
Add an exact-name fallback that checks tools.access for a tool whose
name matches the operation label — handles cases where block op IDs are
short aliases (e.g. Slack 'send') while the tool ID is more descriptive
('slack_message') but the tool name 'Slack Message' still differs.
Remove the word-overlap scoring fallback which was producing incorrect
descriptions (Intercom all saying 'Intercom API access token', Reddit
Save/Unsave inverted, etc.).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…d consistent design (#3688) * improvement(toast): match notification styling with countdown ring and consistent design * fix(toast): add success variant indicator dot
* fix(preview): show actual nested workflow name in log snapshots * fix(preview): ensure metadata.name in non-deployed child workflow path * style(preview): fix line formatting
* chore(templates): disable templates page and related UI * chore(templates): remove unused imports from disabled template code * fix(config): restore noNestedComponentDefinitions rule in biome config * chore(templates): comment out remaining dead template code Comment out handleTemplateFormSubmit, handleTemplateDelete, TemplateStatusBadge component, and TemplateProfile dynamic import that were left over after disabling the templates feature. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(templates): clean up dead code from review feedback - Remove unused usePathname/pathnameRef in use-workspace-management.ts - Comment out stale 'template' from TabView union type - Remove unused params from TemplateLayoutProps interface Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat(copilot): add rename operation to user_table tool * fix(copilot): use newName instead of name for table rename operation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Enhances integrations discovery pages: adds Azure AD and Infisical entries (plus icon mapping and icon viewBox tweaks), revises related-integration scoring and integration-page content/CTAs, and replaces the GitHub issue link with an in-app “Request an integration” modal backed by a new Disables public and workspace Written by Cursor Bugbot for commit 8d84c30. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Greptile SummaryThis PR bundles five focused changes across the Sim app: landing page link/colour fixes, a redesigned toast notification component, a fix for showing the correct nested workflow name in log snapshots, a temporary disable of the templates feature, and a new Key changes:
Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant U as User (Browser)
participant M as RequestIntegrationModal
participant R as /api/help/integration-request
participant RL as RateLimiter
participant E as Email Service
U->>M: Click "Request an integration"
M->>M: Open modal
U->>M: Fill form & submit
M->>R: POST {integrationName, email, useCase}
R->>RL: checkRateLimitDirect(ip-key, config)
alt Rate limit exceeded
RL-->>R: {allowed: false}
R-->>M: 429 Too Many Requests
M->>M: setStatus('error')
else Allowed
RL-->>R: {allowed: true}
R->>R: Validate with Zod schema
R->>E: sendEmail(to: help@domain)
E-->>R: {success: true}
R-->>M: 200 {success: true}
M->>M: setStatus('success')
M->>M: setTimeout → setOpen(false) after 1500ms
end
Last reviewed commit: "feat(copilot): add r..." |
| if (!newName) { | ||
| return { success: false, message: 'newName is required for renaming a table' } |
There was a problem hiding this comment.
Unnecessary type cast for
newName
newName is already declared as z.string().optional() in UserTableArgsSchema.args (schemas.ts line 159), so args is already typed to include it. The double-cast through Record<string, unknown> is redundant and drops type safety for no gain.
| if (!newName) { | |
| return { success: false, message: 'newName is required for renaming a table' } | |
| const newName = args.newName |
| ? bt | ||
| : byType.get(`${bt}_v2`) | ||
| ? `${bt}_v2` | ||
| : bt | ||
| const int = byType.get(resolvedBt) | ||
| const intName = int?.name ?? bt | ||
| return ( | ||
| <IntegrationIcon | ||
| key={bt} | ||
| bgColor={int?.bgColor ?? '#6B7280'} | ||
| name={intName} | ||
| Icon={blockTypeToIconMap[bt]} | ||
| className='h-6 w-6 rounded-[5px]' | ||
| iconClassName='h-3.5 w-3.5' | ||
| fallbackClassName='text-[9px]' | ||
| title={intName} | ||
| aria-label={intName} | ||
| /> | ||
| <span key={bt} className='inline-flex items-center gap-1.5'> | ||
| {idx > 0 && ( | ||
| <span className='text-[#555]' aria-hidden='true'> | ||
| → | ||
| </span> | ||
| )} | ||
| <span className='inline-flex items-center gap-1 rounded-[3px] bg-[#2A2A2A] px-1.5 py-0.5 font-[500] text-[#ECECEC]'> | ||
| <IntegrationIcon | ||
| bgColor={int?.bgColor ?? '#6B7280'} | ||
| name={intName} |
There was a problem hiding this comment.
Version suffix fallback only covers
_v2
The integration type resolution falls back to ${bt}_v2 but stops there. If any template uses a block type with a _v3 (or later) suffix that exists in the icon map but whose unversioned key is absent, both the bt and ${bt}_v2 lookups will return undefined, silently rendering a gray placeholder icon and the raw block-type string as the label instead of the integration's display name.
A more robust pattern would scan all keys for a common prefix, or derive versioned keys from the allIntegrations list:
// build a prefix → canonical type map once at module level
const byTypePrefix = new Map(
allIntegrations.map((i) => [i.type.replace(/_v\d+$/, ''), i.type])
)
// then resolve:
const resolvedBt = byType.get(bt) ? bt : (byTypePrefix.get(bt) ?? bt)| onChange={(e) => setEmail(e.target.value)} | ||
| autoComplete='email' |
There was a problem hiding this comment.
setTimeout without cleanup can update unmounted component state
If the user closes or navigates away within the 1 500 ms success window, the setTimeout callback will still fire and call setOpen(false) on the already-unmounted component tree. React 18 won't throw, but it is still a benign stale closure. Return a cleanup function from useEffect (or switch to a ref-guarded approach) instead of a bare setTimeout.
| onChange={(e) => setEmail(e.target.value)} | |
| autoComplete='email' | |
| setStatus('success') | |
| const t = setTimeout(() => setOpen(false), 1500) | |
| return () => clearTimeout(t) |
(This requires lifting the setTimeout into a useEffect that watches status === 'success'.)
