Parent directory

view-model.ts

1077 bytes
 1import { formatSourceKind, sourceBadge } from "../inventory/classifier.ts";
 2import type { SkillInvocationMode, SkillRecord } from "../types.ts";
 3
 4export function modeLabel(mode: SkillInvocationMode): string {
 5  return mode === "manual-only" ? "Manual-only" : "Agent-invocable";
 6}
 7
 8export function toggleMode(mode: SkillInvocationMode): SkillInvocationMode {
 9  return mode === "manual-only" ? "agent-invocable" : "manual-only";
10}
11
12export function skillSearchText(skill: SkillRecord): string {
13  return [
14    skill.name,
15    skill.description,
16    skill.filePath,
17    skill.source.kind,
18    sourceBadge(skill.source),
19    formatSourceKind(skill.source.kind),
20    modeLabel(skill.mode),
21  ]
22    .join(" ")
23    .toLowerCase();
24}
25
26export function filterSkills(skills: SkillRecord[], query: string): SkillRecord[] {
27  const tokens = query.trim().toLowerCase().split(/\s+/).filter(Boolean);
28  if (tokens.length === 0) return skills;
29  return skills.filter((skill) => {
30    const haystack = skillSearchText(skill);
31    return tokens.every((token) => haystack.includes(token));
32  });
33}