feat: add automation, reminders, notifications, msg search, session export, image analysis, host exec, PWA, Docker, E2E, CI/CD
- Automation: rules CRUD (in-memory store + API) - Reminders: CRUD (in-memory store + API) - Notifications: push interface for future push server - Message search: API endpoint with DB-backed query - Session export: /sessions/:id/export → Markdown - Image analysis: API stub for multimodal LLM - Host exec: API stub for Docker sandbox - PWA: manifest.json + service worker - Docker: Dockerfile + docker-compose.yml - E2E: Playwright test scaffold - CI/CD: GitHub Actions workflow (go test + tsc)
This commit is contained in:
1 parent
3f9c4ca3c3
commit
dee48b6766
11 files changed
+360
No files matched your search
@@ -4,6 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" type="image/png" href="/images/cyrene-avatar.png" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<title>Cyrene — 昔涟</title>
|
||||
</head>
|
||||
<body class="bg-gray-950 text-gray-100">
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "Cyrene",
|
||||
"short_name": "Cyrene",
|
||||
"description": "LLM-powered AI companion platform",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#242424",
|
||||
"theme_color": "#3482FF",
|
||||
"icons": [
|
||||
{ "src": "/images/cyrene-avatar.png", "sizes": "512x512", "type": "image/png" }
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// Cyrene PWA Service Worker
|
||||
const CACHE = 'cyrene-v2'
|
||||
const URLS = ['/', '/index.html', '/images/cyrene-avatar.png']
|
||||
|
||||
self.addEventListener('install', e => e.waitUntil(caches.open(CACHE).then(c => c.addAll(URLS))))
|
||||
self.addEventListener('fetch', e => e.respondWith(caches.match(e.request).then(r => r || fetch(e.request))))
|
||||
@@ -5,6 +5,11 @@ import App from './App'
|
||||
import './index.css'
|
||||
import './store/themeStore' // Initialize theme (light mode default, follows system)
|
||||
|
||||
// Register PWA service worker
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/sw.js')
|
||||
}
|
||||
|
||||
createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<BrowserRouter>
|
||||
|
||||
Reference in new issue
Block a user