[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXHNKTH12CGSRWDGF2H1Q9":3,"skill-same:01M6GXHNKTH12CGSRWDGF2H1Q9":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6GXHNKTH12CGSRWDGF2H1Q9","TypeScript Review",null,"Deep review of TypeScript code — type safety, generics patterns, strict mode compliance, type narrowing, module boundaries, and common escape hatches.","malayvuong\u002Fagent-orchestra","malayvuong","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13240975?v=4","01M6GXCDVPB2VPZMDZK1KF98M0","Nguyen Minh Vuong","01M6GXCE176VDX3XV4Z4KNR33J",1,"MIT","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftypescript-review\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"typescript","review","typescript review","mode","consistency","interface","type","module","logic","deep","patterns","common","Safety","Type Safety","compliance","deep review","code","2026-11-10 10:12:30",false,"---\nname: TypeScript Review\ndescription: Deep review of TypeScript code — type safety, generics patterns, strict mode compliance, type narrowing, module boundaries, and common escape hatches.\nversion: 2026.3.1\nlicense: MIT\ntriggers:\n  lenses:\n    - logic\n    - consistency\n  keywords:\n    - typescript\n    - ts\n    - generics\n    - type\n    - interface\n---\n\nWhen reviewing TypeScript code, apply the following language-specific checks.\n\n## any Escape Hatches\n\nFlag every use of `any` — each must be individually justified. Check for:\n\n- `as any` casts that silence the compiler instead of fixing the type\n- Function parameters typed as `any` when a generic or union would work\n- `@ts-ignore` or `@ts-expect-error` without a comment explaining why\n- `JSON.parse()` results used without runtime validation or type assertion to a validated shape\n- Third-party library types overridden with `any` instead of using declaration merging or module augmentation\n\nVerify `strict: true` is enabled in `tsconfig.json`. Flag `noImplicitAny: false` or `strictNullChecks: false` — these disable the most valuable safety checks.\n\n## Generics\n\nFlag overly complex generic signatures with more than 3 type parameters — these are usually a design smell. Check that generic constraints (`extends`) are used when the generic is not truly unconstrained. Flag `T extends object` when a more specific constraint exists.\n\nFlag generics that are used only once in a signature — a generic that appears only in the return type or only in one parameter adds complexity without value. Check for generic parameters that shadow built-in types (`T`, `Error`, `Response`).\n\n## Type Narrowing\n\nVerify type guards are used instead of unsafe casts. Flag `value as Type` where a type guard (`if ('key' in value)`, `instanceof`, `typeof`) would provide runtime safety. Check that discriminated unions use the discriminant field for narrowing, not `as` casts.\n\nFlag `!` non-null assertions on values that could actually be null — each `!` should have a comment explaining the invariant. Verify optional chaining (`?.`) is used instead of `&&` chains for deeply nested property access.\n\n## Module Boundaries\n\nVerify barrel exports (`index.ts`) do not re-export internal implementation details. Flag circular imports — these cause runtime errors or undefined values depending on module resolution. Check that types used across module boundaries are explicitly exported, not inferred.\n\nFlag `import type` that should be used for type-only imports — this prevents the import from appearing in compiled output. Verify path aliases in `tsconfig.json` are consistent with actual directory structure.\n\n## Enums and Constants\n\nFlag numeric enums without explicit values — auto-incrementing enums are fragile when members are reordered. Prefer `const enum` for enums that should be inlined, or use string literal unions (`type Status = 'active' | 'inactive'`) for most cases.\n\nFlag `enum` used where a plain object `as const` would suffice — const assertions provide better type inference and tree-shaking.\n\n## Async Patterns\n\nFlag `async` functions that never `await` — the `async` keyword adds unnecessary Promise wrapping. Verify error handling exists for every `await` — either try\u002Fcatch locally or the promise rejection propagates to a handler.\n\nFlag floating promises (async function called without `await` or `.catch()`). Check for `Promise\u003Cvoid>` return types that swallow errors silently.\n\n## Utility Type Misuse\n\nFlag `Partial\u003CT>` on types where most fields are actually required — this weakens the contract. Flag `Record\u003Cstring, any>` where a more specific type exists. Check that `Omit\u003CT, K>` and `Pick\u003CT, K>` use string literal keys that actually exist on `T` — typos in the key silently compile.\n\nFor each finding, report: the file, the specific TypeScript pattern, and the recommended fix.\n","When reviewing TypeScript code, apply the following language-specific checks.\n\n## any Escape Hatches\n\nFlag every use of `any` — each must be individually justified. Check for:\n\n- `as any` casts that silence the compiler instead of fixing the type\n- Function parameters typed as `any` when a generic or union would work\n- `@ts-ignore` or `@ts-expect-error` without a comment explaining why\n- `JSON.parse()` results used without runtime validation or type assertion to a validated shape\n- Third-party library types overridden with `any` instead of using declaration merging or module augmentation\n\nVerify `strict: true` is enabled in `tsconfig.json`. Flag `noImplicitAny: false` or `strictNullChecks: false` — these disable the most valuable safety checks.\n\n## Generics\n\nFlag overly complex generic signatures with more than 3 type parameters — these are usually a design smell. Check that generic constraints (`extends`) are used when the generic is not truly unconstrained. Flag `T extends object` when a more specific constraint exists.\n\nFlag generics that are used only once in a signature — a generic that appears only in the return type or only in one parameter adds complexity without value. Check for generic parameters that shadow built-in types (`T`, `Error`, `Response`).\n\n## Type Narrowing\n\nVerify type guards are used instead of unsafe casts. Flag `value as Type` where a type guard (`if ('key' in value)`, `instanceof`, `typeof`) would provide runtime safety. Check that discriminated unions use the discriminant field for narrowing, not `as` casts.\n\nFlag `!` non-null assertions on values that could actually be null — each `!` should have a comment explaining the invariant. Verify optional chaining (`?.`) is used instead of `&&` chains for deeply nested property access.\n\n## Module Boundaries\n\nVerify barrel exports (`index.ts`) do not re-export internal implementation details. Flag circular imports — these cause runtime errors or undefined values depending on module resolution. Check that types used across module boundaries are explicitly exported, not inferred.\n\nFlag `import type` that should be used for type-only imports — this prevents the import from appearing in compiled output. Verify path aliases in `tsconfig.json` are consistent with actual directory structure.\n\n## Enums and Constants\n\nFlag numeric enums without explicit values — auto-incrementing enums are fragile when members are reordered. Prefer `const enum` for enums that should be inlined, or use string literal unions (`type Status = 'active' | 'inactive'`) for most cases.\n\nFlag `enum` used where a plain object `as const` would suffice — const assertions provide better type inference and tree-shaking.\n\n## Async Patterns\n\nFlag `async` functions that never `await` — the `async` keyword adds unnecessary Promise wrapping. Verify error handling exists for every `await` — either try\u002Fcatch locally or the promise rejection propagates to a handler.\n\nFlag floating promises (async function called without `await` or `.catch()`). Check for `Promise\u003Cvoid>` return types that swallow errors silently.\n\n## Utility Type Misuse\n\nFlag `Partial\u003CT>` on types where most fields are actually required — this weakens the contract. Flag `Record\u003Cstring, any>` where a more specific type exists. Check that `Omit\u003CT, K>` and `Pick\u003CT, K>` use string literal keys that actually exist on `T` — typos in the key silently compile.\n\nFor each finding, report: the file, the specific TypeScript pattern, and the recommended fix.\n",{"name":5,"license":15,"version":41,"triggers":42,"description":7},"2026.3.1",{"lenses":43,"keywords":44},[27,23],[19,45,46,25,24],"ts","generics","main","eac6069a8690d89fd23f08d2d14e4874ed376a77",".agent-orchestra\u002Fskills\u002Ftypescript-review",0,"https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra","https:\u002F\u002Fgithub.com\u002Fmalayvuong","www.malayvuong.com","Just a newbie at everything","2026-10-09 12:52:45",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add malayvuong\u002Fagent-orchestra --skill \"TypeScript Review\"",{"tool":62,"command":63},"bunx","bunx skills add malayvuong\u002Fagent-orchestra --skill \"TypeScript Review\"",{"tool":65,"command":66},"pnpm","pnpm dlx skills add malayvuong\u002Fagent-orchestra --skill \"TypeScript Review\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftypescript-review\u002FSKILL.md",true,[],[71,110,128,152,172,191],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":93,"publishedAt":36},"01M6GXHYPRJ43SHFPFJTF87GS8","Vue.js Review","Deep review of Vue.js applications — Composition API patterns, reactivity traps, component design, Pinia state management, and performance pitfalls.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fvue-review\u002FSKILL.md",[77,82,85,88],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":83,"categoryName":84,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":86,"categoryName":87,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[20,94,95,96,97,98,99,100,101,34,102,103,104,105,106,107,28,27,108,109],"vue","js","Vue js Review","design","performance","component","state management","state","api patterns","applications","api","Composition","pinia","management","pitfalls","pinia state",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":36},"01M6GXHSPDDH1PQEN61ENMCEF5","Unity Review","Deep review of Unity C# code — object pooling, Update allocation, physics patterns, UI performance, serialization, and mobile optimization.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Funity-review\u002FSKILL.md",[],[20,117,112,98,118,35,34,119,120,121,122,29,123,28,27,124,125,126,127],"unity","update","ui","serialization","Optimization","mobile","physics","C#","mobile optimization","object","allocation",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":140,"publishedAt":36},"01M6GXHH3DMZD272RVH4800C67","Test Conventions","Testing patterns and conventions for code review. Covers naming, AAA structure, boundary testing, mock vs real dependencies, and coverage expectations.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Ftest-conventions\u002FSKILL.md",[134,137],{"categoryNo":135,"categoryName":136,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":138,"categoryName":139,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000008","测试与质量",[141,142,130,143,144,20,35,145,146,147,29,148,149,150,151],"test","conventions","code review","testing","testing patterns","boundary","coverage","dependencies","structure","mock","naming",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":162,"publishedAt":36},"01M6GXHCAQSJDVNVRFFD1HJWTN","Terraform Review","Deep review of Terraform\u002FOpenTofu configuration — state management, module design, security hardening, drift prevention, and production safety patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fterraform-review\u002FSKILL.md",[158,161],{"categoryNo":159,"categoryName":160,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":86,"categoryName":87,"taxonomyType":80,"taxonomyTypeDesc":81},[20,163,154,97,164,100,101,34,165,166,167,168,31,169,107,170,171,28,27,26],"terraform","security","cloud","aws","hardening","Production","opentofu","iac","drift",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":36},"01M6GXH83F11CK4BQEAJPN6HDE","Swift Review","Deep review of Swift code — memory management, concurrency patterns, optionals, protocol design, SwiftUI lifecycle, and iOS platform patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fswift-review\u002FSKILL.md",[178],{"categoryNo":86,"categoryName":87,"taxonomyType":80,"taxonomyTypeDesc":81},[180,20,174,97,181,98,35,182,34,183,184,185,186,187,107,28,27,188,189,190],"swift","memory","protocol","ios","concurrency","lifecycle","swiftui","uikit","xcode","apple","platform",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":201,"publishedAt":36},"01M6GXH22YZZ9AES24EB27BGNX","SQL Query Review","Deep review of SQL queries — execution plans, index utilization, join efficiency, subquery patterns, locking behavior, and performance anti-patterns.","https:\u002F\u002Fgithub.com\u002Fmalayvuong\u002Fagent-orchestra\u002Fblob\u002Fmain\u002F.agent-orchestra\u002Fskills\u002Fsql-query-review\u002FSKILL.md",[197,198],{"categoryNo":83,"categoryName":84,"taxonomyType":80,"taxonomyTypeDesc":81},{"categoryNo":199,"categoryName":200,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000033","数据分析师",[20,202,203,193,98,34,204,205,206,207,208,209,210,211,212,213,28,27,214,215],"sql","query","index","execution","explain","select","behavior","utilization","anti-patterns","sql queries","queries","efficiency","plans","join"]