Files
sim/.cursor/rules/sim-integrations.mdc
T
Theodore LiandClaude Opus 4.8 2686f043bc perf(dev): SIM_DEV_MINIMAL_REGISTRY mode to slash local dev-server RAM (#5223)
* perf(dev): SIM_DEV_MINIMAL_REGISTRY mode to slash local dev-server RAM

Adds a dev-only escape hatch (`bun run dev:minimal`, or `dev:full:minimal` with
the realtime server): when SIM_DEV_MINIMAL_REGISTRY=1, a Turbopack/webpack
resolve-alias swaps the two heavy registries for tiny curated variants —
`@/tools/registry` → 2 tools, `@/blocks/registry-maps` → ~20 core blocks. The
shared workspace layout drags the full ~247-tool registry (~2,074 modules) into
every route via providers/utils → tools/params, and the editor/executor pull all
~268 block configs; aliasing both stops Turbopack from compiling those graphs at
all.

To make the blocks alias clean, the heavy block import maps move out of
registry.ts into registry-maps.ts (registry.ts keeps only its accessors,
importing the maps); its public API is unchanged and full builds/tests use the
full maps. The alias is gated on isDev + the flag and is never applied in
production.

Measured (Turbopack dev, authenticated, /logs): peak next-server RSS ~16 GB →
~4.7 GB, compile 4.9 min → ~18 s; the workflow editor route similarly drops to
~5 GB / ~17 s. Only http_request + function_execute and the curated core blocks
work in minimal mode; unset the flag for the full set.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* perf(dev): add table block to minimal registry; doc block registration in registry-maps

Adds the Table block to the SIM_DEV_MINIMAL_REGISTRY curated set so the
tables surface works under dev:minimal. Updates the integration skills/rules
and CLAUDE.md to point block registration at blocks/registry-maps.ts (the
BLOCK_REGISTRY / BLOCK_META_REGISTRY maps), reflecting that registry.ts now
holds only the accessor functions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* chore(dev): rename dev:full:minimal → dev:full:minimal-registry

Matches the dev:full:* formatting and makes the suffix self-explanatory —
it is the registry that's minimal, not the dev stack.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 16:41:32 -04:00

17 lines
1.7 KiB
Plaintext

---
description: Adding new integrations (tools, blocks, triggers)
globs: ["apps/sim/tools/**", "apps/sim/blocks/**", "apps/sim/triggers/**"]
---
# Adding Integrations
Build order: **Tools** (`tools/{service}/`) → **Block** (`blocks/blocks/{service}.ts`) → **Icon** (`components/icons.tsx`) → optional **Trigger** (`triggers/{service}/`). Always look up the service's API docs first.
The full authoring instructions — tool/block/icon/trigger scaffolding, SubBlock property tables, `condition`/`required`/`dependsOn`/`mode`/`canonicalParamId` syntax, the `normalizeFileInput`/file-handling helper table, and checklists — live in the skills: `/add-integration` (end-to-end), `/add-tools`, `/add-block`, `/add-trigger`.
## Hard rules (don't get these wrong)
- Tool IDs are `snake_case` (`service_action`). Register tools in `tools/registry.ts`, blocks in `blocks/registry-maps.ts` (the `BLOCK_REGISTRY` config map + `BLOCK_META_REGISTRY` catalog-meta map, alphabetically — `blocks/registry.ts` holds only the accessor functions), triggers in `triggers/registry.ts`.
- Type coercions (`Number()`, etc.) belong in `tools.config.params` (runs at execution, after variable resolution) — never in `tools.config.tool` (runs at serialization; coercing there destroys dynamic `<Block.output>` references).
- `canonicalParamId` must NOT match any subblock's `id`, must be unique per operation/condition context, and all subblocks in a canonical group must share the same `required` status. The `inputs` section and the params function reference canonical IDs, not raw subblock IDs.
- Blocks must also set the catalog/UI metadata fields `integrationType`, `tags`, `authMode`, `docsLink`, and export a `{Service}BlockMeta` — see the `/add-block` skill's BlockMeta section for details.