Skip to content

Commit 460c01f

Browse files
authored
improvement(planetscale): add placeholders to every input and fill missing docs intros (#8447)
1 parent ac49d38 commit 460c01f

7 files changed

Lines changed: 129 additions & 2 deletions

File tree

‎.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

‎apps/docs/content/docs/integrations/bitbucket.mdx‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,23 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
1010
color="#FFFFFF"
1111
/>
1212

13+
{/* MANUAL-CONTENT-START:intro */}
14+
[Bitbucket](https://bitbucket.org/) is Atlassian's Git hosting service for code, pull requests, and CI/CD with Bitbucket Pipelines.
15+
16+
With the Bitbucket block, you can:
17+
18+
- **Browse workspaces and repositories**: List workspaces and repositories, and read repository details
19+
- **Read source code**: List branches, commits, and directory contents, and read files and file metadata
20+
- **Manage branches**: Create and delete branches
21+
- **Work on pull requests**: List, read, create, approve, merge, and decline pull requests, read their diffs, and list or add comments
22+
- **Run pipelines**: List pipelines and their steps, trigger or stop a pipeline, and read step logs
23+
24+
Connect your Bitbucket account with OAuth. The Bitbucket triggers can also start a workflow on pushes, repository changes, build status updates, and pull request events, with the webhook managed for you.
25+
26+
In Sim, the Bitbucket block lets your agents take part in your development process: review a pull request when it opens, summarize a failed pipeline from its step logs, or cut a release branch and open the pull request for it.
27+
{/* MANUAL-CONTENT-END */}
28+
29+
1330
## Usage Instructions
1431

1532
Connect Bitbucket Cloud to inspect repositories and source, collaborate on pull requests, diagnose or control pipelines, and start workflows from repository and pull request events. OAuth is used for actions and automatic webhook management.

‎apps/docs/content/docs/integrations/modal.mdx‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
1010
color="#000000"
1111
/>
1212

13+
{/* MANUAL-CONTENT-START:intro */}
14+
[Modal](https://modal.com/) is a serverless platform for running Python code, AI models, and batch jobs on cloud CPUs and GPUs.
15+
16+
With the Modal block, you can:
17+
18+
- **Call your functions**: Send an HTTPS request to a deployed Modal Web Function or Server and get back its response
19+
- **Generate completions**: Get chat completions from a model you serve on a Modal Endpoint
20+
- **List models**: See which models a token can reach
21+
22+
To connect, create a proxy auth token in your Modal workspace settings and enter its token ID and secret in the block.
23+
24+
In Sim, the Modal block lets your agents use compute you already run on Modal: call a custom inference function, run a GPU job on data from an earlier block, or use your own hosted model inside a workflow.
25+
{/* MANUAL-CONTENT-END */}
26+
27+
1328
## Usage Instructions
1429

1530
Integrate Modal into your workflow to reach the serverless compute you already run there. Invoke a deployed Web Function or Server over HTTPS with proxy-token auth, generate completions from a model served by a Modal Endpoint, and list the models a token can reach.

‎apps/docs/content/docs/integrations/otter.mdx‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
1010
color="#FFFFFF"
1111
/>
1212

13+
{/* MANUAL-CONTENT-START:intro */}
14+
[Otter.ai](https://otter.ai/) is an AI meeting assistant that records, transcribes, and summarizes conversations.
15+
16+
With the Otter block, you can:
17+
18+
- **Read conversations**: List conversations and read each one's summary, action items, insights, outline, and transcript
19+
- **Get recordings**: Get audio download links and import recordings for transcription
20+
- **Browse your workspace**: List channels and their members, read workspace details, and list conversations across the workspace
21+
22+
To connect, enter an API key from an Otter Enterprise workspace. The Otter triggers can also start a workflow when a conversation finishes processing or is shared.
23+
24+
In Sim, the Otter block lets your agents act on your meetings: send action items to your task tracker, post summaries to Slack, or save transcripts to a knowledge base.
25+
{/* MANUAL-CONTENT-END */}
26+
27+
1328
## Usage Instructions
1429

1530
Integrate Otter.ai into your workflow to list and read meeting conversations with their summaries, action items, insights, outlines, and transcripts, get audio download links, import recordings, and browse channels and workspace details. Otter can also trigger workflows when a conversation finishes processing or is shared. Requires an Otter Enterprise workspace.

‎apps/docs/content/docs/integrations/planetscale.mdx‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
1010
color="#111111"
1111
/>
1212

13+
{/* MANUAL-CONTENT-START:intro */}
14+
[PlanetScale](https://planetscale.com/) is a managed database platform for MySQL (built on Vitess) and PostgreSQL. It uses Git-style branches for schema changes and deploy requests to review and ship those changes safely.
15+
16+
With the PlanetScale block, you can:
17+
18+
- **Inspect databases and branches**: List the databases in an organization, read database details, and list or read branches
19+
- **Manage branches**: Create development branches from a parent, restore a backup into a new branch, or delete branches you no longer need
20+
- **Work with backups**: Create on-demand backups, list backups for a branch, and check a backup's state, size, and expiration
21+
- **Ship schema changes (Vitess)**: Create deploy requests, review or approve them, queue them for deployment, and close them
22+
23+
To connect, create a service token in your PlanetScale organization settings and grant it access to the databases and actions your workflow needs. Enter the service token ID, the service token, and your organization slug in the block.
24+
25+
In Sim, the PlanetScale block lets your agents manage database operations as part of a workflow: spin up a branch when a pull request opens, take a backup before a release, report on backup health every day, or open and track a deploy request for a schema change. To run SQL queries against a database, use the MySQL or PostgreSQL block.
26+
{/* MANUAL-CONTENT-END */}
27+
28+
1329
## Usage Instructions
1430

1531
Manage PlanetScale databases and branches, create and inspect backups, and create, review, queue, and close Vitess deploy requests. Authenticate with an organization service token. Deploy-request actions require a Vitess database; SQL queries are available through the MySQL and PostgreSQL integrations.

0 commit comments

Comments
 (0)