Version Packages#4
Merged
Merged
Conversation
1c407d2 to
2e8b3a7
Compare
2e8b3a7 to
043e496
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@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.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 })).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.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.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
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
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead.search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).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.^0.13.1.Patch Changes
@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.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 })).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.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.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
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
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead.search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).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.^0.13.1.Patch Changes
@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.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 })).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.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.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
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
Ragprimitive — use the schema-driven search tools (createSearchToolDefs/createSearchTools/defineSearchTools) over your own documents instead.search-index.ts/RedisSearchIndex(folded intoAgentMemory+ReactiveSearchIndex).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.^0.13.1.ai-sdk-demo@0.1.2
Patch Changes
eve-demo@0.0.2
Patch Changes