[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73FEFJK78MMV2STAY9W5JXX":3,"skill-same:01M73FEFJK78MMV2STAY9W5JXX":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M73FEFJK78MMV2STAY9W5JXX","reflect-metadata-injection",null,"Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Freflect-metadata-injection\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: reflect-metadata-injection\ndescription: Runtime metadata reflection for TypeScript dependency injection. Decorator-based class metadata, design:type\u002Fparamtypes annotation, custom metadata keys, and DI container bootstrap. Sources: rbuckton\u002Freflect-metadata (Apache-2.0).\norigin: yana-ai — synthesized from rbuckton\u002Freflect-metadata (Apache-2.0)\nlicense: Apache-2.0\nversion: 1.0.0\ncompatibility: yana-ai >= 1.3.49\n---\n\n# \u002Freflect-metadata-injection\n\n## When to Use\n\n- Build lightweight dependency injection containers for agent service registries\n- Attach metadata to classes at decoration time for runtime introspection\n- Auto-wire agent dependencies without explicit factory functions\n- Implement decorators that record audit trails or capability declarations\n\n## Do NOT use for\n\n- Simple config injection (use environment variables or [[cli-config-persistence]])\n- Environments where `experimentalDecorators` is not enabled\n\n---\n\n## tsconfig requirements\n\n```json\n{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\":  true\n  }\n}\n```\n\n---\n\n## Core metadata API\n\n```typescript\nimport 'reflect-metadata'\n\n\u002F\u002F Set metadata on a class\nReflect.defineMetadata('role', 'executor', MyClass)\n\n\u002F\u002F Get metadata\nconst role = Reflect.getMetadata('role', MyClass)  \u002F\u002F → 'executor'\n\n\u002F\u002F Check existence\nReflect.hasMetadata('role', MyClass)  \u002F\u002F → true\n\n\u002F\u002F List all keys on a target\nReflect.getMetadataKeys(MyClass)  \u002F\u002F → ['role', 'design:type', ...]\n\n\u002F\u002F Delete\nReflect.deleteMetadata('role', MyClass)\n```\n\n---\n\n## Injectable decorator + DI container\n\n```typescript\nimport 'reflect-metadata'\n\nconst INJECTABLE_KEY = Symbol('injectable')\nconst registry = new Map\u003CFunction, unknown>()\n\n\u002F\u002F Decorator: mark class as injectable\nfunction Injectable(): ClassDecorator {\n  return (target) => {\n    Reflect.defineMetadata(INJECTABLE_KEY, true, target)\n  }\n}\n\n\u002F\u002F Decorator: declare dependency token\nfunction Inject(token: symbol): ParameterDecorator {\n  return (target, _key, index) => {\n    const tokens = Reflect.getMetadata('inject:tokens', target) ?? []\n    tokens[index] = token\n    Reflect.defineMetadata('inject:tokens', tokens, target)\n  }\n}\n\n\u002F\u002F Container: resolve constructor + inject dependencies\nfunction resolve\u003CT>(cls: new (...args: any[]) => T): T {\n  if (!Reflect.getMetadata(INJECTABLE_KEY, cls)) {\n    throw new Error(`[di] ${cls.name} is not @Injectable`)\n  }\n\n  const tokens: symbol[] = Reflect.getMetadata('inject:tokens', cls) ?? []\n  const args = tokens.map(tok => registry.get(tok))\n  return new cls(...args)\n}\n\n\u002F\u002F Usage:\nconst DB_TOKEN = Symbol('db')\nregistry.set(DB_TOKEN, { query: async (sql: string) => [] })\n\n@Injectable()\nclass AgentService {\n  constructor(@Inject(DB_TOKEN) private db: any) {}\n  async listTasks() { return this.db.query('SELECT * FROM tasks') }\n}\n\nconst svc = resolve(AgentService)\n```\n\n---\n\n## Read design:paramtypes (emitDecoratorMetadata)\n\n```typescript\n@Injectable()\nclass OrderService {\n  constructor(\n    private db:     DatabaseService,\n    private logger: LoggerService,\n  ) {}\n}\n\n\u002F\u002F After @Injectable() fires, TypeScript emits:\nconst types = Reflect.getMetadata('design:paramtypes', OrderService)\n\u002F\u002F → [DatabaseService, LoggerService]\n\u002F\u002F Allows container to auto-resolve by constructor type\n```\n\n---\n\n## Audit capability decorator\n\n```typescript\nfunction Capability(name: string): MethodDecorator {\n  return (target, key) => {\n    const caps: string[] = Reflect.getMetadata('capabilities', target) ?? []\n    caps.push(name)\n    Reflect.defineMetadata('capabilities', caps, target)\n  }\n}\n\nclass SandboxAgent {\n  @Capability('file-read')\n  readFile(path: string) { \u002F* ... *\u002F }\n\n  @Capability('network-fetch')\n  fetch(url: string)     { \u002F* ... *\u002F }\n}\n\nconst caps = Reflect.getMetadata('capabilities', SandboxAgent.prototype)\n\u002F\u002F → ['file-read', 'network-fetch']\n\u002F\u002F yamtam can gate these against the agent's declared capability set\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Missing `import 'reflect-metadata'` at entry point → Reflect.defineMetadata is undefined\n❌ emitDecoratorMetadata: false → design:paramtypes always undefined, DI auto-wiring fails\n❌ Metadata defined on instance vs prototype → Reflect.getMetadata(key, instance) ≠ Reflect.getMetadata(key, Class.prototype)\n❌ Symbol tokens not shared between Inject() and registry → tokens don't match, injection returns undefined\n❌ resolve() before registry.set() → dependency is undefined, constructor receives undefined silently\n❌ Circular dependencies → resolve() hangs in infinite recursion without detection\n```\n","# \u002Freflect-metadata-injection\n\n## When to Use\n\n- Build lightweight dependency injection containers for agent service registries\n- Attach metadata to classes at decoration time for runtime introspection\n- Auto-wire agent dependencies without explicit factory functions\n- Implement decorators that record audit trails or capability declarations\n\n## Do NOT use for\n\n- Simple config injection (use environment variables or [[cli-config-persistence]])\n- Environments where `experimentalDecorators` is not enabled\n\n---\n\n## tsconfig requirements\n\n```json\n{\n  \"compilerOptions\": {\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\":  true\n  }\n}\n```\n\n---\n\n## Core metadata API\n\n```typescript\nimport 'reflect-metadata'\n\n\u002F\u002F Set metadata on a class\nReflect.defineMetadata('role', 'executor', MyClass)\n\n\u002F\u002F Get metadata\nconst role = Reflect.getMetadata('role', MyClass)  \u002F\u002F → 'executor'\n\n\u002F\u002F Check existence\nReflect.hasMetadata('role', MyClass)  \u002F\u002F → true\n\n\u002F\u002F List all keys on a target\nReflect.getMetadataKeys(MyClass)  \u002F\u002F → ['role', 'design:type', ...]\n\n\u002F\u002F Delete\nReflect.deleteMetadata('role', MyClass)\n```\n\n---\n\n## Injectable decorator + DI container\n\n```typescript\nimport 'reflect-metadata'\n\nconst INJECTABLE_KEY = Symbol('injectable')\nconst registry = new Map\u003CFunction, unknown>()\n\n\u002F\u002F Decorator: mark class as injectable\nfunction Injectable(): ClassDecorator {\n  return (target) => {\n    Reflect.defineMetadata(INJECTABLE_KEY, true, target)\n  }\n}\n\n\u002F\u002F Decorator: declare dependency token\nfunction Inject(token: symbol): ParameterDecorator {\n  return (target, _key, index) => {\n    const tokens = Reflect.getMetadata('inject:tokens', target) ?? []\n    tokens[index] = token\n    Reflect.defineMetadata('inject:tokens', tokens, target)\n  }\n}\n\n\u002F\u002F Container: resolve constructor + inject dependencies\nfunction resolve\u003CT>(cls: new (...args: any[]) => T): T {\n  if (!Reflect.getMetadata(INJECTABLE_KEY, cls)) {\n    throw new Error(`[di] ${cls.name} is not @Injectable`)\n  }\n\n  const tokens: symbol[] = Reflect.getMetadata('inject:tokens', cls) ?? []\n  const args = tokens.map(tok => registry.get(tok))\n  return new cls(...args)\n}\n\n\u002F\u002F Usage:\nconst DB_TOKEN = Symbol('db')\nregistry.set(DB_TOKEN, { query: async (sql: string) => [] })\n\n@Injectable()\nclass AgentService {\n  constructor(@Inject(DB_TOKEN) private db: any) {}\n  async listTasks() { return this.db.query('SELECT * FROM tasks') }\n}\n\nconst svc = resolve(AgentService)\n```\n\n---\n\n## Read design:paramtypes (emitDecoratorMetadata)\n\n```typescript\n@Injectable()\nclass OrderService {\n  constructor(\n    private db:     DatabaseService,\n    private logger: LoggerService,\n  ) {}\n}\n\n\u002F\u002F After @Injectable() fires, TypeScript emits:\nconst types = Reflect.getMetadata('design:paramtypes', OrderService)\n\u002F\u002F → [DatabaseService, LoggerService]\n\u002F\u002F Allows container to auto-resolve by constructor type\n```\n\n---\n\n## Audit capability decorator\n\n```typescript\nfunction Capability(name: string): MethodDecorator {\n  return (target, key) => {\n    const caps: string[] = Reflect.getMetadata('capabilities', target) ?? []\n    caps.push(name)\n    Reflect.defineMetadata('capabilities', caps, target)\n  }\n}\n\nclass SandboxAgent {\n  @Capability('file-read')\n  readFile(path: string) { \u002F* ... *\u002F }\n\n  @Capability('network-fetch')\n  fetch(url: string)     { \u002F* ... *\u002F }\n}\n\nconst caps = Reflect.getMetadata('capabilities', SandboxAgent.prototype)\n\u002F\u002F → ['file-read', 'network-fetch']\n\u002F\u002F yamtam can gate these against the agent's declared capability set\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Missing `import 'reflect-metadata'` at entry point → Reflect.defineMetadata is undefined\n❌ emitDecoratorMetadata: false → design:paramtypes always undefined, DI auto-wiring fails\n❌ Metadata defined on instance vs prototype → Reflect.getMetadata(key, instance) ≠ Reflect.getMetadata(key, Class.prototype)\n❌ Symbol tokens not shared between Inject() and registry → tokens don't match, injection returns undefined\n❌ resolve() before registry.set() → dependency is undefined, constructor receives undefined silently\n❌ Circular dependencies → resolve() hangs in infinite recursion without detection\n```\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Freflect-metadata-injection",2,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-13 13:15:29",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill reflect-metadata-injection",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill reflect-metadata-injection",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill reflect-metadata-injection","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Freflect-metadata-injection\u002FSKILL.md",true,[],[48,56,63,71,79,87],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":52,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":18},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":18},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":67,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":18},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":75,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":18},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":18},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]