Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
413 commits
Select commit Hold shift + click to select a range
0925e2d
fix(agent): drop temperature param for claude-opus-4-7 (#4459)
TheodoreSpeaks May 5, 2026
bdc42a2
fix(md-render): fix markdown rendering in file viewer (#4458)
waleedlatif1 May 6, 2026
d517415
chore(docs): upgrade fumadocs to latest minor versions (#4462)
waleedlatif1 May 6, 2026
d721dc3
feat(enterprise): add data drains for continuous export to S3 / webho…
waleedlatif1 May 6, 2026
cef351f
fix(terminal): terminal console update for child spans + hitl state m…
icecrasher321 May 6, 2026
3a79289
improvement(confluence): expand scopes, persist canonical mode toggle…
waleedlatif1 May 6, 2026
93c0202
fix(md): file streaming patch preview (#4465)
icecrasher321 May 6, 2026
80eb5b9
fix(security): block IPv4-compatible IPv6 SSRF bypass (#4467)
waleedlatif1 May 6, 2026
1814105
refactor(tables): row selection as discriminated union (#4466)
waleedlatif1 May 6, 2026
a24e851
fix(mothership): enforce ownership check on workflow resource attachm…
waleedlatif1 May 6, 2026
ae87481
fix(data-drains): convert unique-name violations to 409 on POST/PUT (…
waleedlatif1 May 6, 2026
efcd51a
v0.6.68: atlassian service accounts, 30 day wait block, markdown rend…
waleedlatif1 May 6, 2026
7b6aa72
improvement(resolver): use context variables for block outputs in fun…
octo-patch May 6, 2026
1989a12
improvement(func-exec): normalize inputs to match schema (#4473)
icecrasher321 May 6, 2026
a945399
feat(models): add grok-4.3 (#4472)
waleedlatif1 May 6, 2026
5d38222
fix(function): validate custom tool param keys before code interpolat…
waleedlatif1 May 6, 2026
ad88859
chore(skills): add /add-model and /validate-model commands (#4475)
waleedlatif1 May 6, 2026
4833145
chore(deps): upgrade next.js to 16.2.4 (#4460)
waleedlatif1 May 6, 2026
6d4ffff
fix(agiloft): correct response parsing, add EWGetChoiceLineId tool (#…
waleedlatif1 May 6, 2026
bfd0f46
improvement(next): bundle and CI cache config (#4478)
waleedlatif1 May 6, 2026
79ffccc
feat(emailbison): block, tools, sharepoint v2 block with cleaner code…
icecrasher321 May 6, 2026
369f9b6
fix(office-excel): support Office.js add-in embed and surface Graph e…
waleedlatif1 May 6, 2026
690b7ab
improvement(seo): restore explicit AI/search bot allow-list and add l…
waleedlatif1 May 6, 2026
00c424b
improvement(executor): reserved keyword errors (#4482)
icecrasher321 May 6, 2026
7953c56
fix(security): xlsx CVE bump and bundled security hardening (#4481)
waleedlatif1 May 6, 2026
a251e45
feat(sap): add SAP Concur integration block and SAP S/4HANA validatio…
waleedlatif1 May 7, 2026
28f1912
feat(files): zoom controls for inline mermaid and images in markdown …
waleedlatif1 May 7, 2026
28e60bf
fix(docker): drop scripts/ from workspaces array (#4484)
waleedlatif1 May 7, 2026
76d602f
fix(workday): correct SOAP service routing and reference types (#4485)
waleedlatif1 May 7, 2026
8d934f3
v0.6.69: security hardening, nextjs upgrade, SAP Concur, Emailbison i…
waleedlatif1 May 7, 2026
0942555
fix(sanitize): repair malformed subblock states (#4490)
icecrasher321 May 7, 2026
5ea80a8
v0.6.70: legacy workflow sanitization
icecrasher321 May 7, 2026
49713f8
fix(type-error): subblock migrations type error (#4492)
icecrasher321 May 7, 2026
3cc581e
v0.6.71: build error fix
icecrasher321 May 7, 2026
ec5793f
fix(billing): drop transaction wrapper in recordUsage to relieve pool…
TheodoreSpeaks May 7, 2026
273e608
Merge pull request #4496 from simstudioai/staging
TheodoreSpeaks May 7, 2026
98f8e85
improvement(tables): extract TablesDetail wrapper, ship trigger follo…
TheodoreSpeaks May 7, 2026
d081ab2
fix(logs): relax fileSchema so execution logs with files render again…
waleedlatif1 May 7, 2026
38cbefd
fix(revenuecat): align tools and block with REST v1 API spec (#4488)
waleedlatif1 May 7, 2026
f708462
fix(files): skip zip and return plain .md when no embedded images (#4…
waleedlatif1 May 7, 2026
401ebcc
fix(auth): Redirect to login if user session doesn't exist (#4497)
TheodoreSpeaks May 7, 2026
b045eae
revert(ci): drop turbopackFileSystemCacheForBuild and restore actions…
waleedlatif1 May 7, 2026
81845ae
fix(table): trigger cascade race fixes, polling, workflow column flag…
TheodoreSpeaks May 7, 2026
00b5b74
fix(redis): drop cached client and restart PING loop after forced rec…
TheodoreSpeaks May 7, 2026
1e5cc39
improvement(deployment): solve multiple client side races, and deploy…
icecrasher321 May 8, 2026
408669d
fix(md-render): inline code inherits heading size in mothership/templ…
waleedlatif1 May 8, 2026
6a00685
improvement(apollo): align tools and block with Apollo API docs (#4487)
waleedlatif1 May 8, 2026
a2aa648
improvement(sandbox): upgrade pptx/docx/pdf bootstrap with image help…
waleedlatif1 May 8, 2026
235a62f
fix(hunter): align tools, block, and outputs with Hunter.io v2 API sp…
waleedlatif1 May 8, 2026
6a927c9
fix(tables): optimistic updates for column delete/update (#4512)
waleedlatif1 May 8, 2026
11563cf
improvement(uploads): migrate remaining FormData uploads to presigned…
waleedlatif1 May 8, 2026
6cb7796
feat(search-replace): search & replace, cut, deploy modal ui flicker …
icecrasher321 May 8, 2026
eb871fc
feat(table): live cell updates via SSE + per-table event buffer (#4508)
TheodoreSpeaks May 8, 2026
667a857
Merge branch 'simstudioai:main' into main
SaitejaSankoji May 8, 2026
57f00e2
fix(table): fix table boolean, add dynamic row number col size, searc…
waleedlatif1 May 8, 2026
9e9ddaa
feat(peopledatalabs): add People Data Labs integration (#4513)
waleedlatif1 May 8, 2026
29affda
improvement(search-replace): dedupe double indexed segments (#4517)
icecrasher321 May 8, 2026
3c33c20
improvement(peopledatalabs): add titlecase, placeholders, and 404 han…
waleedlatif1 May 8, 2026
630db5c
improvement(mothership-chat): memoize message rows for long-transcrip…
waleedlatif1 May 8, 2026
50d4afd
fix(logs): include subfolders when filtering logs by folder (#4525)
waleedlatif1 May 8, 2026
b74f8da
improvement(sandbox): expand document generation — style extraction, …
waleedlatif1 May 9, 2026
d0b0ede
fix(mothership): misc ui bugs (#4528)
icecrasher321 May 9, 2026
cb3a876
feat(knowledge): include sourceUrl in KB search results (#4533)
waleedlatif1 May 9, 2026
1d3ca79
chore(deps): audit and clean up dependencies (#4531)
waleedlatif1 May 9, 2026
773720e
fix(uploads): allow images/video/audio in mothership presigned route …
waleedlatif1 May 9, 2026
4cc00b2
fix(security): enforce workspace scope on workflow middleware and val…
waleedlatif1 May 9, 2026
c7130c6
fix(tables): fix bulk ops truncation for tables larger than one page …
waleedlatif1 May 9, 2026
02f381d
feat(pptx): replace viewer with custom preview (#4536)
icecrasher321 May 9, 2026
f122b68
fix(uploads): write workspaceFiles row when issuing presigned URL (#4…
waleedlatif1 May 9, 2026
6544e0a
fix(tables): inline editing center alignment in table cells (#4538)
waleedlatif1 May 9, 2026
07b8f1b
v0.6.72: tables improvements, search and replace, logs with files, im…
waleedlatif1 May 9, 2026
13666b1
fix(zustand): v5 selector stability issues (#4539)
icecrasher321 May 9, 2026
a170255
fix(script): biome format wrap (#4541)
icecrasher321 May 9, 2026
94f60e7
improvement(deps): remove unused remark deps (#4542)
icecrasher321 May 9, 2026
dcaf3e9
v0.6.73: zustand v5 migration fix
icecrasher321 May 9, 2026
aae93f8
fix(execution): cap isolate memory at 128MB and recycle workers every…
waleedlatif1 May 10, 2026
3ed8615
chore(cleanup): react-doctor dead code elimination, landing + docs ov…
waleedlatif1 May 10, 2026
10f7d36
fix(settings): accurate View navigation after restore in recently del…
waleedlatif1 May 10, 2026
ae680af
improvement(data-drains): docs page, screenshots, and search/UI polis…
waleedlatif1 May 10, 2026
badfeae
fix(security): SSRF fixes (#4548)
waleedlatif1 May 11, 2026
c47777f
fix(security): close cross-tenant IDOR gaps in OAuth credential and e…
waleedlatif1 May 11, 2026
3adbde4
fix(oauth): persist rotated Microsoft refresh tokens (#4554)
waleedlatif1 May 11, 2026
d895e0e
fix(security): authorize MCP subagent IDs, oauth workspace, credentia…
waleedlatif1 May 11, 2026
8774f5c
fix(deps): patch next-mdx-remote and opentelemetry CVEs (#4557)
waleedlatif1 May 11, 2026
0b2cfaf
feat(mothership): add superuser env selection (#4558)
Sg312 May 11, 2026
39f74aa
feat(data-drains): add GCS, Azure Blob, BigQuery, Snowflake, and Data…
waleedlatif1 May 12, 2026
b7c34d4
fix(file-viewer): prevent scroll jump to top during Mothership stream…
waleedlatif1 May 12, 2026
22b5a1e
fix(tables): cmd+a always selects all cells on the table page (#4562)
waleedlatif1 May 12, 2026
9b333ea
fix(mothership): fix tool hidden in ui (#4564)
Sg312 May 12, 2026
6aeb981
v0.6.74: security hardening, workers recycling, next-mdx-remote and o…
waleedlatif1 May 12, 2026
1b94424
improvement(mothership): align markdown blockquote, img, em, del with…
waleedlatif1 May 12, 2026
9d2dd8f
improvement(helm): helm chart updates with security, ESO, and docs ov…
waleedlatif1 May 12, 2026
05892f7
improvement(scheduler): raise per-tick claim budget to drain backlog …
TheodoreSpeaks May 12, 2026
3e9849b
v0.6.75: scheduler claim-budget drain, helm chart hardening, mothersh…
TheodoreSpeaks May 12, 2026
d1eb79e
fix(helm): preserve STS serviceName + networkPolicy.egress back-compa…
waleedlatif1 May 12, 2026
f6b246b
fix(docs): restore media centering and full-width intro image (#4570)
waleedlatif1 May 12, 2026
43f53bb
feat(execution): payload size bottlenecks with lazy execution value …
icecrasher321 May 12, 2026
ec936be
improvement(workflow-block): support manual workflow ID via advanced …
waleedlatif1 May 12, 2026
6503671
fix(security): harden findings — path traversal, SSRF, IDOR, file aut…
waleedlatif1 May 13, 2026
d5c2ead
fix(console): match child-workflow inner blocks by instanceId when re…
waleedlatif1 May 13, 2026
773cd84
fix(mothership): reconcile stuck conversation_id against Redis lock t…
waleedlatif1 May 13, 2026
c21bb91
improvement(grafana): align tools and block with Grafana API spec (#4…
waleedlatif1 May 13, 2026
689e1f7
feat(mothership): Add conversationId to mship block (#4577)
Sg312 May 13, 2026
bdf9ffc
fix(event-buffer): re-compact the event with preserveUserFileBase64: …
icecrasher321 May 13, 2026
64d855a
v0.6.76: helm updates, media centering, lazy loading, security hardening
waleedlatif1 May 13, 2026
cdc7513
improvement(mothership): allow mship to send function execute timeout…
Sg312 May 13, 2026
1ed3a4e
feat(mothership): pin tasks to keep them at the top of the sidebar (#…
waleedlatif1 May 13, 2026
2441d5a
feat(mothership): add files to mship block (#4584)
Sg312 May 13, 2026
ed39edb
feat(observability): export Trigger.dev telemetry to Grafana Cloud OT…
TheodoreSpeaks May 13, 2026
4de955d
fix(otel): address staging pr comments for trigger otel (#4586)
TheodoreSpeaks May 14, 2026
ab156b5
v0.6.77: mothership improvements, trigger.dev telemetry
icecrasher321 May 14, 2026
214355b
improvement(file-block): add get operation (#4588)
Sg312 May 14, 2026
ff3c8f7
fix(file-block): fix get op (#4590)
Sg312 May 14, 2026
1c111ff
fix(mothership): persist @-mentioned resources across send (#4587)
waleedlatif1 May 14, 2026
c09a2c9
v0.6.78: file block get
Sg312 May 14, 2026
568a552
fix(rate-limit): close rate-limit bypass and tighten public route lim…
waleedlatif1 May 14, 2026
104949b
fix(tables): eliminate checkbox flicker on rapid cell toggle (#4592)
waleedlatif1 May 14, 2026
b5dba82
improvement(db): reduce connection saturation and egress hotspots (#4…
waleedlatif1 May 14, 2026
b1a9443
improvement(billing): move overage calculations out of txes (#4595)
icecrasher321 May 14, 2026
c3ac54e
fix(vfs): make copilot message ordering deterministic via WITH ORDINA…
waleedlatif1 May 14, 2026
6a5eebc
v0.6.79: rate limits, tables checkboxes, drizzle config changes, bill…
waleedlatif1 May 14, 2026
408f960
Merge branch 'simstudioai:main' into main
SaitejaSankoji May 14, 2026
4295a5c
improvement(db): add session statement/lock timeouts; simplify KB doc…
TheodoreSpeaks May 14, 2026
8831def
fix(seo): use canonical SITE_URL for robots and sitemap (#4598)
waleedlatif1 May 14, 2026
b1a87d5
Revert "improvement(db): add session statement/lock timeouts; simplif…
TheodoreSpeaks May 14, 2026
642231f
improvement(scheduler): drain due schedules in chunks (#4578)
TheodoreSpeaks May 14, 2026
044e034
fix(integrations): gdrive trashed search, slack blocks-with-file, sla…
waleedlatif1 May 14, 2026
4a9e248
feat(cloudwatch): add mute and unmute alarm operations (#4602)
TheodoreSpeaks May 14, 2026
80c9a01
fix(security): harden file access controls, webhook auth, and input b…
waleedlatif1 May 14, 2026
11fa96c
chore(deps): bump next to 16.2.5 for CVE-2026-44578 SSRF fix (#4606)
waleedlatif1 May 14, 2026
d0519c1
fix(security): supabase rpc path validation, ssh stream byte cap, sto…
waleedlatif1 May 15, 2026
922de38
fix(date-picker): eliminate infinite re-render crash on re-open with …
waleedlatif1 May 15, 2026
e23c20e
fix(gmail): send emails as multipart/alternative so they render full-…
waleedlatif1 May 15, 2026
62636c7
improvement(gmail): replace custom html-to-text regex with library (#…
waleedlatif1 May 15, 2026
4efe999
v0.6.80: security hardening, nextjs minor version bump, cloudwatch to…
waleedlatif1 May 15, 2026
377cb52
Merge branch 'simstudioai:main' into main
SaitejaSankoji May 15, 2026
9bbbe0a
chore(deps): bump mermaid to 11.15.0 for GHSA-ghcm-xqfw-q4vr (#4615)
waleedlatif1 May 15, 2026
bad21cb
improvement(agent, file-block): files in agent block, file block v4 (…
Sg312 May 15, 2026
c9118e7
feat(files): folders, multiselect, vfs update (#4572)
icecrasher321 May 15, 2026
d3d8f9c
fix(logs,workspace): prevent cancelled status overwrite on race and m…
waleedlatif1 May 15, 2026
a64b338
fix(files): fixed resource spacing on files directories pages (#4618)
waleedlatif1 May 15, 2026
cb9c2d5
improvement(files): validations (#4620)
Sg312 May 15, 2026
0dc1611
improvement(providers): align attachment dispatch to vendor SDK types…
waleedlatif1 May 15, 2026
c403faf
fix(cloudwatch): use PutAlarmMuteRule for mute/unmute with duration w…
TheodoreSpeaks May 15, 2026
8d7bbbc
chore(utils): migrate to shared random/ID utilities and add enforceme…
waleedlatif1 May 16, 2026
93f7be4
improvement(redis): strip idempotency body and cap mothership stream …
waleedlatif1 May 16, 2026
674dd8d
fix(mcp): map validation and conflict orchestration errors to 400/409…
waleedlatif1 May 16, 2026
f76e8e6
improvement(copilot): trim copilot_chats reads to lean projections (#…
waleedlatif1 May 16, 2026
fffb879
feat(wait): Async toggle, chained-wait resume fix, execution status A…
TheodoreSpeaks May 16, 2026
f8ae249
improvement(executor): faster, more responsive workflow cancellation …
waleedlatif1 May 16, 2026
3712d1e
feat(mship): make mship block stream output (#4626)
Sg312 May 16, 2026
ff23546
fix(workflows): exclude block locked from diff detection (#4631)
waleedlatif1 May 16, 2026
f69a9a0
v0.6.81: files in agent block, file block update, mermaid version upd…
waleedlatif1 May 16, 2026
67e18f7
fix(migrations): remove duplicate column add (#4632)
Sg312 May 16, 2026
db7f1c1
v0.6.82: fix duplicate migration
Sg312 May 16, 2026
bd9e692
feat(redis): TLS SNI override for IP-based REDIS_URL + zod schema fix…
TheodoreSpeaks May 16, 2026
dbe8e51
v0.6.83: redis TLS SNI override for IP-based REDIS_URL, zod schema fixes
TheodoreSpeaks May 17, 2026
4945d55
fix(redis): apply TLS SNI override to pub/sub clients (#4638)
TheodoreSpeaks May 17, 2026
fd12137
improvement(copilot): drop unused columns from mothership chat detail…
waleedlatif1 May 17, 2026
08eeecb
fix(security): KB fileUrl LFI, MCP/Agiloft SSRF pinning, form OTP, KB…
waleedlatif1 May 17, 2026
11bcb8f
v0.6.84: redis pub/sub SNI override, security hardening, copilot read…
TheodoreSpeaks May 17, 2026
4dc78cb
improvement(redis-cleanup): schedule, async workflow, hitl base64 cac…
icecrasher321 May 17, 2026
42bbb8a
improvement(mothership): abort path race preventing persistence (#4647)
icecrasher321 May 17, 2026
3979476
improvement(workspace): allocate more space to name column in resourc…
waleedlatif1 May 18, 2026
268fa0e
fix(knowledge): preserve scroll position when toggling tokenizer in c…
waleedlatif1 May 18, 2026
cf14693
improvement(memory): replace unbounded server caches with lru-cache t…
waleedlatif1 May 18, 2026
b276672
feat(prospeo): add Prospeo integration for B2B contact enrichment and…
waleedlatif1 May 18, 2026
f3cf8fc
feat(findymail): add Findymail B2B contact data integration (#4654)
waleedlatif1 May 18, 2026
0c1167d
improvement(workspace): fix resource table column proportions and toa…
waleedlatif1 May 19, 2026
a0d9e4d
fix(tables): type-aware SQL casts for range filters on date columns (…
waleedlatif1 May 19, 2026
6827be7
feat(google_docs): opt-in Markdown formatting for create operation (#…
waleedlatif1 May 19, 2026
d14af04
v0.6.85: mothership stream, resource column spacing, prospeo, findyma…
waleedlatif1 May 19, 2026
279010a
improvement(execution): memory usage for aggregated results (#4650)
icecrasher321 May 19, 2026
3930485
feat(models): add gemini 3.5 flash (#4660)
waleedlatif1 May 19, 2026
ef14b2b
fix(security): remove localhost CORS origin, consolidate CORS in prox…
waleedlatif1 May 19, 2026
b98164f
feat(wiza): add Wiza integration for B2B prospect enrichment and sear…
waleedlatif1 May 19, 2026
6414b93
improvement(cleanup): cleanup refs along in logs cleanup job (#4661)
icecrasher321 May 19, 2026
49f70bc
fix(docker): restore NEXT_PUBLIC_APP_URL build arg with dummy fallbac…
waleedlatif1 May 19, 2026
df1e2dd
feat(azure-devops): block and trigger (#4664)
waleedlatif1 May 19, 2026
6c755cb
feat(integrations): add Gong incident.io Railway and New Relic (#4663)
waleedlatif1 May 19, 2026
d7d58ce
improvement(workflow-search): include block names in in-workflow sear…
waleedlatif1 May 19, 2026
972ec5f
fix(branding): align auth and deploy UI colors (#4669)
waleedlatif1 May 19, 2026
e40c915
fix(workflow-search): unclip block-name highlight shadow on the left …
waleedlatif1 May 19, 2026
974a18d
improvement(media-blocks): new versions of image and video gen with l…
icecrasher321 May 19, 2026
d55f40c
fix(blocks): preserve agent block color (#4671)
waleedlatif1 May 20, 2026
e6b3cce
v0.6.86: gemini 3.5 flash, wiza integration, CORS cleanup, railway an…
waleedlatif1 May 20, 2026
f0311a6
feat(table): chunked dispatcher + workflow cascade (#4672)
TheodoreSpeaks May 20, 2026
d9dd7a3
fix(cors): re-enable credentials on chat/form embed CORS policy (#4673)
waleedlatif1 May 20, 2026
46db406
feat(mcp): OAuth 2.1 + PKCE for outbound MCP servers (#4441)
waleedlatif1 May 20, 2026
af8025c
fix(table): dispatcher cold-start, live run counter, smooth typewrite…
TheodoreSpeaks May 20, 2026
c381550
fix(landing-nav): scroll to top on route change in shared shells (#4676)
waleedlatif1 May 20, 2026
a1b2130
improvement(knowledge): batch trigger dispatch, prune redundant DB ro…
waleedlatif1 May 20, 2026
7e67855
improvement(elevenlabs): wire stability and similarity_boost end-to-e…
waleedlatif1 May 20, 2026
b6679a9
feat(google-slides): complete API surface for branded slide generatio…
waleedlatif1 May 20, 2026
4ca7651
improvement(knowledge): eliminate N+1 on tag definitions in bulk uplo…
waleedlatif1 May 20, 2026
9347da5
improvement(branding): white-background sim wordmark for og image (#4…
waleedlatif1 May 20, 2026
4445e31
fix(table): bump run counter on edit/auto-run so Stop shows for queue…
TheodoreSpeaks May 20, 2026
48cf200
fix(helm): allow host[:port][/path] form in global.imageRegistry sche…
waleedlatif1 May 21, 2026
57b9a2f
fix(table): typewriter flash, Run-row completed-skip, dispatch-scope …
TheodoreSpeaks May 21, 2026
e27afaa
fix(mcp): probe-based OAuth detection in test-connection (#4689)
waleedlatif1 May 21, 2026
11ad891
improvement(cleanup): batchTrigger fan-out, chunked queries, batched …
waleedlatif1 May 21, 2026
d730015
perf(mcp): per-server tool cache + surface OAuth start errors (#4691)
waleedlatif1 May 21, 2026
97a609a
v0.6.86: CORS updates, OAuth MCP, navigation pinning dynamic pages, g…
waleedlatif1 May 21, 2026
896eee3
fix(table): derive typewriter slice from elapsed time (no full-text f…
TheodoreSpeaks May 21, 2026
cba1939
Merge branch 'simstudioai:main' into main
SaitejaSankoji May 21, 2026
d892165
fix(copilot): default SIM_AGENT_API_URL to www.copilot.sim.ai to avoi…
waleedlatif1 May 21, 2026
89695de
fix(mcp): cache result of discoverServerTools to prevent post-OAuth r…
waleedlatif1 May 21, 2026
d7ed3c2
fix(sidebar): pass showDelete to hide delete menu for non-admin membe…
minijeong-log May 21, 2026
3f7698c
perf(db): reduce read/write fanout across hot paths (#4704)
waleedlatif1 May 21, 2026
47bd7fa
fix(logs-cleanup): listing active workspaces into mem + download time…
icecrasher321 May 21, 2026
4002242
feat(tables): virtualize data grid with bounded copy and chunked dele…
TheodoreSpeaks May 21, 2026
fde70e2
v0.6.87: performance improvements
icecrasher321 May 21, 2026
9276463
improvement(oauth): coalesce token refresh + cache terminal failures …
waleedlatif1 May 22, 2026
21c956c
improvement(hubspot): OAuth-native polling trigger replacing webhook …
waleedlatif1 May 22, 2026
543d2fa
fix(files): RFC 5987 encode Content-Disposition filenames (#4713)
waleedlatif1 May 22, 2026
1af6538
improvement(search-replace): pass down to subblocks (#4712)
icecrasher321 May 22, 2026
952eb12
feat(mailer): add AWS SES and SMTP providers with auto-detect fallbac…
waleedlatif1 May 22, 2026
e0551b3
improvement(kb-connectors): multi-select fields + Slack bot/app messa…
waleedlatif1 May 22, 2026
0c96964
improvement(mcp): per-server tool queries + negative cache (#4715)
waleedlatif1 May 22, 2026
3d9a1c4
fix(oauth): follower last-chance read after poll deadline (#4718)
waleedlatif1 May 22, 2026
e9ee351
v0.6.88: mutex lock on oauth refresh, files export fix, hubspot trigg…
waleedlatif1 May 22, 2026
1afa881
improvement(branding): dark og image matching landing surface (#4719)
waleedlatif1 May 22, 2026
1631b36
perf(copilot): narrow getAccessibleCopilotChat projection (#4720)
waleedlatif1 May 22, 2026
b6d08fb
fix(combobox): show selected values in multi-select trigger label (#4…
waleedlatif1 May 22, 2026
19b5099
fix(hubspot): selector fetchOptions default + credentialId validation…
waleedlatif1 May 22, 2026
b2ad5e9
improvement(mcp): post-merge hardening — protocol negotiation + distr…
waleedlatif1 May 22, 2026
afcbcf2
fix(tools): pin resolved IP in DB connectors to prevent DNS-rebinding…
waleedlatif1 May 22, 2026
786c6f0
fix(db): disable statement_timeout for migrations (#4714)
TheodoreSpeaks May 22, 2026
209ca5f
fix(large-refs): cleanup based on table read (#4716)
icecrasher321 May 22, 2026
500f35a
fix(landing): remove cursor lerp causing laggy tracking in collaborat…
waleedlatif1 May 22, 2026
5c19344
improvement(kb-connectors): align connector UI surfaces (#4728)
waleedlatif1 May 22, 2026
a14d374
improvement(kb-connectors): align connector modal controls (#4730)
waleedlatif1 May 23, 2026
b5b2d83
v0.6.89: connectors ui, perf improvements, mcp hardening, og image
waleedlatif1 May 23, 2026
1286519
fix(resource): prevent permission-gated breadcrumb items from flashin…
waleedlatif1 May 23, 2026
6b1210b
fix(files): never dedup external URL fetches by path filename (#4733)
waleedlatif1 May 23, 2026
4fab03c
improvement(media-gen): retire vision block, add hosted key for fal a…
icecrasher321 May 23, 2026
f6c9998
v0.6.90: resource breadcrumb flash fix, dedupe external URL fetches, …
icecrasher321 May 23, 2026
aa35776
Merge branch 'simstudioai:main' into main
arenadeveloper02 May 25, 2026
d62f9ca
feat(zoom): add KB connector for cloud recording transcripts, fix ref…
waleedlatif1 May 26, 2026
81bf93b
feat(litellm): add LiteLLM as AI gateway provider (#4739)
waleedlatif1 May 26, 2026
3b18d3b
fix(api): classify access-denied and sandbox user-code errors with co…
waleedlatif1 May 26, 2026
bc99c45
fix(files): zoom file viewer content, not the browser page (#4741)
waleedlatif1 May 26, 2026
e07b1ff
improvement(executor): subflows, hitl handling cleanup (#4604)
icecrasher321 May 26, 2026
5d1aa22
fix(files): attach wheel listener before paint and guard SVG src (#4744)
waleedlatif1 May 26, 2026
e66daa1
fix(zoom): iteratively strip tags in transcript parser to close incom…
waleedlatif1 May 26, 2026
77c1d24
improvement(api): use HttpError base class for typed-error status map…
waleedlatif1 May 26, 2026
2b8068c
feat(hosted-keys): add Hunter.io and People Data Labs hosted key supp…
TheodoreSpeaks May 26, 2026
7218185
fix(connectors): repair broken Zoom icon rendering (#4747)
waleedlatif1 May 26, 2026
e532e0a
v0.6.91: file zoom, Zoom KB connector, error classifications, LiteLLM…
waleedlatif1 May 26, 2026
0ebc798
Merge branch 'simstudioai:main' into main
SaitejaSankoji May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
60 changes: 42 additions & 18 deletions .agents/skills/add-integration/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -578,38 +578,64 @@ tools: {

#### 3. Create Internal API Route

Create `apps/sim/app/api/tools/{service}/{action}/route.ts`:
Create `apps/sim/app/api/tools/{service}/{action}/route.ts`. Internal tool routes are HTTP boundaries and follow the same contract policy as public routes — define the request/response shape in `apps/sim/lib/api/contracts/{service}-tools.ts` (or an existing `internal-tools.ts` / `communication-tools.ts` aggregate) and validate with canonical helpers from `@/lib/api/server`. Never write a route-local Zod schema.

```typescript
// apps/sim/lib/api/contracts/{service}-tools.ts
import { z } from 'zod'
import { defineRouteContract } from '@/lib/api/contracts'
import { FileInputSchema } from '@/lib/uploads/utils/file-schemas'

export const {service}UploadBodySchema = z.object({
accessToken: z.string(),
file: FileInputSchema.optional().nullable(),
fileContent: z.string().optional().nullable(),
// ... other params
})

export const {service}UploadResponseSchema = z.object({
success: z.boolean(),
output: z.object({ id: z.string(), url: z.string() }).optional(),
error: z.string().optional(),
})

export const {service}UploadContract = defineRouteContract({
method: 'POST',
path: '/api/tools/{service}/upload',
body: {service}UploadBodySchema,
response: { mode: 'json', schema: {service}UploadResponseSchema },
})

export type {Service}UploadBody = z.input<typeof {service}UploadBodySchema>
export type {Service}UploadResponse = z.output<typeof {service}UploadResponseSchema>
```

```typescript
// apps/sim/app/api/tools/{service}/upload/route.ts
import { createLogger } from '@sim/logger'
import { NextResponse, type NextRequest } from 'next/server'
import { z } from 'zod'
import { {service}UploadContract } from '@/lib/api/contracts/{service}-tools'
import { parseRequest } from '@/lib/api/server'
import { checkInternalAuth } from '@/lib/auth/hybrid'
import { generateRequestId } from '@/lib/core/utils/request'
import { FileInputSchema, type RawFileInput } from '@/lib/uploads/utils/file-schemas'
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
import { type RawFileInput } from '@/lib/uploads/utils/file-schemas'
import { processFilesToUserFiles } from '@/lib/uploads/utils/file-utils'
import { downloadFileFromStorage } from '@/lib/uploads/utils/file-utils.server'

const logger = createLogger('{Service}UploadAPI')

const RequestSchema = z.object({
accessToken: z.string(),
file: FileInputSchema.optional().nullable(),
// Legacy field for backwards compatibility
fileContent: z.string().optional().nullable(),
// ... other params
})

export async function POST(request: NextRequest) {
export const POST = withRouteHandler(async (request: NextRequest) => {
const requestId = generateRequestId()

const authResult = await checkInternalAuth(request, { requireWorkflowId: false })
if (!authResult.success) {
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
}

const body = await request.json()
const data = RequestSchema.parse(body)
const parsed = await parseRequest({service}UploadContract, request, {})
if (!parsed.success) return parsed.response
const data = parsed.data.body

let fileBuffer: Buffer
let fileName: string
Expand All @@ -624,22 +650,20 @@ export async function POST(request: NextRequest) {
fileBuffer = await downloadFileFromStorage(userFile, requestId, logger)
fileName = userFile.name
} else if (data.fileContent) {
// Legacy: base64 string (backwards compatibility)
fileBuffer = Buffer.from(data.fileContent, 'base64')
fileName = 'file'
} else {
return NextResponse.json({ success: false, error: 'File required' }, { status: 400 })
}

// Now call external API with fileBuffer
const response = await fetch('https://api.{service}.com/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${data.accessToken}` },
body: new Uint8Array(fileBuffer), // Convert Buffer for fetch
body: new Uint8Array(fileBuffer),
})

// ... handle response
}
})
```

#### 4. Update Tool to Use Internal Route
Expand Down
5 changes: 5 additions & 0 deletions .agents/skills/cleanup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,8 @@ Run each of these skills in order on the specified scope, passing through the sc
6. `/emcn-design-review $ARGUMENTS`

After all skills have run, output a summary of what was found and fixed (or proposed) across all six passes.

## Boundary Audit Guidance

- When removing route-local Zod schemas, replacing raw `fetch(` calls in hooks, or removing `as unknown as X` casts, do not introduce `// boundary-raw-fetch: <reason>` or `// double-cast-allowed: <reason>` annotations to silence the audit. Fix the underlying call instead — adopt a contract from `@/lib/api/contracts/**` and use `requestJson(contract, ...)` from `@/lib/api/client/request`, or refine the type so the double cast is unnecessary.
- Annotations are reserved for legitimate exceptions only: streaming responses, binary downloads, multipart uploads, signed-URL flows, OAuth redirects, external-origin requests, and double casts where no narrower type is available. Each annotation requires a non-empty reason; empty reasons fail `bun run check:api-validation:strict`.
25 changes: 14 additions & 11 deletions .agents/skills/emcn-design-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ Use for context menus and action menus:
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost">
<MoreHorizontal className="h-[14px] w-[14px]" />
<MoreHorizontal className="size-[14px]" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
Expand Down Expand Up @@ -281,19 +281,21 @@ Rules:
- Stack multiple skeletons for lists

### Icons
Standard sizing — `h-[14px] w-[14px]` is the dominant pattern (400+ uses):
Standard sizing — use the `size-*` shorthand. `size-[14px]` is the dominant pattern:

```tsx
<Icon className="h-[14px] w-[14px] text-[var(--text-icon)]" />
<Icon className="size-[14px] text-[var(--text-icon)]" />
```

Size scale by frequency:
1. `h-[14px] w-[14px]` — default for inline icons (most common)
2. `h-[16px] w-[16px]` — slightly larger inline icons
3. `h-3 w-3` (12px) — compact/tight spaces
4. `h-4 w-4` (16px) — Tailwind equivalent, also common
5. `h-3.5 w-3.5` (14px) — Tailwind equivalent of 14px
6. `h-5 w-5` (20px) — larger icons, section headers
Always prefer `size-*` over the legacy `h-* w-*` pair. `size-[14px]` is canonical; treat any `h-[Npx] w-[Npx]` or `h-N w-N` pair as a refactor target.

Size scale (most common first):
1. `size-[14px]` — default for inline icons
2. `size-[16px]` — slightly larger inline icons
3. `size-3` (12px) — compact/tight spaces
4. `size-4` (16px) — Tailwind equivalent
5. `size-3.5` (14px) — Tailwind equivalent of 14px
6. `size-5` (20px) — larger icons, section headers

Use `text-[var(--text-icon)]` for icon color (113+ uses in codebase).

Expand Down Expand Up @@ -332,4 +334,5 @@ Use `text-[var(--text-icon)]` for icon color (113+ uses in codebase).
- Importing from emcn subpaths instead of barrel export
- Using arbitrary z-index (`z-50`, `z-[9999]`) instead of z-index tokens
- Custom shadows instead of shadow tokens
- Icon sizes that don't follow the established scale (default to `h-[14px] w-[14px]`)
- Icon sizes that don't follow the established scale (default to `size-[14px]`)
- Splitting equal height/width into `h-* w-*` pairs instead of the `size-*` shorthand
138 changes: 138 additions & 0 deletions .agents/skills/memory-load-check/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
---
name: memory-load-check
description: Review PRs and diffs for unbounded memory loading, concurrency explosions, oversized payload materialization, and missing pagination or byte caps. Use when reviewing cleanup jobs, background jobs, data imports/exports, file parsing, API fan-out, workflow execution payloads, large arrays/files, or any change that reads many rows, files, responses, logs, or external API pages into process memory.
---

# Memory Load Check

Use this skill when a PR or diff could load unbounded data into a Node/Bun process, especially in cron routes, background tasks, API routes, workflow execution, file parsing, cleanup jobs, migrations, import/export flows, and external API integrations.

## Review Goal

Prove each changed path has explicit bounds for:
- rows held in memory
- bytes held in memory
- concurrent promises, DB queries, HTTP calls, storage operations, and jobs
- number of pages, batches, chunks, retries, and retained intermediate objects

If any bound depends only on current production size or "probably small" data, treat it as a finding.

## References

Read these when doing a deeper pass:
- Node.js streams/backpressure: https://nodejs.org/learn/modules/backpressuring-in-streams
- Node.js stream usage: https://nodejs.org/en/learn/modules/how-to-use-streams
- Keyset/cursor pagination over offset scans: https://blog.sequinstream.com/keyset-cursors-not-offsets-for-postgres-pagination/
- Postgres pagination tradeoffs: https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/

## Sim Helpers To Prefer

- `apps/sim/lib/cleanup/batch-delete.ts`
- `chunkedBatchDelete`: bounded SELECT -> optional side effect -> DELETE loop.
- `batchDeleteByWorkspaceAndTimestamp`: common workspace/timestamp cleanup wrapper.
- `selectRowsByIdChunks`: chunks large ID sets and enforces an overall row cap.
- `chunkArray`: use only after the input set itself is already bounded.
- `apps/sim/lib/core/utils/stream-limits.ts`
- `PayloadSizeLimitError`
- `assertKnownSizeWithinLimit`
- `assertContentLengthWithinLimit`
- `readStreamToBufferWithLimit`
- `readNodeStreamToBufferWithLimit`
- `readResponseToBufferWithLimit`
- `readResponseTextWithLimit`
- Cleanup dispatcher pattern in `apps/sim/lib/billing/cleanup-dispatcher.ts`
- page active workspaces with `WHERE id > afterId ORDER BY id LIMIT N`
- dispatch concrete chunks (`workspaceIds`, retention, label) instead of one giant scope
- prefer Trigger.dev queue/concurrency keys when available
- execute inline fallback chunks sequentially, not with unbounded `Promise.all`
- File parse route pattern in `apps/sim/app/api/files/parse/route.ts`
- cap downloads and parsed output separately
- preserve partial results when a later item exceeds the cap
- never read untrusted response bodies without a byte cap
- Large workflow value payloads
- prefer durable references/manifests over inlining large arrays or files
- materialize refs only behind an explicit byte budget

## Review Workflow

1. Identify every changed data source:
- database queries
- storage lists/downloads/uploads
- external API pagination
- file reads and HTTP responses
- workflow logs, snapshots, payloads, arrays, and manifests
- queues, cron routes, and background jobs
2. For each source, write down the maximum cardinality and maximum bytes. If the code does not enforce one, it is unbounded.
3. Trace whether data is processed incrementally or accumulated:
- arrays from `select`, `findMany`, `Promise.all`, `map`, `filter`, `flatMap`
- maps/sets keyed by all users, workspaces, executions, files, or rows
- `Buffer.concat`, `response.arrayBuffer()`, `response.text()`, `JSON.stringify`, `JSON.parse`
- queues of promises or job payloads built before dispatch
4. Check concurrency separately from memory:
- no `Promise.all(items.map(...))` unless `items` is already small and bounded
- use chunks, sequential loops, queue concurrency, or a concurrency limiter
- align concurrency with DB pool size, storage/API limits, and task queue semantics
5. Verify SQL shape:
- every bulk query has `LIMIT`
- large pagination uses cursor/keyset style (`id > afterId`, timestamps plus unique ID), not deep `OFFSET`
- `IN (...)` lists are chunked
- side-effect rows selected before delete have per-batch and per-run caps
6. Verify byte safety:
- check `Content-Length` when available
- stream with cumulative byte accounting
- cap both input bytes and expanded output bytes
- reject or reference oversized values before serializing large JSON responses
7. Confirm failure behavior:
- exceeding a cap should stop before loading more data
- partial successful work should be preserved when the API contract expects it
- retries should not duplicate huge in-memory state
- cleanup jobs should make progress over future runs instead of widening one run

## Red Flags

- loads all active workspaces, users, executions, logs, files, messages, or subscriptions before filtering
- builds a full `Map` or `Set` for a platform-wide scope
- uses `Promise.all` over rows from an unbounded query
- fetches all pages from an external API before processing
- reads an entire file, HTTP response, or stream without a max byte budget
- checks size only after `Buffer.concat`, `arrayBuffer`, `text`, `JSON.parse`, or parse expansion
- chunks only after loading the complete dataset
- paginates with unbounded/deep `OFFSET` on a mutable or large table
- creates one queue job per row without batching or a queue-level concurrency key
- accumulates per-row errors/results with no maximum
- adds a cache, singleton, or module-level collection without eviction or size limits

## Preferred Fixes

- Move filters into SQL/API requests and select only needed columns.
- Replace full-table loads with cursor/keyset pagination and a deterministic order.
- Process one page/batch at a time; do not keep previous pages unless needed.
- Add per-batch and per-run row caps so long backlogs drain across repeated jobs.
- Split large ID lists with `selectRowsByIdChunks` or `chunkArray` after bounding the source.
- Use `chunkedBatchDelete` for cleanup loops with row side effects.
- Use stream-limit helpers for file/HTTP/body reads.
- Store large workflow values as refs/manifests and materialize only within a caller budget.
- Replace unbounded `Promise.all` with sequential chunk loops, queue concurrency, or a small limiter.
- Include tests that prove caps stop work early and partial results or progress are preserved.

## Findings Format

Lead with concrete findings, ordered by risk:

```markdown
## Findings

- **P1 Unbounded workspace load in cleanup dispatch** (`path/to/file.ts`)
The new path calls `select().from(workspace)` without a limit, then builds maps for every row before dispatch. In production this scales with all active workspaces and can exhaust the app process. Page by `workspace.id` with a fixed limit and dispatch bounded chunks.

## Good Signals

- Uses `readResponseToBufferWithLimit` for external downloads.
- Inline fallback processes chunks sequentially.

## Residual Risk

- The row cap is explicit, but no test currently proves the loop stops at the cap.
```

Only say "good to go" when every changed source has explicit row, byte, and concurrency bounds or the boundedness is proven by a stable invariant.
83 changes: 83 additions & 0 deletions .agents/skills/ship/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
name: ship
description: Commit, push, and open a PR to staging in one shot
---

# Ship Command

You help ship code by creating commits, pushing to the remote branch, and creating PRs in the user's voice.

## Your Task

When the user runs `/ship`:

1. **Check git status** - See what files have changed
2. **Generate a commit message** following this format: `type(scope): description`
- Types: `fix`, `feat`, `improvement`, `chore`
- Scope: short identifier (e.g., `undo-redo`, `api`, `ui`)
- Keep it concise
3. **Run pre-ship checks** from the repo root before staging:
- `bun run lint` to fix formatting issues
- `bun run check:api-validation:strict` to catch boundary contract failures before CI
4. **Stage and commit** the changes with the generated message
5. **Push to origin** using the current branch name
6. **Create a PR** to staging with a description in the user's voice

## Commit Message Format

Based on the repo's commit history:

```
fix(scope): description for bug fixes
feat(scope): description for new features
improvement(scope): description for enhancements
chore(scope): description for maintenance
```

## PR Description Format

Use this exact template in the user's voice (concise, bullet points):

```markdown
## Summary
- bullet point describing what changed
- another bullet point if needed

## Type of Change
- [x] Bug fix (or appropriate type)

## Testing
Tested manually (or describe testing)

## Checklist
- [x] Code follows project style guidelines
- [x] Self-reviewed my changes
- [ ] Tests added/updated and passing
- [x] No new warnings introduced
- [x] I confirm that I have read and agree to the terms outlined in the [Contributor License Agreement (CLA)](./CONTRIBUTING.md#contributor-license-agreement-cla)
```

## PR Creation Command

Use this command structure:

```bash
gh pr create --base staging --title "COMMIT_MESSAGE" --body "PR_BODY"
```

## Important Notes

- Always confirm the commit message and PR description with the user before executing
- The PR should be created against `staging` branch
- Keep descriptions concise and in active voice
- Match the user's previous PR style: direct, no fluff, bullet points
- **DO NOT add "Co-Authored-By" lines to commits** - keep commit messages clean

## User's Voice Characteristics (based on previous PRs)

- Short, direct bullet points
- No unnecessary explanation
- "Tested manually" is acceptable for testing section; include lint and boundary validation results when run
- Checkboxes filled in appropriately
- No screenshots section unless UI changes

Loading
Loading