Skip to content

Commit 84f9328

Browse files
committed
fix(release): Firecrawl start-relative depth, secret-key redaction, operation-backed credential contract, and audit cleanups
1 parent 81c10c9 commit 84f9328

16 files changed

Lines changed: 159 additions & 30 deletions

File tree

‎.github/CI.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Docs production builds run once and publish an artifact to isolated HTTP, corpus
1010

1111
| Change | Expensive checks selected |
1212
| --- | --- |
13-
| Independent SDK | That workspace's tests and type-check; no app build, services, or browsers |
13+
| Standalone package | That workspace's tests and type-check; no app build, services, or browsers |
1414
| App unit test | App test shards and test type check |
1515
| Integration test | Both provision paths; no HTTP/browser job merely for the test edit |
1616
| Workspace UI | Database integration, mobile, SEO and live Electron, plus app tests/build |

‎.github/CONTRIBUTING.md‎

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,15 @@ Using clear and consistent commit messages makes it easier for everyone to under
140140

141141
To set up your local development environment:
142142

143-
### Option 1: Using NPM Package (Simplest)
143+
### Option 1: Using the Setup Wizard (Simplest)
144144

145-
The easiest way to run Sim locally is using our NPM package:
145+
Inside your clone, run the interactive setup wizard:
146146

147147
```bash
148-
npx simstudio
148+
bun run sim-setup
149149
```
150150

