ZhenYi
2d2349a06b
config(admin): adminrpc port
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-22 22:50:09 +08:00
ZhenYi
587dc06e8c
chore(api): regenerate TypeScript SDK with new user endpoints
...
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
New endpoints: GET /api/users/{username}/activity, GET /api/users/{username}/stars,
GET /api/users/{username}/following. Updated types: UserActivityItem, UserActivityResponse,
UserStarsResponse, RepoStarItem, ProjectFollowItem, UserCard.
2026-04-22 22:39:19 +08:00
ZhenYi
80e2201b8b
feat(user): add Activity, Following, Stars, Security tabs to profile page
...
- Backend: user_activity service (user_activity_log + project_activity)
- Backend: stars service (repo_star + project_follow)
- Backend: user_get_following_list (with is_following_me mutual check)
- Frontend: Tab navigation on /user/{username} with Overview/Activity/Following/Stars/Security
- Frontend: UserActivity timeline, FollowingList grid, StarsList, SecurityTab (SSH keys + PATs)
2026-04-22 22:39:14 +08:00
ZhenYi
f67c788cbe
feat(gRPC): migrate admin RPC from Redis Pub/Sub to Tonic gRPC
...
- libs/rpc/admin: tonic-prost generated server + client wrappers
- apps/adminrpc: standalone binary with all 8 admin RPC methods
- Redis Pub/Sub JSON-RPC code removed from admin module
- libs/agent: add React agent loop for ReAct pattern
- proto/admin.proto: updated with list_workspace_sessions, is_user_online
2026-04-22 22:39:06 +08:00
ZhenYi
850a5392ce
fix(admin): use AdminGrpcClient instead of direct fetch, add model capability table
...
- Replace direct REST fetch with AdminGrpcClient for AI model/provider/pricing routes
- Add model_capability table to sync route
- AdminGrpcClient handles all admin RPC calls with workspace_id routing
2026-04-22 22:38:59 +08:00
ZhenYi
aef5280ae8
fix(projects): include project_members when listing user projects
...
Users who accepted a project invitation could not see that project
on their /user/{username} page because get_user_projects only queried
projects where created_by == user_uid, ignoring project_members entries.
Now unions created_projects and member_projects with privacy filtering.
2026-04-22 22:38:52 +08:00
ZhenYi
16b681c55b
infra(admin): add ADMIN_RPC_URL env var and adminrpc to push script
2026-04-22 20:56:10 +08:00
ZhenYi
d193c6113d
refactor(admin): env.ts formatting, default ADMIN_RPC_URL namespace fix
2026-04-22 20:55:06 +08:00
ZhenYi
b5cafb9678
fix(admin): touchSession persist state, platform session prefix to user:, middleware pass permissions header
2026-04-22 20:54:24 +08:00
ZhenYi
bf25b9ac71
feat(admin): add daily-report recipients GET/POST route
2026-04-22 20:54:03 +08:00
ZhenYi
da96cdd236
feat(admin): daily-report support custom basic_api_url for AI endpoint
2026-04-22 20:53:43 +08:00
ZhenYi
c41f4efc04
fix(admin): workspace_billing_history user column + rbac listUsers pagination params order
2026-04-22 20:53:22 +08:00
ZhenYi
623faf8c55
fix(admin): project_members use project_uuid/user_uuid column names not SeaORM field names
2026-04-22 20:53:02 +08:00
ZhenYi
4d4a0dc886
fix(admin): platform/users SELECT uid not id, UPDATE WHERE user not user_id
2026-04-22 20:52:39 +08:00
ZhenYi
0a02e14bda
fix(admin): platform/ai missing await on 4 queries
2026-04-22 20:52:17 +08:00
ZhenYi
e6a5828d14
fix(admin): audit-logs count query params mismatch
2026-04-22 20:51:56 +08:00
ZhenYi
954628a3b9
fix(admin): Member.userId → uid type fix
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-22 11:03:10 +08:00
ZhenYi
a705bdc938
fix(frontend): various UI display and type corrections
...
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
- workspaces/[id]: Member type fix
- projects/[id]: display adjustments
- platform/sessions: session display improvements
- env.ts: env type corrections
- src/: frontend page and types updates
2026-04-22 10:31:33 +08:00
ZhenYi
962bf0312d
feat(observability): Phase 6 OTLP tracing + Prometheus metrics endpoint
...
OTLP tracing:
- libs/observability/otlp.rs: SdkTracerProvider via HTTP/proto OTLP exporter
- libs/observability/tracing_middleware.rs: Actix-web span with trace_id propagation
- libs/observability/tracing_fmt.rs: JSON fmt + registry.try_init for layered init
- libs/rpc: gRPC method spans via info_span
- libs/agent, libs/room, libs/service, libs/api: structured tracing throughout
Prometheus metrics:
- libs/observability/prometheus_exporter.rs: /metrics HTTP handler + metrics crate
- libs/observability/metrics_middleware.rs: HttpMetrics middleware + AtomicU64
- libs/observability/redis_metrics.rs: Redis counter poller via RedisMetrics
- libs/room/metrics.rs: RoomMetrics (connections, messages, presence counters)
Config env vars: APP_OTEL_ENABLED, APP_OTEL_ENDPOINT, APP_OTEL_SERVICE_NAME
2026-04-22 10:27:54 +08:00
ZhenYi
86c7810fd9
feat(admin): add node-cron daily scheduler for reports
...
- node-cron scheduler runs at 00:00 UTC every day
- Custom server.js auto-starts cron on npm start
- isRunning lock prevents concurrent report runs
- cron-initialize API for manual cron control
- Updated npm start to use server.js entry point
2026-04-22 10:23:21 +08:00
ZhenYi
8cf0e22893
feat(admin): daily platform email reports with AI analysis
...
- Admin API routes: recipients CRUD, AI/SMTP config, report generation
- UI page: dual-tab management (recipients + AI/SMTP settings)
- Auto table creation via CREATE TABLE IF NOT EXISTS
- AI summary via OpenAI Chat Completions API (stored in DB, not env)
- Direct SMTP sending via Node.js built-in net/tls (no nodemailer)
- Report includes: new users, rooms, commits, messages, top room + AI summary
- Sidebar navigation added for /admin/daily-report
2026-04-22 10:23:00 +08:00
ZhenYi
bb127d4dbb
feat(adminrpc): add Docker image, Helm chart, and build/deploy scripts
...
- docker/adminrpc.Dockerfile: minimal debian runtime image
- deploy/templates/adminrpc-deployment.yaml: Deployment (replicas=1,
ClusterIP svc on 9090, tcpSocket readiness probe)
- deploy/values.yaml: adminrpc section with defaults
- scripts/build.js: add adminrpc to RUST_SERVICES
- scripts/deploy.js: add adminrpc to SERVICES + helm setValues
2026-04-21 23:14:46 +08:00
ZhenYi
fbd228f17e
feat(adminrpc): new standalone binary for admin gRPC service
...
Separate binary for Kubernetes internal admin RPC communication
(SessionAdmin service on port 9090). Includes:
- Redis cluster pool via session_manager
- OTLP tracing with env-driven configuration
- Tracing subscriber init (JSON to stderr)
- Graceful startup with connection verification
2026-04-21 23:06:11 +08:00
ZhenYi
4aaee59fa4
fix(app): PrometheusHandle must be Data-wrapped before Fn closure capture
...
PrometheusHandle was moved into the HttpServer Fn closure but Fn
closures require Clone (not FnOnce). Wrap in web::Data before
cloning into the closure.
2026-04-21 23:05:54 +08:00
ZhenYi
beae9bdea0
feat(observability): Phase 6 OTLP tracing for gRPC + config helper
...
- libs/rpc: slog → tracing; 8 gRPC methods instrumented with
info_span + Instrument for W3C trace propagation
- libs/session_manager: slog → tracing dependency
- libs/config: add redis_url() singleton helper for adminrpc
2026-04-21 23:05:37 +08:00
ZhenYi
1e6ba34827
fix(project): invitation accept always 404 due to wrong column filter
...
Column::Project was used twice instead of Column::User in the query,
causing the filter to be project_id = X AND project_id = user_uid
which never matches.
2026-04-21 23:05:18 +08:00
ZhenYi
4d3afc5e71
fix(frontend): Discord UI polish, room streaming and kanban improvements
...
- DiscordChatPanel: update threading layout, message list padding
- DiscordMemberList: role colors, online status indicators
- RoomThreadPanel, MessageBubble, MessageInput: UI refinements
- IMEditor: editor state improvements
- KanbanCard, KanbanColumn: card layout, column styling
- room-context.tsx, room-ws-client.ts, ws-protocol.ts: streaming
- pull-request-detail.tsx: PR review improvements
- Add RoomPinPanel component
2026-04-21 22:31:48 +08:00
ZhenYi
aeb765d2ac
chore(deps): replace slog with tracing in workspace Cargo.toml and crates
...
- Cargo.toml: update root dependencies
- libs/agent/Cargo.toml: slog -> tracing
- libs/api/Cargo.toml: slog -> tracing
- Cargo.lock: update lockfile
2026-04-21 22:31:30 +08:00
ZhenYi
c850adb4eb
refactor(api,agent): migrate libs/api room ws and libs/agent client to tracing
...
- api/room/ws.rs, ws_universal.rs: replace slog macros with tracing
- agent/client.rs: replace slog macros with tracing for AI retry logs
2026-04-21 22:31:13 +08:00
ZhenYi
236aebe4ea
refactor(apps): migrate app, gitserver, git-hook, email from slog to tracing
...
- apps/app: remove mod logging, replace init_tracing_subscriber() call,
remove slog macros from main.rs, remove logging.rs
- apps/gitserver: remove slog usage from main.rs
- apps/git-hook: remove slog from main.rs
- apps/email: remove slog from main.rs
2026-04-21 22:30:01 +08:00
ZhenYi
e99feb236b
refactor(core): migrate session_manager, email, rpc from slog to tracing
...
- session_manager/manager.rs: remove slog::Logger field, update new()
and with_config() to remove log parameter
- email/lib.rs: remove slog::Logger from AppEmail::init()
- rpc/admin/server.rs: remove slog::Logger from serve() and spawn(),
replace with tracing::info!/error!
2026-04-21 22:29:43 +08:00
ZhenYi
0c1a9ddf98
refactor(git): migrate libs/git from slog to tracing
...
- Remove all use slog::* imports and log: slog::Logger fields
- ssh/handle.rs: replace slog macro chains with tracing::{info!, warn!,
error!, debug!}; remove log field from GitSshHandle
- ssh/authz.rs, ssh/mod.rs, ssh/server.rs: remove slog Logger fields
- http/: auth.rs, handler.rs, mod.rs, routes.rs: remove slog usage
- hook/: pool worker, sync modules, webhook_dispatch.rs: remove slog
2026-04-21 22:29:26 +08:00
ZhenYi
9a03cded8d
refactor(queue): migrate from slog to tracing
...
- Remove all slog::Logger imports and log fields from RedisPubSub,
MessageProducer structs
- Remove log parameter from MessageProducer::new()
- Replace slog::info!/warn!/error! with tracing equivalents
- worker.rs: remove log: slog::Logger from start(), room_worker_task(),
start_email_worker(), run_once(), email_run_once()
2026-04-21 22:29:09 +08:00
ZhenYi
57779822dc
refactor(room): migrate from slog to tracing + upgrade metrics to 0.22
...
- Remove all use slog::* imports and log: slog::Logger fields
- Replace slog macros with tracing::{info!, warn!, error!, debug!}
- metrics.rs: upgrade metrics 0.21→0.22, remove register_*! macros,
use functional API: metrics::gauge!(), metrics::counter!(),
metrics::histogram!(), metrics::describe_gauge!() etc.
- RoomMetrics: all fields now use functional metrics API, dynamic
room_id labels passed as owned String to avoid lifetime issues
- RoomService: remove pub log: slog::Logger field
- connection.rs: remove log from subscribe_room_events,
subscribe_project_room_events, subscribe_task_events_fn
2026-04-21 22:28:52 +08:00
ZhenYi
773da34fab
refactor(service): migrate auth, git service, agent from slog to tracing
...
- Remove all use slog::* imports and slog::Logger fields/parameters
- Replace slog::info!/warn!/error! with tracing::info!/warn!/error!
- AppService: remove pub logs: slog::Logger field, update callers of
AppEmail::init(), MessageProducer::new(), RoomService::new(),
start_email_worker(), start_room_workers()
- auth/: captcha, email, login, logout, password, register, rsa, totp
- git/: archive, blame, blob, branch, commit, contributors, diff,
refs, star, tag, tree, watch
- agent/: billing (ai_usage_recorded), code_review, pr_summary, sync
- project/activity.rs, workspace/alert.rs
2026-04-21 22:28:33 +08:00
ZhenYi
b4024aa690
feat(observability): Phase 6 OTLP tracing + Prometheus /metrics endpoint
...
- Add HTTP OTLP exporter (opentelemetry-otlp 0.31) via SdkTracerProvider +
BatchSpanProcessor + tracing_opentelemetry layer
- Add Prometheus /metrics handler via metrics-exporter-prometheus 0.13
- Replace slog with tracing throughout: HttpMetrics, TracingSpanMiddleware
- Replace .init() with .try_init() to allow OTLP layer registration after
init_tracing_subscriber()
- otlp.rs: SpanExporter::builder().with_http().with_endpoint(),
Resource::builder().with_service_name(), .with_attribute(KeyValue::new(...))
- prometheus_exporter.rs: install_recorder(), prometheus_handler(),
spawn_http_metrics_poller()
2026-04-21 22:28:15 +08:00
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