UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

40 lines (39 loc) • 2.21 kB
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); } }