[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71R71TH6K8XW0M9R647ZP3J":3,"skill-same:01M71R71TH6K8XW0M9R647ZP3J":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":13,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M71R71TH6K8XW0M9R647ZP3J","audit-sqlite-usage",null,"Audit all bun:sqlite call sites for correctness against the rules in bun-sqlite.md and cross-platform.md.","proxai\u002Fproxai_gateway","proxai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F166080369?v=4","01M71R6W4H4TC4ZDWXXCTE3T3K","01M71R6W5KYVW49V7ZNCHRJHBW",0,"MIT","https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway\u002Fblob\u002Fmain\u002Fai\u002Fskills\u002Faudit-sqlite-usage\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29],"usage","audit","audit sqlite usage","sqlite","platform","for","bun","sites","call","Rules","correctness","cross-platform","2026-11-10 13:02:02",false,"---\nname: audit-sqlite-usage\ndescription: Audit all bun:sqlite call sites for correctness against the rules in bun-sqlite.md and cross-platform.md.\n---\n\n# Audit SQLite Usage\n\n## When to use\n\nUse when touching any file under `src\u002Fcore\u002Fio\u002Fsqlite\u002F` or any source collector that opens a sqlite DB; when fixing sqlite-related test failures on Windows.\n\n## Key files\n\n- `src\u002Fcore\u002Fio\u002Fsqlite\u002Fopen.ts`\n- `src\u002Fcore\u002Fio\u002Ffs\u002Frm-recursive.ts`\n- `src\u002Fservices\u002Fbuffer\u002Fdb.ts`\n- `src\u002Fsources\u002Fcursor\u002F`\n- `src\u002Fsources\u002Fcodex\u002F`\n\n## Common pitfalls\n\n- Using `?immutable=1` URI flag (works on macOS, fails on Linux\u002FWindows); use `SQLITE_OPEN_READONLY | SQLITE_OPEN_URI` flags explicitly.\n- Using `node:fs\u002Fpromises.rm` for teardown on Windows (EBUSY); use `rmRecursive` instead.\n- Forgetting to extend `afterEach` timeout to 30 s for tests that open sqlite.\n- Executing real SQL in unit tests — all sqlite tests must use dependency injection.\n- Missing the double-attempt open pattern for source databases (try `openReadOnly`, fallback to `{ immutable: true }` on any error).\n","# Audit SQLite Usage\n\n## When to use\n\nUse when touching any file under `src\u002Fcore\u002Fio\u002Fsqlite\u002F` or any source collector that opens a sqlite DB; when fixing sqlite-related test failures on Windows.\n\n## Key files\n\n- `src\u002Fcore\u002Fio\u002Fsqlite\u002Fopen.ts`\n- `src\u002Fcore\u002Fio\u002Ffs\u002Frm-recursive.ts`\n- `src\u002Fservices\u002Fbuffer\u002Fdb.ts`\n- `src\u002Fsources\u002Fcursor\u002F`\n- `src\u002Fsources\u002Fcodex\u002F`\n\n## Common pitfalls\n\n- Using `?immutable=1` URI flag (works on macOS, fails on Linux\u002FWindows); use `SQLITE_OPEN_READONLY | SQLITE_OPEN_URI` flags explicitly.\n- Using `node:fs\u002Fpromises.rm` for teardown on Windows (EBUSY); use `rmRecursive` instead.\n- Forgetting to extend `afterEach` timeout to 30 s for tests that open sqlite.\n- Executing real SQL in unit tests — all sqlite tests must use dependency injection.\n- Missing the double-attempt open pattern for source databases (try `openReadOnly`, fallback to `{ immutable: true }` on any error).\n",{"name":5,"description":7},"main","bb6fe878dd262a963efe6a0336e803356fb4c5a2","ai\u002Fskills\u002Faudit-sqlite-usage","https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway","https:\u002F\u002Fgithub.com\u002Fproxai","2026-07-02 20:55:05",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add proxai\u002Fproxai_gateway --skill audit-sqlite-usage",{"tool":47,"command":48},"bunx","bunx skills add proxai\u002Fproxai_gateway --skill audit-sqlite-usage",{"tool":50,"command":51},"pnpm","pnpm dlx skills add proxai\u002Fproxai_gateway --skill audit-sqlite-usage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway\u002Fblob\u002Fmain\u002Fai\u002Fskills\u002Faudit-sqlite-usage\u002FSKILL.md",true,[],[56,73,89],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":30},"01M71R746P3P8G23TNBNMFA91W","redaction-validator","Test that a new or modified redaction rule fires on the target pattern without matching any preserved token.","https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway\u002Fblob\u002Fmain\u002Fai\u002Fskills\u002Fredaction-validator\u002FSKILL.md",[],[63,64,65,66,67,68,69,70,71,72],"redaction validator","validator","redaction","rule","pattern","token","matching","target","test","new",{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":30},"01M71R70CH7MZ7P1SZ8BHRZEKW","add-source-parser","Step-by-step scaffold for adding a new coding-agent source to the gateway.","https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway\u002Fblob\u002Fmain\u002Fai\u002Fskills\u002Fadd-source-parser\u002FSKILL.md",[],[80,81,82,83,84,85,86,87,72,23,88],"add","source","add source","parser","add source parser","scaffold","coding","Coding-Agent","gateway",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":30},"01M71R6YZYKTXVH6YCQ2Z7PN6B","sample-skill","Example skill","https:\u002F\u002Fgithub.com\u002Fproxai\u002Fproxai_gateway\u002Fblob\u002Fmain\u002Fai\u002Fmapper\u002Ftests\u002Ffixtures\u002Fminimal-ai\u002Fskills\u002Fsample-skill\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[101,102,103,104],"sample skill","sample","example skill","example"]