UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

3 lines • 1.78 kB
import{getPromptContentText}from"#runtime/agent/bootstrap-model-utils.js";function getAvailableSkills(e){let t=new Map;for(let n of e){if(n.role!==`system`)continue;let e=getPromptContentText(n.content).split(` `),r=e.findIndex(e=>e.trim()===`Available skills`);if(!(r<0))for(let n of e.slice(r+1)){if(n.trim().length===0)break;let e=parseAvailableSkill(n);e!==null&&t.set(e.name,e)}}return[...t.values()]}function findRelevantSkill(e,t){let n=normalizeText(t);for(let t of e)if(n.includes(normalizeText(t.name)))return t;return/\b(forecast|temperature|weather|wind|rain|snow)\b/u.test(n)?e.find(e=>/\b(forecast|temperature|weather|wind|rain|snow)\b/u.test(normalizeText(`${e.name} ${e.description}`)))??null:null}function getActivatedSkillIds(e){return[...e.filter(e=>e.role===`system`).flatMap(e=>getPromptContentText(e.content).split(` `).map(e=>e.trim()).flatMap(e=>{let t=/^Skill \((.+)\)$/.exec(e);return t?.[1]===void 0?[]:[t[1]]})),...getLoadedSkillIdsFromHistory(e)]}function getLoadedSkillIdsFromHistory(e){let t=[];for(let n of e)if(n.role===`assistant`&&typeof n.content!=`string`)for(let e of n.content){if(typeof e==`string`||e.type!==`tool-call`||e.toolName!==`load_skill`)continue;let n=readSkillFromToolInput(e.input);n!==void 0&&t.push(n)}return t}function readSkillFromToolInput(e){let t=typeof e==`string`?safeJsonParse(e):e;if(typeof t==`object`&&t&&`skill`in t&&typeof t.skill==`string`)return t.skill}function safeJsonParse(e){try{return JSON.parse(e)}catch{return}}function parseAvailableSkill(e){let t=/^- (.+?): (.+?)(?: \(path: (.+)\))?$/.exec(e.trim());return t?.[1]&&t[2]?{description:t[2],name:t[1]}:null}function normalizeText(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu,` `).trim()}export{findRelevantSkill,getActivatedSkillIds,getAvailableSkills};