@sema-agent/core
Version:
Stateless, task-oriented AI agent core
74 lines (73 loc) • 2.38 kB
JavaScript
const CODE_BODY_OPERANDS = new Map([
["trap", trapAction],
["alias", aliasValues],
["mapfile", callbacksOf(new Set(["d", "u", "n", "O", "C", "c", "s"]))],
["readarray", callbacksOf(new Set(["d", "u", "n", "O", "C", "c", "s"]))],
["compgen", callbacksOf(new Set(["o", "A", "G", "W", "P", "S", "X", "F", "C", "V"]))],
]);
export function codeBodies(basename, args) {
return CODE_BODY_OPERANDS.get(basename)?.(args) ?? [];
}
function trapAction(args) {
let k = 0;
for (; k < args.length; k++) {
const a = args[k];
if (a === "--") {
k++;
break;
}
if (!a.startsWith("-") || a === "-")
break;
}
const action = args[k];
return action === undefined || action === "" || action === "-" ? [] : [action];
}
function aliasValues(args) {
const values = [];
for (const a of args) {
const eq = a.indexOf("=");
if (eq > 0)
values.push(a.slice(eq + 1));
}
return values;
}
function callbacksOf(valueLetters) {
return (args) => {
const callbacks = [];
for (let k = 0; k < args.length; k++) {
const a = args[k];
if (a === "--" || !a.startsWith("-") || a === "-")
break;
for (let i = 1; i < a.length; i++) {
if (!valueLetters.has(a[i]))
continue;
const value = i + 1 < a.length ? a.slice(i + 1) : args[++k];
if (a[i] === "C" && value !== undefined)
callbacks.push(value);
break;
}
}
return callbacks;
};
}
export function reentryText(basename, args) {
if (basename === "eval")
return args.length === 0 ? undefined : args.join(" ");
if (basename === "parallel")
return args.filter((a) => !a.startsWith("-")).join(" ") || undefined;
if (basename === "source" || basename === ".")
return undefined;
for (let k = 0; k < args.length; k++) {
const a = args[k];
if (a === "--")
return undefined;
if (!a.startsWith("-") || a === "-")
return undefined;
const c = a.indexOf("c");
if (a.startsWith("--"))
continue;
if (c > 0)
return a.length > c + 1 ? a.slice(c + 1) : args[k + 1];
}
return undefined;
}