Skip to content

Commit e6587ca

Browse files
authored
v0.7.6: calendar scheduled tasks, new hubspot tools, virtualized chat, db perf improvements
2 parents 79d98b3 + 3ada4a3 commit e6587ca

585 files changed

Lines changed: 63267 additions & 6006 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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ import type { BlockConfig, BlockMeta } from '@/blocks/types'
640640

641641
export const {Service}BlockMeta = {
642642
tags: ['messaging', 'automation'], // Same tags as the block's tags field
643+
url: 'https://{service}.com', // Canonical homepage of the external service
643644
templates: [ // Optional but strongly encouraged
644645
{
645646
icon: {Service}Icon,
@@ -666,6 +667,7 @@ export const {Service}BlockMeta = {
666667

667668
- **Import `BlockMeta`** from `@/blocks/types` alongside `BlockConfig`
668669
- **`tags`** must match the `tags` array on the block config exactly
670+
- **`url`** is the canonical homepage of the external service the block integrates with (e.g. `'https://exa.ai'`, `'https://salesforce.com'`) — the catalog "link back to the tool". It is distinct from `BlockConfig.docsLink`, which points at Sim's own integration docs on `docs.sim.ai`. Use the service's real root domain over `https` (verify it actually resolves), no tracking params, no trailing slash. Omit `url` only for first-party/built-in blocks that have no external service (e.g. `agent`, `function`, `condition`, `api`, `response`)
669671
- **Templates are optional** but should be added for any integration that has a recognizable use case — aim for 2–4 templates per block
670672
- **Template `prompt`** should start with "Build a workflow that..." or "Create a workflow that..." and be concrete enough to generate a real workflow in Mothership
671673
- **Template `modules`** lists the Sim modules the template relies on: `'knowledge-base' | 'tables' | 'files' | 'workflows' | 'scheduled' | 'agent'`
@@ -906,6 +908,7 @@ All tool IDs referenced in `tools.access` and returned by `tools.config.tool` MU
906908
- [ ] Outputs match tool outputs
907909
- [ ] Block registered in `registry.ts` blocks object (alphabetically)
908910
- [ ] `{Service}BlockMeta` exported at bottom of block file with `tags` and `templates`
911+
- [ ] `url` set on `{Service}BlockMeta` to the external service's verified homepage (omit only for first-party blocks with no external service)
909912
- [ ] `skills` added to `{Service}BlockMeta`, each grounded in the block's `tools.access` and derived from a real online-sourced use case (not invented)
910913
- [ ] `BlockMeta` imported from `@/blocks/types` alongside `BlockConfig`
911914
- [ ] Block meta registered in `registry.ts` blocksMeta object (alphabetically)

.claude/commands/add-block.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,7 @@ import type { BlockMeta } from '@/blocks/types'
794794

795795
export const {Service}BlockMeta = {
796796
tags: ['tag1', 'tag2'], // IntegrationTag[]
797+
url: 'https://{service}.com', // external service homepage (verify it resolves) — NOT docs.sim.ai
797798
templates: [
798799
{
799800
icon: {Service}Icon,
@@ -845,6 +846,7 @@ Derive templates from the service's real use cases. Each prompt should name a co
845846
- [ ] Optional/rarely-used fields set to `mode: 'advanced'`
846847
- [ ] Timestamps and complex inputs have `wandConfig` enabled
847848
- [ ] Exported `{Service}BlockMeta` with at least 7 templates
849+
- [ ] `url` set on `{Service}BlockMeta` to the external service's verified homepage (omit only for first-party blocks with no external service)
848850
- [ ] `skills` added to `{Service}BlockMeta`, each grounded in `tools.access` and sourced from a real online use case (not invented)
849851

850852
## Final Validation (Required)

.claude/rules/constitution.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ Sim is the **AI workspace** where teams build and run AI agents. Not a workflow
2323
| The product | "AI workspace" | "workflow tool", "automation platform", "agent framework" |
2424
| Building | "build agents", "create agents" | "create workflows" (unless describing the workflow module specifically) |
2525
| Visual builder | "workflow builder" or "visual builder" | "canvas", "graph editor" |
26-
| Mothership | "Mothership" (capitalized) | "chat", "AI assistant", "copilot" |
26+
| The agent | "Sim" — you talk to Sim | "Mothership", "copilot", "AI assistant" |
27+
| The chat surface | "Chat" (capitalized, the module) | "Mothership", "copilot" |
2728
| Deployment | "deploy", "ship" | "publish", "activate" |
2829
| Audience | "teams", "builders" | "users", "customers" (in marketing copy) |
2930
| What agents do | "automate real work" | "automate tasks", "automate workflows" |
@@ -50,7 +51,7 @@ When describing Sim, always lead with the most differentiated claim:
5051

5152
| Module | One-liner |
5253
|--------|-----------|
53-
| **Mothership** | Your AI command center. Build and manage everything in natural language. |
54+
| **Chat** | Your AI command center. Talk to Sim — build and manage everything in natural language. |
5455
| **Workflows** | The visual builder. Connect blocks, models, and integrations into agent logic. |
5556
| **Knowledge Base** | Your agents' memory. Upload docs, sync sources, build vector databases. |
5657
| **Tables** | A database, built in. Store, query, and wire structured data into agent runs. |
@@ -65,7 +66,8 @@ When describing Sim, always lead with the most differentiated claim:
6566
- Never promise unshipped features
6667
- Never use jargon ("RAG", "vector database", "MCP") without plain-English explanation on public pages
6768
- Avoid "agentic workforce" as a primary term — use "AI agents"
69+
- Never say "Mothership" or "copilot" — the agent is "Sim", the surface is "Chat" (in run logs the trigger reads "Sim agent")
6870

6971
## Vision
7072

71-
Sim becomes the default environment where teams build AI agents — not a tool you visit for one task, but a workspace you live in. Workflows are one module; Mothership is another. The workspace is the constant; the interface adapts.
73+
Sim becomes the default environment where teams build AI agents — not a tool you visit for one task, but a workspace you live in. Workflows are one module; Chat is another. The workspace is the constant; the interface adapts.

.claude/rules/emcn-components.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ The menu surface intentionally diverges from the pill: `dropdown-menu.tsx` items
2222

2323
- **`Chip` / `ChipLink`** — the pill button (`<button>` / Next `<Link>`). Variants: `ghost`, `filled`, `primary`, `destructive`, `border-shadow`. `leftIcon`/`rightIcon`, `active`, `fullWidth`, `flush`.
2424
- **`ChipInput`** — single-line text field. `icon`, `endAdornment`, `error`, `inputClassName` (inner `<input>`); `className` styles the chrome wrapper.
25-
- **`ChipTextarea`** — multi-line sibling. `error`, `resizable` (off by default).
25+
- **`ChipCopyInput`** — the canonical view-only field: a read-only `ChipInput` at full opacity with a trailing copy-to-clipboard button. View-only is a display mode, not a disabled state — reach for it (or `ChipModalField type='copy'`) over a `disabled` (greyed) input for values the user cannot edit.
26+
- **`ChipTextarea`** — multi-line sibling. `error`, `resizable` (off by default), `viewOnly` (read-only at full opacity with the default cursor — the multi-line counterpart of `ChipCopyInput`).
2627
- **`ChipDropdown`** — pill that opens a menu. Single OR multi-select via the discriminated `multiple` prop (one component, not two). Owns its trailing chevron — no `rightIcon`.
2728
- **`ChipSelect` / `ChipCombobox`**`Combobox`-backed pickers with search, groups, multi-select; for richer lists than `ChipDropdown`.
28-
- **`ChipModal` + `ChipModalField`** — declarative compact modal. The field's `type` (`input` | `email` | `textarea` | `dropdown` | `file` | `emails` | `custom`) picks the control and **owns all chrome** — consumers describe intent, never pass `variant`/`className`/`id` to the inner control. `custom` is the escape hatch. **Every body field MUST be a `ChipModalField`** — never hand-roll a field row (raw `<div>` + hand-rolled `<p>`/`<label>` title + bare `ChipInput`/`ChipTextarea`). `ChipModalBody` applies `px-2` + `gap-4`; `ChipModalField` adds another `px-2`, so each field lands at effective `px-4`, exactly matching the `px-4` header/footer — a hand-rolled row skips that gutter and sits misaligned at `px-2`. For controls the field doesn't cover (`ChipCombobox`, `ChipSelect`, `DatePicker`, `TimePicker`, `ButtonGroup`, arbitrary JSX), use `type='custom'` with a `title` — it still applies the gutter and renders the canonical `Label`.
29+
- **`ChipModal` + `ChipModalField`** — declarative compact modal. The field's `type` (`input` | `email` | `textarea` | `dropdown` | `copy` | `file` | `emails` | `custom`) picks the control and **owns all chrome** — consumers describe intent, never pass `variant`/`className`/`id` to the inner control. `custom` is the escape hatch. **Every body field MUST be a `ChipModalField`** — never hand-roll a field row (raw `<div>` + hand-rolled `<p>`/`<label>` title + bare `ChipInput`/`ChipTextarea`). `ChipModalBody` applies `px-2` + `gap-4`; `ChipModalField` adds another `px-2`, so each field lands at effective `px-4`, exactly matching the `px-4` header/footer — a hand-rolled row skips that gutter and sits misaligned at `px-2`. For controls the field doesn't cover (`ChipCombobox`, `ChipSelect`, `DatePicker`, `TimePicker`, `ButtonGroup`, arbitrary JSX), use `type='custom'` with a `title` — it still applies the gutter and renders the canonical `Label`.
2930
- **`ChipSwitch`** — segmented pill control (built from `chipVariants`).
3031
- **`ChipTag`** — 20px inline tag/badge (`mono`/`gray`/`invite`), not a pill trigger.
3132
- **`ChipDatePicker`** — chip-styled date field.
33+
- **`ChipTimePicker`** — minute-granular time sibling of `ChipDatePicker`, a `ChipInput` that leniently parses typed input (`9:47`, `947`, `2:05pm`, `14:30`), commits on Enter/blur, and re-renders the canonical `9:47 AM` label.
3234
- **`DropdownMenu`** — the canonical context/action menu (Radix-backed). Not a chip, but the standard menu for command/action lists; reach for it instead of a hand-rolled popover. Its surface intentionally diverges from the chip pill (`text-small`, `gap-2`) — keep them distinct. For a pill that opens a value picker, use `ChipDropdown`/`ChipSelect` instead.
3335

3436
## Authoring principles

.claude/rules/sim-queries.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,7 @@ const handler = useCallback(() => {
137137
- **Query hooks**: `useEntity`, `useEntityList`
138138
- **Mutation hooks**: `useCreateEntity`, `useUpdateEntity`, `useDeleteEntity`
139139
- **Fetch functions**: `fetchEntity`, `fetchEntities` (private)
140+
141+
## Enforcement
142+
143+
`scripts/check-react-query-patterns.ts` (`bun run check:react-query`, run in CI) statically enforces these conventions: every `useQuery`/`useInfiniteQuery`/`useSuspenseQuery` declares an explicit `staleTime`, inline `queryFn`s destructure `signal`, `queryKey`s reference a colocated factory rather than an inline literal, and every `*Keys` factory in `hooks/queries/**` exposes an `all` root key. `hooks/queries/**` is a zero-tolerance zone; the rest of `apps/sim/**` is ratcheted against `scripts/check-react-query-patterns.baseline.json`. For a genuine exception, put `// rq-lint-allow: <reason>` on the line directly above the flagged construct.

.github/workflows/test-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ jobs:
112112
- name: Zustand v5 selector audit
113113
run: bun run check:zustand-v5
114114

115+
- name: React Query pattern audit
116+
run: bun run check:react-query
117+
115118
- name: Verify realtime prune graph
116119
run: bun run check:realtime-prune
117120

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@
2121
<a href="https://deepwiki.com/simstudioai/sim" target="_blank" rel="noopener noreferrer"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a> <a href="https://cursor.com/link/prompt?text=Help%20me%20set%20up%20Sim%20locally.%20Follow%20these%20steps%3A%0A%0A1.%20First%2C%20verify%20Docker%20is%20installed%20and%20running%3A%0A%20%20%20docker%20--version%0A%20%20%20docker%20info%0A%0A2.%20Clone%20the%20repository%3A%0A%20%20%20git%20clone%20https%3A%2F%2Fgithub.com%2Fsimstudioai%2Fsim.git%0A%20%20%20cd%20sim%0A%0A3.%20Start%20the%20services%20with%20Docker%20Compose%3A%0A%20%20%20docker%20compose%20-f%20docker-compose.prod.yml%20up%20-d%0A%0A4.%20Wait%20for%20all%20containers%20to%20be%20healthy%20(this%20may%20take%201-2%20minutes)%3A%0A%20%20%20docker%20compose%20-f%20docker-compose.prod.yml%20ps%0A%0A5.%20Verify%20the%20app%20is%20accessible%20at%20http%3A%2F%2Flocalhost%3A3000%0A%0AIf%20there%20are%20any%20errors%2C%20help%20me%20troubleshoot%20them.%20Common%20issues%3A%0A-%20Port%203000%2C%203002%2C%20or%205432%20already%20in%20use%0A-%20Docker%20not%20running%0A-%20Insufficient%20memory%20(needs%2012GB%2B%20RAM)%0A%0AFor%20local%20AI%20models%20with%20Ollama%2C%20use%20this%20instead%20of%20step%203%3A%0A%20%20%20docker%20compose%20-f%20docker-compose.ollama.yml%20--profile%20setup%20up%20-d"><img src="https://img.shields.io/badge/Set%20Up%20with-Cursor-000000?logo=cursor&logoColor=white" alt="Set Up with Cursor"></a>
2222
</p>
2323

24-
### Build everything in Mothership
25-
Your AI command center. Describe what you want in plain language. Mothership knows your entire workspace and takes action: building agents, running them, querying data, and more.
24+
### Build everything in Chat
25+
Your AI command center. Describe what you want in plain language. Sim knows your entire workspace and takes action: building agents, running them, querying data, and more.
2626

2727
<p align="center">
28-
<img src="apps/sim/public/static/mothership.gif" alt="Mothership building and running an agent from chat" width="800"/>
28+
<img src="apps/sim/public/static/mothership.gif" alt="Sim building and running an agent from chat" width="800"/>
2929
</p>
3030

3131
### Create files and documents
3232
Generate documents, reports, and presentations from a single prompt, grounded in your workspace data.
3333

3434
<p align="center">
35-
<img src="apps/sim/public/static/files.gif" alt="Mothership generating a document from a prompt" width="800"/>
35+
<img src="apps/sim/public/static/files.gif" alt="Sim generating a document from a prompt" width="800"/>
3636
</p>
3737

3838
### Ground agents in your knowledge
@@ -50,7 +50,7 @@ A database, built in. Store, query, and wire structured data into agent runs.
5050
</p>
5151

5252
### Build visually with Workflows
53-
Prefer a canvas? Design agents block by block in the visual builder, and let Copilot generate blocks, wire variables, and fix errors from natural language.
53+
Prefer a canvas? Design agents block by block in the visual builder, and let Sim generate blocks, wire variables, and fix errors from natural language.
5454

5555
<p align="center">
5656
<img src="apps/sim/public/static/workflow.gif" alt="Workflow builder demo" width="800"/>
@@ -138,11 +138,11 @@ bun run dev:full # Starts Next.js app and realtime socket server
138138

139139
Or run separately: `bun run dev` (Next.js) and `cd apps/sim && bun run dev:sockets` (realtime).
140140

141-
## Copilot API Keys
141+
## Chat API Keys
142142

143-
Copilot is a Sim-managed service. To use Copilot on a self-hosted instance:
143+
Chat is a Sim-managed service. To use Chat on a self-hosted instance:
144144

145-
- Go to https://sim.ai → Settings → Copilot and generate a Copilot API key
145+
- Go to https://sim.ai → Settings → Chat keys and generate a Chat API key
146146
- Set `COPILOT_API_KEY` environment variable in your self-hosted apps/sim/.env file to that value
147147

148148
## Environment Variables

0 commit comments

Comments
 (0)