Add LICENSE, README, and Docs tab to Mission Control
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
export type SiteMenteMessage = {
|
||||
role: "user" | "assistant" | "system";
|
||||
content: string;
|
||||
};
|
||||
|
||||
export type SiteMenteSpeechResult = {
|
||||
audioBytes: Uint8Array;
|
||||
mimeType: string;
|
||||
};
|
||||
|
||||
const TEXT_MODEL = "MiniMax-M2.5";
|
||||
const API_KEY = process.env.MINIMAX_API_KEY || "sk-cp-q8FpnlRzqa2oHVrHYVKXgCDAltN85KdsiSqAzRZeP6zvSSauupHu4ffVPKLgVWFz534az2lgM39T6ReXUvfT-8sUlQd9faush2Kr3KNmykoJNNgE8IET73Q";
|
||||
|
||||
const MINIMAX_API_BASE = "https://api.minimax.io/v1";
|
||||
|
||||
const SYSTEM_PROMPT = `You are SiteMente, an AI site strategist that helps business owners make their websites think like a smart assistant.
|
||||
You deeply understand landing pages, funnels, customer psychology, and automation.
|
||||
You recommend specific AI Minds, suggest copy and UX changes, and ask focused clarifying questions before proposing changes.
|
||||
Keep answers concise, practical, and business-oriented.`;
|
||||
|
||||
export const generateSiteMenteText = async (
|
||||
messages: SiteMenteMessage[]
|
||||
): Promise<string> => {
|
||||
try {
|
||||
// Build messages - add system prompt if not present
|
||||
const hasSystem = messages.some((m) => m.role === "system");
|
||||
|
||||
// Filter and format messages
|
||||
const contents = messages
|
||||
.filter((m) => m.role !== "system")
|
||||
.map((m) => ({
|
||||
role: m.role === "assistant" ? "assistant" : "user",
|
||||
content: m.content,
|
||||
}));
|
||||
|
||||
// Add system instruction
|
||||
if (!hasSystem) {
|
||||
contents.unshift({ role: "system", content: SYSTEM_PROMPT });
|
||||
}
|
||||
|
||||
const response = await fetch(`${MINIMAX_API_BASE}/text/chatcompletion_v2`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${API_KEY}`,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: TEXT_MODEL,
|
||||
messages: contents,
|
||||
max_tokens: 1024,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorText = await response.text();
|
||||
throw new Error(`MiniMax API error: ${response.status} - ${errorText}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const text = data?.choices?.[0]?.message?.content;
|
||||
|
||||
if (!text) {
|
||||
throw new Error("MiniMax returned an empty response.");
|
||||
}
|
||||
|
||||
return text;
|
||||
} catch (error) {
|
||||
console.error("[SiteMente][MiniMax] Text generation failed", error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const generateSiteMenteSpeech = async (
|
||||
text: string
|
||||
): Promise<SiteMenteSpeechResult> => {
|
||||
// MiniMax doesn't have built-in TTS in their text API
|
||||
// Vapi handles voice output on their end
|
||||
throw new Error("TTS not implemented - Vapi handles voice output");
|
||||
};
|
||||
@@ -1,8 +1,7 @@
|
||||
import {
|
||||
generateSiteMenteSpeech,
|
||||
generateSiteMenteText,
|
||||
type SiteMenteMessage,
|
||||
} from "./geminiClient";
|
||||
} from "./minimaxClient";
|
||||
|
||||
export type SiteMenteTextRequest = {
|
||||
messages: SiteMenteMessage[];
|
||||
@@ -49,13 +48,13 @@ export const runSiteMenteVoiceTurn = async (
|
||||
{ role: "user", content: request.transcript },
|
||||
];
|
||||
const reply = await generateSiteMenteText(withSystemPrompt(messages));
|
||||
const audio = await generateSiteMenteSpeech(reply);
|
||||
|
||||
// Return text only - Vapi handles voice output on their end
|
||||
return {
|
||||
reply,
|
||||
audio: {
|
||||
data: Buffer.from(audio.audioBytes).toString("base64"),
|
||||
mimeType: audio.mimeType,
|
||||
data: "",
|
||||
mimeType: "audio/mp3",
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
+41
-9
@@ -1,4 +1,4 @@
|
||||
// Agent Types for Council
|
||||
// Agent Types for Council - SiteMente Ecosystem
|
||||
|
||||
export interface Agent {
|
||||
id: string;
|
||||
@@ -20,42 +20,71 @@ export interface AgentTeam {
|
||||
}
|
||||
|
||||
export const defaultTeams: AgentTeam[] = [
|
||||
// === HORUS - Master Orchestrator ===
|
||||
{
|
||||
id: "horus-team",
|
||||
name: "Horus Command",
|
||||
icon: "👁️",
|
||||
description: "Lead orchestrator - delegates to all agents",
|
||||
agents: [
|
||||
{ id: "horus", name: "Horus", role: "Master Orchestrator", description: "Command center, delegates tasks, manages all agents", status: "idle", project: "horus" },
|
||||
],
|
||||
},
|
||||
|
||||
// === SiteMente Squad ===
|
||||
{
|
||||
id: "sitemente-squad",
|
||||
name: "SiteMente Squad",
|
||||
icon: "🌐",
|
||||
description: "Building and growing SiteMente B2B platform",
|
||||
agents: [
|
||||
{ id: "sm-architect", name: "Architect", role: "PM & Architecture", description: "Planning, architecture, task breakdown", status: "idle", project: "sitemente" },
|
||||
{ id: "sm-frontend", name: "Frontend Dev", role: "UI/UX Implementation", description: "React, Next.js, components", status: "idle", project: "sitemente" },
|
||||
{ id: "sm-ai", name: "AI Engineer", role: "LLM & Voice Integration", description: "Gemini, voice agents, widgets", status: "idle", project: "sitemente" },
|
||||
{ id: "sm-seo", name: "SEO Specialist", role: "Content & Copy", description: "SEO, content, marketing copy", status: "idle", project: "sitemente" },
|
||||
{ id: "thoth", name: "Thoth", role: "Strategy & Research", description: "SiteMente planning, research, analysis", status: "idle", project: "sitemente" },
|
||||
{ id: "ptah", name: "Ptah", role: "Dev \& Ops", description: "Development, deployment, technical implementation", status: "idle", project: "sitemente" },
|
||||
{ id: "seshat", name: "Seshat", role: "Content \& SEO", description: "Content strategy, SEO, marketing copy", status: "idle", project: "sitemente" },
|
||||
{ id: "anubis", name: "Anubis", role: "Outreach \& Growth", description: "Lead generation, client acquisition", status: "idle", project: "sitemente" },
|
||||
],
|
||||
},
|
||||
|
||||
// === Trading Squad ===
|
||||
{
|
||||
id: "trading-squad",
|
||||
name: "Trading Squad",
|
||||
icon: "📈",
|
||||
description: "Crypto market research and trade execution",
|
||||
agents: [
|
||||
{ id: "thoth-trading", name: "Thoth Trading", role: "Research \& Analysis", description: "Market research, chart analysis", status: "idle", project: "trading" },
|
||||
{ id: "sekhmet", name: "Sekhmet", role: "Trade Executor", description: "Risk management, position sizing", status: "idle", project: "trading" },
|
||||
],
|
||||
},
|
||||
|
||||
// === HolaCompi Squad (Paused) ===
|
||||
{
|
||||
id: "holacompi-squad",
|
||||
name: "HolaCompi Squad",
|
||||
icon: "🤝",
|
||||
description: "Consumer AI ally (paused until revenue)",
|
||||
agents: [
|
||||
{ id: "hc-product", name: "Product Manager", role: "Flows & UX", description: "User flows, product decisions", status: "idle", project: "holacompi" },
|
||||
{ id: "hc telephony", name: "Telephony Engineer", role: "Voice & Telco", description: "Telnyx, Vapi, phone lines", status: "idle", project: "holacompi" },
|
||||
{ id: "hc-product", name: "Product Manager", role: "Flows \& UX", description: "User flows, product decisions", status: "idle", project: "holacompi" },
|
||||
{ id: "hc-telephony", name: "Telephony Engineer", role: "Voice \& Telco", description: "Telnyx, Vapi, phone lines", status: "idle", project: "holacompi" },
|
||||
{ id: "hc-voice", name: "Voice UX", role: "Conversation Design", description: "Dialogues, prompts, voice UX", status: "idle", project: "holacompi" },
|
||||
],
|
||||
},
|
||||
|
||||
// === Infrastructure ===
|
||||
{
|
||||
id: "infrastructure-team",
|
||||
name: "Infrastructure",
|
||||
icon: "🔧",
|
||||
description: "Security, backups, and system ops",
|
||||
agents: [
|
||||
{ id: "infra-sec", name: "Security Lead", role: "Hardening & Audits", description: "UFW, SSH, security audits", status: "idle", project: "infrastructure" },
|
||||
{ id: "infra-backup", name: "Backup Manager", role: "Backup & Recovery", description: "Auto backups, cloud sync", status: "idle", project: "infrastructure" },
|
||||
{ id: "infra-sec", name: "Security Lead", role: "Hardening \& Audits", description: "UFW, SSH, security audits", status: "idle", project: "infrastructure" },
|
||||
{ id: "infra-ops", name: "Ops Manager", role: "DevOps \& Backups", description: "Deployments, backups, monitoring", status: "idle", project: "infrastructure" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const agentRoles = [
|
||||
{ id: "orchestrator", name: "Orchestrator", icon: "👁️" },
|
||||
{ id: "architect", name: "Architect / PM", icon: "📋" },
|
||||
{ id: "frontend", name: "Frontend Dev", icon: "🎨" },
|
||||
{ id: "backend", name: "Backend Dev", icon: "⚙️" },
|
||||
@@ -64,4 +93,7 @@ export const agentRoles = [
|
||||
{ id: "product", name: "Product Manager", icon: "📦" },
|
||||
{ id: "security", name: "Security", icon: "🛡️" },
|
||||
{ id: "devops", name: "DevOps", icon: "🚀" },
|
||||
{ id: "trader", name: "Trader", icon: "📈" },
|
||||
{ id: "researcher", name: "Researcher", icon: "🔍" },
|
||||
{ id: "outreach", name: "Outreach", icon: "📣" },
|
||||
];
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Mission Control Task Types
|
||||
|
||||
export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'blocked' | 'paused';
|
||||
export type ProjectType = 'sitemente' | 'holacompi' | 'infrastructure';
|
||||
export type ProjectType = 'sitemente' | 'holacompi' | 'infrastructure' | 'arabredox' | 'trading';
|
||||
|
||||
export interface Task {
|
||||
id: string;
|
||||
@@ -26,43 +26,65 @@ export interface Project {
|
||||
color: string;
|
||||
}
|
||||
|
||||
// V1 SiteMente Checklist
|
||||
// SiteMente & Operations Task List
|
||||
export const initialTasks: Task[] = [
|
||||
// === SiteMente v1 ===
|
||||
{ id: 't1', title: 'Pricing + Services section', description: '3 tiers + vertical packs + yearly toggle', status: 'done', priority: 'high', project: 'sitemente', order: 1, completedAt: '2026-02-16' },
|
||||
{ id: 't2', title: 'Vertical pack cards', description: 'Real Estate, Restaurant, Clinic as distinct upsells', status: 'todo', priority: 'high', project: 'sitemente', order: 2 },
|
||||
{ id: 't2', title: 'Vertical pack cards', description: 'Real Estate, Restaurant, Clinic as distinct upsells', status: 'done', priority: 'high', project: 'sitemente', order: 2, completedAt: '2026-02-17' },
|
||||
{ id: 't3', title: 'Contact/onboarding form', description: 'Lead capture: name, business type, phone, needs', status: 'todo', priority: 'high', project: 'sitemente', order: 3 },
|
||||
{ id: 't4', title: 'Real Estate demo page', description: 'Polished vertical demo for realtors', status: 'todo', priority: 'high', project: 'sitemente', order: 4 },
|
||||
{ id: 't5', title: 'Restaurant demo page', description: 'Polished vertical demo for restaurants', status: 'todo', priority: 'medium', project: 'sitemente', order: 5 },
|
||||
{ id: 't6', title: 'Clinic demo page', description: 'Polished vertical demo for clinics', status: 'todo', priority: 'low', project: 'sitemente', order: 6 },
|
||||
{ id: 't7', title: 'AI Widget live on landing', description: 'Embed widget on main landing page', status: 'todo', priority: 'high', project: 'sitemente', order: 7 },
|
||||
{ id: 't4', title: 'Real Estate demo page', description: 'Polished vertical demo for realtors', status: 'done', priority: 'high', project: 'sitemente', order: 4, completedAt: '2026-02-17' },
|
||||
{ id: 't5', title: 'Restaurant demo page', description: 'Polished vertical demo for restaurants', status: 'done', priority: 'medium', project: 'sitemente', order: 5, completedAt: '2026-02-17' },
|
||||
{ id: 't6', title: 'Clinic demo page', description: 'Polished vertical demo for clinics', status: 'done', priority: 'low', project: 'sitemente', order: 6, completedAt: '2026-02-17' },
|
||||
{ id: 't7', title: 'AI Voice Widget - Vapi integration', description: 'Embed voice widget with MiniMax brain', status: 'in_progress', priority: 'high', project: 'sitemente', order: 7 },
|
||||
{ id: 't8', title: '"How it works" flow', description: '3-step visual flow showing the process', status: 'todo', priority: 'medium', project: 'sitemente', order: 8 },
|
||||
{ id: 't9', title: 'FAQ accordion', description: '6-8 key questions for objection handling', status: 'todo', priority: 'medium', project: 'sitemente', order: 9 },
|
||||
{ id: 't10', title: 'Mobile responsive pass', description: 'Ensure all components work on mobile', status: 'todo', priority: 'high', project: 'sitemente', order: 10 },
|
||||
{ id: 't11', title: 'Loading states / transitions', description: 'Add skeleton loaders and smooth transitions', status: 'todo', priority: 'low', project: 'sitemente', order: 11 },
|
||||
{ id: 't12', title: 'Meta tags + SEO basics', description: 'Open Graph, Twitter cards, sitemap', status: 'todo', priority: 'medium', project: 'sitemente', order: 12 },
|
||||
{ id: 't13', title: 'Identify 2-3 local businesses', description: 'Target list for first pitches', status: 'todo', priority: 'high', project: 'sitemente', order: 13 },
|
||||
{ id: 't14', title: '1-pager PDF or demo link', description: 'Leave-behind for prospects', status: 'todo', priority: 'high', project: 'sitemente', order: 14 },
|
||||
{ id: 't15', title: 'First paying client', description: 'Close the first deal', status: 'todo', priority: 'critical', project: 'sitemente', order: 15 },
|
||||
{ id: 't11', title: 'SSL + Domain setup', description: 'SiteMente.com with Lets Encrypt SSL', status: 'done', priority: 'critical', project: 'sitemente', order: 11, completedAt: '2026-02-20' },
|
||||
{ id: 't12', title: 'Meta tags + SEO basics', description: 'Open Graph, Twitter cards, sitemap', status: 'done', priority: 'medium', project: 'sitemente', order: 12, completedAt: '2026-02-17' },
|
||||
{ id: 't13', title: 'Stripe payments', description: 'Payment processing for subscriptions', status: 'done', priority: 'high', project: 'sitemente', order: 13, completedAt: '2026-02-16' },
|
||||
{ id: 't14', title: 'CRM + Leads system', description: 'Lead capture and management', status: 'done', priority: 'high', project: 'sitemente', order: 14, completedAt: '2026-02-16' },
|
||||
{ id: 't15', title: 'Identify local businesses', description: 'Target list for first pitches', status: 'todo', priority: 'high', project: 'sitemente', order: 15 },
|
||||
{ id: 't16', title: '1-pager PDF or demo link', description: 'Leave-behind for prospects', status: 'todo', priority: 'high', project: 'sitemente', order: 16 },
|
||||
{ id: 't17', title: 'First paying client', description: 'Close the first deal', status: 'todo', priority: 'critical', project: 'sitemente', order: 17 },
|
||||
{ id: 't18', title: 'Voice AI - fix Vapi webhook', description: 'Get Vapi to call /api/site-mente/voice', status: 'todo', priority: 'critical', project: 'sitemente', order: 18 },
|
||||
|
||||
// === HolaCompi (paused) ===
|
||||
{ id: 'h1', title: 'HolaCompi core concept', description: 'AI ally for immigrants/consumers', status: 'paused', priority: 'medium', project: 'holacompi', order: 100 },
|
||||
{ id: 'h2', title: 'Cross-sell to SiteMente businesses', description: 'Route leads from HolaCompi to SiteMente clients', status: 'paused', priority: 'medium', project: 'holacompi', order: 101 },
|
||||
{ id: 'h2', title: 'Cross-sell to SiteMente businesses', description: 'Route leads to SiteMente clients', status: 'paused', priority: 'medium', project: 'holacompi', order: 101 },
|
||||
|
||||
// === Infrastructure & Security ===
|
||||
{ id: 'i1', title: 'Configure UFW firewall', description: 'Enable UFW, allow SSH (22) and web (80, 443)', status: 'todo', priority: 'high', project: 'infrastructure', order: 200 },
|
||||
{ id: 'i2', title: 'Restrict port 3000', description: 'Only allow localhost for dev server', status: 'todo', priority: 'high', project: 'infrastructure', order: 201 },
|
||||
{ id: 'i3', title: 'Set up SSH key-only auth', description: 'Disable password login, use keys only', status: 'todo', priority: 'high', project: 'infrastructure', order: 202 },
|
||||
{ id: 'i4', title: 'Enable automatic security updates', description: 'Configure unattended-upgrades', status: 'todo', priority: 'medium', project: 'infrastructure', order: 203 },
|
||||
{ id: 'i5', title: 'Set up automated backups', description: 'Daily backup to local + cloud (Dropbox/Google Drive)', status: 'todo', priority: 'high', project: 'infrastructure', order: 204 },
|
||||
{ id: 'i6', title: 'Configure Brave Search API', description: 'Enable web research for AI-powered searches', status: 'todo', priority: 'medium', project: 'infrastructure', order: 205 },
|
||||
{ id: 'i7', title: 'Configure Weather API', description: 'OpenWeatherMap for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 206 },
|
||||
{ id: 'i8', title: 'Configure News API', description: 'AI and market news for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 207 },
|
||||
{ id: 'i9', title: 'Connect Things 3 or Todoist', description: 'Import tasks for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 208 },
|
||||
{ id: 'i10', title: 'Hardening health check', description: 'Run full security audit and apply fixes', status: 'todo', priority: 'high', project: 'infrastructure', order: 209 },
|
||||
// === Infrastructure ===
|
||||
{ id: 'i1', title: 'Configure UFW firewall', description: 'Enable UFW, allow SSH and web', status: 'done', priority: 'high', project: 'infrastructure', order: 200, completedAt: '2026-02-13' },
|
||||
{ id: 'i2', title: 'Restrict port 3000', description: 'Only allow localhost for dev', status: 'done', priority: 'high', project: 'infrastructure', order: 201, completedAt: '2026-02-13' },
|
||||
{ id: 'i3', title: 'Set up SSH key-only auth', description: 'Disable password login', status: 'todo', priority: 'high', project: 'infrastructure', order: 202 },
|
||||
{ id: 'i4', title: 'Auto security updates', description: 'Configure unattended-upgrades', status: 'done', priority: 'medium', project: 'infrastructure', order: 203, completedAt: '2026-02-13' },
|
||||
{ id: 'i5', title: 'Set up backups', description: 'Daily backup to local + cloud', status: 'todo', priority: 'high', project: 'infrastructure', order: 204 },
|
||||
{ id: 'i6', title: 'Morning Brief cron', description: 'Daily 6am CET to Telegram', status: 'done', priority: 'high', project: 'infrastructure', order: 205, completedAt: '2026-02-20' },
|
||||
{ id: 'i7', title: 'Install trading skills', description: 'Coingecko, eth-readonly, x-twitter', status: 'done', priority: 'medium', project: 'infrastructure', order: 206, completedAt: '2026-02-20' },
|
||||
{ id: 'i8', title: 'Security health check', description: 'Run full audit and apply fixes', status: 'todo', priority: 'high', project: 'infrastructure', order: 207 },
|
||||
|
||||
// === ArabRedox ===
|
||||
{ id: 'a1', title: 'Brand colors from logo', description: 'Extract HEX codes from logo', status: 'done', priority: 'critical', project: 'arabredox', order: 300, completedAt: '2026-02-17' },
|
||||
{ id: 'a2', title: 'Upload logo to Hostinger', description: 'Upload to Horizons AI builder', status: 'done', priority: 'critical', project: 'arabredox', order: 301, completedAt: '2026-02-17' },
|
||||
{ id: 'a3', title: 'Apply brand colors', description: 'Set in Hostinger Styles', status: 'done', priority: 'high', project: 'arabredox', order: 302, completedAt: '2026-02-17' },
|
||||
{ id: 'a4', title: 'Hero section', description: 'Future of Health messaging', status: 'done', priority: 'high', project: 'arabredox', order: 303, completedAt: '2026-02-17' },
|
||||
{ id: 'a5', title: 'Science section', description: 'Arabic/English Redox explanation', status: 'done', priority: 'high', project: 'arabredox', order: 304, completedAt: '2026-02-17' },
|
||||
{ id: 'a6', title: 'Opportunity section', description: 'Financial Freedom messaging', status: 'done', priority: 'high', project: 'arabredox', order: 305, completedAt: '2026-02-17' },
|
||||
{ id: 'a7', title: 'Products section', description: 'Display Redox products', status: 'done', priority: 'medium', project: 'arabredox', order: 306, completedAt: '2026-02-17' },
|
||||
{ id: 'a8', title: 'Testimonials section', description: 'Customer stories', status: 'done', priority: 'medium', project: 'arabredox', order: 307, completedAt: '2026-02-17' },
|
||||
{ id: 'a9', title: 'Genesis story section', description: 'People over pharma', status: 'done', priority: 'medium', project: 'arabredox', order: 308, completedAt: '2026-02-17' },
|
||||
{ id: 'a10', title: 'Global reach section', description: '29+ countries', status: 'done', priority: 'medium', project: 'arabredox', order: 309, completedAt: '2026-02-17' },
|
||||
{ id: 'a11', title: 'Contact/Join pages', description: 'Join Mission + Shop Now', status: 'done', priority: 'high', project: 'arabredox', order: 310, completedAt: '2026-02-17' },
|
||||
{ id: 'a12', title: 'Point domain', description: 'ArabRedox.com to Hostinger', status: 'done', priority: 'high', project: 'arabredox', order: 311, completedAt: '2026-02-17' },
|
||||
{ id: 'a13', title: 'Launch & test', description: 'Final QA and go live', status: 'done', priority: 'critical', project: 'arabredox', order: 312, completedAt: '2026-02-17' },
|
||||
|
||||
// === Trading ===
|
||||
{ id: 'tr1', title: 'Trading infrastructure', description: 'API keys, monitoring, alerts', status: 'todo', priority: 'high', project: 'trading', order: 400 },
|
||||
{ id: 'tr2', title: 'Risk parameters', description: 'Position size, stop loss, take profit', status: 'todo', priority: 'critical', project: 'trading', order: 401 },
|
||||
{ id: 'tr3', title: 'Learn DopeTrades strategy', description: 'Watch videos, extract patterns', status: 'todo', priority: 'high', project: 'trading', order: 402 },
|
||||
{ id: 'tr4', title: 'Paper trading phase', description: 'Test without real money', status: 'todo', priority: 'high', project: 'trading', order: 403 },
|
||||
{ id: 'tr5', title: 'Live trading', description: 'Start with minimal SOL', status: 'todo', priority: 'medium', project: 'trading', order: 404 },
|
||||
];
|
||||
|
||||
// Lightweight project summary (used in UI, not stored)
|
||||
export interface ProjectSummary {
|
||||
id: ProjectType;
|
||||
name: string;
|
||||
|
||||
@@ -109,6 +109,21 @@ export function MorningBriefProvider({ children }: { children: ReactNode }) {
|
||||
"Crypto Treasury Meeting (2:00 PM ET)",
|
||||
],
|
||||
},
|
||||
// Load OpenClaw use cases from memory/cron
|
||||
openclowUseCases: (() => {
|
||||
try {
|
||||
const oc = localStorage.getItem("sitemente:openclaw-usecases");
|
||||
if (oc) return JSON.parse(oc);
|
||||
} catch (e) {}
|
||||
return {
|
||||
topUseCases: ["PR Review Automation", "Browser Shopping", "Wine Cellar CSV"],
|
||||
skillIdeas: [
|
||||
{ name: "Auto-Shop", selected: false },
|
||||
{ name: "Wine Cellar", selected: false },
|
||||
{ name: "Health Dashboard", selected: false }
|
||||
],
|
||||
};
|
||||
})(),
|
||||
};
|
||||
|
||||
setBriefs((prev) => {
|
||||
|
||||
@@ -40,6 +40,12 @@ export interface MorningBrief {
|
||||
topNews: string[];
|
||||
events: string[];
|
||||
};
|
||||
|
||||
// OpenClaw Use Cases (from daily research)
|
||||
openclowUseCases?: {
|
||||
topUseCases: string[];
|
||||
skillIdeas: { name: string; selected: boolean }[];
|
||||
};
|
||||
}
|
||||
|
||||
export const defaultBrief: MorningBrief = {
|
||||
@@ -55,5 +61,6 @@ export const defaultBrief: MorningBrief = {
|
||||
sentiment: 'neutral',
|
||||
topNews: [],
|
||||
events: [],
|
||||
}
|
||||
},
|
||||
openclowUseCases: { topUseCases: [], skillIdeas: [] },
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user