Skip to content

v0.6.20: oauth default credential name, models pages, new models#3894

Open
waleedlatif1 wants to merge 13 commits intomainfrom
staging
Open

v0.6.20: oauth default credential name, models pages, new models#3894
waleedlatif1 wants to merge 13 commits intomainfrom
staging

Conversation

@waleedlatif1
Copy link
Copy Markdown
Collaborator

@waleedlatif1 waleedlatif1 commented Apr 2, 2026

waleedlatif1 and others added 9 commits April 1, 2026 10:46
… calls (#3883)

* fix: specify authTagLength in AES-GCM decipheriv calls

Fixes missing authTagLength parameter in createDecipheriv calls using
AES-256-GCM mode. Without explicit tag length specification, the
application may be tricked into accepting shorter authentication tags,
potentially allowing ciphertext spoofing.

CWE-310: Cryptographic Issues (gcm-no-tag-length)

* fix: specify authTagLength on createCipheriv calls for AES-GCM consistency

Complements #3881 by adding explicit authTagLength: 16 to the encrypt
side as well, ensuring both cipher and decipher specify the tag length.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: clean up crypto modules

- Fix error: any → error: unknown with proper type guard in encryption.ts
- Eliminate duplicate iv.toString('hex') calls in both encrypt functions
- Remove redundant string split in decryptApiKey (was splitting twice)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* new turborepo version

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Lakee Sivaraya <71339072+lakeesiv@users.noreply.github.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
Co-authored-by: NLmejiro <kuroda.k1021@gmail.com>
…ential name (#3887)

* improvement(credentials): consolidate OAuth modals and auto-fill credential name

* fix(credentials): context-aware subtitle for KB vs workflow
…3884)

* fix: allow Bedrock provider to use AWS SDK default credential chain

Remove hard requirement for explicit AWS credentials in Bedrock provider.
When access key and secret key are not provided, the AWS SDK automatically
falls back to its default credential chain (env vars, instance profile,
ECS task role, EKS IRSA, SSO).

Closes #3694

Signed-off-by: majiayu000 <1835304752@qq.com>

* fix: add partial credential guard for Bedrock provider

Reject configurations where only one of bedrockAccessKeyId or
bedrockSecretKey is provided, preventing silent fallback to the
default credential chain with a potentially different identity.

Add tests covering all credential configuration scenarios.

Signed-off-by: majiayu000 <1835304752@qq.com>

* fix: clean up bedrock test lint and dead code

Remove unused config parameter and dead _lastConfig assignment
from mock factory. Break long mockReturnValue chain to satisfy
biome line-length rule.

Signed-off-by: majiayu000 <1835304752@qq.com>

* fix: address greptile review feedback on PR #3708

Use BedrockRuntimeClientConfig from SDK instead of inline type.
Add default return value for prepareToolsWithUsageControl mock.

Signed-off-by: majiayu000 <1835304752@qq.com>

* feat(providers): server-side credential hiding for Azure and Bedrock

* fix(providers): revert Bedrock credential fields to required with original placeholders

* fix(blocks): add hideWhenEnvSet to getProviderCredentialSubBlocks for Azure and Bedrock

* fix(agent): use getProviderCredentialSubBlocks() instead of duplicating credential subblocks

* fix(blocks): consolidate Vertex credential into shared factory with basic/advanced mode

* fix(types): resolve pre-existing TypeScript errors across auth, secrets, and copilot

* lint

* improvement(blocks): make Vertex AI project ID a password field

* fix(blocks): preserve vertexCredential subblock ID for backwards compatibility

* fix(blocks): follow canonicalParamId pattern correctly for vertex credential subblocks

* fix(blocks): keep vertexCredential subblock ID stable to preserve saved workflow state

* fix(blocks): add canonicalParamId to vertexCredential basic subblock to complete the swap pair

* fix types

* more types

---------

Signed-off-by: majiayu000 <1835304752@qq.com>
Co-authored-by: majiayu000 <1835304752@qq.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
* chore(bun): update bunfig.toml

* outdated bun lock

* chore(deps): downgrade @aws-sdk/client-secrets-manager to 3.940.0
* feat(landing): added models pages

* fix(models): address PR review feedback

Correct model structured-data price bounds, remove dead code in the models catalog helpers, and harden OG font loading with graceful fallbacks.

Made-with: Cursor

* relative imports, build fix

* lint

* fix(models): remove dead og-utils exports, fix formatTokenCount null guard
* improvement(workflow): seed start block on server side

* add creating state machine for optimistic switch

* fix worksapce switch

* address comments

* address error handling at correct level
…ns (#3893)

* improvement(providers): audit and update all provider model definitions

* fix(providers): add maxOutputTokens to azure/o3 and azure/o4-mini

* fix(providers): move maxOutputTokens inside capabilities for azure models
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 2, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Apr 2, 2026 8:33am

Request Review

@cursor
Copy link
Copy Markdown

cursor bot commented Apr 2, 2026

PR Summary

High Risk
Introduces a new credential type that stores/encrypts service account private keys and changes token issuance paths for multiple Google APIs; mistakes could cause auth failures or accidental exposure via logging/mis-scoped tokens. Also adds a large SEO surface (/models) that could impact build time and routing if registry data changes.

Overview
Adds first-class Google service account credentials alongside OAuth: new create/update flows validate + encrypt JSON keys, credential listing returns mixed oauth/service_account results, and token endpoints can mint JWT-based access tokens (with optional impersonateEmail) for Google services. Multiple Google tool routes (Drive, Gmail, Sheets, Calendar, Tasks, BigQuery) now request canonical service scopes and surface service-account token errors cleanly.

Launches a new public AI Models Directory at /models with provider/model SEO pages, OpenGraph image generation, JSON-LD structured data, sitemap entries, and a footer link. Also factors a reusable LandingFAQ component and adds docs for configuring Google service accounts with domain-wide delegation.

Written by Cursor Bugbot for commit fc6fe19. This will update automatically on new commits. Configure here.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 2, 2026

Greptile Summary

This version bump (v0.6.20) bundles nine incremental improvements across security, credentials UX, landing pages, and provider coverage. The most impactful changes are: (1) the AES-GCM authTagLength fix ensuring consistent cipher behaviour across Node.js versions; (2) server-side credential hiding for Azure and AWS Bedrock so self-hosted deployments can pre-configure keys without exposing them in the UI; (3) consolidation of two OAuth modals into one unified OAuthModal with auto-filled credential names; and (4) atomic workflow creation that seeds the default start block inside the same DB transaction.

Key changes:

  • fix(encryption)authTagLength: 16 now specified on all createCipheriv/createDecipheriv AES-GCM calls in both encryption.ts and crypto.ts, preventing potential auth-tag length ambiguity
  • feat(providers)NEXT_PUBLIC_BEDROCK_DEFAULT_CREDENTIALS and NEXT_PUBLIC_AZURE_CONFIGURED env flags hide credential fields in the Agent block UI when the deployment provides them server-side; byok.ts falls back to AZURE_OPENAI_API_KEY / AZURE_ANTHROPIC_API_KEY env vars automatically
  • improvement(credentials)ConnectCredentialModal and OAuthRequiredModal merged into a single OAuthModal with a mode discriminant; credential name auto-fills from the user's session name
  • improvement(workflow)saveWorkflowToNormalizedTables accepts an optional external transaction, and both POST /api/workflows and createWorkspace now seed the start block atomically within their own transactions
  • feat(landing) — new /models, /models/[provider], and /models/[provider]/[model] landing pages with OG images and sitemap entries
  • improvement(providers) — new OpenAI models (gpt-5.2-pro, gpt-5-pro, o3-mini, o3-pro) and updated Anthropic/Google model pricing; gemini-3-pro-preview removed from thinking-capable models
  • chorerequiresFeature sub-block property renamed to showWhenEnvSet; isSubBlockHiddenByHostedKey renamed to isSubBlockHidden and extended with hideWhenEnvSet support; PROVIDER_PLACEHOLDER_KEY constant replaces the inline 'bedrock-uses-own-credentials' string

One P1 issue identified: vertexProject in blocks/utils.ts is marked password: true, which masks a GCP project ID — a public, non-sensitive identifier — making it unnecessarily hard to verify.

Confidence Score: 4/5

  • Safe to merge after fixing the vertexProject password masking issue; all other findings are minor style/UX concerns.
  • The encryption fix, atomic workflow seeding, and Azure/Bedrock server-side credential hiding are all well-implemented. One P1 defect exists: vertexProject is incorrectly marked password: true, which masks a non-secret GCP project ID in the UI and would create real confusion for Vertex AI users. The displayName session-race and modal-reset observations are low-risk P2s given how better-auth hydrates sessions from cookies synchronously in most cases.
  • apps/sim/blocks/utils.ts — the password: true flag on vertexProject should be removed before merging.

Important Files Changed

Filename Overview
apps/sim/lib/core/security/encryption.ts Fixes AES-GCM cipher/decipher by explicitly specifying authTagLength: 16 on all cipher/decipher calls, preventing ambiguity with the Node.js crypto defaults. Also improves error handling with error instanceof Error.
apps/sim/lib/api-key/crypto.ts Parallel fix to encryption.ts — adds authTagLength: 16 to AES-GCM cipher/decipher, and cleans up the decryption parsing to use fixed-index parts instead of the generic slice(1, -1).join(':') approach.
apps/sim/app/workspace/[workspaceId]/components/oauth-modal.tsx New unified OAuth modal consolidating ConnectCredentialModal and OAuthRequiredModal. Auto-fills credential name from session, but the useState initializer runs once before session resolves, and handleClose doesn't reset displayName state.
apps/sim/blocks/utils.ts Centralizes provider credential sub-blocks. Adds hideWhenEnvSet to Azure/Bedrock credential fields and canonicalParamId for Vertex. However, vertexProject is incorrectly marked password: true (project IDs are public identifiers).
apps/sim/providers/bedrock/index.ts Removes hard requirement for bedrockAccessKeyId/bedrockSecretKey, falling back to AWS default credential chain when neither is provided. Validates that credentials are either both present or both absent to prevent misconfiguration.
apps/sim/lib/api-key/byok.ts Azure OpenAI and Azure Anthropic now fall back to server-side env vars (AZURE_OPENAI_API_KEY, AZURE_ANTHROPIC_API_KEY) when no user-provided key exists. Uses PROVIDER_PLACEHOLDER_KEY constant for Bedrock.
apps/sim/lib/workflows/persistence/utils.ts Refactors saveWorkflowToNormalizedTables to accept an optional external transaction, enabling callers to compose it within their own transaction without double-wrapping. Errors propagate correctly when externalTx is provided.
apps/sim/app/api/workflows/route.ts Workflow creation now seeds a default start block atomically within the same transaction as the workflow row insert, preventing partial state where a workflow exists without any blocks.
apps/sim/providers/models.ts Adds new OpenAI model definitions (gpt-5.2-pro, gpt-5-pro, o3-mini, o3-pro) and updates pricing updatedAt dates. o3-pro has no reasoningEffort capability defined, which is consistent with the model running at max reasoning by default.
apps/sim/providers/azure-openai/index.ts Validates and narrows apiKey before use, passes it explicitly via spread to all sub-calls. Falls back to env.AZURE_OPENAI_ENDPOINT and env.AZURE_OPENAI_API_VERSION from server env vars.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Agent Block UI] --> B{isSubBlockHidden?}
    B -->|hideWhenHosted| C{isHosted?}
    B -->|hideWhenEnvSet| D{NEXT_PUBLIC_* truthy?}
    C -->|yes| E[Field hidden]
    C -->|no| F[Field shown]
    D -->|yes| E
    D -->|no| F
    F --> G[User enters credentials]
    G --> H[byok.ts]
    H --> I{Provider type}
    I -->|Bedrock| J[PROVIDER_PLACEHOLDER_KEY -- uses IAM/IRSA]
    I -->|Azure OpenAI/Anthropic| K[userKey OR server env var]
    I -->|Other| L[userKey OR hosted key]
    J --> M[Provider executeRequest]
    K --> M
    L --> M
Loading

Reviews (1): Last reviewed commit: "improvement(providers): audit and update..." | Re-trigger Greptile

Comment on lines +109 to +113

const providerId = getProviderIdFromServiceId(serviceId)

const [displayName, setDisplayName] = useState(() =>
isConnect ? getDefaultCredentialName(session?.user?.name, providerName, credentialCount) : ''
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 displayName initialized before session data is available

useState runs its initializer exactly once on the first render. At that point session may still be null (the auth query hasn't resolved yet), so getDefaultCredentialName receives null and produces "My {Provider} 1" instead of the user-personalized "{User}'s {Provider} 1". When the session later resolves, the state is never updated.

Adding a useEffect to sync the name after the session loads would fix this:

// After the useState line:
const [hasUserEdited, setHasUserEdited] = useState(false)

useEffect(() => {
  if (isConnect && !hasUserEdited && session?.user?.name) {
    setDisplayName(getDefaultCredentialName(session.user.name, providerName, credentialCount))
  }
}, [session?.user?.name, isConnect, hasUserEdited, providerName, credentialCount])

// In the onChange handler, set hasUserEdited = true

* Fix blog not loading

* Use emcn icon

---------

Co-authored-by: Theodore Li <theo@sim.ai>
* feat(auth): allow google service account

* Add gmail support for google services

* Refresh creds on typing in impersonated email

* Switch to adding subblock impersonateUserEmail conditionally

* Directly pass subblock for impersonateUserEmail

* Fix lint

* Update documentation for google service accounts

* Fix lint

* Address comments

* Remove hardcoded scopes, remove orphaned migration script

* Simplify subblocks for google service account

* Fix lint

* Fix build error

* Fix documentation scopes listed for google service accounts

* Fix issue with credential selector, remove bigquery and ad support

* create credentialCondition

* Shift conditional render out of subblock

* Simplify sublock values

* Fix security message

* Handle tool service accounts

* Address bugbot

* Fix lint

* Fix manual credential input not showing impersonate

* Fix tests

* Allow watching param id and subblock ids

* Fix bad test

---------

Co-authored-by: Theodore Li <theo@sim.ai>
TheodoreSpeaks and others added 2 commits April 2, 2026 04:29
* fix(credential) fix credential migration

* Fix lint

---------

Co-authored-by: Theodore Li <theo@sim.ai>
… updates (#3886)

* feat(rippling): expand Rippling integration from 16 to 86 tools

* fix(rippling): add required constraints on name and data subBlocks for create operations

* fix(rippling): add subblock ID migrations for removed legacy fields

* fix(docs): add MANUAL-CONTENT markers to tailscale docs and regenerate

* fix(rippling): add missing response fields to tool transforms

Add fields found missing by validation agents:
- list_companies: physical_address
- list/get_supergroups: sub_group_type, read_only, parent, mutually_exclusive_key, cumulatively_exhaustive_default, include_terminated
- list/get/create/update_custom_object: native_category_id, managed_package_install_id, owner_id
- list/get/create/update_custom_app: icon, pages
- list/get/create/update_custom_object_field: managed_package_install_id

* fix(rippling): add missing block outputs and required data conditions

- Add 17 missing collection output keys (titles, workLocations, supergroups, etc.)
- Add delete/bulk/report output keys (deleted, results, report_id, etc.)
- Mark data subBlock required for create_business_partner, create_custom_app,
  and create_custom_object_field (all have required params via data JSON spread)
- Add optional: true to get_current_user work_email and company_id outputs

* fix(rippling): add missing supergroup fields and fix validation issues

- Add 5 missing supergroup fields (allow_non_employees, can_override_role_states, priority, is_invisible, ignore_prov_group_matching) to types, list, and get tools
- Fix ok fallback from true to false in supergroup inclusion/exclusion member update tools
- Fix truthy check to null check for description param in create_custom_object_field

* fix(rippling): add missing custom page fields and structured custom setting responses

- Add 5 missing CustomPage fields (components, actions, canvas_actions, variables, media) to types and all page tools
- Replace opaque data blob with structured field mapping in create/update custom setting transforms
- Fix secret_value type cast consistency in list_custom_settings

* fix(rippling): add missing response fields, fix truthy checks, and improve UX

- Add 9 missing Worker fields (location, gender, date_of_birth, race, ethnicity, citizenship, termination_details, custom_fields, country_fields)
- Add 5 missing User fields (name, emails, phone_numbers, addresses, photos)
- Add worker expandable field to GroupMember types and all 3 member list tools
- Add 5 optional params to trigger_report_run (includeObjectIds, includeTotalRows, formatDateFields, formatCurrencyFields, outputType)
- Fix truthy checks to null checks in create_department, create/update_work_location
- Fix customObjectId subBlock label to say "API Name" instead of "ID"

* update docs

* fix(rippling): fix truthy checks, add missing fields, and regenerate docs

- Replace all `if (params.x)` with `if (params.x != null)` across 30+ tool files to prevent empty string/false/zero suppression
- Add expandable `parent` and `department_hierarchy` fields to department tools
- Add expandable `parent` field to team tools
- Add `company` expandable field to get_current_user
- Add `addressType` param to create/update work location tools
- Fix `secret_value` output type from 'json' to 'string' in list_custom_settings
- Regenerate docs for all 86 tools from current definitions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): add all remaining spec fields and regenerate docs

- Add 6 advanced params to create_custom_object_field: required, rqlDefinition,
  formulaAttrMetas, section, derivedFieldFormula, derivedAggregatedField
- Add 6 advanced params to update_custom_object_field: required, rqlDefinition,
  formulaAttrMetas, section, derivedFieldFormula, nameFieldDetails
- Add 4 record output fields to all custom object record tools: created_by,
  last_modified_by, owner_role, system_updated_at
- Add cursor param to get_current_user
- Add __meta response field to get_report_run
- Regenerate docs for all 86 tools

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): align all tools with OpenAPI spec

- Add __meta to 14 GET-by-ID tools (MetaResponse pattern)
- Fix supergroup tools: add filter to list_supergroups, remove invalid
  cursor from 4 list endpoints, revert update members to PATCH with
  Operations body
- Fix query_custom_object_records: use query/limit/cursor body params,
  return cursor instead of nextLink
- Fix bulk_create: use rows_to_write per spec
- Fix create/update record body wrappers with externalId support
- Update types.ts param interfaces and block config mappings
- Add limit param mapping with Number() conversion in block config
- Regenerate docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): address PR review comments — add dedicated subBlocks, fix data duplication, expand externalId condition

- Add dedicated apiName, businessPartnerGroupId, workerId, dataType subBlocks so required params are no longer hidden behind opaque data JSON
- Narrow `data: item` in custom object record tools to only include dynamic fields, avoiding duplication of enumerated fields
- Expand externalId subBlock condition to include create/update custom object record operations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): remove data JSON required for ops with dedicated subBlocks

