(scope: "self" | "public" | "mix", currentOwner: string)
| 1824 | } |
| 1825 | |
| 1826 | getSkillEmbeddings(scope: "self" | "public" | "mix", currentOwner: string): Array<{ skillId: string; vector: number[] }> { |
| 1827 | let sql = `SELECT se.skill_id, se.vector, se.dimensions |
| 1828 | FROM skill_embeddings se |
| 1829 | JOIN skills s ON s.id = se.skill_id |
| 1830 | WHERE s.status = 'active'`; |
| 1831 | const params: any[] = []; |
| 1832 | |
| 1833 | if (scope === "self") { |
| 1834 | sql += ` AND s.owner = ?`; |
| 1835 | params.push(currentOwner); |
| 1836 | } else if (scope === "public") { |
| 1837 | sql += ` AND s.visibility = 'public'`; |
| 1838 | } else { |
| 1839 | sql += ` AND (s.owner = ? OR s.visibility = 'public')`; |
| 1840 | params.push(currentOwner); |
| 1841 | } |
| 1842 | |
| 1843 | const rows = this.db.prepare(sql).all(...params) as Array<{ skill_id: string; vector: Buffer; dimensions: number }>; |
| 1844 | return rows.map((r) => ({ |
| 1845 | skillId: r.skill_id, |
| 1846 | vector: Array.from(new Float32Array(r.vector.buffer, r.vector.byteOffset, r.dimensions)), |
| 1847 | })); |
| 1848 | } |
| 1849 | |
| 1850 | skillFtsSearch(query: string, limit: number, scope: "self" | "public" | "mix", currentOwner: string): Array<{ skillId: string; score: number }> { |
| 1851 | const sanitized = sanitizeFtsQuery(query); |
no test coverage detected