Waleed a42299066d fix(integrations): repair broken endpoints, silent failures, and a path traversal (#7096)
* fix(integrations): repair broken endpoints, silent failures, and a path traversal

- qdrant: search_vector returned the /points/query envelope instead of the
  points array, so downstream blocks saw an object where an array was declared
- elasticsearch: search/count/create_index silently swallowed malformed JSON —
  count fell back to counting the entire index, search to match_all
- serper: only 4 of 6 advertised verticals were mapped; videos and shopping
  returned empty (still billed) result sets. Replaced the if/else chain with a
  vertical dispatch table that hard-fails on an unknown type
- enrow: find_email flattened the nested info object incorrectly, dropping
  firstname/lastname, and advertised a linkedin_url the API never returns
- linkedin: share_post read postId from an empty body; /v2/ugcPosts returns it
  in the x-restli-id header
- vercel: edge config endpoints moved to /v1/global-config
- vercel: encode edgeConfigId so a traversing value cannot escape the base path
- sixtyfour: enrich endpoints moved to /people-intelligence and
  /company-intelligence
- langsmith: hard-coded API host consolidated to one constant, added missing
  non-ok guards, encoded run ids, capped echoed upstream error bodies
- daytona: file upload moved to /files/upload-v2
- memory: PUT persisted a bare object where POST and the declared type both use
  an array

Adds 53 tests across the affected tools.

* fix(integrations): close path traversal fleet-wide, stop a credential reaching the wire

Follows up the review round on this branch.

Security:
- The previous encodeURIComponent-only guard was incomplete. '.' and '..' are
  unreserved, so they survive encoding and the URL parser then removes them as
  dot segments — popping one path segment on a fixed host with the caller's
  bearer token still attached, including on DELETE. Adds a shared
  safeUrlPathSegment helper that rejects empty, '.', '..', and any residual path
  separator, and applies it across every Vercel and Daytona tool that
  interpolates an LLM-writable id into a request path
- langsmith: create_run and create_runs_batch spread the whole params object
  into the request body, so the LangSmith API key was sent to LangSmith and
  stored in the run record. Request bodies are now built from an explicit
  allowlist of run-ingest fields, so an unlisted param cannot reach the wire

Correctness:
- langsmith: the run-payload normalizer was not idempotent and ran once in
  request.body and again in transformResponse, so a caller who left Run ID blank
  got back an id that was never sent. Downstream update_run/create_feedback
  wired to it would 404
- langsmith: batch patch entries were normalized as if they were new runs,
  minting ids and overwriting start_time/trace_id/dotted_order
- langsmith: the 500-char error cap appended its ellipsis after slicing, so the
  advertised bound was actually 503
- serper: scholar and patents mapped a date field neither vertical returns, and
  a test asserted it. Their organic response key is now confirmed against
  Serper's published per-vertical examples rather than assumed
- serper: an unknown vertical derived from the response URL turned a successful
  response into a thrown error; only a user-supplied type now hard-fails
- linkedin: warn when a success status carries no x-restli-id header

Also corrects the Vercel endpoint rationale in the PR description: the old
/v1/edge-config path still routes and is not scheduled for removal, so the move
to /v1/global-config is canonical alignment rather than a break-fix.
2026-08-25 21:04:04 -07:00

Sim.ai Documentation Slack X

Ask DeepWiki Set Up with Cursor

Sim — Integrate, Context, Build, and Monitor AI agents

A workspace to build, deploy and manage AI agents and workflows.

Quickstart

Cloud-hosted: sim.ai

Open sim.ai

Self-hosted

npx sim-setup

Open http://localhost:3000

The Sim platform — chat on the left, the visual workflow builder on the right

Capabilities

  • Connect 1,000+ integrations and every major LLM
  • Add Slack, Notion, HubSpot, Salesforce, databases, and more
  • Build agents visually, conversationally, or with code
  • Ingest files, knowledge bases, and structured table data
  • Monitor runs, logs, schedules, and workflow activity

One workspace, every surface

Chat and workflows are just the start — tables, files, and knowledge all live in the same workspace.

Tables in Sim — structured data your agents can query

Tables — a database, built in

Files in Sim — documents for your team and every agent

Files — one store for your team and every agent

Knowledge bases in Sim — synced docs your agents can search

Knowledge — your agents' memory

Self-hosting

Requirements: Node.js 20+ and Docker.

npx sim-setup is an interactive wizard that creates a small sim/ deployment directory, provisions the database, generates secrets, writes .env, connects a Chat API key, and starts the published Sim images with Docker Compose. It does not clone the repository.

When it finishes, open http://localhost:3000.

Inside a cloned Sim repository, run bun run sim-setup to unlock the source-only local development and Kubernetes modes.

Reconfigure an optional capability without rerunning the full wizard:

npx sim-setup config
npx sim-setup add email
npx sim-setup add storage
npx sim-setup add sandbox
npx sim-setup add jobs
npx sim-setup add cache
npx sim-setup add knowledge
npx sim-setup add chat
npx sim-setup add llm
npx sim-setup add integration slack

npx sim-setup config detects the effective local-dev, Docker Compose, or current-context Helm configuration and reports configured, missing, or invalid capabilities and OAuth integrations without printing credential values. This is separate from npx sim-setup status, which reports whether installed services are running and healthy.

Manage your install from its directory:

npx sim-setup start | stop | restart   # bring your install up / down / cycle
npx sim-setup update                   # pull and apply Compose images
npx sim-setup status                   # what's installed and healthy
npx sim-setup logs                     # follow logs
npx sim-setup doctor                   # diagnose configuration problems
npx sim-setup down                     # remove containers (data kept)
npx sim-setup reset                    # archive .env and wipe managed data

The setup package detects how you're running and acts accordingly. Use --dir <path> to create or manage a deployment somewhere other than ./sim.

Sim also supports local models via Ollama and vLLM. See the self-hosting docs for details.

Chat API Keys

Chat is a Sim-managed service. npx sim-setup connects a Chat API key for you — sign in when it opens your browser and the key is stored automatically. To view, create, or revoke keys later, go to sim.ai/selfhost/settings/chat-keys.

Environment Variables

See the environment variables reference for the full list, or apps/sim/.env.example for defaults.

Tech Stack

Next.js · Bun · PostgreSQL · Drizzle · Better Auth · Tailwind — and the rest of the stack

Contributing

We welcome contributions! Please see our Contributing Guide for details.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Built by the Sim team in San Francisco

Languages
TypeScript 77%
MDX 20.8%
JavaScript 1.9%
CSS 0.1%