@sema-agent/core
Version:
Stateless, task-oriented AI agent core
40 lines (39 loc) • 2.21 kB
JavaScript
import { reminderMarkDeclaration } from "../core/reminder-mint.js";
import { renderCoworkBase } from "../prompts/cowork.js";
import { catalogMessage } from "./catalog/index.js";
import { selectVariant } from "./select.js";
export const RENDERERS = {
"role-base": { id: "role-base", version: 2, stability: "session", reads: "selectors", external: false, messages: ["core/role.base"] },
"model-guidance": { id: "model-guidance", version: 1, stability: "session", reads: "inputs", external: false },
"mcp-instructions": { id: "mcp-instructions", version: 1, stability: "session", reads: "mcp", external: true },
"reminder-mark": { id: "reminder-mark", version: 1, stability: "session", reads: "mark", external: false },
environment: { id: "environment", version: 2, stability: "leg", reads: "env", external: false },
memory: { id: "memory", version: 1, stability: "leg", reads: "memory", external: false },
};
export function rendererVector() {
return Object.fromEntries(Object.values(RENDERERS).map((r) => [r.id, r.version]));
}
export function runRenderer(id, inputs, selectors) {
const plain = (text) => (text === undefined ? undefined : { text });
switch (id) {
case "role-base": {
const v = selectVariant(catalogMessage("core/role.base"), selectors);
if (v === undefined)
return undefined;
if (v.id !== "cowork")
return { text: v.text, variant: v.id };
const sections = renderCoworkBase({ tools: inputs.toolNames ?? [], workspaceFolder: inputs.workspaceFolder });
return sections.length === 0 ? undefined : { text: sections.map((s) => s.text).join("\n\n"), variant: v.id };
}
case "model-guidance":
return plain(inputs.modelGuidance);
case "mcp-instructions":
return plain(inputs.mcpInstructionsBlock);
case "reminder-mark":
return plain(inputs.facts.reminderMark !== undefined ? reminderMarkDeclaration(inputs.facts.reminderMark) : undefined);
case "environment":
return plain(inputs.environmentBlock);
case "memory":
return plain(inputs.memoryBlock);
}
}