create_business_partner, create_custom_app, and create_custom_object_field
now have dedicated subBlocks for their required params, so the data JSON
field is supplementary (not required) for those operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): use rest-destructuring for all custom object record data output

The spec uses additionalProperties for custom fields at the top level,
not a nested `data` sub-object. Use the same rest-destructuring pattern
across all 6 custom object record tools so `data` only contains dynamic
fields, not duplicates of enumerated standard fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): make update_custom_object_record data param optional in type

Matches the tool's `required: false` — users may update only external_id
without changing data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): add dedicated streetAddress subBlock for create_work_location

streetAddress is required by the tool but had no dedicated subBlock —
users had to include it in the data JSON. Now has its own required
subBlock matching the pattern used by all other required params.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): add allOrNothing subBlock for bulk operations

The bulk create/update/delete tools accept an optional allOrNothing
boolean param, but it had no subBlock and no way to be passed through
the block UI. Added as an advanced-mode dropdown with boolean coercion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): derive spreadOps from DATA_OPS to prevent divergence

Replace the hardcoded spreadOps array with a derivation from the
file-level DATA_OPS constant minus non-spread operations. This ensures
new create/update operations added to DATA_OPS automatically get
spread behavior without needing a second manual update.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* updated

* fix(rippling): replace generic JSON outputs with specific fields per API spec

