Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
025f2ec
improvement(desktop): surface update actions in a persistent toast (#…
waleedlatif1 Sep 29, 2026
bf66b16
feat(mailgun): add US/EU region selection to the Mailgun block and to…
waleedlatif1 Sep 29, 2026
113a204
fix(desktop-browser): keep the chat caret while the agent works and r…
waleedlatif1 Sep 29, 2026
a6c9b03
feat(cli): add sim cli search and default output to JSON (#8426)
TheodoreSpeaks Sep 29, 2026
16c7e1a
fix(search): retire legacy embeddings through scoped backfill (#8430)
icecrasher321 Sep 29, 2026
d3f2830
improvement(execution): cut the time between a workflow trigger and i…
waleedlatif1 Sep 29, 2026
c82d618
improvement(settings): remove the 300ms floor under settings section …
waleedlatif1 Sep 29, 2026
0edb79f
feat(api): add optional log snapshots and Stripe subscription paginat…
waleedlatif1 Sep 29, 2026
158ead8
fix(search): finish retirement and index maintenance on deploy (#8437)
icecrasher321 Sep 29, 2026
69326d2
improvement(chat): show live search sources by default (#8419)
BillLeoutsakosvl346 Sep 29, 2026
3ab3459
fix(desktop-browser): keep error-page focus recovery inside the brows…
waleedlatif1 Sep 30, 2026
3841b94
fix(search): retire indexed content across all Search KBs (#8441)
icecrasher321 Sep 30, 2026
90dfccf
feat(planetscale): add management actions (#8438)
BillLeoutsakosvl346 Sep 30, 2026
2f52353
improvement(settings): paint settings section clicks immediately and …
waleedlatif1 Sep 30, 2026
f7d0259
fix(knowledge): withdraw a queued generation when its Search KB turns…
waleedlatif1 Sep 30, 2026
1b20406
fix(confluence): retry transient attachment metadata 500s and skip a …
waleedlatif1 Sep 30, 2026
ac49d38
fix(execution): publish a pause only after its run log is finalized (…
waleedlatif1 Sep 30, 2026
460c01f
improvement(planetscale): add placeholders to every input and fill mi…
waleedlatif1 Sep 30, 2026
efbb4f5
fix(uploads): sign S3-compatible upload metadata as headers and allow…
waleedlatif1 Sep 30, 2026
10726ce
improvement(whitelabeling): gate the settings page on the whitelabel …
waleedlatif1 Sep 30, 2026
85402d0
fix(mothership): end refused replay turns cleanly and bound oversized…
waleedlatif1 Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion .agents/skills/add-integration/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Follow `.agents/skills/add-block/SKILL.md` for the block structure, subBlock typ
`canvasPresentation`; `bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}` must
pass (CI runs `check:canvas-sentences --require-coverage`).

Two rules that are easy to get wrong when copying from existing blocks:
Three rules that are easy to get wrong when copying from existing blocks:

- Every remote `selectorKey` must use the unified server selector path. Apply the `add-selector` skill:
add browser-safe metadata to `apps/sim/lib/selectors/manifest.ts`, reuse or extract a server-only
Expand All @@ -135,6 +135,12 @@ Two rules that are easy to get wrong when copying from existing blocks:
(e.g. `channelSelector` + `channelId` → `canonicalParamId: 'channel'`). It is the only key that
survives serialization, so `inputs` and `tools.config.params` reference the canonical id, never the
subblock ids. It is unique block-wide, and every member of a group shares the same `required` value.
- Every text-entry subBlock (`short-input`, `long-input`, `code`) and every selector declares a
`placeholder`; an empty box tells the user nothing. Secrets read `Enter your {thing}` (e.g.
`Enter your API key`), free text names what to type (`Enter branch name`), and formatted values
show the shape (`2023-01-01T00:00:00Z`, `1 to 1000`). An optional field with a server-side default
names that default (`Defaults to the database region`). Dropdowns, switches, and `oauth-input` do
not need one.

## Step 4: Add Icon

Expand Down Expand Up @@ -309,6 +315,28 @@ bun run docs:check

This creates `apps/docs/content/docs/integrations/{service}.mdx` — one page per service carrying the block's Actions and, if it has one, its Triggers section. Never hand-edit generated pages; the only editable region is the `{/* MANUAL-CONTENT */}` block (see `scripts/README.md`).

Every generated integration page carries a hand-written intro directly under `<BlockInfoCard />`. The
generator preserves it across regenerations, so write it once after the first generate:

```mdx
{/* MANUAL-CONTENT-START:intro */}
[{Service}](https://service.com/) is {one sentence on what the service is}.

With the {Service} block, you can:

- **{Capability}**: {what the operations in this group do}
- **{Capability}**: {...}

{How to connect: which credential to create and where, if it is not OAuth.}

In Sim, the {Service} block lets your agents {concrete workflow uses}.
{/* MANUAL-CONTENT-END */}
```

Group the bullets by what the user gets done, not one bullet per tool. Only describe operations the
block actually ships. Follow `.claude/rules/constitution.md` for voice. Re-run
`bun run scripts/generate-docs.ts` afterwards and confirm the section survived unchanged.

The docs generator refreshes `packages/deployment-config/src/integrations.json`, and the deployment
config generator projects service-account provider IDs from that catalog plus the canonical OAuth
registry. The checks compare both committed projections with their sources. Review the generated
Expand Down Expand Up @@ -368,6 +396,7 @@ If creating V2 versions (API-aligned outputs):
- [ ] Defined operation dropdown with all operations
- [ ] Added credential field with `requiredScopes: getScopesForService('{service}')`
- [ ] Added conditional fields per operation
- [ ] Every `short-input`, `long-input`, `code`, and selector subBlock has a `placeholder`
- [ ] Set up dependsOn for cascading selectors
- [ ] Every remote `selectorKey` exists in the shared manifest and has one server attachment with
trusted credential provider binding and a fixed, credential-bound, or explicitly reviewed
Expand Down Expand Up @@ -415,6 +444,7 @@ If creating V2 versions (API-aligned outputs):
- [ ] Ran `bun run scripts/generate-docs.ts`
- [ ] Ran `bun run deployment-config:generate` for OAuth or service-account changes
- [ ] Verified docs file created
- [ ] Wrote the `{/* MANUAL-CONTENT-START:intro */}` section under `<BlockInfoCard />` and confirmed it survives a regenerate
- [ ] Reviewed and committed the generated `packages/deployment-config/src/integrations.json` change
- [ ] `bun run integration-catalog:check` passes
- [ ] `bun run docs:check` passes — CI fails on stale generated docs, so commit the full generator
Expand Down
9 changes: 9 additions & 0 deletions .agents/skills/validate-integration/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@ For **each tool** in `tools.access`:
- True/false → `switch` (a Yes/No `dropdown` only when the tool needs a third "unset" state)
- Credentials → `oauth-input` with correct `serviceId`
- [ ] Dropdown `value: () => 'default'` is set for dropdowns with a sensible default
- [ ] Every `short-input`, `long-input`, `code`, and selector subBlock has a `placeholder` — including
password fields (`Enter your API key`). Formatted values show the shape
(`2023-01-01T00:00:00Z`); optional fields with a server default name it. See add-integration → Step 3

### Advanced Mode
- [ ] Optional, rarely-used fields are set to `mode: 'advanced'`:
Expand Down Expand Up @@ -450,6 +453,10 @@ upstream PR that skipped regeneration), and investigate anything that looks like
page losing a section usually means its source block moved or a generator input broke, not that the
hunk should be reverted.

The integration's page must carry a `{/* MANUAL-CONTENT-START:intro */}` section directly under
`<BlockInfoCard />`. If it is missing, write one using the template in add-integration → Step 8, and
check an existing intro against what the block actually ships (no removed or unshipped operations).

If an icon changed, `apps/sim/components/icons.tsx` is the source of truth and `apps/docs/components/icons.tsx` is its generated mirror — they must end up byte-identical for that component.

### Validation Output
Expand All @@ -473,6 +480,7 @@ After fixing, confirm:
- [ ] Validated every tool's ID, params, request, response, outputs, and types against API docs
- [ ] Validated block ↔ tool alignment (every tool param has a subBlock, every condition is correct)
- [ ] Validated advanced mode on optional/rarely-used fields
- [ ] Validated every text-entry and selector subBlock has a `placeholder`
- [ ] Validated wandConfig on timestamps and complex inputs
- [ ] Validated tools.config mapping, tool selector, and type coercions
- [ ] Validated block outputs match what tools return, with typed JSON where possible
Expand All @@ -496,6 +504,7 @@ After fixing, confirm:
- [ ] Fixed all critical and warning issues
- [ ] Ran `bun run tool-metadata:generate` if any tool outputs/params changed, and confirmed `bun run tool-metadata:check` passes
- [ ] Ran `bun run scripts/generate-docs.ts` if any block metadata changed, and committed the full generated diff — including stale-page catch-up for other integrations (`bun run docs:check` fails CI on reverted generator output)
- [ ] Validated the docs page has an accurate `MANUAL-CONTENT-START:intro` section
- [ ] Ran `bun run lint` after fixes
- [ ] Verified TypeScript compiles clean
- [ ] Verified added tests fail without their fix
4 changes: 4 additions & 0 deletions .github/workflows/desktop-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ on:
- '.github/workflows/desktop-e2e.yml'
- '.github/workflows/desktop-release.yml'
- 'apps/desktop/**'
- 'apps/sim/app/_shell/desktop-update-*.tsx'
- 'apps/sim/app/layout.tsx'
- 'apps/sim/hooks/use-desktop-update-state.ts'
- 'apps/sim/lib/desktop/**'
- 'apps/sim/app/workspace/**/browser-session/**'
- 'apps/sim/app/_styles/**'
- 'apps/sim/lib/postcss/**'
Expand Down
Loading
Loading