setAutoRoute(!autoRoute)}/>
Auto-route based on question
Cancel
Apply
>
}>
Pick the dashboards OmniBuddy is allowed to query. Power users can pin specific sources;
analysts working across domains should usually leave auto-route on.
{D.AGENTS.map(a => {
const on = active.includes(a.id);
return (
onToggle(a.id)}>
{a.icon}
{on && }
);
})}
);
};
// ──────────────────────────────────────────────────────────────────────────────
// Saved questions
const SavedModal = ({ onClose, onSchedule }) => {
const D = window.OMNI_DATA;
return (
Manage permissions
Schedule new
>}>
{D.SAVED_QUESTIONS.map(q => {
const A = D.AGENTS.find(a => a.id === q.agent);
return (
{A.icon}
{q.title}
{q.schedule}
· last run {q.last} · sent to {q.recipients} {q.recipients === 1 ? 'person' : 'people'}
Run now
Edit
);
})}
);
};
// ──────────────────────────────────────────────────────────────────────────────
// Schedule modal
const ScheduleModal = ({ onClose, defaultQ }) => {
const [q, setQ ] = useStateM(defaultQ || 'FY27 secured sales — Americas, exact figures');
const [freq, setFreq] = useStateM('weekly');
const [day, setDay ] = useStateM('Monday');
const [time, setTime] = useStateM('08:00');
const [emails, setEmails] = useStateM('priya.k@omniactive.com, exec-team@omniactive.com');
const field = { display: 'flex', flexDirection: 'column', gap: 6, marginBottom: 14 };
const lbl = { fontSize: 11, letterSpacing: '.08em', textTransform: 'uppercase', color: 'var(--muted-2)', fontWeight: 600 };
const input = { padding: '10px 12px', border: '1px solid var(--line)', borderRadius: 10, background: 'transparent',
color: 'var(--ink)', font: '13.5px var(--font-sans)', outline: 'none' };
return (
Cancel
Save schedule
>}>
Question
Frequency
setFreq(e.target.value)}>
Daily
Weekly
Monthly
Custom (cron)
{freq === 'weekly' ? 'Day' : freq === 'monthly' ? 'Day of month' : 'Every day'}
setDay(e.target.value)} disabled={freq === 'daily'}>
{['Monday','Tuesday','Wednesday','Thursday','Friday'].map(d => {d} )}
Time (IST)
setTime(e.target.value)}/>
Send to (comma-separated emails)
setEmails(e.target.value)}/>
Delivery format
{['Inline summary', 'Excel attachment', 'PowerPoint', 'PDF report'].map((o, i) => (
{o}
))}
Next run: {freq === 'daily' ? 'tomorrow' : day} at {time} IST · using cached MyDashboard model
);
};
// ──────────────────────────────────────────────────────────────────────────────
// Compare across dashboards (multi-agent answer)
const CompareModal = ({ onClose }) => {
const D = window.OMNI_DATA;
return (
Export combined
Done
>}>
Q: Compare FY27 Americas sales vs inventory levels vs OTIF performance.
{D.COMPARE_PANELS.map((p, i) => {
const A = D.AGENTS.find(a => a.id === p.agent);
const down = p.delta.startsWith('−');
return (
{A.icon}
{A.name}
{p.headline}
{p.sub}
{p.delta}
{p.note}
);
})}
Synthesis
Americas is
tracking 12.4% ahead of FY26 on secured sales, but inventory
coverage is
3.1 weeks heavy against plan — three SKUs are doing most of the damage.
OTIF dipped
1.8 pts in the Chicago lane after the carrier swap; if you can resolve that,
the inventory overhang largely resolves itself in Q3.
Drill into
The 3 overhang SKUs →
Chicago lane shipments →
By customer →
);
};
// ──────────────────────────────────────────────────────────────────────────────
// Settings / admin (with legacy kill switch)
const SettingsModal = ({ onClose, tweaks, setTweak }) => {
const [legacy, setLegacy] = useStateM(false);
const [verbose, setVerbose] = useStateM(false);
const Row = ({ title, sub, on, set, danger }) => (
{title}{sub}
set(!on)}/>
);
return (
v2.4.1 · API: healthy
Done
>}>
Default response density
What shows on every answer by default. You can always toggle individual pieces per response.
setTweak('showChart', v)}/>
setTweak('showTable', v)}/>
setTweak('showCitations', v)}/>
setTweak('showDrills', v)}/>
setTweak('showCost', v)}/>
setTweak('showHonesty', v)}/>
Engineering
For debugging and rollbacks. Not visible to most users.
Account
Priya Kothari
priya.k@omniactive.com · Executive persona
Switch persona
);
};
Object.assign(window, { Modal, TrailModal, SourcesModal, SavedModal, ScheduleModal, CompareModal, SettingsModal });