变更记录
什么是新的。
平台的每一个改进,随着它的出货。
· DaemonService
Add manual job trigger controller with duplicate execution guard
POST /api/daemon/trigger/{jobName} triggers any Quartz job immediately. Returns 409 if the job is already executing. GET /api/daemon/trigger/status returns running state of all jobs. GeoLiteSyncService now uses AtomicBoolean guard to prevent concurrent runs. Reverted cron back to weekly Sunday 3 AM.
· kamo-internal
Add support page with ticket list, analytics, and settings
· kamo-internal
Add support tool window with ticket creation, chat, and rating
· kamo-internal
Add shared status/priority badges and system message component
· kamo-internal
Remove old help system, add support nav items
Delete app/help/ and app/components/help/ directories. Add SupportButton to NavTop toolbar and Support menu item to NavPri sidebar navigation.
· kamo-internal
Add frontend types and API proxy routes
TypeScript interfaces for all support DTOs and 13 API proxy routes forwarding to MediaService for topics, tickets, and reporting endpoints.
· MediaService
添加支持票服务、REST控制器和STOMP中继器
执行支持票系统的MediaService后端: - 支持TopicService:用于Org范围支持主题的 CRUD - 支持指定服务:圆形robin(带有悲观锁),手动接车,管理员指定 - 支助通知服务:NATS代理通知 - 支持TicketService:售票生命周期(创建、状态、优先级、分配、重新分配、升级、费率) - 支助报告服务:概览和代理计量汇总 - 支助主计长:专题和罚单的REST终点 - 支助报告管理员:报告终点(要求报告) - 支持StompRelay控制器:NATS支持.agent.* 到STOMP中继器
· kamo-shared-library
添加支持票寄存器和 DTO
· kamo-shared-library
添加支持票 JPA 实体
· kamo-shared-library
添加支持票目和共享库的新权限
· kamo-internal
Add deep-linking support to notes page via query param
Support /notes?id={noteId} URL pattern so AI chat source links can navigate directly to a specific note. Opens the note in edit view when the page loads with an id parameter.
· AIService
Include clickable source links in RAG context for AI chat
Update RagClient to embed markdown links in the context sent to the AI model. KB articles link to /kb/{guid}, notes link to /notes?id={noteId}. Instructs the model to cite sources with clickable links so users can navigate directly to referenced content.
· kamo-internal
Add AI processing toggle to notes UI
Add aiProcessingEnabled field to Note types and toggle button in NoteEditor toolbar. Members can enable/disable AI processing per note, which controls whether note content is sent to the RAG pipeline for AI chat integration.
· APIService
Route /api/notes to KBService instead of SecurityService
Notes management has been moved from SecurityService to KBService.
· AIService
Pass memberId to RAG for note-aware AI chat
Add extractMemberId to SessionHelper. Update RagClient to send memberId in search requests so RAG returns both org KB articles and the member's own AI-enabled notes. Differentiate KB vs note sources in AI context injection.
· RAGService
Add note embedding support to RAG pipeline
Add NoteEventConsumer for NOTE_EVENTS NATS stream and NoteEmbeddingPipelineService for processing notes. Update Qdrant to store sourceType, memberId, noteId. Search now returns both KB articles and member-specific notes with proper access filtering.
· KBService
Add notes management with RAG integration
Move notes CRUD from SecurityService to KBService. Add note encryption, NATS event publishing for RAG pipeline, and AI processing toggle support. Notes with AI enabled are decrypted and sent to RAGService via NOTE_EVENTS stream.
· InitializerService
Add AI processing column and note embedding records table
Add AI_PROCESSING_ENABLED column to notes table and create NOTE_EMBEDDING_RECORDS table for tracking note RAG vectorization.
· kamo-shared-library
在注释数据模型中添加 AI 处理支持
向 Note 实体、 DTOs 和请求添加 aiProcessioned 字段。 创建用于跟踪的备忘Embedding记录实体和寄存器 注: RAG管道中的矢量化.
· kamo-internal
Use sized avatar variants — medium for profiles/emails, small for nav/lists
Add size parameter to fetchMemberAvatar (defaults to 'sm'). Email signatures, email sending, profile headers, posts, comments, and hex heads now request the medium (150x150) variant. NavTop and Interaction Center member list use small (50x50). Avatar Creator SVG avatars pass through unchanged. All areas support both photo and Avatar Creator avatar types.
· SecurityService
Support multi-size photo avatar uploads and crop endpoint
Update uploadPhotoAvatar to accept optional sized variants (fileSm, fileMd, fileLg) stored with suffix naming ({hash}_sm.png, etc). Add PUT /{id}/crop endpoint for re-cropping existing photos. GET endpoints now return url pointing to _sm variant and urlOriginal for the full image. Delete removes all 4 file variants.
· kamo-internal
Add photo crop tool with react-easy-crop and multi-size avatar storage
Replace the old PhotoCropDialog with an interactive crop tool using react-easy-crop. When uploading or editing a photo, users now select a square crop area (with circle guide) and the system generates 4 versions: original, small (50x50), medium (150x150), and large (350x350). Backend URL responses now point to the _sm variant by default so all avatar displays across the project use the optimized small version.
· kamo-internal
Load countries from CountryType enum, add flag icons to geo-blocking
Countries route now proxies to /api/security/countries (CountryType enum) instead of **************** (empty GeoLite table). Adds react-world-flags for country flag display in the Autocomplete dropdown and blocked countries table.
· kamo-internal
Rewrite Access Blocks help tips for clarity
Explains all four sections (whitelist, blacklist, temp blocks, geo-blocking) in plain language. Adds a CIDR range guide with examples showing /32, /24, /16, /8 and what each means in terms of addresses covered. Includes practical tips like whitelisting your own IP first.
· InitializerService
Add RoleRightsSyncRunner to backfill missing role rights
When new RoleRightType entries are added to the enum, existing roles don't have OrgRoleRight entries for them. This runner checks all roles on startup and adds missing entries — GRANTED for admin roles, defaultSetting for others. Safe to re-run, only inserts missing entries.
· kamo-internal
Add access security system frontend
13 API proxy routes, access check module with CIDR matching, proxy.ts enforcement integration. Reworks AccessBlockManager (real API + geo-blocking), creates SystemAccessLogsManager (stats, filters, virtualized log table, detection rules config), reworks AccountActivityTab (real API + admin actions: force logout, lock/unlock, block IP). Updates security page tab from suspicious-behavior to system-access-logs.
· DaemonService
为 MaxMind IP 对位置数据库添加 GeoLite2 同步任务
下载 MaxMind 的Quartz 排期工作( 每周星期天 3 AM) GeoLite2-City-CSV, 剖析 IPv4/IPv6 个块和位置, 装入 进行原子表交换 包括SHA-256DUP, 拉链滑行保护 同步状态跟踪 添加 *** 秘密提及K8s的部署.
· APIService
Add access enforcement filter for IP-based access control
Redis-backed servlet filter that evaluates whitelist/blacklist/temp-block rules on every inbound request. Adds spring-boot-starter-data-redis dependency and Redis config. Fails open if Redis is unavailable.
· SecurityService
Add access security system backend
8 new services (AccessCacheService, GeoLiteService, GeoLiteSyncService, AccessRuleService, GeoBlockService, AccessLogService, DetectionRuleService, SuspiciousDetectionService) and 6 new controllers for IP whitelist/blacklist, geo-blocking, suspicious behavior detection, system access logging, and member security actions. Integrates login/logout event logging into SecurityController. Adds @EnableAsync and geolite/access config.
· InitializerService
Add access security system schema migration
Creates 7 new tables (org_access_rules, org_geo_block_rules, org_suspicious_detection_rules, system_access_logs, geolite_blocks, geolite_locations, geolite_sync_status) plus 2 staging tables for GeoLite shadow-table swap strategy. Includes all indexes and constraints.
