ZhenYi
418f9a5d8b
feat(rpc): migrate admin from Redis Pub/Sub JSON-RPC to Tonic gRPC
...
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
- libs/rpc/proto/: admin.proto with 8 RPC methods
- libs/rpc/admin/: tonic server impl (SessionAdminService), client
wrapper (AdminGrpcClient), types, generated/ tonic-prost build output
- libs/rpc/build.rs: tonic-prost-build two-step (proto -> message types
+ manual service defs)
- libs/rpc/lib.rs: module re-exports
- libs/session_manager/: session manager types used by admin service
2026-04-21 13:44:25 +08:00
ZhenYi
81e6ee3d48
feat(observability): Phase 1-5 slog structured logging across platform
...
Phase 1: add libs/observability crate (build_logger, instance_id);
remove duplicate logger init from 4 crates
Phase 2: Actix-web RequestLogger with trace_id; MetricsMiddleware + HttpMetrics
Phase 3: Git SSH handle.rs slog struct; HTTP handler Logger kv
Phase 4: AI client eprintln -> slog warn; billing ai_usage_recorded log
Phase 5: SessionManager slog; workspace alert slog 2.x syntax
2026-04-21 13:44:12 +08:00
ZhenYi
a527428b2d
fix(frontend): room streaming, dedup, reactions, uploads, and render perf
...
- room-context: dedup by id not seq (streaming seq=0); single atomic
setStreamingContent with delta detection; preserve reactions from WS
- MessageBubble: fix avatar lookup (members before IIFE); handleReaction
deps (no message.reactions); add reactions to wsMessageToUiMessage
- MessageInput: memoize mentionItems; fix upload path with VITE_API_BASE_URL
- IMEditor: warn on upload failure instead of silent swallow
- RoomSettingsPanel: sync form on room switch; loadModels before useEffect
- DiscordChatPanel: extract inline callbacks to useCallback stable refs
2026-04-21 13:43:38 +08:00
ZhenYi
a7e31d5649
feat(tests): add comprehensive Playwright integration tests for all API endpoints
...
- tests/01: add graceful login timeout handling with try/catch
- tests/02: migrate from isolated request.newContext to uiLogin + page.request pattern
- tests/03: workspace members, platform users CRUD, billing, alert-config
- tests/04: room messages, room list, repo list/detail APIs
- tests/05: project members CRUD, project detail, project billing
- tests/06: API token CRUD, logout, health check
- tests/07: AI provider/model/version/pricing CRUD
- tests/08: admin user CRUD, role CRUD
All tests use consistent checkBackendAvailable() + uiLogin() pattern with
graceful degradation (test.skip) when backend is unreachable.
2026-04-20 22:37:05 +08:00
ZhenYi
d1e5245e4e
fix: room attachment upload (Set Uuid::nil, NotFound with msg, Ok wrapper) and silence dead_code warnings
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 19:48:05 +08:00
ZhenYi
43e2d26ea2
feat(frontend): channel sidebar toggle, member list default closed, fix accent-fg colors
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 19:33:14 +08:00
ZhenYi
e43d9fc8bf
feat(frontend): add attachment_ids to message creation flow and types
2026-04-20 19:33:09 +08:00
ZhenYi
7736869fc4
feat(frontend): integrate ThemeSwitcher, restore custom palette on page load
2026-04-20 19:33:04 +08:00
ZhenYi
ce29eb3062
feat(frontend): Discord design system tokens and palette variables
2026-04-20 19:32:59 +08:00
ZhenYi
3eeb054452
feat(admin): auto-migrate admin DB tables on health check (audit_log, user, role, permission)
2026-04-20 19:32:38 +08:00
ZhenYi
33a4a5c6c9
feat(service): register project_tools in chat service, add AppStorage::read method
2026-04-20 19:32:29 +08:00
ZhenYi
b23c6a03c3
feat(room): add attachment_ids to messages, pass AppConfig, increase max_tool_depth to 1000
2026-04-20 19:32:22 +08:00
ZhenYi
dee79f3f7f
feat(room): add attachment upload/download API and attach files to messages
2026-04-20 19:32:11 +08:00
ZhenYi
a0ab16e6ea
feat(agent): pass AppConfig through ToolContext and fix tool call handling
2026-04-20 19:32:03 +08:00
ZhenYi
4e955d9ae3
chore: add mime_guess2, quick-xml serialize feature, and config crate to room lib
2026-04-20 19:31:52 +08:00
ZhenYi
4d5c62e46a
feat: add project tools (repos, issues, boards, arxiv, curl, members) and ThemeSwitcher component
2026-04-20 19:31:44 +08:00
ZhenYi
d4b0a9ae67
feat(room): read model_id in search results, register m20260420_000003 migration
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 16:08:35 +08:00
ZhenYi
3c8e9e3674
fix(migrate): use Statement::from_string in down method for SeaORM 2.0
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Rust Lint & Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 16:02:18 +08:00
ZhenYi
eba75ee359
fix(admin): ioredis 5.x username/password in redisOptions, add logging
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 15:50:51 +08:00
ZhenYi
779aaba575
feat: add service worker for push notifications and update room documentation
2026-04-20 15:45:51 +08:00
ZhenYi
6f6f57f062
feat(frontend): add push notification hooks, image compression, and update room/chat components
2026-04-20 15:45:47 +08:00
ZhenYi
8316fe926f
feat(service): add push and storage service modules, update project/user/workspace services
2026-04-20 15:45:40 +08:00
ZhenYi
0c64122b80
chore(frontend): update frontend build configuration
2026-04-20 15:45:35 +08:00
ZhenYi
26865f8dcf
chore(api): update dist.rs
2026-04-20 15:45:30 +08:00
ZhenYi
0e4631ec75
chore(api/user): update user notification endpoint
2026-04-20 15:45:26 +08:00
ZhenYi
26c86f0796
feat(api/room): add upload handler and update websocket handler
2026-04-20 15:45:22 +08:00
ZhenYi
cec8d486f1
feat(room): update room lib (connection, helpers, member, message, notification, reaction, room, search, service, types)
2026-04-20 15:45:18 +08:00
ZhenYi
1b863a9f65
chore(queue): update queue types
2026-04-20 15:45:13 +08:00
ZhenYi
2186960002
chore(models/users): update user notification model
2026-04-20 15:45:08 +08:00
ZhenYi
a2e8f5bf5b
feat(models/rooms): add room attachment model and update room message/notifications
2026-04-20 15:45:03 +08:00
ZhenYi
98e6f77341
feat(migrate): add room attachment, push subscription, and model_id migrations
2026-04-20 15:44:59 +08:00
ZhenYi
d09af7c326
feat(config): add storage configuration module
2026-04-20 15:44:54 +08:00
ZhenYi
ba15324603
chore: update dependencies (cargo + npm)
2026-04-20 15:44:49 +08:00
ZhenYi
05909dbde7
fix(admin): use named export Cluster from ioredis 5.x
...
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
Previous `import { default as Cluster }` caused runtime to get Redis
instance instead of Cluster, resulting in ECONNREFUSED errors.
2026-04-20 10:03:26 +08:00
ZhenYi
a9c51526b8
fix(admin): fix ioredis 5.x Cluster constructor type resolution
...
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
- Use `Cluster` as default export from ioredis (not RedisCluster named export)
- Import ClusterNode type and use explicit type annotation on nodes array
- Use `any` cast on Cluster constructor to bypass TS overload resolution issue
- Fix closeRedis return type to Promise<unknown>
2026-04-20 09:41:19 +08:00
ZhenYi
67e8c5edc7
fix(admin): use Redis as type annotation, RedisCluster as runtime value
...
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
Fix TypeScript type error with ioredis 5.x default export pattern
2026-04-20 09:32:10 +08:00
ZhenYi
09d5a5877f
fix(admin): upgrade ioredis cluster to 5.x RedisCluster API
...
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
- Replace deprecated Cluster with RedisCluster (ioredis 5.x breaking change)
- Extract username/password from cluster URLs for authentication
- Fix REDIS_CLUSTER_URLS to include all 3 master nodes with default user
2026-04-20 09:28:28 +08:00
ZhenYi
a3fcbab5d8
fix(admin): add /api/health to public paths to allow k8s probe
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 07:40:57 +08:00
ZhenYi
58bba357b0
fix(admin): quote image tag to prevent Helm format string parsing
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 01:33:34 +08:00
ZhenYi
3995579e56
fix(admin): add /api/health route for k8s readiness probe
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 01:02:37 +08:00
ZhenYi
19cad7e14a
config(admin): admin env
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 00:22:42 +08:00
ZhenYi
6d16cc8c18
config(admin): admin env
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-20 00:15:04 +08:00
ZhenYi
9ed56668dc
fix(admin): handle admin.env as both list and map in deployment template
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-19 23:21:53 +08:00
ZhenYi
82a928c96a
config(admin): admin env
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-19 22:39:41 +08:00
ZhenYi
8cf6415e15
config(admin): admin env
2026-04-19 22:39:25 +08:00
ZhenYi
3034c7f391
feat(admin): add TLS support to ingress with cert-manager and manual secret options
2026-04-19 22:35:31 +08:00
ZhenYi
e612043e5f
feat(room): auto-add new project members to all rooms
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-19 22:27:57 +08:00
ZhenYi
b8e5cbbb69
feat(admin): add Docker and Kubernetes deployment for admin panel
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-19 21:49:22 +08:00
ZhenYi
208b6ed84e
chore: remove deprecated docs (superseded by CLAUDE.md)
CI / Rust Lint & Check (push) Waiting to run
CI / Rust Tests (push) Waiting to run
CI / Frontend Lint & Type Check (push) Waiting to run
CI / Frontend Build (push) Blocked by required conditions
2026-04-19 20:49:21 +08:00
ZhenYi
fb91f5a6c5
feat(admin): add admin panel with billing alerts and model sync
...
- Add libs/api/admin with admin API endpoints:
sync models, workspace credit, billing alert check
- Add workspace_alert_config model and alert service
- Add Session::no_op() for background tasks without user context
- Add admin/ Next.js admin panel (AI models, billing, workspaces, audit)
- Start billing alert background task every 30 minutes
2026-04-19 20:48:59 +08:00