- Extract file_url, expires_at, output_type from report run result blob
- Rename bulk create/update outputs to createdRecords/updatedRecords
- Fix list_custom_settings output key mismatch (settings → customSettings)
- Make data optional for update_custom_object_record in block
- Update block outputs to match new tool output fields

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix landing

* restore FF

* fix(rippling): add wandConfig, clean titles, and migrate legacy operation values

- Remove "(JSON)" suffix from all subBlock titles
- Add wandConfig with AI prompts for filter, expand, orderBy, query, data, records, and dataType fields
- Add OPERATION_VALUE_MIGRATIONS to migrate old operation values (list_employees → list_workers, etc.) preventing runtime errors on saved workflows

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(rippling): fix grammar typos and revert unnecessary migration

- Fix "a object" → "an object" in update/delete object category descriptions
- Revert OPERATION_VALUE_MIGRATIONS (unnecessary for low-usage integration)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(landing): add interactive workspace preview tabs

Adds Tables, Files, Knowledge Base, Logs, and Scheduled Tasks preview
components to the landing hero, with sidebar nav items that switch to each view.

* test updates

* refactor(landing): clean up code quality issues in preview components

- Replace widthMultiplier with explicit width on PreviewColumn
- Replace key={i} with key={Icon.name} in connectorIcons
- Scope --c-active CSS variable to sidebar container, eliminating hardcoded #363636 duplication
- Replace '-  -  -' fallback with em dash
- Type onSelectNav as (id: SidebarView) removing the unsafe cast

* fix(landing): use stable index key in connectorIcons to avoid minification breakage

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

There are 4 total unresolved issues (including 2 from previous reviews).

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants