Skip to content

Commit 329e249

Browse files
authored
v0.8.34: consent hardening, org images, large ref fixes
2 parents 0171adf + 64bce6a commit 329e249

463 files changed

Lines changed: 74947 additions & 3476 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/add-block/SKILL.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,11 @@ bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}
927927

928928
## Generated artifacts
929929

930+
When adding or changing `sunset.replacedBy`, run `bun run generate:block-successors` and commit
931+
`apps/sim/lib/permission-groups/block-successors.generated.ts`. Authorization uses this generated
932+
map to resolve legacy and current block IDs consistently without importing the executable registry.
933+
Verify it with `bun run check:block-successors`.
934+
930935
Adding a block on its own needs no **tool metadata** regeneration — a block references existing
931936
tool IDs through `tools.access` and does not change any tool's shape.
932937

@@ -969,6 +974,7 @@ changes.
969974
- [ ] Tools.config.tool returns correct tool ID (snake_case)
970975
- [ ] Outputs match tool outputs
971976
- [ ] Block + meta registered in registry-maps.ts (`BLOCK_REGISTRY` / `BLOCK_META_REGISTRY`)
977+
- [ ] If `sunset.replacedBy` changed: regenerated and committed the block successor map; `bun run check:block-successors` passes
972978
- [ ] If any tool was added, changed or removed alongside the block: ran `bun run tool-metadata:generate` and committed the artifacts
973979
- [ ] Ran `bun run scripts/generate-docs.ts`, reviewed the generated diff, and committed the integration catalog changes
974980
- [ ] `bun run integration-catalog:check` passes

.agents/skills/add-tools/SKILL.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,38 @@ stale/missing sidecars, and scope isolation.
264264

265265
## Critical Rules for Outputs
266266

267+
### File Downloads and Generated Files
268+
269+
Internal operations return `createInternalToolFileResult` / `createInternalToolFilesResult` from
270+
`lib/internal/tool-operations/file-result.ts` with bounded Buffers and a callback that places the
271+
stored descriptors in the response. Their handlers preserve this result through dispatch, using
272+
`InternalToolOperationHandler<InternalToolOperationResult>`. Do not serialize file bytes as base64
273+
JSON: the executor's 10 MiB response cap runs before ordinary file postprocessing or large-value
274+
externalization. The shared executor stores files using trusted run or Copilot ownership.
275+
276+
External endpoints that return raw binary files explicitly declare `request.responseType: 'binary'`
277+
and return `output.file` with `{ name, mimeType, data: buffer, size }` from `transformResponse`.
278+
The executor applies the bounded file-transfer budget and persists the descriptor. This opt-in is
279+
for raw binary responses, not provider JSON containing base64 or tools that fetch attachments later.
280+
Keep provider-specific limits and bounded reads; a file declaration is not permission to enlarge
281+
arbitrary JSON responses.
282+
283+
Attachment readers that download files inside `transformResponse` need their own bounded reads:
284+
the first response cap does not cover subsequent fetches. Accept `ToolResponseContext` as the third
285+
transform argument, forward its `signal`, and share one `AttachmentDownloadBudget` across sequential
286+
downloads. Prefer raw provider endpoints over base64 metadata. Return the same file object in the
287+
declared `file` / `file[]` output and nested message associations; `FileToolProcessor` stores it once
288+
and replaces every alias with the same `UserFile` in both workflow and Copilot execution.
289+
290+
Preserve stored `UserFile` fields (`id`, `key`, `url`, `context`, `type`, `name`, `size`) in transforms;
291+
rebuilding the old `{ name, mimeType, data, size }` shape discards the reference. File outputs do not
292+
need duplicate inline text/base64 aliases; the file system handles content materialization. When
293+
an existing tool explicitly exposes content aliases in its contract, preserve its legacy version and
294+
use the existing block/tool version pattern for a file-only output. Test a file over 10 MiB through
295+
executor admission, single persistence, trusted ownership, and the unchanged JSON cap. Avoid adding
296+
top-level filename, size, MIME type, URL, or success fields that merely repeat the canonical file or
297+
tool result; keep additional provider fields only when they convey distinct information.
298+
267299
### Output Types
268300
- `'string'`, `'number'`, `'boolean'` - Primitives
269301
- `'json'` - Complex objects (use this, NOT 'object')