151-
After running this command, open [http://localhost:3000/](http://localhost:3000/) in your browser.
152-
153-
#### Options
154-
155-
- `-p, --port <port>`: Specify the port to run Sim on (default: 3000)
156-
- `--no-pull`: Skip pulling the latest Docker images
151+
It provisions the database, generates secrets, writes `.env`, and offers the source-only local development and Kubernetes modes. Outside a clone, `npx sim-setup` sets up a deployment from the published images instead.
157152

158153
#### Requirements
159154

‎apps/docs/content/docs/platform/self-hosting/networking.mdx‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ The practical consequence: a mandatory-egress-proxy environment can route LLM tr
292292
A request through the SSRF guard keeps its checks when it is proxied. Before each request, and again for each redirect hop, the app resolves the destination's hostname with its own DNS and refuses it if any policy in [Security](/platform/self-hosting/security#the-ssrf-boundary) blocks the address. It then hands the hostname, not the address, to the proxy, so a proxy that allowlists by domain sees the name it expects.
293293
294294
- **DNS must still resolve inside the container.** A destination that the app cannot resolve is refused before the proxy is asked.
295-
- **The proxy resolves the name again.** The app cannot pin the address across a proxy, so the proxy's own egress policy is the last check.
295+
- **The proxy resolves the name again.** The app cannot pin the address across a proxy, so a name that answers differently to the proxy (a short-TTL rebind, or split-horizon DNS) reaches whatever the proxy resolves. The proxy's own egress policy is the last check: it must refuse private, loopback, and link-local ranges (including `169.254.169.254`) and your internal DNS zones, the same addresses the app's guard refuses.
296296
- **`https` destinations are tunneled** with `CONNECT host:443`. **`http` destinations are forwarded** to the proxy as an absolute URL, as curl and Bun do.
297297
- **Proxy credentials** go in the URL, e.g. `http://user:pass@proxy.internal:3128`. They are sent only to the proxy. An `https://` proxy URL also works; SOCKS proxies are not supported.
298298
- **The HTTP block's `proxyUrl`** still takes precedence for that one request.
@@ -301,6 +301,8 @@ A request through the SSRF guard keeps its checks when it is proxied. Before eac
301301
302302
Set `NO_PROXY` for every destination that is not on the public internet, not just model endpoints. The app reaches the realtime server (`SOCKET_SERVER_URL`), the Presidio PII service (`PII_URL`), and itself (`INTERNAL_API_BASE_URL`) over the same default `fetch`, alongside self-hosted Ollama, LiteLLM, and vLLM — so a proxy that cannot reach your internal network breaks live updates and PII redaction, not only inference. AWS clients and OTLP export follow the same rule, so also add an internal S3-compatible store such as MinIO, AWS VPC endpoints, and an in-cluster OpenTelemetry collector.
303303
304+
`NO_PROXY` matches hostnames, domain suffixes (`.internal` or `*.internal`), exact IP addresses, and an optional `:port`, or `*` alone for everything. It does not match CIDR ranges such as `10.0.0.0/8` or IPv6 addresses, so list internal destinations by name.
305+
304306
Set it in the application environment, not your shell — under `app.env` on Helm, or the service's `environment:` on Compose. On Helm the suffixes alone are not enough: the chart wires `SOCKET_SERVER_URL`, `PII_URL`, and `OLLAMA_URL` to bare Service names, which no domain suffix matches. Add those names too — `helm template` prints the rendered ones, and the prefix is the release name unless it already contains `sim`, in which case it is the release name alone:
305307
306308
```yaml

‎apps/sim/app/(landing)/components/navbar/components/nav-menu-chip/constants.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,14 @@ export const RESOURCES_MENU: NavMenu = {
128128
items: [
129129
{
130130
title: 'Docs',
131-
description: 'Guides, SDKs, and API reference',
131+
description: 'Guides, CLI, and API reference',
132132
href: 'https://docs.sim.ai',
133133
external: true,
134134
preview: {
135135
kind: 'docs',
136136
eyebrow: 'Documentation',
137137
title: 'Build with Sim',
138-
details: ['Quickstart', 'SDKs', 'API reference'],
138+
details: ['Quickstart', 'CLI', 'API reference'],
139139
},
140140
},
141141
{

‎apps/sim/blocks/blocks/mistral_parse.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ export const MistralParseV3Block: BlockConfig = {
384384
id: 'imageLimit',
385385
title: 'Max Images',
386386
type: 'short-input',
387-
placeholder: 'Up to 100 (default 100)',
387+
placeholder: '1 to 100 (default 100)',
388388
condition: { field: 'includeImageBase64', value: true },
389389
mode: 'advanced',
390390
},
@@ -463,7 +463,8 @@ export const MistralParseV3Block: BlockConfig = {
463463
parameters.includeImageBase64 = true
464464
parameters.imageLimit = parseOptionalNumberInput(params.imageLimit, 'Max Images', {
465465
integer: true,
466-
min: 0,
466+
min: 1,
467+
max: 100,
467468
})
468469
parameters.imageMinSize = parseOptionalNumberInput(
469470
params.imageMinSize,

‎apps/sim/lib/compare/data/sim.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ export const simProfile: CompetitorProfile = {
134134
facts: {
135135
platform: {
136136
builderType: {
137-
value: 'Visual drag-and-drop canvas, natural-language (Chat), or code (API/SDK)',
137+
value: 'Visual drag-and-drop canvas, natural-language (Chat), or code (REST API and CLI)',
138138
shortValue: 'Visual canvas, chat, or code',
139139
confidence: 'verified',
140140
sources: [
141141
{
142142
url: 'https://docs.sim.ai/introduction',
143-
label: 'Sim Docs: Introduction (visual, natural-language, and API/SDK building)',
143+
label: 'Sim Docs: Introduction (visual, natural-language, and API building)',
144144
asOf: '2026-07-08',
145145
},
146146
],
@@ -155,7 +155,7 @@ export const simProfile: CompetitorProfile = {
155155
sources: [
156156
{
157157
url: 'https://docs.sim.ai/introduction',
158-
label: 'Sim Docs: Introduction (visual, natural-language, and API/SDK building)',
158+
label: 'Sim Docs: Introduction (visual, natural-language, and API building)',
159159
asOf: '2026-07-08',
160160
},
161161
],

‎apps/sim/lib/core/security/redaction.test.ts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ describe('isSensitiveKey', () => {
3131
'exa_api_key',
3232
'secretAccessKey',
3333
'awsSecretAccessKey',
34+
'secretKey',
35+
'bedrockSecretKey',
36+
'deployKey',
3437
`${'a'.repeat(10000)}password`,
3538
])('treats %s as sensitive', (key) => {
3639
expect(isSensitiveKey(key)).toBe(true)
@@ -39,7 +42,8 @@ describe('isSensitiveKey', () => {
3942
it.concurrent.each([
4043
'tokenCount',
4144
'tokenizer',
42-
'secretKey',
45+
'secretKeyId',
46+
'deployKeyName',
4347
'passwordStrength',
4448
'authMethod',
4549
'name',

‎apps/sim/lib/core/security/redaction.ts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ const SENSITIVE_KEY_PATTERNS: RegExp[] = [
2929
/^.*api[_-]?key$/i,
3030
// AWS's `secretAccessKey` / `awsSecretAccessKey`, which no suffix above covers.
3131
/^.*secret[_-]?access[_-]?key$/i,
32+
// Credential fields named for the key itself: Clerk's `secretKey`, Bedrock's
33+
// `bedrockSecretKey`, and Convex's `deployKey`.
34+
/^.*secret[_-]?key$/i,
35+
/^.*deploy[_-]?key$/i,
3236
/^passphrase$/i,
3337
/^authorization$/i,
3438
/^proxy[_-]?authorization$/i,

‎apps/sim/lib/credentials/service-account-secret.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,9 @@ async function buildTokenServiceAccountSecret(
388388
providerId,
389389
apiToken,
390390
...(requiresDomain ? { domain: validation.normalizedDomain ?? domain } : {}),
391-
...(requiresWorkspace ? { providerWorkspaceId } : {}),
391+
...(requiresWorkspace
392+
? { providerWorkspaceId: validation.normalizedWorkspaceId ?? providerWorkspaceId }
393+
: {}),
392394
metadata: { ...validation.storedMetadata, ...principalMetadata },
393395
}
394396
const { encrypted } = await encryptSecret(JSON.stringify(blob))

‎apps/sim/lib/credentials/token-service-accounts/server.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ export interface TokenServiceAccountValidationResult {
271271
storedMetadata?: Record<string, string>
272272
/** Normalized domain to persist instead of the raw user input (when collected). */
273273
normalizedDomain?: string
274+
/** Normalized account id to persist, so the stored id is the one the check verified. */
275+
normalizedWorkspaceId?: string
274276
}
275277

276278
export type TokenServiceAccountValidator = (

0 commit comments

Comments
 (0)