Repository navigation
v0.9.27: tools expansion, aeo and db query improvements - #9222
Conversation
…in directory listings (#9185) * improvement(mcp): prepare the hosted MCP server for registry and plugin directory listings - server.json for the official MCP Registry (ai.sim/sim, streamable HTTP remote at mcp.sim.ai) - Claude Code and Cursor plugin bundle under plugins/sim with root marketplace manifests; nothing auto-loads for contributors - One-click Cursor and VS Code install links in the MCP docs, and an MCP server section in the README * improvement(mcp): use the current Sim logo and lead with Claude, Claude Code, and Codex - MCP server info, server.json, and the plugin icon use the current Sim wordmark instead of the retired brandbook icon - README MCP section gives the Claude Code, Claude, and Codex setup; drop the Cursor plugin bundle and one-click Cursor/VS Code links
…he-top-options-compare (#9191) Co-authored-by: Sim Pi Agent <pi@sim.ai>
Co-authored-by: Sim Pi Agent <pi@sim.ai>
…d of retrying a guaranteed 400 (#9196)
…gger runs can sweep (#9193) * fix(account-deletion): list storage keys through the S3 client so Trigger runs can sweep The account storage sweep and Project file prefix cleanup listed S3 keys with `await import('@aws-sdk/client-s3')`. The Trigger.dev bundle resolves that package to its CommonJS build, and the dynamic import's namespace does not carry `ListObjectsV2Command`, so every listing threw "ListObjectsV2Command is not a constructor" and both outbox event types dead-lettered after 10 attempts. The listing now lives in `listS3ObjectKeyPage` beside the other S3 commands, which the S3 client module imports statically. * fix(uploads): keep deleteS3ObjectVersion reading its bucket from customConfig
…write targets in multi-file exports (#9200)
…nd free model tools (#9184) * improvement(library): give posts search titles and descriptions that fit search results - Optional seoTitle/seoDescription frontmatter drive <title>, meta description, and Open Graph/X copy; the H1, cards, feeds, and JSON-LD keep title/description - check:library-content ratchets search title (with the " | Sim" suffix) to 60 characters and description to 160, with a shrink-only baseline - Rewrite search titles and descriptions for 12 library pages to match the queries they rank for - Author pages no longer render the brand twice in their title * improvement(library): make search title and description lengths a strict check - Drop the baseline so parallel content PRs never conflict on it; every published post now fits - Add search titles and descriptions to the remaining library, blog, and changelog posts * feat(models): add a free LLM API pricing calculator and token counter - /models/pricing-calculator prices requests and monthly volume per model with the same tier and cached-input rules billing uses (priceTokenUsage, extracted unchanged from the billing cost policy) - /models/token-counter counts tokens in the browser: exact for OpenAI encodings (js-tiktoken loaded on first input), labelled estimates for other providers; pasted text never leaves the page - Both pages link from /models and appear in the sitemap and llms.txt * improvement(models): API pricing titles, context window comparison, and model-vs-model pages - Provider pages target API pricing searches ("Anthropic (Claude) API Pricing & Models") - /models/context-windows compares context window, max output, and price for every current model; retired models are excluded - 47 curated /models/compare pages with a data-derived verdict priced at standard per-call rates; the build fails if a curated model is retired or removed * chore(models): drop exports the combined change left unused * improvement(models): chip links use the outline variant; tighten SEO checks - Model page chip links use ChipLink's outline variant instead of restyling it - ComparisonLinks gets its own component folder - One E2E check covers every model page's search title budget and canonical; a fixture test covers the search length rules * fix(models): leave evaluation models out of prompt tools; landing page structure - Context windows, the pricing tools, and comparisons skip evaluation-only models (native state and questions, not prompts) - Token counter labels an OpenAI count as an estimate when exact encoding fails - New model pages: desktop-first breakpoints, named props interfaces, section ids and labels, sr-only hero summaries; TSDoc on exported comparison helpers * fix(models): format catalog dates in UTC so date-only values don't shift a day * docs(models): say which models the provider largest-context pick covers * improvement(library): search title for the Bedrock and Vertex alternatives post * fix(models): keep tool pages static; provider FAQs keep their largest-context pick - Pricing calculator and token counter render statically; each URL-reading tool sits in a local Suspense whose fallback reserves its space - Largest-context pick breaks ties in catalog order again (retired models still excluded), and the context-window page uses the same pick
…from a workflow save (#9198) * fix(custom-tools): skip title conflicts when persisting inline tools from a workflow save * fix(custom-tools): count skipped titles and skip title conflicts atomically
* feat(cloudflare): expand API coverage and validate operations * fix(cloudflare): preserve inputs and outputs across expanded operations * fix(cloudflare): validate response envelopes and conditional inputs * fix(cloudflare): clarify replacement behavior and restrict force * fix(cloudflare): omit immutable ruleset update fields
* docs(library): update best-zapier-alternatives * Pi Babysit: address PR #9201 feedback --------- Co-authored-by: Sim Pi Agent <pi@sim.ai>
#9202) * fix(memory): read memory records and their provenance in one statement * fix(memory): stop cancelled memory reads before tails and provenance
… fix the Zapier post title count (#9204)
Add 50 Harvest v3 operations with partner OAuth, preserve legacy workflows, and align integration schemas, pagination, and generated documentation.
…space payer lookups (#9208) * improvement(db): name chat uploads in one indexed read and index workspace payer lookups - trackChatUpload reads the chat's taken display names once (unique-index predicate, LIKE-escaped suffix pattern, excluding the re-linked row) and writes the first free name, instead of probing each candidate with a write that a unique violation rolls back - add workspace_billed_account_user_id_idx (concurrent) for payer lookups and the user FK's delete check * fix(db): type the unlinked upload keys in the chat naming test
…#9209) The File operations resolved a selected workspace file's storage key through the VFS reference resolver, which only understands ids, paths, and names, so a key never resolved. Every copy, archive, or content read of a workspace file given as a file object lost its source identity: the write recorded the copy's secret provenance as unknown and later reads of the copy were refused. Picker values passed to manage_sharing failed with "File not found" the same way. Resolve the key to its current workspace file row first, then authorize that row by id under the operation's policy, and bind only when the row's current key is the key whose bytes are read. Gate on the key's storage prefix instead of the optional `context` field so a block reference without one also binds.
…xx; keep PII keep-alive past the load balancer (#9210) * fix(api): answer upstream MCP, OAuth, and id-conflict failures with 4xx; keep PII keep-alive past the load balancer - MCP tool discovery answers 422 (warn) when the registered server is unreachable or cooling down - MCP OAuth start answers 422 (warn) with the server's message for any authorization-server refusal - POST /api/workflows answers 409 when a caller-supplied id already exists - PII service keeps idle connections open longer than the load balancer's idle timeout - PII mask client replaces NUL with U+FFFD so the route does not reject the whole chunk * fix(mcp): treat tools/list timeouts and HTTP errors as an unavailable server; fix test route contexts - Share the v2 discovery classification (timeout, connection, protocol, HTTP error) as isMcpServerUnavailableError and use it in the internal discover route - Restore the original POST refresh catch, which never sees per-server failures - Pass a route context in the new and existing oauth start and mask client tests; drop the oauth start test-types baseline entry
…d media requests before sending (#9211) * fix(execution): classify SDK run aborts and refuse doomed provider and media requests before sending - Recognise the Anthropic, OpenAI and Groq SDKs' APIUserAbortError (name 'Error') as an abort, with the run's abort signal deciding whether a failure is the run's own Stop or time limit - Agent blocks a user stopped soft-complete again instead of failing; the agent handler no longer rewrites a stopped run's abort into "Provider request timed out" - Provider catch logs: a user Stop at info, a run timeout at warn, an author fault at info, everything else still at error - Media tools (audio, video, image) validate an explicit output path before generating, so a stale moved-folder path no longer bills a generation it then cannot save - Gemini TTS refuses a voice it does not offer before submitting, listing the valid voices - Gemini refuses a request with no user content as EmptyProviderInputError instead of the SDK's opaque "contents are required" - File archive downloads no longer log a client disconnect as a failure; resume failures log once per attempt through logFailureOnce * fix(resume): key resume failure logs by the durable run id and attribute a lost resume claim to the caller * fix(resume): type the resume-failed mocks and shrink the test-types baseline
Expand Zoho Desk support to 30 operations with complete documented inputs and outputs, updated OAuth scopes, and regenerated integration documentation.
…9213) Expose configured Greenhouse agent inputs using API parameter names and migrate saved workflow fields without restoring stale values.
…un (#9207) * fix(billing): stop free-plan workflow runs at their usage limit mid-run * fix(billing): recheck after compaction, bill settled tool costs on the usage stop * fix(billing): bill compaction summaries on the usage stop, share run spend with workflow tools * fix(billing): bill journaled attempts on the usage stop * fix(billing): pass the usage stop through providers by class, bill continued calls once - RunUsageLimitError joins the errors every provider already rethrows unwrapped, replacing the per-request side channel that could mask an unrelated later failure - The stop is attributed to the user, so provider, stream-loop and stream-read logs record it at info; a run abort is classified before attribution so a run timeout still logs at warn - A pending call continued from an earlier attempt is billed through the journal only - The stop bills tool results the way success does: successful results and failed Function runs * fix(billing): count a resumed turn's journaled spend toward the usage limit once - A turn an earlier process journaled adds its model spend to the run's unrecorded total the first time this run opens it; reopening the turn (fallback model, block retry) never counts it again - Type the continued-call test's tool as a ProviderToolConfig * fix(billing): charge a continued Function call's failure once, through the journal
…tial (#9214) - Save a Greenhouse Harvest V3 (OAuth) client ID and secret as a reusable credential; Sim mints access tokens with the client credentials grant - The Greenhouse block offers saved credentials alongside partner OAuth, so it works on deployments without partner OAuth credentials - Document the Dev Center setup; cover the token exchange at the fetch boundary
…26 (#9216) Co-authored-by: Sim Pi Agent <pi@sim.ai>
* feat(library): LLMs vs AI Agents: What Is the Difference? * Pi Babysit: address PR #9217 feedback --------- Co-authored-by: Sim Pi Agent <pi@sim.ai>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
1 issue found across 537 files
Confidence score: 3/5
- Chat uploads with
workspace/keys can lose their provenance identity inresolveWorkspaceFileStorageKeyinapps/sim/lib/internal/file/operations.ts. Include the'workspace'row-context filter forcontext = 'mothership'.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/sim/lib/internal/file/operations.ts">
<violation number="1" location="apps/sim/lib/internal/file/operations.ts:498">
P2: Chat uploads (`context = 'mothership'`, `workspace/` keys) miss the `'workspace'` row-context filter in `resolveWorkspaceFileStorageKey`, so `bindSelectedContentFile` returns the file with no provenance identity. The rest of this file treats mothership rows as workspace storage, so accept that context here too or confirm the skip is intended.</violation>
</file>
Note: This PR contains a large number of files. cubic selects up to 200 of the highest-priority eligible files for this review, so some files may not have been reviewed.
Turn on auto-fix | Re-trigger cubic
[High impact] The changes reach shared workflow execution, billing, file handling, model tools, and several external-service integrations. The named-text-token requirement should be satisfied before merging; no blocking behavioral defect was established. Findings
SummaryThis release expands Cloudflare, Greenhouse, Excel, and Zoho Desk tools, adds public model comparison and estimation pages, and improves workflow billing, streaming, files, memory reads, and MCP errors.
|
Require explicit R2 lifecycle rules before replacing configuration, retain intentional empty-array clears, align model input metadata, and regenerate docs.
…#9224) * improvement(async-jobs): warn when Trigger.dev run acceptance is slow * improvement(async-jobs): warn while Trigger.dev acceptance is still pending and emit at WARN in production
…esume preprocessing refusals to the run (#9223) * fix(execution): precheck the default video target and attribute 4xx resume preprocessing refusals to the run * fix(resume): keep retryable preprocessing refusals internal and log a run-state refusal once at info
Uh oh!
There was an error while loading. Please reload this page.