[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"extension-skill-vercel-chat-adapter-state-pg-uk":3,"guides-for-vercel-chat-adapter-state-pg":229,"similar-k176w64x0xqzqqadda9yb8vg45866vbk":230},{"_creationTime":4,"_id":5,"children":6,"community":7,"display":9,"evaluation":21,"identity":188,"isFallback":193,"parentExtension":194,"providers":195,"relations":199,"repo":201,"workflow":226},1778054052548.2288,"k176w64x0xqzqqadda9yb8vg45866vbk",[],{"reviewCount":8},0,{"description":10,"installMethods":11,"name":12,"sourceUrl":13,"tags":14},"Postgres state adapter for chat (production)",{},"Postgres State Adapter","https://github.com/vercel/chat/tree/HEAD/packages/state-pg",[15,16,17,18,19,20],"postgres","state-management","typescript","production","database","chat-sdk",{"_creationTime":22,"_id":23,"extensionId":5,"locale":24,"result":25,"trustSignals":176,"workflow":186},1778054107364.445,"kn708w2fd1efzyhcb3zkv0bffs866k0w","en",{"checks":26,"evaluatedAt":166,"extensionSummary":167,"promptVersionExtension":168,"promptVersionScoring":169,"rationale":170,"score":171,"summary":172,"tags":173,"targetMarket":174,"tier":175},[27,32,35,38,42,45,50,54,57,60,64,68,71,75,78,81,84,87,90,93,96,100,104,108,112,115,118,121,125,128,131,134,137,140,144,147,150,153,156,159,163],{"category":28,"check":29,"severity":30,"summary":31},"Practical Utility","Problem relevance","pass","The description clearly states the problem being solved: providing a PostgreSQL state adapter for chat applications in production environments.",{"category":28,"check":33,"severity":30,"summary":34},"Unique selling proposition","The extension offers a unique selling proposition by providing a production-ready PostgreSQL state adapter, specifically useful for users who already use PostgreSQL as their primary datastore and want to avoid a separate Redis dependency for state persistence.",{"category":28,"check":36,"severity":30,"summary":37},"Production readiness","The extension appears production-ready, offering features like persistence, multi-instance support, subscriptions, distributed locking, and key-value caching with TTL, all backed by PostgreSQL.",{"category":39,"check":40,"severity":30,"summary":41},"Scope","Single responsibility principle","The extension focuses solely on providing state management capabilities using PostgreSQL, adhering to a single responsibility.",{"category":39,"check":43,"severity":30,"summary":44},"Description quality","The displayed description accurately and concisely reflects the extension's functionality.",{"category":46,"check":47,"severity":48,"summary":49},"Invocation","Scoped tools","not_applicable","This extension is a state adapter and does not expose specific tools or commands in the typical sense for an agent to invoke directly.",{"category":51,"check":52,"severity":30,"summary":53},"Documentation","Configuration & parameter reference","All configuration options, including environment variable fallbacks and the requirement for a client or URL, are clearly documented.",{"category":39,"check":55,"severity":48,"summary":56},"Tool naming","As this is a state adapter, there are no user-facing tool names to evaluate.",{"category":39,"check":58,"severity":48,"summary":59},"Minimal I/O surface","This extension functions as a state adapter and does not expose tools with input/output schemas in the traditional sense.",{"category":61,"check":62,"severity":30,"summary":63},"License","License usability","The extension is licensed under MIT, a permissive open-source license, clearly stated in both the root LICENSE file and the package.json.",{"category":65,"check":66,"severity":48,"summary":67},"Maintenance","Commit recency","The repository's commit history is not directly available for this specific package evaluation, but the CHANGELOG shows recent updates up to version 4.27.0, indicating active maintenance.",{"category":65,"check":69,"severity":30,"summary":70},"Dependency Management","The project uses a monorepo structure with workspace dependencies and `tsup` for building, indicating a structured approach to dependency management.",{"category":72,"check":73,"severity":30,"summary":74},"Security","Secret Management","The adapter handles PostgreSQL connection URLs, which may contain credentials, but it correctly uses environment variables and explicit options, and does not appear to echo secrets to stdout/stderr.",{"category":72,"check":76,"severity":30,"summary":77},"Injection","The adapter interacts with PostgreSQL using parameterized queries, which effectively prevents SQL injection vulnerabilities.",{"category":72,"check":79,"severity":30,"summary":80},"Transitive Supply-Chain Grenades","The extension relies only on standard Node.js modules and the `pg` library, which are bundled or managed via npm, with no runtime fetching of external code or data.",{"category":72,"check":82,"severity":30,"summary":83},"Sandbox Isolation","As a state adapter interacting with a database, it operates within its defined scope and does not perform operations outside of its designated schema and tables.",{"category":72,"check":85,"severity":30,"summary":86},"Sandbox escape primitives","No detached-process spawns or deny-retry loops are present in the adapter's code.",{"category":72,"check":88,"severity":30,"summary":89},"Data Exfiltration","The adapter's primary function is to store and retrieve state from a PostgreSQL database; it does not make undocumented outbound calls or exfiltrate user data.",{"category":72,"check":91,"severity":30,"summary":92},"Hidden Text Tricks","The bundled code is clean and free of hidden-steering tricks or obfuscated content.",{"category":72,"check":94,"severity":30,"summary":95},"Opaque code execution","The bundled code is standard TypeScript, readable, and not obfuscated.",{"category":97,"check":98,"severity":30,"summary":99},"Portability","Structural Assumption","The adapter correctly assumes no specific project file layout and interacts with the database through well-defined interfaces.",{"category":101,"check":102,"severity":48,"summary":103},"Trust","Issues Attention","Issue tracking data is not available for this specific package.",{"category":105,"check":106,"severity":30,"summary":107},"Versioning","Release Management","The extension has a clear versioning strategy indicated by the `CHANGELOG.md` and the `version` field in `package.json` (e.g., 4.27.0).",{"category":109,"check":110,"severity":30,"summary":111},"Code Execution","Validation","The adapter uses parameterized queries for all database interactions, ensuring proper validation and sanitization of input arguments.",{"category":72,"check":113,"severity":30,"summary":114},"Unguarded Destructive Operations","The adapter performs database schema creation and data manipulation, but these operations are standard and not considered destructive in the context of a state adapter.",{"category":109,"check":116,"severity":30,"summary":117},"Error Handling","The adapter correctly uses try-catch blocks and handles potential database errors, logging them appropriately.",{"category":109,"check":119,"severity":30,"summary":120},"Logging","The adapter supports an optional logger and logs errors, providing visibility into its operations.",{"category":122,"check":123,"severity":30,"summary":124},"Compliance","GDPR","The adapter stores state data and does not inherently process personal data without sanitization. Any personal data would be managed by the application using the adapter.",{"category":122,"check":126,"severity":30,"summary":127},"Target market","The extension is a general-purpose database adapter and has no regional or jurisdictional logic; its target market is global.",{"category":97,"check":129,"severity":30,"summary":130},"Runtime stability","The adapter is written in TypeScript and relies on standard Node.js APIs and the `pg` library, ensuring cross-platform compatibility.",{"category":46,"check":132,"severity":30,"summary":133},"Precise Purpose","The description clearly states that it's a PostgreSQL state adapter for chat, usable in production, and its purpose is to provide state persistence using PostgreSQL.",{"category":46,"check":135,"severity":30,"summary":136},"Concise Frontmatter","The frontmatter (package.json description and README intro) is concise and effectively communicates the extension's core purpose.",{"category":51,"check":138,"severity":30,"summary":139},"Concise Body","The README file is well-structured and concise, detailing installation, usage, configuration, and data models without unnecessary verbosity.",{"category":141,"check":142,"severity":48,"summary":143},"Context","Progressive Disclosure","The extension is a library/adapter and does not have a complex SKILL.md or extensive embedded content requiring progressive disclosure.",{"category":141,"check":145,"severity":48,"summary":146},"Forked exploration","This extension is a state adapter and does not involve exploration workflows that would necessitate `context: fork`.",{"category":28,"check":148,"severity":30,"summary":149},"Usage examples","The README provides clear, ready-to-use code examples for basic usage, using an existing client, and configuration.",{"category":28,"check":151,"severity":30,"summary":152},"Edge cases","The documentation addresses edge cases such as connection failures, lock contention differences compared to Redis, and expired row cleanup strategies.",{"category":109,"check":154,"severity":48,"summary":155},"Tool Fallback","This is a state adapter and does not rely on external tools like MCP with fallbacks.",{"category":97,"check":157,"severity":30,"summary":158},"Stack assumptions","The extension clearly states its stack assumptions, including Node.js runtime, TypeScript, and the PostgreSQL database, with necessary dependencies like `pg`.",{"category":160,"check":161,"severity":30,"summary":162},"Safety","Halt on unexpected state","The adapter includes checks for connection status and handles potential database errors, ensuring it halts operations gracefully when unexpected states occur.",{"category":97,"check":164,"severity":48,"summary":165},"Cross-skill coupling","This is a standalone state adapter and does not implicitly or explicitly rely on other skills.",1778054094874,"This adapter provides state persistence for chat applications using PostgreSQL as the primary datastore, supporting features like persistence, multi-instance usage, distributed locking, and key-value caching with Time-To-Live (TTL). It can auto-detect connection URLs or use an existing `pg.Pool` instance.","2.0.0","3.4.0","The extension is a well-maintained, production-ready PostgreSQL state adapter with clear documentation, robust error handling, and a permissive MIT license. It adheres to security best practices and focuses on a single responsibility. The only minor point is the lack of issue tracking data, which is not applicable here.",98,"A robust and well-documented PostgreSQL state adapter for chat applications.",[15,16,17,18,19,20],"global","verified",{"codeQuality":177,"collectedAt":178,"documentation":179,"maintenance":181,"security":182,"testCoverage":185},{},1778054079972,{"descriptionLength":180,"readmeSize":8},44,{},{"hasNpmPackage":183,"license":184,"smitheryVerified":183},false,"MIT",{"hasCi":183,"hasTests":183},{"updatedAt":187},1778054107364,{"githubOwner":189,"githubRepo":190,"locale":24,"slug":191,"type":192},"vercel","chat","chat-adapter-state-pg","skill",true,null,{"extract":196,"llm":198},{"commitSha":197,"license":184},"3e4764db4d5c826cd0938cdcd0130d14eb8ed992",{"promptVersionExtension":168,"promptVersionScoring":169,"score":171,"targetMarket":174,"tier":175},{"repoId":200},"kd7ds766kaxjjf3s3hr8y7z2t9865yn3",{"_creationTime":202,"_id":200,"identity":203,"providers":205,"workflow":223},1777995558409.8787,{"githubOwner":189,"githubRepo":190,"sourceUrl":204},"https://github.com/vercel/chat",{"discover":206,"github":209},{"sources":207},[208],"skills-sh",{"closedIssues90d":210,"forks":211,"homepage":212,"license":184,"openIssues90d":213,"pushedAt":214,"readmeSize":215,"stars":216,"topics":217},77,192,"https://chat-sdk.dev/",11,1778027870000,3458,1917,[218,190,219,220,221,222,189],"ai","discord","google-chat","slack","teams",{"discoverAt":224,"extractAt":225,"githubAt":225,"updatedAt":225},1777995558409,1778054055543,{"anyEnrichmentAt":227,"extractAt":228,"githubAt":227,"llmAt":187,"updatedAt":187},1778054054404,1778054052548,[],[231,260,280,301,333,359],{"_creationTime":232,"_id":233,"community":234,"display":235,"identity":246,"providers":249,"relations":254,"workflow":256},1778053689272.9238,"k17a5hw81fhwybk1wxavs6mvjs8676ca",{"reviewCount":8},{"description":236,"installMethods":237,"name":238,"sourceUrl":239,"tags":240},"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",[241,15,19,242,243,244,17,245],"prisma","setup","connection","api","node-js",{"githubOwner":241,"githubRepo":247,"locale":24,"slug":248,"type":192},"skills","prisma-postgres-setup",{"extract":250,"llm":252},{"commitSha":251,"license":184},"741a74fdafc1bf61fa208c2f73878be688cba263",{"promptVersionExtension":168,"promptVersionScoring":169,"score":253,"targetMarket":174,"tier":175},99,{"repoId":255},"kd76h7swxyhk8405svecsqq7gh864y5s",{"anyEnrichmentAt":257,"extractAt":258,"githubAt":257,"llmAt":259,"updatedAt":259},1778053689723,1778053689272,1778053716548,{"_creationTime":261,"_id":262,"community":263,"display":264,"identity":272,"providers":274,"relations":278,"workflow":279},1778054052548.2292,"k173xvd15t98pw88z3sq0bxpah867f8f",{"reviewCount":8},{"description":265,"installMethods":266,"name":267,"sourceUrl":268,"tags":269},"Redis state adapter for chat (production)",{},"Chat Redis State Adapter","https://github.com/vercel/chat/tree/HEAD/packages/state-redis",[270,16,17,18,20,271],"redis","adapter",{"githubOwner":189,"githubRepo":190,"locale":24,"slug":273,"type":192},"chat-adapter-state-redis",{"extract":275,"llm":276},{"commitSha":197,"license":184},{"promptVersionExtension":168,"promptVersionScoring":169,"score":277,"targetMarket":174,"tier":175},95,{"repoId":200},{"anyEnrichmentAt":227,"extractAt":228,"githubAt":227,"llmAt":187,"updatedAt":187},{"_creationTime":281,"_id":282,"community":283,"display":284,"identity":294,"providers":296,"relations":299,"workflow":300},1778053689272.9233,"k177t72hzww4nkdkzx9hq1g0b1867ktp",{"reviewCount":8},{"description":285,"installMethods":286,"name":287,"sourceUrl":288,"tags":289},"Prisma Postgres setup and operations guidance across Console, create-db CLI, Management API, and Management API SDK. Use when creating Prisma Postgres databases, working in Prisma Console, provisioning with create-db/create-pg/create-postgres, or integrating programmatic provisioning with service tokens or OAuth.",{},"Prisma Postgres","https://github.com/prisma/skills/tree/HEAD/prisma-postgres",[241,15,19,290,244,291,292,293],"cli","sdk","documentation","provisioning",{"githubOwner":241,"githubRepo":247,"locale":24,"slug":295,"type":192},"prisma-postgres",{"extract":297,"llm":298},{"commitSha":251,"license":184},{"promptVersionExtension":168,"promptVersionScoring":169,"score":277,"targetMarket":174,"tier":175},{"repoId":255},{"anyEnrichmentAt":257,"extractAt":258,"githubAt":257,"llmAt":259,"updatedAt":259},{"_creationTime":302,"_id":303,"community":304,"display":305,"identity":315,"providers":319,"relations":326,"workflow":328},1777995614337.9844,"k17f0xfg2pkfqd1p5jjzh8sswh8645px",{"reviewCount":8},{"description":306,"installMethods":307,"name":308,"sourceUrl":309,"tags":310},"Scaffold an editable Tandem control panel app",{},"Tandem Panel Scaffold","https://github.com/frumu-ai/tandem/tree/HEAD/packages/create-tandem-panel",[311,290,312,17,313,314],"scaffolding","react","vite","ui",{"githubOwner":316,"githubRepo":317,"locale":24,"slug":318,"type":192},"frumu-ai","tandem","create-tandem-panel",{"extract":320,"llm":323,"smithery":325},{"commitSha":321,"license":322},"25c8ae7c2f8b20d576a2b8d44946ac2e0ff9408d","MIT OR Apache-2.0",{"promptVersionExtension":168,"promptVersionScoring":169,"score":324,"targetMarket":174,"tier":175},100,{"qualityScore":8,"totalActivations":8,"uniqueUsers":8,"useCount":8,"verified":183},{"repoId":327},"kd72pd305er4m7vecv9p6mnd4s865kea",{"anyEnrichmentAt":329,"extractAt":330,"githubAt":331,"llmAt":332,"smitheryAt":329,"updatedAt":332},1777995723550,1777995614338,1777995614791,1777995897177,{"_creationTime":334,"_id":335,"community":336,"display":337,"identity":346,"providers":349,"relations":353,"workflow":355},1778054425877.1958,"k171ck7gyw157xcvkrk6k0r9y1866w01",{"reviewCount":8},{"description":338,"name":339,"sourceUrl":340,"tags":341},"ESLint rules for React Hooks","ESLint Plugin React Hooks","https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks",[312,342,343,344,345,17],"eslint","linting","hooks","javascript",{"githubOwner":347,"githubRepo":312,"locale":24,"slug":348,"type":192},"facebook","eslint-plugin-react-hooks",{"extract":350,"llm":352},{"commitSha":351,"license":184},"9635257c1b557acc81f95b1e974a54c752e703a2",{"promptVersionExtension":168,"promptVersionScoring":169,"score":253,"targetMarket":174,"tier":175},{"repoId":354},"kd73v9dy7vwq94hgzc7eh43b9s865rhq",{"anyEnrichmentAt":356,"extractAt":357,"githubAt":356,"llmAt":358,"updatedAt":358},1778054428301,1778054425877,1778054588390,{"_creationTime":360,"_id":361,"community":362,"display":363,"identity":374,"providers":377,"relations":381,"workflow":383},1778054711476.0596,"k17ed9jy1nygmcqva51bkzyyyd866r6h",{"reviewCount":8},{"description":364,"installMethods":365,"name":366,"sourceUrl":367,"tags":368},"Guides development of Fastify Node.js backend servers and REST APIs using TypeScript or JavaScript. Use when building, configuring, or debugging a Fastify application — including defining routes, implementing plugins, setting up JSON Schema validation, handling errors, optimising performance, managing authentication, configuring CORS and security headers, integrating databases, working with WebSockets, and deploying to production. Covers the full Fastify request lifecycle (hooks, serialization, logging with Pino) and TypeScript integration via strip types. Trigger terms: Fastify, Node.js server, REST API, API routes, backend framework, fastify.config, server.ts, app.ts.",{},"Fastify Best Practices","https://github.com/mcollina/skills/tree/HEAD/skills/fastify",[369,370,17,371,244,372,373],"fastify","nodejs","backend","server","http",{"githubOwner":375,"githubRepo":247,"locale":24,"slug":376,"type":192},"mcollina","fastify-best-practices",{"extract":378,"llm":380},{"commitSha":379,"license":184},"5b2a81354b6d10325da0db9decc9ce5ecc714138",{"promptVersionExtension":168,"promptVersionScoring":169,"score":171,"targetMarket":174,"tier":175},{"repoId":382},"kd7a9jywzfe3c5g5r1a62htmrn865rt1",{"anyEnrichmentAt":384,"extractAt":385,"githubAt":384,"llmAt":386,"updatedAt":386},1778054711844,1778054711476,1778054745098]