Libraries
@veltdev/node
August 10, 2026
Breaking Changes
-
Removed request fields that the API does not accept: Seven fields are removed from request types because the API ignored them — they never had the effect their names implied. Each has a documented replacement:
No working request changes behaviour — these fields were inert. TypeScript will flag every affected call site at compile time. Learn more →
New Features
-
Agent filters on
getCommentAnnotations:sdk.api.commentAnnotations.getCommentAnnotations()now acceptsagentId,executionId,agentType,agentSource,agentSuggestions, andagentCommentsto scope a listing to agent-authored annotations. Supply at most one per request. Agent filtering is annotation-scoped and requires advanced queries to be enabled on your workspace. Learn more → -
veltUserIds,veltAllOrganizationsanduniqueIdongetAllUserData:sdk.api.gdpr.getAllUserData()acceptsveltUserIdsto fetch data for a set of Velt-side user IDs,veltAllOrganizationsto span every organization rather than one, anduniqueIdas a correlation value echoed back on the response. Learn more → -
skipResourceExistenceValidationongetPermissions:sdk.api.accessControl.getPermissions()acceptsskipResourceExistenceValidationto skip the existence check on the supplied folder/document IDs. Whenfalse(the default) the API errors if any ID does not resolve. Learn more →
Bug Fixes
- Agent-filtered annotation counts no longer return unfiltered totals:
getCommentAnnotationsCount()previously accepted anagentFieldsfilter that the API silently ignored, so the returned count covered all annotations rather than the agent-scoped subset — with nothing in the response to indicate it. The count endpoint does not support agent filtering; to count a filtered subset, list with the agent filters above and count the result. Learn more →
August 10, 2026
Breaking Changes
- Approval loop types removed:
ApprovalLoop,ApprovalLoopRejectTrigger,ApprovalLoopExhaustionPolicy,ApprovalHumanNodeOnReject, andApprovalHumanNodeOnRejectLoopBackare removed. Loop regions are no longer part of the workflow definition contract — the API had already been rejecting definitions that carried aloopsarray or a per-nodeonReject, so no working definition changes behaviour. Express loops as edges instead: anon: 'reject'back-edge carrying aloopobject, for example{ from: 'review', to: 'draft', on: 'reject', loop: { maxIterations: 3 } }. Learn more →
New Features
-
Approval Workflows — notification nodes: New
ApprovalNotificationNodeandApprovalNotificationNodeConfigsend a formatted email or Slack message built from upstream step output.recipientsis required forchannel: 'email',slackTargetforchannel: 'slack', andformataccepts'text','html', or'slack-blocks'(Slack only). Learn more → -
Approval Workflows — installable-app triggers: New
ApprovalAppTriggerbinds a definition to a connected GitHub App or Vercel Integration, withrepoFilter,projectFilter,allowedEvents, andpayloadFilters(ApprovalAppTriggerPayloadFilter) to gate on values inside the provider’s webhook body. A trigger drives at most one mechanism —inboundWebhook,schedule, andappTriggerare mutually exclusive. Learn more → -
Approval Workflows — scheduled triggers: New
ApprovalScheduleTriggerstarts an execution on a cron schedule, withcron,timezone(IANA),enabled, and an optional staticpayloadTemplatemerged into the dispatched trigger context. Learn more → -
Approval Workflows —
purgeondeleteDefinition: Passpurge: trueto hard-delete a definition and its version snapshots instead of leaving a tombstone. Both paths free the definition ID for re-creation; the response echoespurgedso you can tell which ran. Learn more → -
Approval Workflows — static agent-node URLs: Agent nodes accept a static
url, andurlPathis relaxed from required to optional. One of the two must be present;urltakes precedence when both are supplied. Learn more → -
Comment Annotations — agent-scoped delete filters:
deleteCommentAnnotations()acceptsagentSuggestions(fresh, unaccepted suggestions),agentId(a specific agent’s annotations), andagentUrls(a list of page URLs, matched as an OR-group). All three combine, so a crawl can delete “this agent’s still-pending suggestions for these pages” without affecting a concurrent batch. They require advanced queries on your workspace; when unavailable the API fails closed rather than widening to a document-wide delete. Learn more → -
Comment Annotations — suggestion payloads: New
CommentAnnotationSuggestionandCommentAnnotationSuggestionStatustypes, pluspageInfo, on the add and update paths. On add,statusis server-owned and always stamped'pending'; on update (updatedData.suggestion) the object is replaced wholesale andstatusis honored.documentIdsis also accepted on the annotation count request. Learn more → -
Agents — per-execution AI configuration: New
AgentAiConfigon an agent’s execution settings (provider,responseMimeType,maxToolTurns), andAgentAiConfigOverridewithAgentLlmProvider('gemini' | 'claude' | 'openai') onrunExecution()for per-run overrides including adefaultModelsper-provider policy map. The override requires at least one field — an empty object is rejected. Learn more → -
Agents —
deviceTypeandannotationVisibility:runExecution()acceptsdeviceType('mobile' | 'desktop', defaults to desktop) to choose the emulated device, andannotationVisibility('public' | 'private', defaults to private) to control who can see the annotations the run creates. Learn more → -
Agents —
partialexecution status:AgentExecutionStatusadds'partial'for a mixed outcome, where the run produced usable results but at least one URL or batch failed. It is distinct from'error', which is reserved for total failures. Learn more → -
Documents — metadata filters on
getDocumentsCount:getDocumentsCount()accepts the samefiltersarray asgetDocuments()(up to 10 entries; keys auto-prefixed withmetadata.unless already prefixed). It cannot be combined withexcludeFolderDocs. When filters are sent the response includesfiltersApplied— afalsevalue means the filtered aggregate failed andcountis an unfiltered fallback. Learn more → -
Memory —
includeRulesonsearchKnowledge: SetincludeRules: trueto additionally search the workspace’s extracted-rules corpus and merge those hits with knowledge-chunk results. Each result then carries akindof'chunk'or'rule', and rule hits also carryruleIdand an optionalcategory. Omitting it returns the previous chunk-only shape, andlimitbecomes the combined cap across both corpora. Learn more →
June 19, 2026
New Features
-
CommentResolverSaveEventenum: New enum with 14 additional non-core comment save events (status change, priority change, assign, approve, comment-level reactions, subscribe/unsubscribe, and more) that the Velt frontend can opt into sending to the save resolver endpoint viaResolverConfig.additionalSaveEvents. Theeventfield onSaveCommentResolverRequestis widened fromResolverActionstoResolverActions | CommentResolverSaveEvent | string— fully additive, so every existing value remains assignable. New export from@veltdev/node. Learn more → -
targetCommentonSaveCommentResolverRequest: New optionaltargetComment?: PartialCommentfield carrying the comment the action occurred on, resolved by the frontend fromcommentId. It is request context for your handler only and is never persisted bysaveComments. Learn more → -
Resolver token verify helper (
sdk.selfHosting.verifyToken): New fail-closed helper that verifies the auth credential the Velt frontend forwards to endpoint-based resolvers. The helper itself does not open or query MongoDB; in@veltdev/node@1.0.7,VeltSDK.initializestill validates the top-leveldatabaseconfig before you can accesssdk.selfHosting. Supports built-in JWT/JWKS verification (via the optionaljosepeer dependency, pinned to^5for Node 18) and custom callbacks, and is authentication only — it never makes an authorization decision. Configured via the new optionalresolverAuthonVeltConfig. New exports:VerifyTokenResult,RESOLVER_AUTH_ERROR_CODES,ResolverAuthErrorCode,ResolverAuthConfig,ResolverAuthJwtConfig,ResolverAuthVerifyCallback,ResolverAuthService. Learn more →
June 16, 2026
Breaking Changes
PartialReactionAnnotation.userrenamed tofrom: The reacting-user field onPartialReactionAnnotationis renamed fromusertofrom, matching the Velt frontend SDK’sPartialReactionAnnotation.from(andReactionAnnotation.from). This affects self-hosting reaction resolvers (sdk.selfHosting.getReactions()):saveReactions()now persists the reacting user underfrom, and resolved reactions exposefrom. Code that reads or writes the reacting user must usefrominstead ofuser. Learn more →
June 16, 2026
New Features
-
Opt-in field allowlist for REST add/update methods: The add/update methods on
activities,commentAnnotations(including comment-level add/update), andnotificationsnow accept an optionalFieldFilterOptionssecond argument. Passing{ filterUnknownFields: true }narrows the request to exactly the fields the backend endpoint accepts and silently drops unknown keys. It is off by default, fail-open (a filter error never blocks a write), and top-level scoped, so nested open-typed objects likeactionUserandcontextpass through whole. Learn more → -
New field-allowlist exports: A new field-allowlist module exported from
@veltdev/nodeexposes the filter primitives (filterRequest,pickKnownFields), theFilterSpecandFieldFilterOptionstypes, and the per-method specs (ADD_ACTIVITIES_SPEC,UPDATE_ACTIVITIES_SPEC,ADD_COMMENT_ANNOTATIONS_SPEC,UPDATE_COMMENT_ANNOTATIONS_SPEC,ADD_COMMENTS_SPEC,UPDATE_COMMENTS_SPEC,ADD_NOTIFICATIONS_SPEC,UPDATE_NOTIFICATIONS_SPEC) so advanced callers can reuse the same fail-open filtering logic. Learn more →
June 12, 2026
New Features
-
AI Agents API (
sdk.api.agents): NewAgentsServicefor managing AI agents, versioned config, agent groups, executions, analytics, and prompt tooling (24 methods). Also exported directly from@veltdev/node. Learn more → -
Memory API (
sdk.api.memory): NewMemoryServicefor semantic search over judgments, knowledge-base ingestion/management, reviewer profiles, patterns/stats, alerting, and maintenance jobs (24 methods, all typesMemory-prefixed). Also exported from@veltdev/node. Learn more → -
Approval Workflows API (
sdk.api.approval): NewApprovalServicefor defining approval/review workflows (graphs of agent, human, and webhook nodes) and dispatching/resolving executions and steps (14 methods, routes under/v2/workflow/*, all typesApproval-prefixed). Also exported from@veltdev/node. Learn more → -
CRDT —
deleteCrdtData:sdk.api.crdtgainsdeleteCrdtDatato delete CRDT editor data for a document (omiteditorIdsto delete all editors). Learn more → -
Documents —
getDocumentsCount:sdk.api.documentsgainsgetDocumentsCountto return a document count for an organization, with optional folder scoping. Learn more → -
Users — counts, document users & invites:
sdk.api.usersgains 7 methods:getUsersCount,getDocUsers,addUserInvite,respondToUserInvite,getUserInvites,getUserInvitations, andgetInvitedPendingUsersCount. Learn more → -
Workspace — domain requests, key config, service configs & advanced webhooks:
sdk.api.workspacegains 19 methods spanning additional-URL/domain requests, API key copy + config, notification/permission-provider/activity service configs, and the advanced (Svix) webhook endpoint suite. Learn more →
Improvements
getApiKeyMetadatanow targets theapikeyconfigendpoint:sdk.api.workspace.getApiKeyMetadata()now posts to/v2/workspace/apikeyconfig/get(was/v2/workspace/apikeymetadata/get). The method name and signature are unchanged, so no caller changes are required. Learn more →
May 19, 2026
New Features
-
PartialCommentAnnotationtyped fields:PartialCommentAnnotationgains four new typed fields —from,assignedTo,targetTextRange, andresolvedByUserId.resolvedByUserIduses three-state semantics (absent / explicitnull/ string) to correctly round-trip unresolve actions without droppingnull. Learn more → -
PartialTargetTextRangeinterface: NewPartialTargetTextRangeinterface withpartialTargetTextRangeFromDict/partialTargetTextRangeToDictserializers for structured text-range data. Learn more → -
PartialCommentround-trip helpers:PartialCommentgainspartialCommentFromDict/partialCommentToDicthelpers that pass through unknown keys, preserving forward compatibility. Learn more → -
sdkVersiononBaseMetadata:BaseMetadatanow includes ansdkVersionfield.baseMetadataFromDict/baseMetadataToDictserializers are exposed on the public package surface. Learn more →

