Skip to content

Commit 5793bb2

Browse files
author
Vikhyath Mondreti
committed
Merge staging into feat/workflow-version-diff
2 parents 64529e4 + 21b2972 commit 5793bb2

455 files changed

Lines changed: 58465 additions & 2704 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-integration/SKILL.md‎

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Follow `.agents/skills/add-block/SKILL.md` for the block structure, subBlock typ
123123
`canvasPresentation`; `bun run apps/sim/scripts/check-canvas-sentences.ts --block={service}` must
124124
pass (CI runs `check:canvas-sentences --require-coverage`).
125125

126-
Two rules that are easy to get wrong when copying from existing blocks:
126+
Three rules that are easy to get wrong when copying from existing blocks:
127127

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

139145
## Step 4: Add Icon
140146

@@ -309,6 +315,28 @@ bun run docs:check
309315

310316
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`).
311317

318+
Every generated integration page carries a hand-written intro directly under `<BlockInfoCard />`. The
319+
generator preserves it across regenerations, so write it once after the first generate:
320+
321+
```mdx
322+
{/* MANUAL-CONTENT-START:intro */}
323+
[{Service}](https://service.com/) is {one sentence on what the service is}.
324+
325+
With the {Service} block, you can:
326+
327+
- **{Capability}**: {what the operations in this group do}
328+
- **{Capability}**: {...}
329+
330+
{How to connect: which credential to create and where, if it is not OAuth.}
331+
332+
In Sim, the {Service} block lets your agents {concrete workflow uses}.
333+
{/* MANUAL-CONTENT-END */}
334+
```
335+
336+
Group the bullets by what the user gets done, not one bullet per tool. Only describe operations the
337+
block actually ships. Follow `.claude/rules/constitution.md` for voice. Re-run
338+
`bun run scripts/generate-docs.ts` afterwards and confirm the section survived unchanged.
339+
312340
The docs generator refreshes `packages/deployment-config/src/integrations.json`, and the deployment
313341
config generator projects service-account provider IDs from that catalog plus the canonical OAuth
314342
registry. The checks compare both committed projections with their sources. Review the generated
@@ -368,6 +396,7 @@ If creating V2 versions (API-aligned outputs):
368396
- [ ] Defined operation dropdown with all operations
369397
- [ ] Added credential field with `requiredScopes: getScopesForService('{service}')`
370398
- [ ] Added conditional fields per operation
399+
- [ ] Every `short-input`, `long-input`, `code`, and selector subBlock has a `placeholder`
371400
- [ ] Set up dependsOn for cascading selectors
372401
- [ ] Every remote `selectorKey` exists in the shared manifest and has one server attachment with
373402
trusted credential provider binding and a fixed, credential-bound, or explicitly reviewed
@@ -415,6 +444,7 @@ If creating V2 versions (API-aligned outputs):
415444
- [ ] Ran `bun run scripts/generate-docs.ts`
416445
- [ ] Ran `bun run deployment-config:generate` for OAuth or service-account changes
417446
- [ ] Verified docs file created
447+
- [ ] Wrote the `{/* MANUAL-CONTENT-START:intro */}` section under `<BlockInfoCard />` and confirmed it survives a regenerate
418448
- [ ] Reviewed and committed the generated `packages/deployment-config/src/integrations.json` change
419449
- [ ] `bun run integration-catalog:check` passes
420450
- [ ] `bun run docs:check` passes — CI fails on stale generated docs, so commit the full generator

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ For **each tool** in `tools.access`:
218218
- True/false → `switch` (a Yes/No `dropdown` only when the tool needs a third "unset" state)
219219
- Credentials → `oauth-input` with correct `serviceId`
220220
- [ ] Dropdown `value: () => 'default'` is set for dropdowns with a sensible default
221+
- [ ] Every `short-input`, `long-input`, `code`, and selector subBlock has a `placeholder` — including
222+
password fields (`Enter your API key`). Formatted values show the shape
223+
(`2023-01-01T00:00:00Z`); optional fields with a server default name it. See add-integration → Step 3
221224

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

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

455462
### Validation Output
@@ -473,6 +480,7 @@ After fixing, confirm:
473480
- [ ] Validated every tool's ID, params, request, response, outputs, and types against API docs
474481
- [ ] Validated block ↔ tool alignment (every tool param has a subBlock, every condition is correct)
475482
- [ ] Validated advanced mode on optional/rarely-used fields
483+
- [ ] Validated every text-entry and selector subBlock has a `placeholder`
476484
- [ ] Validated wandConfig on timestamps and complex inputs
477485
- [ ] Validated tools.config mapping, tool selector, and type coercions
478486
- [ ] Validated block outputs match what tools return, with typed JSON where possible
@@ -496,6 +504,7 @@ After fixing, confirm:
496504
- [ ] Fixed all critical and warning issues
497505
- [ ] Ran `bun run tool-metadata:generate` if any tool outputs/params changed, and confirmed `bun run tool-metadata:check` passes
498506
- [ ] 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)
507+
- [ ] Validated the docs page has an accurate `MANUAL-CONTENT-START:intro` section
499508
- [ ] Ran `bun run lint` after fixes
500509
- [ ] Verified TypeScript compiles clean
501510
- [ ] Verified added tests fail without their fix

‎.github/workflows/desktop-e2e.yml‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ on:
1414
- 'apps/sim/app/layout.tsx'
1515
- 'apps/sim/hooks/use-desktop-update-state.ts'
1616
- 'apps/sim/lib/desktop/**'
17+
- 'apps/sim/app/desktop/connect/**'
18+
- 'apps/sim/app/credential-groups/**'
19+
- 'apps/sim/hooks/queries/slack-search.ts'
20+
- 'apps/sim/hooks/use-github-installation-setup.ts'
21+
- 'apps/sim/app/o/**/integrations/indexed/use-member-enrollment.ts'
22+
- 'apps/sim/lib/api/contracts/desktop-source-connect.ts'
23+
- 'apps/sim/scripts/fixtures/desktop-source-connect.tsx'
1724
- 'apps/sim/app/workspace/**/browser-session/**'
1825
- 'apps/sim/app/_styles/**'
1926
- 'apps/sim/lib/postcss/**'
@@ -61,6 +68,10 @@ jobs:
6168
working-directory: apps/desktop
6269
run: bun run build
6370

71+
- name: Install system-browser fixture
72+
working-directory: apps/desktop
73+
run: bunx playwright install chromium
74+
6475
- name: Run Playwright _electron smoke suite
6576
working-directory: apps/desktop
6677
run: bunx playwright test
@@ -98,6 +109,10 @@ jobs:
98109
working-directory: apps/desktop
99110
run: bun run build
100111

112+
- name: Install system-browser fixture
113+
working-directory: apps/desktop
114+
run: bunx playwright install chromium
115+
101116
- name: Run Playwright _electron smoke suite
102117
working-directory: apps/desktop
103118
run: bunx playwright test

‎.github/workflows/test-build.yml‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,60 @@ jobs:
147147
if-no-files-found: ignore
148148
retention-days: 7
149149

150+
- name: Verify Lucid MCP search and complete diagram reads over real HTTP
151+
if: matrix.provision == 'push'
152+
working-directory: apps/sim
153+
env:
154+
NEXT_PUBLIC_APP_URL: http://127.0.0.1:3040
155+
NEXT_PUBLIC_FORCE_HOSTED: 'false'
156+
SEARCH_LUCID_REPORT_PATH: ${{ runner.temp }}/search-lucid.json
157+
run: bun scripts/test-search-lucid-e2e.ts
158+
159+
- name: Upload Lucid acceptance report
160+
if: failure() && matrix.provision == 'push'
161+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
162+
with:
163+
name: search-lucid
164+
path: ${{ runner.temp }}/search-lucid.json
165+
if-no-files-found: ignore
166+
retention-days: 7
167+
168+
- name: Verify Zoom search over real HTTP
169+
if: matrix.provision == 'push'
170+
working-directory: apps/sim
171+
env:
172+
NEXT_PUBLIC_APP_URL: http://127.0.0.1:3040
173+
NEXT_PUBLIC_FORCE_HOSTED: 'false'
174+
SEARCH_ZOOM_REPORT_PATH: ${{ runner.temp }}/search-zoom.json
175+
run: bun scripts/test-search-zoom-e2e.ts
176+
177+
- name: Upload Zoom acceptance report
178+
if: failure() && matrix.provision == 'push'
179+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
180+
with:
181+
name: search-zoom
182+
path: ${{ runner.temp }}/search-zoom.json
183+
if-no-files-found: ignore
184+
retention-days: 7
185+
186+
- name: Verify Google Meet search over real HTTP
187+
if: matrix.provision == 'push'
188+
working-directory: apps/sim
189+
env:
190+
NEXT_PUBLIC_APP_URL: http://127.0.0.1:3040
191+
NEXT_PUBLIC_FORCE_HOSTED: 'false'
192+
SEARCH_GOOGLE_MEET_REPORT_PATH: ${{ runner.temp }}/search-google-meet.json
193+
run: bun scripts/test-search-google-meet-e2e.ts
194+
195+
- name: Upload Google Meet acceptance report
196+
if: failure() && matrix.provision == 'push'
197+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
198+
with:
199+
name: search-google-meet
200+
path: ${{ runner.temp }}/search-google-meet.json
201+
if-no-files-found: ignore
202+
retention-days: 7
203+
150204
- name: Verify SCIM and administration over real HTTP
151205
working-directory: apps/sim
152206
env:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/** Matches Next's browser Buffer polyfill when bundling application code with esbuild. */
2+
export { Buffer } from 'buffer'

0 commit comments

Comments
 (0)