Skip to content

Commit 398d17c

Browse files
Merge origin/staging into improvement/v2-endpoints
2 parents f8c21e0 + 9277e7d commit 398d17c

789 files changed

Lines changed: 92576 additions & 6196 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: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ export const {ServiceName}Block: BlockConfig = {
5252
// Auth mode
5353
authMode: AuthMode.OAuth, // or AuthMode.ApiKey
5454

55+
// Card summary sentences — see "Canvas Sentences" below
56+
canvasPresentation: {
57+
defaultTitle: '{Default Operation}',
58+
sentences: { byOperation: { /* one per operation dropdown option id */ } },
59+
},
60+
5561
subBlocks: [
5662
// Define all UI fields here
5763
],
@@ -945,6 +951,35 @@ Derive templates from the service's real use cases. Each prompt should name a co
945951
- **Ground every skill in operations the block actually exposes** — cross-check each skill's steps against `tools.access`. Never describe an action the integration cannot perform.
946952
- **Derive skills from real, popular use cases found online — never invent them.** Web-search the service's documented use cases (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles) and only add a skill you can source as something people genuinely do with the service. Do not hallucinate skills.
947953

954+
## Canvas Sentences
955+
956+
Every block declares a one-line prose summary that replaces its card's field rows:
957+
958+
```
959+
Slack ← header (already names the block)
960+
Posts ⟨Ship it 🚀⟩ to ⟨#eng⟩ ← the sentence; ⟨…⟩ are live value chips
961+
```
962+
963+
Write one `byOperation` entry per operation dropdown option (or a single `default`
964+
when the block has no operation dropdown).
965+
966+
**The full authoring contract — voice, structure, and the two mistakes that break
967+
cards silently — is `apps/sim/blocks/AGENTS.md` → "Canvas sentences". Read it
968+
before writing any.** The two failures worth repeating here, because both are
969+
invisible at runtime:
970+
971+
1. A clause naming only one member of a `canonicalParamId` pair drops the sentence
972+
for every advanced-mode user. List all members:
973+
`field: ['channelSelector', 'manualChannel']`.
974+
2. A clause referencing a subblock whose `condition` excludes that operation can
975+
never render.
976+
977+
Validate before finishing:
978+
979+
```bash
980+
bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}
981+
```
982+
948983
## Generated artifacts
949984

950985
Adding a block on its own needs no **tool metadata** regeneration — a block references existing
@@ -963,7 +998,6 @@ bun run integration-catalog:check
963998
The catalog check independently derives deployment metadata from the executable block registry and
964999
compares it with the committed `apps/sim/lib/integrations/integrations.json`. Review the generated
9651000
diff and keep only intentional changes.
966-
9671001
## Checklist Before Finishing
9681002

9691003
- [ ] `integrationType` is set to the correct `IntegrationType` enum value
@@ -991,6 +1025,7 @@ diff and keep only intentional changes.
9911025
- [ ] Exported `{Service}BlockMeta` with at least 7 templates
9921026
- [ ] `url` set on `{Service}BlockMeta` to the external service's verified homepage (omit only for first-party blocks with no external service)
9931027
- [ ] `skills` added to `{Service}BlockMeta`, each grounded in `tools.access` and sourced from a real online use case (not invented)
1028+
- [ ] `canvasPresentation.sentences` covers every operation, and `bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}` passes with 100% coverage
9941029

9951030
## Final Validation (Required)
9961031

.agents/skills/design-taste-frontend/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
name: design-taste-frontend
3+
source: https://github.com/leonxlnx/taste-skill — skills/taste-skill/SKILL.md
34
description: Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check.
45
---
56

.agents/skills/emil-design-eng/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
name: emil-design-eng
3+
source: https://github.com/emilkowalski/skill — skills/emil-design-eng/SKILL.md
34
description: This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.
45
---
56

.agents/skills/make-interfaces-feel-better/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
name: make-interfaces-feel-better
3+
source: https://github.com/jakubkrehel/make-interfaces-feel-better — skills/make-interfaces-feel-better/SKILL.md
34
description: Design engineering principles for making interfaces feel polished. Use when building UI components, reviewing frontend code, implementing animations, hover states, shadows, borders, typography, micro-interactions, enter/exit animations, or any visual detail work. Triggers on UI polish, design details, "make it feel better", "feels off", stagger animations, border radius, optical alignment, font smoothing, tabular numbers, image outlines, box shadows.
45
---
56

.claude/commands/add-block.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ export const {ServiceName}Block: BlockConfig = {
5151
// Auth mode
5252
authMode: AuthMode.OAuth, // or AuthMode.ApiKey
5353

54+
// Card summary sentences — see "Canvas Sentences" below
55+
canvasPresentation: {
56+
defaultTitle: '{Default Operation}',
57+
sentences: { byOperation: { /* one per operation dropdown option id */ } },
58+
},
59+
5460
subBlocks: [
5561
// Define all UI fields here
5662
],
@@ -944,6 +950,35 @@ Derive templates from the service's real use cases. Each prompt should name a co
944950
- **Ground every skill in operations the block actually exposes** — cross-check each skill's steps against `tools.access`. Never describe an action the integration cannot perform.
945951
- **Derive skills from real, popular use cases found online — never invent them.** Web-search the service's documented use cases (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles) and only add a skill you can source as something people genuinely do with the service. Do not hallucinate skills.
946952

953+
## Canvas Sentences
954+
955+
Every block declares a one-line prose summary that replaces its card's field rows:
956+
957+
```
958+
Slack ← header (already names the block)
959+
Posts ⟨Ship it 🚀⟩ to ⟨#eng⟩ ← the sentence; ⟨…⟩ are live value chips
960+
```
961+
962+
Write one `byOperation` entry per operation dropdown option (or a single `default`
963+
when the block has no operation dropdown).
964+
965+
**The full authoring contract — voice, structure, and the two mistakes that break
966+
cards silently — is `apps/sim/blocks/AGENTS.md` → "Canvas sentences". Read it
967+
before writing any.** The two failures worth repeating here, because both are
968+
invisible at runtime:
969+
970+
1. A clause naming only one member of a `canonicalParamId` pair drops the sentence
971+
for every advanced-mode user. List all members:
972+
`field: ['channelSelector', 'manualChannel']`.
973+
2. A clause referencing a subblock whose `condition` excludes that operation can
974+
never render.
975+
976+
Validate before finishing:
977+
978+
```bash
979+
bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}
980+
```
981+
947982
## Generated artifacts
948983

949984
Adding a block on its own needs no **tool metadata** regeneration — a block references existing
@@ -962,7 +997,6 @@ bun run integration-catalog:check
962997
The catalog check independently derives deployment metadata from the executable block registry and
963998
compares it with the committed `apps/sim/lib/integrations/integrations.json`. Review the generated
964999
diff and keep only intentional changes.
965-
9661000
## Checklist Before Finishing
9671001

9681002
- [ ] `integrationType` is set to the correct `IntegrationType` enum value
@@ -990,6 +1024,7 @@ diff and keep only intentional changes.
9901024
- [ ] Exported `{Service}BlockMeta` with at least 7 templates
9911025
- [ ] `url` set on `{Service}BlockMeta` to the external service's verified homepage (omit only for first-party blocks with no external service)
9921026
- [ ] `skills` added to `{Service}BlockMeta`, each grounded in `tools.access` and sourced from a real online use case (not invented)
1027+
- [ ] `canvasPresentation.sentences` covers every operation, and `bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}` passes with 100% coverage
9931028

9941029
## Final Validation (Required)
9951030

.claude/rules/emcn-components.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Import components, `cn`, and tokens from the `@sim/emcn` barrel; icons come from
1111

1212
Never hand-roll the chip pill from raw class strings (they go stale). Compose from the canonical sources:
1313

14-
- **Surface, typography + content tokens:** `chip/chip-chrome.ts``chipFilledSurfaceTokens`, `chipFieldSurfaceClass`, `chipFieldTextClass` (text fields and the dropdown search box build on these), plus the chip-content chrome `chipContentGap`, `chipGeometryClass`, `chipContentIconClass`, `chipContentLabelClass`, and `cellIconNodeClass` (non-chip surfaces that must visually match chip content, e.g. resource table cells). All are re-exported from the `@sim/emcn` barrel — no subpath import needed.
14+
- **Surface, typography + content tokens:** `chip/chip-chrome.ts``chipFilledSurfaceTokens`, `chipFieldSurfaceClass`, `chipFieldTextClass` (text fields and the dropdown search box build on these), plus the chip-content chrome `chipContentGap`, `chipGeometryClass`, `chipContentIconClass`, `chipContentLabelClass`, `cellIconNodeClass` (non-chip surfaces that must visually match chip content, e.g. resource table cells), and the row-state pair `chipHoverSurfaceClass` / `chipActiveSurfaceClass` (hover vs. selected — mutually exclusive, so a selected row holds its surface through hover; every hand-rolled row imports these rather than restating the literals). All are re-exported from the `@sim/emcn` barrel — no subpath import needed.
1515
- **Pill geometry:** `chip/chip.tsx``chipVariants` (30px tall, `rounded-lg`, `px-2`, icon↔text `gap-1.5`). Every pill-shaped trigger (`ChipDropdown`, `ChipSelect`, `ChipSwitch`) reuses it for visual parity.
1616

1717
Canonical look: normal font-weight (never `font-medium`/`font-semibold`), value text `--text-body`, icons `--text-icon` at `size-[14px]`, placeholder `--text-muted`, `transition-colors`, **no focus ring** (the caret marks focus). Filled surface is `--surface-5` light / `--surface-4` dark with a `--border-1` border.

.cursor/commands/add-block.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ export const {ServiceName}Block: BlockConfig = {
4646
// Auth mode
4747
authMode: AuthMode.OAuth, // or AuthMode.ApiKey
4848

49+
// Card summary sentences — see "Canvas Sentences" below
50+
canvasPresentation: {
51+
defaultTitle: '{Default Operation}',
52+
sentences: { byOperation: { /* one per operation dropdown option id */ } },
53+
},
54+
4955
subBlocks: [
5056
// Define all UI fields here
5157
],
@@ -939,6 +945,35 @@ Derive templates from the service's real use cases. Each prompt should name a co
939945
- **Ground every skill in operations the block actually exposes** — cross-check each skill's steps against `tools.access`. Never describe an action the integration cannot perform.
940946
- **Derive skills from real, popular use cases found online — never invent them.** Web-search the service's documented use cases (vendor use-case/solutions pages, official docs describing the workflow, reputable "top automations for X" articles) and only add a skill you can source as something people genuinely do with the service. Do not hallucinate skills.
941947

948+
## Canvas Sentences
949+
950+
Every block declares a one-line prose summary that replaces its card's field rows:
951+
952+
```
953+
Slack ← header (already names the block)
954+
Posts ⟨Ship it 🚀⟩ to ⟨#eng⟩ ← the sentence; ⟨…⟩ are live value chips
955+
```
956+
957+
Write one `byOperation` entry per operation dropdown option (or a single `default`
958+
when the block has no operation dropdown).
959+
960+
**The full authoring contract — voice, structure, and the two mistakes that break
961+
cards silently — is `apps/sim/blocks/AGENTS.md` → "Canvas sentences". Read it
962+
before writing any.** The two failures worth repeating here, because both are
963+
invisible at runtime:
964+
965+
1. A clause naming only one member of a `canonicalParamId` pair drops the sentence
966+
for every advanced-mode user. List all members:
967+
`field: ['channelSelector', 'manualChannel']`.
968+
2. A clause referencing a subblock whose `condition` excludes that operation can
969+
never render.
970+
971+
Validate before finishing:
972+
973+
```bash
974+
bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}
975+
```
976+
942977
## Generated artifacts
943978

944979
Adding a block on its own needs no **tool metadata** regeneration — a block references existing
@@ -957,7 +992,6 @@ bun run integration-catalog:check
957992
The catalog check independently derives deployment metadata from the executable block registry and
958993
compares it with the committed `apps/sim/lib/integrations/integrations.json`. Review the generated
959994
diff and keep only intentional changes.
960-
961995
## Checklist Before Finishing
962996

963997
- [ ] `integrationType` is set to the correct `IntegrationType` enum value
@@ -985,6 +1019,7 @@ diff and keep only intentional changes.
9851019
- [ ] Exported `{Service}BlockMeta` with at least 7 templates
9861020
- [ ] `url` set on `{Service}BlockMeta` to the external service's verified homepage (omit only for first-party blocks with no external service)
9871021
- [ ] `skills` added to `{Service}BlockMeta`, each grounded in `tools.access` and sourced from a real online use case (not invented)
1022+
- [ ] `canvasPresentation.sentences` covers every operation, and `bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}` passes with 100% coverage
9881023

9891024
## Final Validation (Required)
9901025

.github/actions/docker-build/action.yml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,28 @@ inputs:
2525
runs:
2626
using: composite
2727
steps:
28+
# One sticky disk per Dockerfile per platform. v1 keyed it on the repo name
29+
# alone, so every image shared one disk: matrix jobs all clone the same
30+
# parent snapshot and only the first to finish becomes the next parent, so
31+
# the app image's `deps` layer was written and discarded every run (~300-465s
32+
# rebuilt each time). Platform is in the key because amd64 and arm64 build
33+
# the same Dockerfiles concurrently on main and share no layers. Ref is
34+
# deliberately not: cross-ref reuse is the point, and an occasional overlap
35+
# costs one rebuild.
36+
- name: Resolve Docker layer cache key
37+
id: cache-key
38+
if: inputs.provider == '' || inputs.provider == 'blacksmith'
39+
shell: bash
40+
env:
41+
FILE: ${{ inputs.file }}
42+
PLATFORMS: ${{ inputs.platforms }}
43+
run: echo "value=${GITHUB_REPOSITORY##*/}/${FILE#./}/${PLATFORMS//\//-}" >> "$GITHUB_OUTPUT"
44+
2845
- name: Set up Blacksmith builder
2946
if: inputs.provider == '' || inputs.provider == 'blacksmith'
30-
uses: useblacksmith/setup-docker-builder@ab5c1da94f53f5cd75c1038092aa276dddfccbba # v1
47+
uses: useblacksmith/setup-docker-builder@a5256a73e30f09e37e3eceb8ca36043d17621d24 # v2
48+
with:
49+
cache-key: ${{ steps.cache-key.outputs.value }}
3150

3251
- name: Build and push (Blacksmith)
3352
if: inputs.provider == '' || inputs.provider == 'blacksmith'

.github/workflows/ci.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,20 @@ jobs:
155155
fail-fast: false
156156
matrix:
157157
include:
158-
# Only the app image needs the paid 8-core/32 GB runner: next build
159-
# exhausts the free 16 GB one (exit 137). The others build in <5 min.
160-
# bs_runner mirrors that per-image sizing on Blacksmith — a single
161-
# pinned tier put every image on 8 vCPU, where the non-app builds idle
162-
# at 12-15% CPU and under 10% memory.
158+
# Only the app image needs a large runner: next build exhausts the free
159+
# 16 GB one (exit 137). The others build in <5 min and idle at 12-15%
160+
# CPU on 8 vCPU, so they stay on the smaller tiers.
161+
#
162+
# 16 vCPU on Blacksmith because this build is the critical path to a
163+
# deploy — nothing ships until the image is pushed — and its two
164+
# dominant steps both scale with cores (`bun install` ~300-400s, `next
165+
# build` ~260s). The same `next build` runs on 16 vCPU in the separate
166+
# Build App verification job, which does not gate anything; this one
167+
# was doing comparable work on half the cores.
163168
- dockerfile: ./docker/app.Dockerfile
164169
ecr_repo_secret: ECR_APP
165170
gh_runner: linux-x64-8-core
166-
bs_runner: blacksmith-8vcpu-ubuntu-2404
171+
bs_runner: blacksmith-16vcpu-ubuntu-2404
167172
- dockerfile: ./docker/db.Dockerfile
168173
ecr_repo_secret: ECR_MIGRATIONS
169174
gh_runner: ubuntu-latest
@@ -278,7 +283,7 @@ jobs:
278283
ghcr_image: ghcr.io/simstudioai/simstudio
279284
ecr_repo_secret: ECR_APP
280285
gh_runner: linux-x64-8-core
281-
bs_runner: blacksmith-8vcpu-ubuntu-2404
286+
bs_runner: blacksmith-16vcpu-ubuntu-2404
282287
- dockerfile: ./docker/db.Dockerfile
283288
ghcr_image: ghcr.io/simstudioai/migrations
284289
ecr_repo_secret: ECR_MIGRATIONS

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ Manage your install with `bun run sim`:
105105

106106
```bash
107107
bun run sim start | stop | restart # bring your install up / down / cycle
108+
bun run sim update # pull/rebuild and apply Compose images
108109
bun run sim status # what's installed and healthy
109110
bun run sim logs # follow logs
110111
bun run sim doctor # diagnose configuration problems

0 commit comments

Comments
 (0)