@fusedashlabs/ui9000-workspace
Version:
UI9000 workspace MCP. One tool, show_workspace, draws a chart from your table. Set TYPESAFE_API_KEY to let Jev choose the chart.
41 lines (40 loc) • 1.18 kB
JavaScript
export const AUDIT_VERDICTS = ['approve', 'reject'];
const ROW_KEYS = new Set(['rows', 'data']);
export function assertAuditHasNoRows(value) {
if (Array.isArray(value)) {
for (const item of value)
assertAuditHasNoRows(item);
return;
}
if (!value || typeof value !== 'object')
return;
for (const [key, child] of Object.entries(value)) {
if (ROW_KEYS.has(key) && Array.isArray(child)) {
throw new Error('audit must not contain rows');
}
assertAuditHasNoRows(child);
}
}
export function createAuditLog() {
const records = [];
return {
append(record) {
assertAuditHasNoRows(record);
const frozen = Object.freeze({ ...record });
records.push(frozen);
return frozen;
},
entries() {
return records.map((record) => Object.freeze({ ...record }));
},
};
}
export function recordVerdict(log, proposal, verdict, recordedAt) {
return log.append({
proposalId: proposal.id,
action: proposal.action,
verdict,
preview: proposal.preview,
recordedAt,
});
}