Releases: upstash/agentkit
Releases · upstash/agentkit
Release list
@upstash/agentkit-eve@0.2.2
Patch Changes
- 0970c09: change network policy to open boxes with allow-all network
@upstash/agentkit-eve@0.2.1
Patch Changes
- fcc8eb1: Add baseSnapshot parameter to upstash sandbox
@upstash/agentkit-sdk@0.2.0
Minor Changes
-
7f706d0: Tenant-isolation hardening, a type-safe reactive search index, and a consistent
prefix/indexName/userId/toolNameAPI. Contains breaking changes.Tenant isolation
ChatHistoryis keyed per user (<prefix>:<userId>:<sessionId>), so a chat can never be read or overwritten by a different user. Every method takes a single object;userId/sessionIdare required, validated non-empty, and rejected if they contain the:key separator (which would otherwise let keys collide across users).AgentMemoryrequires a non-emptyuserIdon every call (no silent shared bucket) and rejects a:inuserId;add/recalltake a single object param.ToolCachekeys are<prefix>:<userId>:<toolName>:<hash>— scoped per user, then per tool;userId/toolNameare rejected if they contain:.createRateLimit/createRateLimitAuthrequire an explicitlimiter(removedlimit/window); eve'screateRateLimitAuthrequiresidentifier(no implicit global bucket) and counts onlyPOSTrequests, so a turn (a messagePOSTplus its follow-up streamGET) is charged once, not twice.- The eve sandbox denies network egress by default. Its
upstash()backend config is now the@upstash/boxBoxConfigpassed through verbatim (runtime/size/apiKey/keepAlive/initCommand/env/skills/…) plus an optionalredis/templatePrefix— the inventedresources.vcpushint and runtime-string coercion ("node24") are removed (useruntime/sizeas Box expects), andnetworkPolicyis no longer a config knob (egress is governed by the deny-all default plus per-sessionuse({ networkPolicy })). - The eve sandbox now reuses prewarmed Box snapshots correctly: the
templateKey → snapshotIdmap is stored in a durable Redis registry (Box has no static snapshot lookup, andprewarm/createrun in different processes), socreaterestores the prewarmed template instead of spinning a fresh, empty box.prewarmbuilds no box when there's nothing to bake. It also bridges Eve's/workspaceroot to Box's/workspace/homeworking directory in both file ops and raw commands, so the agent'sfind/grep/file tools hit the right directory. - The eve sandbox now reuses one box per conversation instead of creating a new box on every session open:
createreattaches to the box fromexistingMetadata(Eve re-opens a session many times per turn) anddisposeno longer tears the box down.keepAlivedefaults tofalse(Box's pause-based idle lifecycle), so idle boxes are auto-paused/reaped rather than leaked. - The eve sandbox no longer silently drops Eve's per-domain network rules. Box's network policy is a plain domain/CIDR allow-list, so a policy carrying
transform(firewall header injection / credential brokering) orforwardURLnow throws instead of being quietly reduced to a bare allow-list (which would send the request unauthenticated). For credential brokering, set Box'sattachHeadersat backend creation viaupstash({ attachHeaders }). createRateLimit'sredisis now optional and defaults toRedis.fromEnv(), matching the "redisdefaults everywhere" convention — previously it was the one feature that required an explicit client.
Reactive search index
- New
ReactiveSearchIndexprovisions the Upstash index on the first read (query/aggregate/count) viaexistsOk+ retry; writes go straight to Redis, so features never create the index on the write path. Replaces the internalwithIndexhelper.
API naming (consistent across features)
prefix— base key prefix (wasnamespace).indexName— explicit Redis Search index name, separate fromprefix(wasname).userId— per-call tenant scope for memory/tools (was the per-callnamespace).toolName— per-tool cache segment.
Removed
- The
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead. search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).- ai-sdk singular
cachedTool— usecachedTools(map, { userId })(the tool name comes from the map key). ChatHistory.createChat/setTitle, the unusedmetadatafield onChatRecord/MemoryRecord, and the@upstash/agentkit-sdk/testing(MockModel) subpath.
Other
Ratelimit+Durationare re-exported from every package, so you never import or install@upstash/ratelimitdirectly.- Bumped the eve peer to
^0.13.1.
@upstash/agentkit-eve@0.2.0
Minor Changes
-
7f706d0: Tenant-isolation hardening, a type-safe reactive search index, and a consistent
prefix/indexName/userId/toolNameAPI. Contains breaking changes.Tenant isolation
ChatHistoryis keyed per user (<prefix>:<userId>:<sessionId>), so a chat can never be read or overwritten by a different user. Every method takes a single object;userId/sessionIdare required, validated non-empty, and rejected if they contain the:key separator (which would otherwise let keys collide across users).AgentMemoryrequires a non-emptyuserIdon every call (no silent shared bucket) and rejects a:inuserId;add/recalltake a single object param.ToolCachekeys are<prefix>:<userId>:<toolName>:<hash>— scoped per user, then per tool;userId/toolNameare rejected if they contain:.createRateLimit/createRateLimitAuthrequire an explicitlimiter(removedlimit/window); eve'screateRateLimitAuthrequiresidentifier(no implicit global bucket) and counts onlyPOSTrequests, so a turn (a messagePOSTplus its follow-up streamGET) is charged once, not twice.- The eve sandbox denies network egress by default. Its
upstash()backend config is now the@upstash/boxBoxConfigpassed through verbatim (runtime/size/apiKey/keepAlive/initCommand/env/skills/…) plus an optionalredis/templatePrefix— the inventedresources.vcpushint and runtime-string coercion ("node24") are removed (useruntime/sizeas Box expects), andnetworkPolicyis no longer a config knob (egress is governed by the deny-all default plus per-sessionuse({ networkPolicy })). - The eve sandbox now reuses prewarmed Box snapshots correctly: the
templateKey → snapshotIdmap is stored in a durable Redis registry (Box has no static snapshot lookup, andprewarm/createrun in different processes), socreaterestores the prewarmed template instead of spinning a fresh, empty box.prewarmbuilds no box when there's nothing to bake. It also bridges Eve's/workspaceroot to Box's/workspace/homeworking directory in both file ops and raw commands, so the agent'sfind/grep/file tools hit the right directory. - The eve sandbox now reuses one box per conversation instead of creating a new box on every session open:
createreattaches to the box fromexistingMetadata(Eve re-opens a session many times per turn) anddisposeno longer tears the box down.keepAlivedefaults tofalse(Box's pause-based idle lifecycle), so idle boxes are auto-paused/reaped rather than leaked. - The eve sandbox no longer silently drops Eve's per-domain network rules. Box's network policy is a plain domain/CIDR allow-list, so a policy carrying
transform(firewall header injection / credential brokering) orforwardURLnow throws instead of being quietly reduced to a bare allow-list (which would send the request unauthenticated). For credential brokering, set Box'sattachHeadersat backend creation viaupstash({ attachHeaders }). createRateLimit'sredisis now optional and defaults toRedis.fromEnv(), matching the "redisdefaults everywhere" convention — previously it was the one feature that required an explicit client.
Reactive search index
- New
ReactiveSearchIndexprovisions the Upstash index on the first read (query/aggregate/count) viaexistsOk+ retry; writes go straight to Redis, so features never create the index on the write path. Replaces the internalwithIndexhelper.
API naming (consistent across features)
prefix— base key prefix (wasnamespace).indexName— explicit Redis Search index name, separate fromprefix(wasname).userId— per-call tenant scope for memory/tools (was the per-callnamespace).toolName— per-tool cache segment.
Removed
- The
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead. search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).- ai-sdk singular
cachedTool— usecachedTools(map, { userId })(the tool name comes from the map key). ChatHistory.createChat/setTitle, the unusedmetadatafield onChatRecord/MemoryRecord, and the@upstash/agentkit-sdk/testing(MockModel) subpath.
Other
Ratelimit+Durationare re-exported from every package, so you never import or install@upstash/ratelimitdirectly.- Bumped the eve peer to
^0.13.1.
Patch Changes
- Updated dependencies [7f706d0]
- @upstash/agentkit-sdk@0.2.0
- @upstash/agentkit-ai-sdk@0.2.0
@upstash/agentkit-ai-sdk@0.2.0
Minor Changes
-
7f706d0: Tenant-isolation hardening, a type-safe reactive search index, and a consistent
prefix/indexName/userId/toolNameAPI. Contains breaking changes.Tenant isolation
ChatHistoryis keyed per user (<prefix>:<userId>:<sessionId>), so a chat can never be read or overwritten by a different user. Every method takes a single object;userId/sessionIdare required, validated non-empty, and rejected if they contain the:key separator (which would otherwise let keys collide across users).AgentMemoryrequires a non-emptyuserIdon every call (no silent shared bucket) and rejects a:inuserId;add/recalltake a single object param.ToolCachekeys are<prefix>:<userId>:<toolName>:<hash>— scoped per user, then per tool;userId/toolNameare rejected if they contain:.createRateLimit/createRateLimitAuthrequire an explicitlimiter(removedlimit/window); eve'screateRateLimitAuthrequiresidentifier(no implicit global bucket) and counts onlyPOSTrequests, so a turn (a messagePOSTplus its follow-up streamGET) is charged once, not twice.- The eve sandbox denies network egress by default. Its
upstash()backend config is now the@upstash/boxBoxConfigpassed through verbatim (runtime/size/apiKey/keepAlive/initCommand/env/skills/…) plus an optionalredis/templatePrefix— the inventedresources.vcpushint and runtime-string coercion ("node24") are removed (useruntime/sizeas Box expects), andnetworkPolicyis no longer a config knob (egress is governed by the deny-all default plus per-sessionuse({ networkPolicy })). - The eve sandbox now reuses prewarmed Box snapshots correctly: the
templateKey → snapshotIdmap is stored in a durable Redis registry (Box has no static snapshot lookup, andprewarm/createrun in different processes), socreaterestores the prewarmed template instead of spinning a fresh, empty box.prewarmbuilds no box when there's nothing to bake. It also bridges Eve's/workspaceroot to Box's/workspace/homeworking directory in both file ops and raw commands, so the agent'sfind/grep/file tools hit the right directory. - The eve sandbox now reuses one box per conversation instead of creating a new box on every session open:
createreattaches to the box fromexistingMetadata(Eve re-opens a session many times per turn) anddisposeno longer tears the box down.keepAlivedefaults tofalse(Box's pause-based idle lifecycle), so idle boxes are auto-paused/reaped rather than leaked. - The eve sandbox no longer silently drops Eve's per-domain network rules. Box's network policy is a plain domain/CIDR allow-list, so a policy carrying
transform(firewall header injection / credential brokering) orforwardURLnow throws instead of being quietly reduced to a bare allow-list (which would send the request unauthenticated). For credential brokering, set Box'sattachHeadersat backend creation viaupstash({ attachHeaders }). createRateLimit'sredisis now optional and defaults toRedis.fromEnv(), matching the "redisdefaults everywhere" convention — previously it was the one feature that required an explicit client.
Reactive search index
- New
ReactiveSearchIndexprovisions the Upstash index on the first read (query/aggregate/count) viaexistsOk+ retry; writes go straight to Redis, so features never create the index on the write path. Replaces the internalwithIndexhelper.
API naming (consistent across features)
prefix— base key prefix (wasnamespace).indexName— explicit Redis Search index name, separate fromprefix(wasname).userId— per-call tenant scope for memory/tools (was the per-callnamespace).toolName— per-tool cache segment.
Removed
- The
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead. search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).- ai-sdk singular
cachedTool— usecachedTools(map, { userId })(the tool name comes from the map key). ChatHistory.createChat/setTitle, the unusedmetadatafield onChatRecord/MemoryRecord, and the@upstash/agentkit-sdk/testing(MockModel) subpath.
Other
Ratelimit+Durationare re-exported from every package, so you never import or install@upstash/ratelimitdirectly.- Bumped the eve peer to
^0.13.1.
Patch Changes
- Updated dependencies [7f706d0]
- @upstash/agentkit-sdk@0.2.0