Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
d2bbd34
feat(integrations): add saved Ramp and Vanta credentials (#8802)
waleedlatif1 Oct 8, 2026
ba614dc
feat(oci): add validated native integration foundation (#7444)
BillLeoutsakosvl346 Oct 8, 2026
50ed85c
feat(oracle-fusion): add validated integration foundation (#7427)
BillLeoutsakosvl346 Oct 8, 2026
999483f
feat(oracle-epm): add validated integration foundation (#7469)
BillLeoutsakosvl346 Oct 8, 2026
33dfef2
fix(workflows): lint unquoted string references in JSON fields and su…
waleedlatif1 Oct 8, 2026
9bbe3d2
feat(library): How Do You Build a Salesforce AI Lead-Scoring Agent Wi…
icecrasher321 Oct 8, 2026
5a08e3a
docs(library): update best-ai-agents-support-ticket-triage (#8805)
icecrasher321 Oct 8, 2026
f09312d
feat(library): 6 Best AI Agent Marketplaces and Template Libraries in…
icecrasher321 Oct 8, 2026
b45bbf3
chore(config): retire unused env vars and fully-rolled-out feature fl…
waleedlatif1 Oct 8, 2026
e3bf8be
feat(oracledb): add Oracle Database integration (#7378)
BillLeoutsakosvl346 Oct 8, 2026
96273a5
fix(files): support arbitrary uploads and in-document links (#8807)
waleedlatif1 Oct 8, 2026
325ab96
fix(billing): acknowledge Stripe webhooks whose subscription referenc…
waleedlatif1 Oct 8, 2026
0f5590d
fix(db): retire unused keyword search projections (#8810)
icecrasher321 Oct 8, 2026
039ae7a
fix(google-ads): align reporting with current API access (#8812)
waleedlatif1 Oct 8, 2026
95a0023
feat(dashboards): add empty-state graphic for the dashboard page (#8719)
TheodoreSpeaks Oct 8, 2026
1bb9e86
fix(tables): log row writes to the change log instead of locking the …
TheodoreSpeaks Oct 8, 2026
cf61888
fix(tables): drop the per-table row-order lock from inserts (#8811)
TheodoreSpeaks Oct 8, 2026
57c227f
feat(analytics): attribute sign-ups and demo requests to their acquis…
waleedlatif1 Oct 8, 2026
d0d00b1
feat(changelog): publish curated product updates (#8787)
waleedlatif1 Oct 9, 2026
51cdbe6
fix(desktop-browser): ask the user before a page's alert, confirm, or…
waleedlatif1 Oct 9, 2026
950b84e
chore(integrations): refresh catalog and Microsoft branding (#8816)
waleedlatif1 Oct 9, 2026
52e32fc
feat(library): Enterprise AI Agent Compliance and Deployment Guide: H…
icecrasher321 Oct 9, 2026
e1a521d
docs(library): update best-ai-agents-sales-crm-automation (#8823)
icecrasher321 Oct 9, 2026
6a226f6
docs(library): update open-source-ai-agent-platforms (#8821)
icecrasher321 Oct 9, 2026
146be34
docs(library): update best-zapier-alternatives (#8820)
icecrasher321 Oct 9, 2026
ee5646c
fix(mcp): declare request bodies and annotation titles (#8827)
waleedlatif1 Oct 9, 2026
66e535d
fix(mcp): add directory verification compatibility (#8825)
waleedlatif1 Oct 9, 2026
900afc3
feat(tests): workflow tests as a workspace resource (#8773)
TheodoreSpeaks Oct 9, 2026
1ed08d8
fix(providers): remove default agent tool-call iteration cap (#8829)
waleedlatif1 Oct 9, 2026
dc39947
fix(desktop): require folder permission for native file tools (#8345)
waleedlatif1 Oct 9, 2026
0488311
fix(invitations): let Chat invite teammates through the workspace inv…
waleedlatif1 Oct 9, 2026
090ff82
feat(checkr): add Checkr integration with tools, block, and webhook t…
waleedlatif1 Oct 9, 2026
f20b5b4
fix(settings): decouple access settings from usage analytics (#8828)
waleedlatif1 Oct 9, 2026
4308631
feat(shopify): expand operations and refresh expiring credentials (#8…
waleedlatif1 Oct 9, 2026
e89bc65
improvement(emcn): refine shared menu and picker styling (#8836)
waleedlatif1 Oct 9, 2026
3c87849
fix(workflows): stop flagging whole-field references in JSON fields a…
waleedlatif1 Oct 9, 2026
13461e3
improvement(desktop): make file consent clearer and easier to control…
waleedlatif1 Oct 9, 2026
0c5dbfb
feat(sim-cli): publish which CLI commands Mothership is refused, from…
waleedlatif1 Oct 9, 2026
bb60a30
fix(mothership): let Chat read its own permission config and file ver…
waleedlatif1 Oct 9, 2026
0809d27
fix(mothership): let Chat share credentials and request access as the…
waleedlatif1 Oct 9, 2026
f7ef6ed
fix(files): refuse delegated version reads no provenance observer rec…
waleedlatif1 Oct 9, 2026
7abe86b
test(credentials): cover Chat's OAuth-only, admin-demotion and integr…
waleedlatif1 Oct 9, 2026
b1c1be0
fix(sim-cli): an unknown option lists the command's own flags (#8845)
waleedlatif1 Oct 9, 2026
7bfcecd
docs(library): update how-to-create-an-ai-agent (#8852)
icecrasher321 Oct 9, 2026
7e0c894
docs(library): update best-ai-agent-platforms-2026 (#8851)
icecrasher321 Oct 9, 2026
e26bdce
docs(library): update ai-agents-vs-rpa (#8850)
icecrasher321 Oct 9, 2026
2d77157
docs(library): update best-ai-agents-for-scheduling-and-calendar-mana…
icecrasher321 Oct 9, 2026
b7c57d5
docs(library): update best-ai-automation-tools-2026 (#8848)
icecrasher321 Oct 9, 2026
2186e09
feat(library): AI Agents for Asana and monday.com Task Automation: Pl…
icecrasher321 Oct 9, 2026
e620ee0
docs(library): update best-ai-agent-marketplaces-template-libraries (…
icecrasher321 Oct 9, 2026
c3c3d56
fix(lint): describe unquoted JSON references as failing only when the…
waleedlatif1 Oct 9, 2026
970e030
fix(desktop): open Folder Access from a focused utility window (#8855)
waleedlatif1 Oct 9, 2026
0a44ed5
fix(credentials): allow encoded Oracle connection payloads (#8856)
waleedlatif1 Oct 9, 2026
1897cbb
chore(google-ads): remove synthetic E2E suite (#8857)
waleedlatif1 Oct 9, 2026
1266679
fix(tests): purge deleted tests, bill their storage, and record versi…
TheodoreSpeaks Oct 9, 2026
2ab3211
fix(mothership): show the copy control for API keys created in organi…
waleedlatif1 Oct 9, 2026
e4434b2
improvement(mobile): refine responsive chat and workspace layouts (#8…
waleedlatif1 Oct 9, 2026
903c16d
improvement(editor): refine previews and compact formatting controls …
waleedlatif1 Oct 9, 2026
9d64913
improvement(diff): refine embedded diff presentation (#8862)
waleedlatif1 Oct 9, 2026
131275a
fix(sim-cli): an unknown option on a command with no options says so …
waleedlatif1 Oct 9, 2026
56ad17c
fix(deploy): return deployed-version lint as its own field, opt-in an…
waleedlatif1 Oct 10, 2026
4beed5a
feat(changelog): workspace changelog of releases with markdown bodies…
TheodoreSpeaks Oct 10, 2026
1f570d3
fix(files): refuse Chat current-file reads no provenance observer rec…
waleedlatif1 Oct 10, 2026
722510e
fix(sim-cli): the command inventory describes the operation each comm…
waleedlatif1 Oct 10, 2026
d645927
fix(pii): stop one half-emoji from failing log redaction (#8867)
waleedlatif1 Oct 10, 2026
7dc251a
fix(billing): let operators resolve billing dead letters and stop re-…
waleedlatif1 Oct 10, 2026
ba485c6
improvement(logs): cut recurring production log noise and fix the bug…
waleedlatif1 Oct 10, 2026
024c31b
improvement(changelog): refresh media and released product updates (#…
waleedlatif1 Oct 10, 2026
b5d3f7b
fix(oauth): record revoked refresh tokens durably and surface them as…
waleedlatif1 Oct 10, 2026
b8989cc
fix(webhooks): stop admission-refusal retry loops and per-retry log w…
waleedlatif1 Oct 10, 2026
842c5ac
improvement(sim-cli): commands reach the API only through the operati…
waleedlatif1 Oct 10, 2026
47fb805
improvement(logs): log each execution failure once at its owning boun…
waleedlatif1 Oct 10, 2026
20101c5
improvement(app): show branded wordmark while loading (#8879)
waleedlatif1 Oct 10, 2026
e526a91
fix(docs): render the FAQ JSON-LD as a native script tag, and forbid …
waleedlatif1 Oct 10, 2026
cf4e2d4
chore(audits): drop dead ESLint directives and redundant check:dead-c…
waleedlatif1 Oct 10, 2026
5ae4dcd
fix(tools): stop provider timeout params from becoming the request de…
waleedlatif1 Oct 10, 2026
c802c8e
chore(api): give colliding error helpers domain names, drop VFS pass-…
waleedlatif1 Oct 10, 2026
b3f459d
chore(audits): name generated-artifact checks check:<x> so run-audits…
waleedlatif1 Oct 10, 2026
9d8e4d8
fix(chat): contain mobile composer scrolling (#8889)
waleedlatif1 Oct 10, 2026
6835a54
chore(naming): rename 41 baselined files to the file-name convention …
waleedlatif1 Oct 10, 2026
fb08094
docs(agents): align agent guidance with code and enforced checks (#8887)
waleedlatif1 Oct 10, 2026
b2cd2a9
chore(tests): tighten check:test-patterns and shrink its baseline (#8…
waleedlatif1 Oct 10, 2026
b6476cc
chore(audits): check raw-route parseRequest contracts and enforce sur…
waleedlatif1 Oct 10, 2026
071e7db
improvement(ci): fix the stripe-sync flake, stop helm cancelling a pu…
waleedlatif1 Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 9 additions & 9 deletions .agents/skills/add-block/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ When adding or changing an OAuth integration block:
`packages/sim-setup/src/capability-config.ts`. The CLI catalog is exhaustively typed and checked
against the runtime field list; do not infer secrecy from the field name.
4. If the canonical OAuth service declares `serviceAccountProviderId`, run
`bun run deployment-config:generate`; this regenerates the provider-ID facts in
`bun run generate:deployment-config`; this regenerates the provider-ID facts in
`packages/deployment-config/src/service-account-providers.generated.ts`. Never hand-edit that
generated map. Add `deploymentRequirement` policy in
`packages/deployment-config/src/service-account-metadata.ts` only when the service-account path
Expand Down Expand Up @@ -615,7 +615,7 @@ tools: {

## Outputs Definition

**IMPORTANT:** Block outputs have a simpler schema than tool outputs. Block outputs do NOT support:
Block outputs have a simpler schema than tool outputs. They do not support:
- `optional: true` - This is only for tool outputs
- `items` property - This is only for tool outputs with array types

Expand Down Expand Up @@ -729,7 +729,7 @@ export const ServiceBlock: BlockConfig = {
longDescription: 'Full description for documentation...',
docsLink: 'https://docs.sim.ai/integrations/service',
category: 'tools',
integrationType: IntegrationType.DeveloperTools,
integrationType: IntegrationType.DevOps,
bgColor: '#FF6B6B',
icon: ServiceIcon,
authMode: AuthMode.OAuth,
Expand Down Expand Up @@ -959,11 +959,11 @@ Verify it with `bun run check:block-successors`.
Adding a block on its own needs no **tool metadata** regeneration — a block references existing
tool IDs through `tools.access` and does not change any tool's shape.

But if the same change also adds, edits **or removes** a tool, run `bun run tool-metadata:generate` and commit the result, or CI fails on stale artifacts. That matters here because a block's `outputs` are authored to match its tools' outputs, and the UI reads those from the generated metadata, not the executable registry — an unregenerated tool change makes the block's outputs disagree with what the panel renders. See `.agents/skills/tool-registry-boundary/SKILL.md`.
But if the same change also adds, edits **or removes** a tool, run `bun run generate:tool-metadata` and commit the result, or CI fails on stale artifacts. That matters here because a block's `outputs` are authored to match its tools' outputs, and the UI reads those from the generated metadata, not the executable registry — an unregenerated tool change makes the block's outputs disagree with what the panel renders. See `.agents/skills/tool-registry-boundary/SKILL.md`.

A visible integration block does require the generated integration catalog and docs to be refreshed:
`bun run tool-metadata:generate` (only when a tool changed), `bun run scripts/generate-docs.ts`,
`bun run deployment-config:generate`, then `bun run check:audits`. Also run
`bun run generate:tool-metadata` (only when a tool changed), `bun run scripts/generate-docs.ts`,
`bun run generate:deployment-config`, then `bun run check:audits`. Also run
`bun run apps/sim/scripts/check-block-registry.ts origin/staging` (CI runs it outside `check:audits`). Commit the
full generator output. For what each check verifies, see the `validate-integration` skill →
Regenerate Derived Artifacts.
Expand All @@ -986,10 +986,10 @@ Regenerate Derived Artifacts.
- [ ] Outputs match tool outputs
- [ ] Block + meta registered in registry-maps.ts (`BLOCK_REGISTRY` / `BLOCK_META_REGISTRY`)
- [ ] If `sunset.replacedBy` changed: regenerated and committed the block successor map; `bun run check:block-successors` passes
- [ ] If any tool was added, changed or removed alongside the block: ran `bun run tool-metadata:generate` and committed the artifacts
- [ ] If any tool was added, changed or removed alongside the block: ran `bun run generate:tool-metadata` and committed the artifacts
- [ ] Ran `bun run scripts/generate-docs.ts`, reviewed the generated diff, and committed the integration catalog changes
- [ ] `bun run integration-catalog:check` passes
- [ ] `bun run docs:check` passes (CI gate — fails on any stale generated docs page)
- [ ] `bun run check:integration-catalog` passes
- [ ] `bun run check:docs` passes (CI gate — fails on any stale generated docs page)
- [ ] If icon missing: asked user to provide SVG
- [ ] If triggers exist: `triggers` config set, trigger subBlocks spread
- [ ] Optional/rarely-used fields set to `mode: 'advanced'`
Expand Down
3 changes: 2 additions & 1 deletion .agents/skills/add-column-type/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ The three that are easy to get wrong:

Add the entry to `COLUMN_TYPE_REGISTRY` in `registry.ts` **and** `COLUMN_TYPE_SERVER_REGISTRY` in `registry.server.ts`.

`COLUMN_TYPES` is declared in `types.ts` (not derived from the registry — the registry is annotated `Record<ColumnType, …>` against it, which is the gate). `constants.ts` re-exports it, so `columnTypeSchema = z.enum(COLUMN_TYPES)` picks your type up with no edit. **Type-specific metadata does not** — see the next step.
`COLUMN_TYPES` is declared in `types.ts` (not derived from the registry — the registry is annotated `Record<ColumnType, …>` against it, which is the gate). `columnTypeSchema` in `lib/api/contracts/tables.ts` is `z.enum(COLUMN_TYPES)`, so it picks your type up with no edit. **Type-specific metadata does not** — see the next step.

## Step 5: Migrations (only if the stored bytes change)

Expand Down Expand Up @@ -131,6 +131,7 @@ Registering the *type* is compiler-enforced. Registering its *metadata* is not,
| `lib/table/types.ts` `ColumnDefinition` | (this one DOES fail — the ownership loop indexes it) |
| `column-types/types.ts` `TYPE_SPECIFIC_COLUMN_KEYS` | it is never stripped on conversion, and poisons the target type |
| `lib/api/contracts/tables.ts` — the schema slot in all three column schemas, plus `refineColumnOptions` | zod strips it at the boundary; silently never saved |
| `lib/api/contracts/v2/tables.ts` and `lib/table/application/columns.ts` — the same slots for the v2 API and its use cases | the v2 API silently drops it |
| `columns/service.ts` `addTableColumn` param type | callers cannot pass it |
| A metadata-only update in `lib/table/columns/service.ts` (`updateColumnCurrency` is the model) + a branch in `performUpdateTableColumn` in `lib/table/orchestration/columns.ts` | changing it on an existing column is a silent 200 no-op |
| `column-config-sidebar.tsx` | no UI to set it |
Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/add-connector/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export const {service}ConnectorMeta: ConnectorMeta = {

configFields: [
// Rendered dynamically by the add-connector modal UI
// Supports 'short-input', 'dropdown', and 'selector' types — see ConfigField Types below
// Supports 'short-input', 'dropdown', and 'selector' types — see ConnectorConfigField Types below
],

// Optional: tag definitions are metadata too — declare them here
Expand Down Expand Up @@ -167,7 +167,7 @@ export const {service}Connector: ConnectorConfig = {
}
```

## ConfigField Types
## ConnectorConfigField Types

The add-connector modal renders these automatically — no custom UI needed.

Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/add-enrichment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ For each output the enrichment produces, decide which existing tool provides it.
- Its `params` accept what you can derive from table columns (read the tool's `params`).
- Its `outputs` / `transformResponse` actually expose the field you need (read the real output shape — don't assume).

Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo / LinkedIn are not hosted-safe (ToS) — don't use them.
Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo and LinkedIn APIs are not hosted-safe (ToS) — never call them as providers.

## Step 2: Verify hosted-key support — chain to `/add-hosted-key` if missing

Expand Down Expand Up @@ -109,7 +109,7 @@ export { myEnrichment } from './my-enrichment'
```

Rules:
- Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, and the types. **Never import `@/tools`** here — the runner does the tool call.
- Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, `@/enrichments/provider-failures/*`, and the types. **Never import `@/tools`** here — the runner does the tool call.
- `buildParams` returns `null` when inputs are insufficient (provider skipped). `mapOutput` returns `null`/empty for a miss (falls through). Use `filterUndefined` when assembling optional tool params; coerce numbers explicitly (don't pass `''` to number outputs).
- Output `id`s are the keys `mapOutput` returns; output `name`s are the default column names (the user can rename them in the config).

Expand Down
14 changes: 14 additions & 0 deletions .agents/skills/add-hosted-key/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,20 @@ pricing: {

**`getCost` must always throw** if it cannot determine cost. Never silently fall back to a default — this would hide billing inaccuracies.

**When the provider charges a flat price per call** — use `per_request` instead of `getCost` (as `tools/brandfetch/get_brand.ts` does):

```typescript
pricing: {
type: 'per_request',
// $0.04 per call — from https://example.com/pricing
cost: 0.04,
},
```

### Hosted Keys for Some Parameter Combinations

When only some calls can use the hosted key (for example, one provider of several), gate the config with `enabled: hostedKeyEnabledWhen<Params>({ field: 'provider', operator: 'equals', value: 'falai' })` from `@/tools/hosting` (`operator: 'one_of'` takes `values`); `tools/image/generate.ts` is the reference.

### Capturing Cost Data from the API

If the API returns cost info, capture it in `transformResponse` so `getCost` can read it from the output:
Expand Down
Loading
Loading