[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73D94DTYBPZ7PMY1HKP5P7H":3,"skill-same:01M73D94DTYBPZ7PMY1HKP5P7H":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},"01M73D94DTYBPZ7PMY1HKP5P7H","in-memory-vector-storage",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\u002Fin-memory-vector-storage\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: in-memory-vector-storage\ndescription: In-memory vector index with JSON persistence for small-scale agent RAG. Upsert\u002Fquery\u002Fdelete embeddings, cosine similarity search, JSON snapshot save\u002Fload, and memory-budget enforcement. Sources: wseagar\u002Fvector-storage.\norigin: yana-ai — synthesized from wseagar\u002Fvector-storage (MIT)\nlicense: Apache-2.0\nversion: 1.0.0\ncompatibility: yana-ai >= 1.3.48\n---\n\n# \u002Fin-memory-vector-storage\n\n## When to Use\n\n- Agent L1 memory needs sub-5k vector search without external DB\n- Local RAG over yamtam skills\u002Frules with JSON persistence\n- Prototype semantic search before migrating to pgvector or Pinecone\n- Offline\u002Fair-gapped environments with no DB infrastructure\n\n## Do NOT use for\n\n- > 10k vectors (brute-force scan too slow — use [[vector-store-patterns]])\n- Multi-agent concurrent writes (no locking — single-writer only)\n\n---\n\n## Core store implementation\n\n```typescript\nimport { writeFileSync, readFileSync, existsSync } from 'fs'\n\ninterface VectorEntry {\n  id:       string\n  vector:   number[]\n  metadata: Record\u003Cstring, unknown>\n}\n\nclass InMemoryVectorStore {\n  private entries: Map\u003Cstring, VectorEntry> = new Map()\n  private dim:     number | null = null\n\n  upsert(id: string, vector: number[], metadata: Record\u003Cstring, unknown> = {}): void {\n    if (!this.dim) this.dim = vector.length\n    if (vector.length !== this.dim) throw new Error(`dim mismatch: expected ${this.dim}`)\n    this.entries.set(id, { id, vector, metadata })\n  }\n\n  query(queryVec: number[], topK = 5, threshold = 0.7): (VectorEntry & { score: number })[] {\n    return [...this.entries.values()]\n      .map(e => ({ ...e, score: this.cosine(queryVec, e.vector) }))\n      .filter(e => e.score >= threshold)\n      .sort((a, b) => b.score - a.score)\n      .slice(0, topK)\n  }\n\n  delete(id: string): boolean { return this.entries.delete(id) }\n\n  size(): number { return this.entries.size }\n\n  save(path: string): void {\n    const data = { dim: this.dim, entries: [...this.entries.values()] }\n    writeFileSync(path, JSON.stringify(data))\n  }\n\n  load(path: string): void {\n    if (!existsSync(path)) return\n    const data   = JSON.parse(readFileSync(path, 'utf8'))\n    this.dim     = data.dim\n    this.entries = new Map(data.entries.map((e: VectorEntry) => [e.id, e]))\n  }\n\n  private cosine(a: number[], b: number[]): number {\n    let dot = 0, na = 0, nb = 0\n    for (let i = 0; i \u003C a.length; i++) {\n      dot += a[i] * b[i]; na += a[i] ** 2; nb += b[i] ** 2\n    }\n    return na && nb ? dot \u002F (Math.sqrt(na) * Math.sqrt(nb)) : 0\n  }\n}\n\nexport const vectorStore = new InMemoryVectorStore()\n```\n\n---\n\n## Index yamtam skills for semantic search\n\n```typescript\nimport { vectorStore } from '.\u002Fvector-store.js'\nimport { readFileSync, readdirSync } from 'fs'\n\n\u002F\u002F Hypothetical: embed skill descriptions (replace with real embeddings)\nasync function indexSkills(skillsDir: string, embedFn: (text: string) => Promise\u003Cnumber[]>) {\n  for (const skill of readdirSync(skillsDir)) {\n    const path = `${skillsDir}\u002F${skill}\u002FSKILL.md`\n    const desc = readFileSync(path, 'utf8').split('\\n')\n      .find(l => l.startsWith('description:'))?.replace('description: ', '') ?? skill\n\n    const vec = await embedFn(desc)\n    vectorStore.upsert(skill, vec, { path, skill })\n  }\n  vectorStore.save('\u002Fworkspaces\u002Fyana-ai\u002Fcore\u002Fmemory\u002Fskills-index.json')\n}\n```\n\n---\n\n## Memory budget check\n\n```javascript\nconst MAX_VECTORS    = 5000\nconst APPROX_BYTES   = (dim: number) => dim * 4 + 200  \u002F\u002F float32 + metadata overhead\n\nfunction checkMemoryBudget(store: InMemoryVectorStore, dim: number): void {\n  const count = store.size()\n  if (count > MAX_VECTORS) {\n    throw new Error(`[vector-store] budget exceeded: ${count} > ${MAX_VECTORS}`)\n  }\n  const approxMb = (count * APPROX_BYTES(dim)) \u002F (1024 * 1024)\n  if (approxMb > 200) console.warn(`[vector-store] ~${approxMb.toFixed(1)}MB in RAM`)\n}\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ No dimension validation on upsert → silent wrong cosine scores\n❌ JSON.stringify on >10k vectors → blocks event loop for seconds\n❌ No threshold filter → returns noise below 0.7 similarity\n❌ Concurrent writes from multiple agents → race condition corrupts Map\n❌ save() not called after upsert → index lost on process restart\n❌ Float64 JSON → 3× larger file than Float32Array binary\n```\n","# \u002Fin-memory-vector-storage\n\n## When to Use\n\n- Agent L1 memory needs sub-5k vector search without external DB\n- Local RAG over yamtam skills\u002Frules with JSON persistence\n- Prototype semantic search before migrating to pgvector or Pinecone\n- Offline\u002Fair-gapped environments with no DB infrastructure\n\n## Do NOT use for\n\n- > 10k vectors (brute-force scan too slow — use [[vector-store-patterns]])\n- Multi-agent concurrent writes (no locking — single-writer only)\n\n---\n\n## Core store implementation\n\n```typescript\nimport { writeFileSync, readFileSync, existsSync } from 'fs'\n\ninterface VectorEntry {\n  id:       string\n  vector:   number[]\n  metadata: Record\u003Cstring, unknown>\n}\n\nclass InMemoryVectorStore {\n  private entries: Map\u003Cstring, VectorEntry> = new Map()\n  private dim:     number | null = null\n\n  upsert(id: string, vector: number[], metadata: Record\u003Cstring, unknown> = {}): void {\n    if (!this.dim) this.dim = vector.length\n    if (vector.length !== this.dim) throw new Error(`dim mismatch: expected ${this.dim}`)\n    this.entries.set(id, { id, vector, metadata })\n  }\n\n  query(queryVec: number[], topK = 5, threshold = 0.7): (VectorEntry & { score: number })[] {\n    return [...this.entries.values()]\n      .map(e => ({ ...e, score: this.cosine(queryVec, e.vector) }))\n      .filter(e => e.score >= threshold)\n      .sort((a, b) => b.score - a.score)\n      .slice(0, topK)\n  }\n\n  delete(id: string): boolean { return this.entries.delete(id) }\n\n  size(): number { return this.entries.size }\n\n  save(path: string): void {\n    const data = { dim: this.dim, entries: [...this.entries.values()] }\n    writeFileSync(path, JSON.stringify(data))\n  }\n\n  load(path: string): void {\n    if (!existsSync(path)) return\n    const data   = JSON.parse(readFileSync(path, 'utf8'))\n    this.dim     = data.dim\n    this.entries = new Map(data.entries.map((e: VectorEntry) => [e.id, e]))\n  }\n\n  private cosine(a: number[], b: number[]): number {\n    let dot = 0, na = 0, nb = 0\n    for (let i = 0; i \u003C a.length; i++) {\n      dot += a[i] * b[i]; na += a[i] ** 2; nb += b[i] ** 2\n    }\n    return na && nb ? dot \u002F (Math.sqrt(na) * Math.sqrt(nb)) : 0\n  }\n}\n\nexport const vectorStore = new InMemoryVectorStore()\n```\n\n---\n\n## Index yamtam skills for semantic search\n\n```typescript\nimport { vectorStore } from '.\u002Fvector-store.js'\nimport { readFileSync, readdirSync } from 'fs'\n\n\u002F\u002F Hypothetical: embed skill descriptions (replace with real embeddings)\nasync function indexSkills(skillsDir: string, embedFn: (text: string) => Promise\u003Cnumber[]>) {\n  for (const skill of readdirSync(skillsDir)) {\n    const path = `${skillsDir}\u002F${skill}\u002FSKILL.md`\n    const desc = readFileSync(path, 'utf8').split('\\n')\n      .find(l => l.startsWith('description:'))?.replace('description: ', '') ?? skill\n\n    const vec = await embedFn(desc)\n    vectorStore.upsert(skill, vec, { path, skill })\n  }\n  vectorStore.save('\u002Fworkspaces\u002Fyana-ai\u002Fcore\u002Fmemory\u002Fskills-index.json')\n}\n```\n\n---\n\n## Memory budget check\n\n```javascript\nconst MAX_VECTORS    = 5000\nconst APPROX_BYTES   = (dim: number) => dim * 4 + 200  \u002F\u002F float32 + metadata overhead\n\nfunction checkMemoryBudget(store: InMemoryVectorStore, dim: number): void {\n  const count = store.size()\n  if (count > MAX_VECTORS) {\n    throw new Error(`[vector-store] budget exceeded: ${count} > ${MAX_VECTORS}`)\n  }\n  const approxMb = (count * APPROX_BYTES(dim)) \u002F (1024 * 1024)\n  if (approxMb > 200) console.warn(`[vector-store] ~${approxMb.toFixed(1)}MB in RAM`)\n}\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ No dimension validation on upsert → silent wrong cosine scores\n❌ JSON.stringify on >10k vectors → blocks event loop for seconds\n❌ No threshold filter → returns noise below 0.7 similarity\n❌ Concurrent writes from multiple agents → race condition corrupts Map\n❌ save() not called after upsert → index lost on process restart\n❌ Float64 JSON → 3× larger file than Float32Array binary\n```\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fin-memory-vector-storage",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-14 13:24:09",{"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 in-memory-vector-storage",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill in-memory-vector-storage",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill in-memory-vector-storage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fin-memory-vector-storage\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",[],[]]