.agents/skills/validate-integration/SKILL.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,21 @@ If any tool lists, searches, exports, imports, downloads, uploads, paginates, ba
345345
- [ ] List/search tools expose API limits and do not auto-fetch every page into memory
346346
- [ ] Transform logic does not build unbounded arrays, maps, sets, or `Promise.all` fan-outs
347347
- [ ] File and HTTP body reads use explicit byte caps or existing stream-limit helpers
348+
- [ ] Internal file results reach `createInternalToolFileResult` / `createInternalToolFilesResult`
349+
before JSON serialization; external raw downloads explicitly use `request.responseType: 'binary'`
350+
and return a buffered `output.file`. Provider base64 JSON needs separate handling
351+
- [ ] Transforms retain stored `UserFile` identity/access fields, and tests cover a >10 MiB file
352+
crossing executor admission without another upload. New file outputs contain references only,
353+
without inline content aliases; preserve legacy versions when removing existing inline fields
354+
- [ ] Scan every file-producing path, including attachment fetches inside `transformResponse`, URL
355+
descriptors, export operations, and old/new block versions; checking download-named tools alone
356+
misses late reads that occur after the first response admission
357+
- [ ] Late attachment reads share a per-call byte budget, bound actual streamed bytes independently
358+
of provider size metadata, and forward `ToolResponseContext.signal` through every fetch/read
359+
- [ ] Both workflow and Copilot tests produce compact `UserFile` outputs; nested message attachment
360+
aliases reference the same stored files, with no duplicate upload or raw bytes left behind
361+
- [ ] New output contracts omit redundant copies of file name, MIME type, size, URL, and success;
362+
retained provider metadata has a distinct purpose, and types match the stored-file runtime shape
348363
- [ ] Large result payloads are summarized, paginated, referenced, or capped rather than raw-dumped
349364
- [ ] Pagination and download tests cover caps, early stop behavior, or partial-result preservation when relevant
350365

.github/workflows/test-build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ jobs:
190190
lib/knowledge/__integration__/search-reference-batching.integration.ts
191191
lib/core/outbox/service.integration.ts
192192
lib/knowledge/__integration__/connector-upload.integration.ts
193+
lib/uploads/contexts/organization-logo/application.integration.ts
193194
194195
test-build:
195196
name: Lint and Test

apps/docs/components/ui/icon-mapping.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
339339
azure_devops: AzureIcon,
340340
bitbucket: BitbucketIcon,
341341
box: BoxCompanyIcon,
342+
box_v2: BoxCompanyIcon,
342343
brandfetch: BrandfetchIcon,
343344
brex: BrexIcon,
344345
brightdata: BrightDataIcon,
@@ -380,9 +381,11 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
380381
docusign: DocuSignIcon,
381382
downdetector: DowndetectorIcon,
382383
dropbox: DropboxIcon,
384+
dropbox_v2: DropboxIcon,
383385
dropcontact: DropcontactIcon,
384386
dspy: DsPyIcon,
385387
dub: DubIcon,
388+
dub_v2: DubIcon,
386389
duckduckgo: DuckDuckGoIcon,
387390
dynamodb: DynamoDBIcon,
388391
dynatrace: DynatraceIcon,
@@ -475,6 +478,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
475478
jotform: JotformIcon,
476479
jsm: JiraServiceManagementIcon,
477480
jupyter: JupyterIcon,
481+
jupyter_v2: JupyterIcon,
478482
kalshi: KalshiIcon,
479483
kalshi_v2: KalshiIcon,
480484
ketch: KetchIcon,
@@ -506,6 +510,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
506510
memory: BrainIcon,
507511
microsoft_ad: AzureIcon,
508512
microsoft_dataverse: MicrosoftDataverseIcon,
513+
microsoft_dataverse_v2: MicrosoftDataverseIcon,
509514
microsoft_dynamics_365: MicrosoftDataverseIcon,
510515
microsoft_excel: MicrosoftExcelIcon,
511516
microsoft_excel_v2: MicrosoftExcelIcon,
@@ -557,6 +562,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
557562
quartr: QuartrIcon,
558563
quickbooks: QuickBooksIcon,
559564
quiver: QuiverIcon,
565+
quiver_v2: QuiverIcon,
560566
rabbitmq: RabbitmqIcon,
561567
railway: RailwayIcon,
562568
rb2b: RB2BIcon,
@@ -588,8 +594,10 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
588594
sentry: SentryIcon,
589595
serper: SerperIcon,
590596
servicenow: ServiceNowIcon,
597+
servicenow_v2: ServiceNowIcon,
591598
ses: SESIcon,
592599
sftp: SftpIcon,
600+
sftp_v2: SftpIcon,
593601
sharepoint: MicrosoftSharepointIcon,
594602
sharepoint_v2: MicrosoftSharepointIcon,
595603
shopify: ShopifyIcon,
@@ -607,6 +615,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
607615
sqs: SQSIcon,
608616
square: SquareIcon,
609617
ssh: SshIcon,
618+
ssh_v2: SshIcon,
610619
ssm: SSMIcon,
611620
stagehand: StagehandIcon,
612621
start_trigger: StartIcon,

