@sema-agent/core
Version:
Stateless, task-oriented AI agent core
48 lines (47 loc) • 1.63 kB
JavaScript
const LINE_RE = /^\s*([A-Za-z][A-Za-z0-9_-]*):\s*(.*?)\s*$/;
const ISO_DATE_PREFIX_RE = /^\d{4}-\d{2}-\d{2}(?:$|[T\s])/;
export function isInstructionEntry(fm) {
if (fm.type === "feedback")
return true;
const hints = readV2HeaderHints(fm.extra);
return hints.pinned !== undefined || hints.triggers !== undefined || hints.appliesWhen !== undefined;
}
export function readV2HeaderHints(extra) {
const out = {};
if (extra === undefined)
return out;
for (const line of extra) {
const m = LINE_RE.exec(line);
if (m === null)
continue;
const [, key, value] = m;
switch (key) {
case "pinned":
if (out.pinned === undefined && value === "true")
out.pinned = true;
break;
case "triggers": {
if (out.triggers !== undefined)
break;
const items = value
.split(",")
.map((s) => s.trim())
.filter((s) => s !== "");
if (items.length > 0)
out.triggers = items;
break;
}
case "last-confirmed":
if (out.lastConfirmedAt === undefined && ISO_DATE_PREFIX_RE.test(value))
out.lastConfirmedAt = value;
break;
case "applies-when":
if (out.appliesWhen === undefined && value !== "")
out.appliesWhen = value;
break;
default:
break;
}
}
return out;
}