변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· kamo-shared-library
정확한 배치에 대한 저장소 쿼리, 페이지 목록, 영수증
· kamo-shared-library
DateLastViewed 에 MediaSessionMember 에 영수증 타임스탬프
· kamo-shared-library
Add isAccessRevoked flag for per-attachment 액세스 제어
· kamo-marketing
Distinguish actively-translating vs queued messages
The translation queue was already sequential, but every queued bubble rendered "Translating…". Now the single in-flight message shows "Translating…" with a pulsing dot and the rest show "Pending Translation…" with a static dot, so the visitor can see the queue progressing.
· kamo-internal
Distinguish actively-translating vs queued messages
The streaming queue was already strictly sequential (one fetch at a time), but every queued message rendered "Translating…" because they all shared the same pendingTranslation flag. Split that into two states: the single message currently in flight shows "Translating…" with a pulsing dot, all the other queued messages show "Pending Translation…" with a static dot. Live (just-arrived) messages are translated alone and start in the active state.
· kamo-marketing
Show error icon when a message fails to translate
When the per-message translate call returns translated:false, errors out, or times out, the chat bubble now renders an AlertTriangle icon in red with tooltip "Failed to translate message." instead of silently leaving the bubble in the original language.
· kamo-internal
Show error icon when a message fails to translate
When the per-message translate call returns translated:false, errors out, or times out, the chat bubble now renders a small red ErrorOutline icon in place of the translate badge with tooltip "Failed to translate message." instead of silently leaving the bubble in the original language. The flag is reset whenever the user picks a new language so a re-attempt can succeed without the stale error sticking around.
· kamo-marketing
Stream translations newest-first for visitor history
When the visitor lands on a non-English locale and the support chat has existing English messages, every bubble flagged needsTranslation by the backend now shows a "Translating…" placeholder while a streaming queue fills them in one at a time, starting from the newest message. A generation counter prevents stale queues from clobbering current state.
· kamo-internal
Stream message translations newest-first on language switch
When the user picks a new language (or opens an existing chat in a language different from the messages' source), every bubble that needs translation immediately renders a "Translating…" placeholder and the translations stream in one at a time starting from the most recent message and working backwards. This includes the user's own past messages — anything authored in a different language than the viewer is now translated. A generation counter cancels in-flight queues if the user changes language again.
· kamo-marketing
Auto-translate visitor and agent messages
Live agent replies arriving in a language other than the visitor's URL locale now show a "Translating…" bubble while the TranslateService call resolves, then swap to the translated text with a Languages badge whose tooltip shows the source language and the original message. Visitor messages are tagged with the URL locale on send so the agent's chat can translate them into the agent's profile language. Messages loaded into history are translated up front via the new ?lang=<locale> query param on /api/chat/support.
· kamo-internal
Translate chat messages into the viewer's language
Adds a "My Language" flag picker in NavTop (left of the email tool, separated by a vertical rule). Selecting a language writes back to Member.language and syncs the locale cookie so the entire UI switches; it also broadcasts an event that any open ChatBox uses to re-fetch its history in the new language. ChatBox now fetches messages with ?lang=<locale>, renders translated bubbles with a small Translate badge whose tooltip shows the original text and source language, and shows a "Translating…" placeholder for live messages until the TranslateService call returns. The send path tags every outbound message with the author's locale so other viewers can translate it on demand.
· APIService
Proxy support-message translate endpoint
Adds a passthrough route for the new MediaService endpoint that translates a single support-chat message into the visitor's URL locale. The marketing-side chat widget hits **************** which the gateway now forwards to MediaService with the standard public-chat auth and rate-limit checks.
· MediaService
On-demand translation for chat and support messages
Captures the source language for every chat / support message and adds an optional ?lang=XX param on the message-fetch endpoints plus a per-message POST /translate endpoint. MediaService now talks to TranslateService via TranslationServiceClient, and MessageTranslationService caches results in MediaObjMsgTranslation so the same translation is never paid for twice. Wires the same flow into the public-chat (visitor) path: visitors send their URL locale as sourceLanguage, and the agent / visitor sides each pull translations into their own preferred language. Adds the translate-service secret to the MediaService deployment so the new client can authenticate.
· kamo-shared-library
Translation cache for chat messages
Adds the MediaObjMsgTranslation entity (one row per (message, language) pair) and an optional sourceLanguageId column on MediaObjMsg so chat messages can be translated on demand and re-served instantly to other viewers in the same language. ChatMessageDto carries sourceLanguageId so live recipients know whether they need to translate. MediaService.createMessage gains an overload that takes the authoring language, falling back to Member.language for legacy callers.
· kamo-internal
Personal + Chat/Docs/Notes/KB/HRS 추가 이름 *
/settings 인덱스는 모든 것을 비admins에 아무 단면도도 보여주지 않았습니다 기존 섹션은 admin right (CONFIGURE SYSTEM, MANAGE * SETTINGS, MANAGE ACCESS RULES). 일반 팀 멤버 지원 권리는 정확히 3 카드 (Topics, Analytics, Scheduled 지원) 및 아무것도 다른. 항상 보이지 않는 개인 섹션 추가 (My Profile, Audio & Video, 계정 활동 및 계획 & 아이 orgs에 빌링) 그 링크 viewer's own /settings/member/<myId> 탭 — 그래서 설정은 비어 있지 않습니다, org-level 권한에 관계없이. 또한 이전에 정해진 채팅 / Docs / 메모 / 지식 Base / HRS 섹션 - 해당 org 기능 플래그에 각 게이트 그리고 적절한 MANAGE * SETTINGS 권리 - 전용 일치 /settings/features/<app> 페이지는 이미 해당 앱에 존재합니다.
· kamo-internal
Viewport 종횡비에 근거를 둔 Rotate 목표 오프닝
목표 프레임은 이제 atan2(viewportH, viewportW)에 의해 기울입니다. 오른쪽은 viewport 대각선을 목표로 - 16 : 9 모니터 오프닝 점 동쪽의 남쪽 ~29°; 초상화를 위해 그것은에 더 가까운 점 남. 읽는 방법 사용자가 자연스럽게 머리에서 대량의 왼쪽 코너로 다시 화면. 물리학 : 목표 충돌이 골반에서 실행됩니다. 각 던짐 머리의 center+velocity는 국부적으로 구조로, 기존하는 AABB 자전합니다 축 정렬 벽에 대한 충돌은 변경되지 않습니다, 다음 푸시-아웃 및 각측정속도 반사는 세계 공간으로 돌아갑니다. 더 보기 점수 영역 체크도 로컬 coords에서 수행 그래서 머리 정말 (rotated) 계속 점수. 비주얼: SVG 프레임 + 엔트리 사이드 글로우 라이브 내부 회전 컨테이너; 축하 오버레이 (GOAL! / MISS!) 및 REMOVE 캡션 회전 밖에 앉아 그래서 텍스트는 읽기 쉬운 유지. 미스 샤크 0 대신 기본 각도 주위에 oscillates. Goal 각은 국가 setter를 통해 viewport 크기를 recomputed, 평행한 ref 그래서 던지는 RAF는 최신 가치를 각 구조를 읽습니다 콜백을 재생하지 않고.
· kamo-internal
점수/종료 축하와 함께하는 Throw-to-remove 목표
132×132 목표 구조는 머리가 안으로 있을 때마다 왼쪽에 나타납니다 솔로 드래그 또는 활성 스크롤, 코너에서 오프셋 56px 그래서 머리는 할 수 있습니다 과거를 놓거나 뒤에. 3개의 단단한 벽 (위, 왼쪽, 바닥) 행위로 탄력 있는 되튐 표면 (0.65 재구성); 오른쪽 열려 있습니다 이름 * 후면 패널의 대담한 빨간색 X는 "remove" 의도를 만듭니다. unmistakable 및 pulsing 입장 지시자는 열려있는 측을 표시합니다. 던진 헤드 센터가 점수 영역으로 교차하면 제거됩니다. 던지기 지도에서, underlying 공구 창은 닫힙니다 도구:닫고, 머리는 removeHead를 통해 제거됩니다. 녹색 광선 플래시, 18-particle 금/오렌지 파열, 그리고 끓는 GOAL! 오버레이 점수에 불. 던져진 머리가 단지 어떤 목표 벽을 떨어뜨릴 때 (350ms에 의해 부과하므로 단일 실패는 스팸 이벤트가되지 않습니다), 목표 빨간색과 MISS를 흔들어! 오버레이 펀치에. 안정성: 목표 충돌은 완전히 던짐 RAF 루프 내부에 살고 (봄 체계 contention 없음), 그리고 HexHeadGoalZone는 모두를 소유합니다 축하 국가 내부 - 엔진 만 불 이벤트. 제품 정보 첨가제 기능; 비 던지기 드래그 / 드롭 경로는 변경되지 않습니다.
· kamo-internal
풀테이블 충돌을 가진 Throw 물리학과 혜성
던짐 임계값을 지나서 머리를 흔들어 보세요. viewport 명시적 물리 (friction, edge bounce, 머리-vs-head elastic) 충돌). 슬로우 드롭은 여전히 출시되는 곳을 정확히 착륙합니다. 머리는 아케이드 스타일의 불길은 다음과 같습니다. Throw는 두 릴리스 속도 (> = 650 px / s의 평균에 의해 게이트 마지막 ~110 ms) 및 총 드래그 거리 (> = 30 px) 그래서 빠른 정확한 re-position 결코 실수로 던져. Magnitude는 안으로 모자를 씌웁니다 3200 px/s는 가장자리 탐지 찰흙 탬프를 지킵니다. 던짐 RAF 루프 드라이브 모션 값은 .set()를 통해 직접 쓰기 — 비행 중에 Framer-motion 스프링을 우회하고 - 자기 정지 때 모든 머리는 정지 속도 임계값의 밑에 하락합니다. 장소HomeCluster 및 softPushCluster는 현재 던진 지도에서 건너뛰기 봄 체계는 물리학 integrator 결코 싸우지 않습니다. Struck heads detach from any cluster, 솔로 클러스터에 홍보, 충돌에 의해 임펄스로 시뮬레이션을 결합. 트레일 렌더링 : 최근의 Radal-gradient embers와 SVG 레이어 위치, Mix-blend-mode : 첨가제 광택, 단일 CSS blur의 화면 부드러움을 위한 여과기 — arcade 미적, 가까운 zero CPU 비용.
· kamo-internal
Server-minted OTK를 사용하여 새로운 org로 전환하십시오
POST /api/security/org에 의해 반환된 otk를 따르십시오 /api/security/enter-as 왕복. 서버는 이제 신선한 소유자를 mints org 생성의 일부로 세션, 그래서 포스트 생성은 새로운에 리디렉션 org's /validate is deterministic - 도메인 생성과 인종 없음, 아니 부모의 세션에 대한 제작자를 떠나는 침묵의 enter-as 실패.
· SecurityService
민트 소유자 *** + OTK에 org 생성
CreateOrganizationOwner 후, 신선한 *** 새로운 소유자에 바인딩 TeamMember는 id/members와 함께 OTK를 돌려줍니다. 이것 없이 작성자는 부모의 세션에 머물다 — 한정된 권리와 isOrganizationOwner=false — 그래서 새로운 아이 org의 설정 페이지가 나타납니다 문지르고 계획 & 빌링은 수동으로 재입력 될 때까지 숨겨집니다.
· kamo-shared-library
셀프 - 치유의 시작에 COMP 주문
@PostConstruct에서 모든 APPROVED COMP 주문을 스캔하고 어떤 것을 제공 accountSubscription이 부족합니다. Idempotent - find-or-create는 안전한 것을 의미합니다. 반복적으로 실행하십시오.
· kamo-internal
내 사업 이전의 왼쪽에 위치 상태 드롭 다운 이동
오른쪽 액션 바에서 왼쪽 환영 섹션으로 상태를 찾습니다. 인사 분리기와 내 비즈니스를 나눕니다. 이전 아이콘 버튼에서 상태를 분리하는 이제 수직 규칙을 제거합니다.
· kamo-internal
TargetOrganizationId를 SubscriptionOrder 유형 및 createSubscription에 추가하십시오 이름 *
· SecurityService
승인 된 주문에서 COMP 구독을 활성화하기 위해 프로비저닝-comp 엔드포인트 추가
****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 이름 * *********** 다음 EntitlementService를 통해 대상 org에 대한 제목을 유효성 검사합니다.
· kamo-shared-library
COMP 주문 승인 자동 감독 AccountSubscription 및 라이센스 할당
- SubscriptionOrder: TargetOrganization (orgs에 가능한 FK)를 추가하십시오 - *********** targetOrganizationId 문자열 추가 - AccountRepository: add findByPrimaryMember Id 계정 조회 - SubscriptionService: 빌링 저장소를 주사합니다; ProvidCompSubscription create/upserts *************** SubscriptionMember, 그리고 ACTIVE AccountLicense for the target-org member; approveOrder는 COMP 지불 방법을 위해 그것을 호출합니다; 기존의 APPROVED COMP 주문의 retroactive 프로비저닝을 위한 새로운 enableCompOrder
· kamo-internal
Click-to-open with action popover + 크기 컨트롤 교체
Hex head를 클릭하시면 광택 있는 glass-morphism popover를 엽니다. 즉시 도구 창을 열어 대신 상황에 대한 행동. 이름 * 채팅 헤드 노출 : 채팅 열기, 계정보기, 이메일, 회의에 초대, Call ( 양측이 등록 된 VOIP 확장); 도구 헤드 <toolName>를 엽니다. 크기 sub-menu는 사용자가 작은/중/중/을 줍습니다 그 특정 머리에 대 한 큰 (새를 통해 회원 당 생산 memberUiPreference store)와 모든 것에 영향을 미치는 글로벌 스케일 슬라이더 이 기계에 hex 머리 (localStorage에서persisted). 지금 도구 창 viewport에 width/height를 클램프하여 부분적으로 멈출 수 없습니다. shrunken 창에도 화면.
· InitializerService
MEMBER UI PREFERENCES 테이블 추가 (주문 60)
Idempotent CREATE for the generic per-member UI-preference 저장소 백업 hex-head 팝업 크기 선택기 및 미래 per-member UI 설정. Schema는 EmbRecordState 협약 (is active, date created, date updated)는 다른 곳에서 데이터 모델에 사용됩니다.
· SecurityService
Add MemberUiPreferenceController for per-member UI settings
Backs the new hex-head popover size selector and any future small per- member UI preference. Endpoints under /api/security/members/me/ui- preferences resolve the member from the OTK session and read/write JSON values keyed by an opaque prefKey string.
· kamo-shared-library
Add MemberUiPreference entity for per-member UI prefs
Generic per-member UI preference store (memberId, prefKey, JSONB value) for small persisted UI settings. First consumer is the hex-head popover size selector.
· kamo-internal
Wire FeaturesManager to platform 구독 for child-org 노래
FeaturesManager는 레거시를 호출했습니다. *********** 실제 플랫폼 구독을 읽는 대신 (ungated fallback)를 던졌습니다. 지금 전화 *********** root org의 쿼리 Caller의 cross-org 회원에 대한 상업 구독 주문. 시간 : 콜러는 루트 org에 APPROVED COMP 주문, 모든 기능 게이트가 열립니다 comped child-org 관리자에 대 한 예상.

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음