[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"extension-skill-vercel-chat-adapter-state-redis-es":3,"guides-for-vercel-chat-adapter-state-redis":230,"similar-k173xvd15t98pw88z3sq0bxpah867f8f":231},{"_creationTime":4,"_id":5,"children":6,"community":7,"display":9,"evaluation":21,"identity":189,"isFallback":194,"parentExtension":195,"providers":196,"relations":200,"repo":202,"workflow":227},1778054052548.2292,"k173xvd15t98pw88z3sq0bxpah867f8f",[],{"reviewCount":8},0,{"description":10,"installMethods":11,"name":12,"sourceUrl":13,"tags":14},"Redis state adapter for chat (production)",{},"Chat Redis State Adapter","https://github.com/vercel/chat/tree/HEAD/packages/state-redis",[15,16,17,18,19,20],"redis","state-management","typescript","production","chat-sdk","adapter",{"_creationTime":22,"_id":23,"extensionId":5,"locale":24,"result":25,"trustSignals":177,"workflow":187},1778054107364.4504,"kn72cwy9gmqzjxcxpr192fwqns86736t","en",{"checks":26,"evaluatedAt":167,"extensionSummary":168,"promptVersionExtension":169,"promptVersionScoring":170,"rationale":171,"score":172,"summary":173,"tags":174,"targetMarket":175,"tier":176},[27,32,35,38,42,45,49,53,56,59,63,68,71,75,78,81,84,87,90,93,96,100,104,108,112,115,118,122,126,129,132,135,138,141,145,148,151,154,157,160,164],{"category":28,"check":29,"severity":30,"summary":31},"Practical Utility","Problem relevance","pass","The description clearly states the problem: a Redis state adapter for chat.",{"category":28,"check":33,"severity":30,"summary":34},"Unique selling proposition","Provides production-ready state persistence and distributed locking for a chat SDK, offering value beyond a simple API wrapper by managing complex state synchronization.",{"category":28,"check":36,"severity":30,"summary":37},"Production readiness","The adapter is designed for production, offering features like persistence, multi-instance support, distributed locking, and automatic reconnection, with clear recommendations for Redis configuration.",{"category":39,"check":40,"severity":30,"summary":41},"Scope","Single responsibility principle","The extension is focused solely on providing Redis-based state management for the Chat SDK, without venturing into unrelated domains.",{"category":39,"check":43,"severity":30,"summary":44},"Description quality","The description \"Redis state adapter for chat (production)\" is accurate and concise, reflecting the functionality of the extension.",{"category":46,"check":47,"severity":30,"summary":48},"Invocation","Scoped tools","The extension provides specific methods for state management (subscribe, enqueue, dequeue, acquireLock, etc.) rather than a single generic execution tool.",{"category":50,"check":51,"severity":30,"summary":52},"Documentation","Configuration & parameter reference","All configuration options (url, client, keyPrefix, logger) are clearly documented in the README, including defaults and requirements.",{"category":39,"check":54,"severity":30,"summary":55},"Tool naming","Tool names like `createRedisState`, `acquireLock`, `appendToList`, `enqueue`, `dequeue` are descriptive and follow kebab-case conventions where applicable.",{"category":39,"check":57,"severity":30,"summary":58},"Minimal I/O surface","The methods accept specific parameters and return documented types, avoiding excessive or internal data exposure.",{"category":60,"check":61,"severity":30,"summary":62},"License","License usability","The extension is licensed under the MIT license, which is clearly stated in the LICENSE file and package.json.",{"category":64,"check":65,"severity":66,"summary":67},"Maintenance","Commit recency","not_applicable","No commit history is available for this specific package in the provided context, making recency assessment impossible.",{"category":64,"check":69,"severity":30,"summary":70},"Dependency Management","Dependencies are managed via npm and `tsup` is used for building. No explicit vulnerability scanning or auto-update mechanisms are detailed, but standard package management practices are followed.",{"category":72,"check":73,"severity":30,"summary":74},"Security","Secret Management","The adapter handles Redis connection URLs via environment variables or explicit passing, which is a standard and secure practice. No secrets are echoed.",{"category":72,"check":76,"severity":30,"summary":77},"Injection","The extension uses the `redis` package and does not appear to load or execute untrusted third-party data in a way that would introduce injection vulnerabilities.",{"category":72,"check":79,"severity":30,"summary":80},"Transitive Supply-Chain Grenades","The extension only depends on the 'redis' package and 'chat' core, with no runtime external fetches or script executions that could pose a supply-chain risk.",{"category":72,"check":82,"severity":30,"summary":83},"Sandbox Isolation","As a state adapter, it interacts with Redis and does not modify files outside its designated scope or the project folder.",{"category":72,"check":85,"severity":30,"summary":86},"Sandbox escape primitives","The code does not contain patterns like detached processes or retry loops around denied calls that would indicate sandbox escape attempts.",{"category":72,"check":88,"severity":30,"summary":89},"Data Exfiltration","The extension's primary function is to interact with Redis; there are no outbound calls for data exfiltration, analytics, or updates.",{"category":72,"check":91,"severity":30,"summary":92},"Hidden Text Tricks","Bundled files do not contain any hidden text, control characters, or obfuscation tricks aimed at steering the model.",{"category":72,"check":94,"severity":30,"summary":95},"Opaque code execution","The source code is provided in plain, readable TypeScript and is not obfuscated, minified, or dynamically fetched.",{"category":97,"check":98,"severity":30,"summary":99},"Portability","Structural Assumption","The adapter assumes a running Redis instance but does not make structural assumptions about the user's project organization or OS.",{"category":101,"check":102,"severity":66,"summary":103},"Trust","Issues Attention","Issue tracking data (opened/closed issues) is not available for this specific package, making it impossible to assess.",{"category":105,"check":106,"severity":30,"summary":107},"Versioning","Release Management","The extension has a clearly defined version number (e.g., 4.27.0) in its package.json and CHANGELOG.md.",{"category":109,"check":110,"severity":30,"summary":111},"Code Execution","Validation","Input parameters are typed within the TypeScript code, and the core logic relies on the robust validation of the 'redis' client.",{"category":72,"check":113,"severity":30,"summary":114},"Unguarded Destructive Operations","The adapter interacts with Redis data stores but does not perform inherently destructive operations like file deletion or system configuration changes without explicit user intent.",{"category":109,"check":116,"severity":30,"summary":117},"Error Handling","The adapter includes error handling for the Redis client and reports errors through the provided logger. Connection states are managed.",{"category":109,"check":119,"severity":120,"summary":121},"Logging","info","The adapter logs Redis client errors and connection status changes via a provided logger instance, but does not include a separate audit log for actions.",{"category":123,"check":124,"severity":30,"summary":125},"Compliance","GDPR","The adapter itself does not handle personal data; it stores and retrieves data based on keys provided by the Chat SDK, and any personal data resides within the data managed by the SDK.",{"category":123,"check":127,"severity":30,"summary":128},"Target market","The extension is a general-purpose Redis adapter and has no regional or jurisdictional logic, making it globally applicable.",{"category":97,"check":130,"severity":30,"summary":131},"Runtime stability","The adapter relies on the 'redis' npm package and standard Node.js APIs, ensuring cross-platform compatibility without specific OS or shell assumptions.",{"category":46,"check":133,"severity":30,"summary":134},"Precise Purpose","The description accurately states its purpose as a Redis state adapter for chat, and the README details its functionality and configuration.",{"category":46,"check":136,"severity":30,"summary":137},"Concise Frontmatter","The README frontmatter is concise, including badges and a clear one-sentence description of the extension's purpose.",{"category":50,"check":139,"severity":30,"summary":140},"Concise Body","The README body is concise and well-structured, providing installation, usage, configuration, and recommendations without excessive detail.",{"category":142,"check":143,"severity":30,"summary":144},"Context","Progressive Disclosure","The README effectively uses sections for installation, usage, configuration, and production recommendations, keeping the main content focused.",{"category":142,"check":146,"severity":66,"summary":147},"Forked exploration","This extension is a state adapter and does not involve deep exploration or code review workflows.",{"category":28,"check":149,"severity":30,"summary":150},"Usage examples","The README provides clear, end-to-end examples for creating the adapter with different configurations and integrating it into a Chat SDK bot.",{"category":28,"check":152,"severity":30,"summary":153},"Edge cases","The README and code handle edge cases like connection errors, client readiness, and lock management (force release, extend) with documented behavior.",{"category":109,"check":155,"severity":66,"summary":156},"Tool Fallback","This extension is a direct implementation using the 'redis' package and does not rely on or reference other tools like MCP servers.",{"category":97,"check":158,"severity":30,"summary":159},"Stack assumptions","The extension assumes a Node.js environment and the presence of the 'redis' package, which are standard for this type of adapter. The README specifies installation via pnpm.",{"category":161,"check":162,"severity":30,"summary":163},"Safety","Halt on unexpected state","The adapter includes error handling for Redis connection states and actively attempts to reconnect, reporting errors via the logger, which halts the normal flow of operations when critical connection issues arise.",{"category":97,"check":165,"severity":30,"summary":166},"Cross-skill coupling","The extension is a self-contained state adapter and does not implicitly rely on other skills. Its interaction is solely with Redis and the Chat SDK core.",1778054106267,"This adapter integrates with Redis to provide persistent state management, including subscriptions, queues, and distributed locking for chat applications. It can be configured with a connection URL, an existing Redis client, or by detecting the REDIS_URL environment variable.","2.0.0","3.4.0","The extension is well-documented, production-ready, and adheres to best practices for security and portability. It provides a clear and focused functionality as a Redis state adapter for the Chat SDK.",95,"A production-ready Redis state adapter for the Chat SDK, offering robust persistence and distributed locking.",[15,16,17,18,19,20],"global","verified",{"codeQuality":178,"collectedAt":179,"documentation":180,"maintenance":182,"security":183,"testCoverage":186},{},1778054095708,{"descriptionLength":181,"readmeSize":8},41,{},{"hasNpmPackage":184,"license":185,"smitheryVerified":184},false,"MIT",{"hasCi":184,"hasTests":184},{"updatedAt":188},1778054107364,{"githubOwner":190,"githubRepo":191,"locale":24,"slug":192,"type":193},"vercel","chat","chat-adapter-state-redis","skill",true,null,{"extract":197,"llm":199},{"commitSha":198,"license":185},"3e4764db4d5c826cd0938cdcd0130d14eb8ed992",{"promptVersionExtension":169,"promptVersionScoring":170,"score":172,"targetMarket":175,"tier":176},{"repoId":201},"kd7ds766kaxjjf3s3hr8y7z2t9865yn3",{"_creationTime":203,"_id":201,"identity":204,"providers":206,"workflow":224},1777995558409.8787,{"githubOwner":190,"githubRepo":191,"sourceUrl":205},"https://github.com/vercel/chat",{"discover":207,"github":210},{"sources":208},[209],"skills-sh",{"closedIssues90d":211,"forks":212,"homepage":213,"license":185,"openIssues90d":214,"pushedAt":215,"readmeSize":216,"stars":217,"topics":218},77,192,"https://chat-sdk.dev/",11,1778027870000,3458,1917,[219,191,220,221,222,223,190],"ai","discord","google-chat","slack","teams",{"discoverAt":225,"extractAt":226,"githubAt":226,"updatedAt":226},1777995558409,1778054055543,{"anyEnrichmentAt":228,"extractAt":229,"githubAt":228,"llmAt":188,"updatedAt":188},1778054054404,1778054052548,[],[232,252,271,291,324,351],{"_creationTime":233,"_id":234,"community":235,"display":236,"identity":244,"providers":246,"relations":250,"workflow":251},1778054052548.2288,"k176w64x0xqzqqadda9yb8vg45866vbk",{"reviewCount":8},{"description":237,"installMethods":238,"name":239,"sourceUrl":240,"tags":241},"Postgres state adapter for chat (production)",{},"Postgres State Adapter","https://github.com/vercel/chat/tree/HEAD/packages/state-pg",[242,16,17,18,243,19],"postgres","database",{"githubOwner":190,"githubRepo":191,"locale":24,"slug":245,"type":193},"chat-adapter-state-pg",{"extract":247,"llm":248},{"commitSha":198,"license":185},{"promptVersionExtension":169,"promptVersionScoring":170,"score":249,"targetMarket":175,"tier":176},98,{"repoId":201},{"anyEnrichmentAt":228,"extractAt":229,"githubAt":228,"llmAt":188,"updatedAt":188},{"_creationTime":253,"_id":254,"community":255,"display":256,"identity":264,"providers":266,"relations":269,"workflow":270},1778054052548.222,"k17fard3a1kf7n7ybxjexq5k2h866rf5",{"reviewCount":8},{"description":257,"installMethods":258,"name":259,"sourceUrl":260,"tags":261},"Discord adapter for chat",{},"Discord Adapter","https://github.com/vercel/chat/tree/HEAD/packages/adapter-discord",[220,20,191,262,17,263],"sdk","nodejs",{"githubOwner":190,"githubRepo":191,"locale":24,"slug":265,"type":193},"chat-adapter-discord",{"extract":267,"llm":268},{"commitSha":198,"license":185},{"promptVersionExtension":169,"promptVersionScoring":170,"score":249,"targetMarket":175,"tier":176},{"repoId":201},{"anyEnrichmentAt":228,"extractAt":229,"githubAt":228,"llmAt":188,"updatedAt":188},{"_creationTime":272,"_id":273,"community":274,"display":275,"identity":283,"providers":285,"relations":289,"workflow":290},1778054052548.2278,"k179hhmdxdrjeykjm29ahz1ta9866n8q",{"reviewCount":8},{"description":276,"installMethods":277,"name":278,"sourceUrl":279,"tags":280},"ioredis state adapter for chat (production)",{},"Chat ioredis State Adapter","https://github.com/vercel/chat/tree/HEAD/packages/state-ioredis",[191,281,282,15,17,18],"state","ioredis",{"githubOwner":190,"githubRepo":191,"locale":24,"slug":284,"type":193},"chat-adapter-state-ioredis",{"extract":286,"llm":287},{"commitSha":198,"license":185},{"promptVersionExtension":169,"promptVersionScoring":170,"score":288,"targetMarket":175,"tier":176},90,{"repoId":201},{"anyEnrichmentAt":228,"extractAt":229,"githubAt":228,"llmAt":188,"updatedAt":188},{"_creationTime":292,"_id":293,"community":294,"display":295,"identity":306,"providers":310,"relations":317,"workflow":319},1777995614337.9844,"k17f0xfg2pkfqd1p5jjzh8sswh8645px",{"reviewCount":8},{"description":296,"installMethods":297,"name":298,"sourceUrl":299,"tags":300},"Scaffold an editable Tandem control panel app",{},"Tandem Panel Scaffold","https://github.com/frumu-ai/tandem/tree/HEAD/packages/create-tandem-panel",[301,302,303,17,304,305],"scaffolding","cli","react","vite","ui",{"githubOwner":307,"githubRepo":308,"locale":24,"slug":309,"type":193},"frumu-ai","tandem","create-tandem-panel",{"extract":311,"llm":314,"smithery":316},{"commitSha":312,"license":313},"25c8ae7c2f8b20d576a2b8d44946ac2e0ff9408d","MIT OR Apache-2.0",{"promptVersionExtension":169,"promptVersionScoring":170,"score":315,"targetMarket":175,"tier":176},100,{"qualityScore":8,"totalActivations":8,"uniqueUsers":8,"useCount":8,"verified":184},{"repoId":318},"kd72pd305er4m7vecv9p6mnd4s865kea",{"anyEnrichmentAt":320,"extractAt":321,"githubAt":322,"llmAt":323,"smitheryAt":320,"updatedAt":323},1777995723550,1777995614338,1777995614791,1777995897177,{"_creationTime":325,"_id":326,"community":327,"display":328,"identity":337,"providers":340,"relations":345,"workflow":347},1778054425877.1958,"k171ck7gyw157xcvkrk6k0r9y1866w01",{"reviewCount":8},{"description":329,"name":330,"sourceUrl":331,"tags":332},"ESLint rules for React Hooks","ESLint Plugin React Hooks","https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks",[303,333,334,335,336,17],"eslint","linting","hooks","javascript",{"githubOwner":338,"githubRepo":303,"locale":24,"slug":339,"type":193},"facebook","eslint-plugin-react-hooks",{"extract":341,"llm":343},{"commitSha":342,"license":185},"9635257c1b557acc81f95b1e974a54c752e703a2",{"promptVersionExtension":169,"promptVersionScoring":170,"score":344,"targetMarket":175,"tier":176},99,{"repoId":346},"kd73v9dy7vwq94hgzc7eh43b9s865rhq",{"anyEnrichmentAt":348,"extractAt":349,"githubAt":348,"llmAt":350,"updatedAt":350},1778054428301,1778054425877,1778054588390,{"_creationTime":352,"_id":353,"community":354,"display":355,"identity":366,"providers":369,"relations":373,"workflow":375},1778053689272.9238,"k17a5hw81fhwybk1wxavs6mvjs8676ca",{"reviewCount":8},{"description":356,"installMethods":357,"name":358,"sourceUrl":359,"tags":360},"Set up a new Prisma Postgres database and connect it to a local project using the Management API. Use when asked to \"set up a database\", \"create a Prisma Postgres project\", \"get a connection string\", \"connect my app to Prisma Postgres\", or \"provision a database\".",{},"Prisma Postgres Setup","https://github.com/prisma/skills/tree/HEAD/prisma-postgres-setup",[361,242,243,362,363,364,17,365],"prisma","setup","connection","api","node-js",{"githubOwner":361,"githubRepo":367,"locale":24,"slug":368,"type":193},"skills","prisma-postgres-setup",{"extract":370,"llm":372},{"commitSha":371,"license":185},"741a74fdafc1bf61fa208c2f73878be688cba263",{"promptVersionExtension":169,"promptVersionScoring":170,"score":344,"targetMarket":175,"tier":176},{"repoId":374},"kd76h7swxyhk8405svecsqq7gh864y5s",{"anyEnrichmentAt":376,"extractAt":377,"githubAt":376,"llmAt":378,"updatedAt":378},1778053689723,1778053689272,1778053716548]