apps/docs/content/docs/cli/usage-data.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ workspace ids, error messages, environment variable values, credentials, or the
3131
address of the deployment you talk to. The report leaves your machine from a
3232
separate short-lived process that is not given your API key.
3333

34+
## Location
35+
36+
The report carries no location of its own. The analytics service derives an
37+
approximate location (country and city) from the address the report arrived
38+
from, the way any HTTP request exposes one, and Sim uses that only to see
39+
which regions use the CLI.
40+
3441
## Identity
3542

3643
The first run mints a random device id and stores it in `telemetry.json` under

apps/docs/content/docs/integrations/box.mdx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Manage files, folders, and e-signatures with Box
66
import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
9-
type="box"
9+
type="box_v2"
1010
color="#FFFFFF"
1111
/>
1212

@@ -63,7 +63,6 @@ Download a file from Box
6363
| Parameter | Type | Description |
6464
| --------- | ---- | ----------- |
6565
| `file` | file | Downloaded file stored in execution files |
66-
| `content` | string | Base64 encoded file content |
6766

6867
### Box Get File Info
6968

apps/docs/content/docs/integrations/dropbox.mdx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Upload, download, share, and manage files in Dropbox
66
import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
9-
type="dropbox"
9+
type="dropbox_v2"
1010
color="#0061FF"
1111
/>
1212

@@ -66,7 +66,7 @@ Upload a file to Dropbox
6666

6767
### Dropbox Download File
6868

69-
Download a file from Dropbox with metadata and content
69+
Download a file from Dropbox with metadata
7070

7171
#### Input
7272

@@ -81,7 +81,6 @@ Download a file from Dropbox with metadata and content
8181
| `file` | file | Downloaded file stored in execution files |
8282
| `metadata` | json | The file metadata |
8383
| `temporaryLink` | string | Temporary link to download the file \(valid for ~4 hours\) |
84-
| `content` | string | Base64 encoded file content \(if fetched\) |
8584

8685
### Dropbox List Folder
8786

apps/docs/content/docs/integrations/dub.mdx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Link management with Dub
66
import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
9-
type="dub"
9+
type="dub_v2"
1010
color="#181C1E"
1111
/>
1212

@@ -474,7 +474,6 @@ Generate a customizable QR code (PNG) for a short link, with control over size,
474474
| Parameter | Type | Description |
475475
| --------- | ---- | ----------- |
476476
| `file` | file | Generated QR code image stored in execution files |
477-
| `content` | string | Base64-encoded PNG image data |
478477

479478
### Dub List Domains
480479

apps/docs/content/docs/integrations/jupyter.mdx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Manage files, notebooks, kernels, and sessions on a Jupyter server
66
import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
9-
type="jupyter"
9+
type="jupyter_v2"
1010
color="#FFFFFF"
1111
/>
1212

@@ -61,7 +61,7 @@ List files, notebooks, and subdirectories at a path on a Jupyter server
6161

6262
### Jupyter Get Content
6363

64-
Read a file or notebook from a Jupyter server
64+
Download a file as a stored file, or read structured notebook and directory content
6565

6666
#### Input
6767

@@ -75,11 +75,11 @@ Read a file or notebook from a Jupyter server
7575

7676
| Parameter | Type | Description |
7777
| --------- | ---- | ----------- |
78-
| `name` | string | File or notebook name |
79-
| `path` | string | Path relative to the server root |
80-
| `mimetype` | string | MIME type of the content |
81-
| `text` | string | Text content, for text files and notebooks \(JSON-stringified\) |
82-
| `file` | file | Binary content stored as a file, for base64-format content |
78+
| `file` | file | Downloaded file |
79+
| `text` | string | JSON-stringified notebook or directory content |
80+
| `name` | string | Notebook or directory name |
81+
| `path` | string | Notebook or directory path |
82+
| `mimetype` | string | Notebook or directory MIME type |
8383

8484
### Jupyter Create File
8585

0 commit comments

Comments
 (0)