Skip to content

Commit 48c59c8

Browse files
authored
v0.8.0: desktop app, workflow UI, v2 endpoints
2 parents ce2dff3 + 7b3e6a6 commit 48c59c8

2,362 files changed

Lines changed: 295643 additions & 58270 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/add-integration/SKILL.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,9 +768,11 @@ tools: {
768768
}
769769
```
770770

771-
#### 3. Create Internal API Route
771+
#### 3. Create Special Internal Tool Execution Route
772772

773-
Create `apps/sim/app/api/tools/{service}/{action}/route.ts`. Internal tool routes are HTTP boundaries and follow the same contract policy as public routes — define the request/response shape in `apps/sim/lib/api/contracts/tools/{service}.ts` (or an existing aggregate) and validate with canonical helpers from `@/lib/api/server`. Never write a route-local Zod schema.
773+
Create `apps/sim/app/api/tools/{service}/{action}/route.ts`. This raw route pattern is only for an integration's provider-execution boundary when it needs special file normalization, large-body handling, or protocol behavior. It is not the pattern for CRUD or other operations on protected Sim resources. For those, use the `migrate-application-operation` skill and an authorized application use case with the ordinary internal/v2 route builders.
774+
775+
Internal tool routes are HTTP boundaries and follow the same contract policy as public routes — define the request/response shape in `apps/sim/lib/api/contracts/tools/{service}.ts` (or an existing aggregate) and validate with canonical helpers from `@/lib/api/server`. Never write a route-local Zod schema. Authenticate and perform cheap admission before parsing or downloading files.
774776

775777
```typescript
776778
// apps/sim/lib/api/contracts/tools/{service}.ts

0 commit comments

Comments
 (0)