Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
0ee52d8
feat(providers): add Claude Opus 5.5 (#8141)
waleedlatif1 Sep 22, 2026
7de662e
fix(mcp): list servers without Credential Group access (#8143)
TheodoreSpeaks Sep 22, 2026
2c96b88
refactor(ui): make measurement styles explicit and reuse preview whit…
BillLeoutsakosvl346 Sep 22, 2026
96f4e64
fix(organizations): respect inherited access when inviting members (#…
waleedlatif1 Sep 22, 2026
607b613
improvement(ui): use chips for table job actions (#8082)
BillLeoutsakosvl346 Sep 22, 2026
dbc5850
improvement(ui): share public chat composer actions (#8075)
BillLeoutsakosvl346 Sep 22, 2026
3aa603f
improvement(ui): share expandable home sections (#8067)
BillLeoutsakosvl346 Sep 22, 2026
9d176cd
fix(access): align invitations and request navigation (#8145)
waleedlatif1 Sep 22, 2026
8e9d5fd
refactor(ui): narrow local style forwarding and preview geometry (#8144)
BillLeoutsakosvl346 Sep 22, 2026
cbd2603
fix(billing): let a slow ledger read finish instead of blocking execu…
waleedlatif1 Sep 22, 2026
cae7142
feat(models): add GPT-6 Sol and Luna (#8147)
waleedlatif1 Sep 22, 2026
c28366c
fix(billing): bound every ledger aggregate at the database and size t…
waleedlatif1 Sep 22, 2026
3e1e1fc
feat(jev): add TypeSafe evaluation models to Agent (#8103)
waleedlatif1 Sep 22, 2026
93fdd13
fix(oauth): rotate a refresh chain only from the token it started fro…
waleedlatif1 Sep 22, 2026
5242e46
improvement(settings): consolidate access requests in settings (#8154)
waleedlatif1 Sep 22, 2026
f492805
fix(billing): keep archived selected workspaces in the invitation app…
waleedlatif1 Sep 22, 2026
666b4d3
fix(knowledge): unschedule a connector whose credential the source re…
waleedlatif1 Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,13 @@ jobs:
lib/workspaces/organization-workspaces.postgres.test.ts
lib/billing/calculations/usage-reservation.test.ts

- name: Verify access request pagination and impact in PostgreSQL
- name: Verify access request flows, pagination, and impact in PostgreSQL
working-directory: apps/sim
env:
ACCESS_REQUESTS_TEST_DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/sim_access_requests_test
run: |
bun -e 'import postgres from "postgres"; const sql = postgres(process.env.DATABASE_URL); await sql.unsafe("CREATE DATABASE sim_access_requests_test"); await sql.end()'
bunx vitest run ee/access-requests/lib/repository.postgres.test.ts ee/access-requests/lib/impact.postgres.test.ts
bunx vitest run ee/access-requests/lib/repository.postgres.test.ts ee/access-requests/lib/impact.postgres.test.ts ee/access-requests/lib/application/flow.postgres.test.ts

- name: Verify fork previews ignore execution file history in PostgreSQL
working-directory: apps/sim
Expand Down
13 changes: 13 additions & 0 deletions apps/docs/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9936,3 +9936,16 @@ export function PitchBookIcon(props: SVGProps<SVGSVGElement>) {
</svg>
)
}

/** TypeSafe’s official mark from https://typesafe.ai. */
export function TypeSafeIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} viewBox='0 0 21 32' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M10.36 0.071C10.55 -0.054 10.707 -0.008 10.757 0.166L15.57 2.792L15.33 3.23L15.748 2.953V8.81L20.542 11.425L20.224 12.008L20.742 11.663V23.613C20.742 23.889 20.556 24.238 20.326 24.391L10.383 31.02V30.402L10.12 30.885L5.323 28.269C5.124 28.365 4.972 28.262 4.972 28.012V22.153L0.398 19.659C0.176 19.797 0 19.697 0 19.428V7.478C0 7.201 0.186 6.853 0.416 6.7L10.36 0.071ZM6.27 27.645L10.49 29.947L19.434 23.985L15.212 21.684L6.27 27.645ZM10.775 12.743V18.218C10.775 18.494 10.589 18.842 10.359 18.995L5.804 22.032V26.957L14.915 20.882V9.983L10.775 12.743ZM15.747 20.827C15.747 20.83 15.746 20.832 15.746 20.835L19.91 23.107V12.219L15.747 9.948V20.827ZM1.34 19.033L5.401 21.249L9.435 18.56L5.373 16.345L1.34 19.033ZM0.832 7.423V18.373L4.972 15.613V10.139C4.972 9.863 5.158 9.515 5.388 9.361L9.944 6.324V1.349L0.832 7.423ZM5.804 15.44L9.943 17.697V12.913L5.804 10.655V15.44ZM6.271 9.771L10.335 11.988C10.343 11.982 10.351 11.975 10.359 11.97L14.374 9.291L10.313 7.077L6.271 9.771ZM10.776 6.189L14.916 8.447V3.573L10.776 1.316V6.189Z'
/>
</svg>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import { Callout } from 'fumadocs-ui/components/callout'
| `MISTRAL_API_KEY` | Mistral |
| `XAI_API_KEY_1` | xAI |
| `KIMI_API_KEY_1` | Moonshot Kimi |
| `TYPESAFE_API_KEY_1` / `_2` / `_3` | TypeSafe Jev hosted key rotation |
| `ZAI_API_KEY_1` | Z.ai |
| `TOGETHER_API_KEY` | Together AI |
| `FIREWORKS_API_KEY` | Fireworks AI |
Expand Down
30 changes: 27 additions & 3 deletions apps/docs/content/docs/workflows/blocks/agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,30 @@ For a custom cloud deployment, enter its provider prefix and model ID: `azure/my

Ollama Cloud, OpenRouter, Fireworks, Together AI, Baseten, Ollama, vLLM, and LiteLLM load their available models from the configured provider. New models appear through that discovery without a Sim catalog release. You can also enter a namespaced ID directly, such as `ollama-cloud/deepseek-v4.1-flash`, `openrouter/provider/model`, or `ollama/my-local-model`. Provider prefixes are case-insensitive; the model ID after the prefix keeps its original casing.

### Jev evaluation models

Select `jev-latest` from TypeSafe in the Agent model selector. Hosted Sim supplies a key and bills model usage through the normal credit system; workspace or organization BYOK keys override the hosted key without model charges. Self-hosted users enter their TypeSafe key in the block. Use `jev-1.13.0` to pin a version or `jev-preview` to follow preview releases. These models use **State** and **Questions** in place of conversational messages. State accepts text or a reference to a JSON object or array. Questions is a JSON object keyed by the answer names you want:

```json
{
"route": {
"type": "choice",
"instructions": "Which team should handle this request?",
"criteria": { "billing": "Payments and invoices", "support": "Product issues" }
},
"urgency": {
"type": "score",
"instructions": "How urgent is the request?",
"criteria": ["Routine", "Soon", "Immediate"]
},
"resolved": { "type": "noul", "instructions": "Has the request been resolved?" }
}
```

Read results from `<agent.answers>` or expand an answer in the reference picker, such as `<agent.answers.route.choice>`. Each Choice answer includes `choice`, `probabilities`, and `confidence`; each Score answer includes `score`, `legend`, `probabilities`, and `confidence`; each Noul answer includes `noul`, a probability from 0 to 1. `content` contains the same answers as JSON text, and the standard model, token, timing, and cost outputs remain available. Use a Condition block to route on these results.

Jev evaluates the supplied state in one request. Chat messages, files, tools, skills, conversation memory, response-format schemas, and chat model fallbacks are hidden for these models. Saved settings return when you switch back to a chat model. TypeSafe documents a 64,000-token total request limit and a 32,000-token limit for state plus the longest question. See [TypeSafe's model documentation](https://docs.typesafe.ai/models) and [question formats](https://docs.typesafe.ai/api).

### Files

Files for the model to read: images for a vision-capable model, or documents for text. Upload them on the block, or pass a file from an earlier block, such as an upload trigger or an [API](/workflows/blocks/api) response, with a connection tag.
Expand Down Expand Up @@ -104,7 +128,7 @@ Some settings live under advanced, or appear only for models that support them:
- **Max output tokens.** Caps the response length. Defaults to the model's full limit.
- **Reasoning effort / Thinking level.** For models with extended reasoning, how much the model thinks before answering. Higher is more thorough but slower and costs more tokens.
- **Prompt caching.** For Anthropic Claude models, reuses the system prompt and tool definitions between runs instead of re-reading them every time. Cached input costs a tenth of the normal rate, but writing the cache costs 1.25x, so leave it off for one-off runs and turn it on when the same agent runs repeatedly. The cache covers a prefix only if it reaches 1,024 tokens (2,048 on Haiku) — below that Anthropic ignores it and nothing changes. Entries expire after five minutes of no use.
- **API key.** Your key for the chosen provider. Hidden on hosted Sim, which supplies one.
- **API key.** Your key for the chosen provider. Hidden when hosted Sim supplies a key for the selected model, including Jev.
- **Fallback models.** An ordered list of up to five models to try when the request to the selected model fails, whether the provider is overloaded, rate-limited, or down. Sim tries the 2nd choice, then the 3rd, and so on, once each, and `<agent.model>` reports the model that answered. On hosted Sim, hosted models use your workspace's BYOK or platform credentials; local and self-hosted installations may still require a key. A model that needs its own key takes it from a workspace environment variable you pick on the row; a model on the same provider as the selected model reuses the block's key. A stored row key stops applying when its key field is hidden. Providers that require family-specific credentials, such as Vertex, can only be fallbacks for a selected model of the same family. The Auto model cannot be a fallback. A fallback runs with the selected model's settings where its provider accepts them: temperature and max output tokens are clamped to the fallback's limits, and when the fallback has a reasoning effort, thinking level, or verbosity setting that the selected model's value does not fit, the row shows that field so you can pick a value for it; leave it empty and the provider's default applies.
- **Retry on fail.** Retries the selected model after a failure, up to a maximum number of tries with a wait between them. When its tries run out, the fallback models are tried in order, once each, with no wait before the first of them. A fallback is never retried. See [Retries and fallbacks](#retries-and-fallbacks) for how recorded tool results are reused and when a tool can execute again.

Expand Down Expand Up @@ -134,8 +158,8 @@ Live tool-call chips stream for **OpenAI, Anthropic, Azure Anthropic, Google, Ve

| Provider | Streamed thinking | Models |
|----------|-------------------|--------|
| OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `gpt-6-astra`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5-pro`, `gpt-5.5`, `gpt-5.4-pro`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.3-codex`, `gpt-5.2-pro`, `gpt-5.2`, `gpt-5.1`, `gpt-5-pro`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `o4-mini`, `o3`, `o3-mini`, `o1` |
| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` |
| OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5-pro`, `gpt-5.5`, `gpt-5.4-pro`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.3-codex`, `gpt-5.2-pro`, `gpt-5.2`, `gpt-5.1`, `gpt-5-pro`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `o4-mini`, `o3`, `o3-mini`, `o1` |
| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` |
| Azure OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `azure/gpt-6-astra`, `azure/gpt-5.6-sol`, `azure/gpt-5.6-terra`, `azure/gpt-5.6-luna`, `azure/gpt-5.5`, `azure/gpt-5.4-pro`, `azure/gpt-5.4`, `azure/gpt-5.4-mini`, `azure/gpt-5.4-nano`, `azure/gpt-5.2`, `azure/gpt-5.1`, `azure/gpt-5.1-codex`, `azure/gpt-5`, `azure/gpt-5-mini`, `azure/gpt-5-nano`, `azure/o3`, `azure/o4-mini` |
| Azure Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `azure-anthropic/claude-fable-5-1`, `azure-anthropic/claude-opus-5`, `azure-anthropic/claude-opus-4-8`, `azure-anthropic/claude-opus-4-7`, `azure-anthropic/claude-opus-4-6`, `azure-anthropic/claude-opus-4-5`, `azure-anthropic/claude-sonnet-5`, `azure-anthropic/claude-sonnet-4-6`, `azure-anthropic/claude-sonnet-4-5`, `azure-anthropic/claude-opus-4-1`, `azure-anthropic/claude-haiku-4-5` |
| Google | Summaries only | `gemini-3.8-flash`, `gemini-3.7-flash`, `gemini-3.6-flash`, `gemini-3.5-flash-lite`, `gemini-3.5-flash`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` |
Expand Down
16 changes: 7 additions & 9 deletions apps/sim/app/(interfaces)/chat/components/input/input.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { ArrowUp, Paperclip, StopFilled, X } from '@sim/emcn/icons'
import { createLogger } from '@sim/logger'
import { generateId } from '@sim/utils/id'
import { CHAT_ACCEPT_ATTRIBUTE } from '@/lib/uploads/utils/validation'
import { PublicChatActionButton } from '@/app/(interfaces)/chat/components/input/public-chat-action-button'

const logger = createLogger('ChatInput')

Expand Down Expand Up @@ -221,15 +222,14 @@ export const ChatInput: React.FC<{
<div>
<Tooltip.Root>
<Tooltip.Trigger asChild>
<Button
<PublicChatActionButton
aria-label='Attach files'
variant='quiet'
onClick={() => fileInputRef.current?.click()}
disabled={isStreaming || attachedFiles.length >= 15}
className='size-[28px] rounded-full p-0'
>
<Paperclip className='size-[16px]' />
</Button>
</PublicChatActionButton>
</Tooltip.Trigger>
<Tooltip.Content side='top'>
<p>Attach files</p>
Expand All @@ -252,24 +252,22 @@ export const ChatInput: React.FC<{

<div className='flex items-center gap-1.5'>
{isStreaming ? (
<Button
<PublicChatActionButton
variant='primary'
onClick={onStopStreaming}
className='size-[28px] rounded-full p-0'
aria-label='Stop generation'
>
<StopFilled className='block size-[14px] fill-current' />
</Button>
</PublicChatActionButton>
) : (
<Button
<PublicChatActionButton
variant='primary'
onClick={handleSubmit}
disabled={!canSubmit}
aria-label='Send message'
className='size-[28px] rounded-full p-0'
>
<ArrowUp className='block size-[16px]' />
</Button>
</PublicChatActionButton>
)}
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { type ComponentProps, forwardRef } from 'react'
import { Button } from '@sim/emcn'

interface PublicChatActionButtonProps
extends Omit<
ComponentProps<typeof Button>,
'variant' | 'size' | 'iconSize' | 'iconPadding' | 'className'
> {
variant: 'primary' | 'quiet'
'aria-label': string
}

/** Public chat's circular composer action, retaining its primary and quiet palettes. */
export const PublicChatActionButton = forwardRef<HTMLButtonElement, PublicChatActionButtonProps>(
(props, ref) => <Button {...props} ref={ref} className='size-[28px] rounded-full p-0' />
)
PublicChatActionButton.displayName = 'PublicChatActionButton'
Loading
Loading