Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· kamo-internal
AI auto-tag + caption UI; provider cost-tier/vision settings (P3)
Settings → AI → Providers: each provider gains a Cost tier (Light/Medium/Heavy) select and a Supports vision toggle (+ list chips). Materials drawer: 'Suggest tags with AI' (accept chips to apply) and 'Generate description with AI' — both call the org's own configured providers via MediaService→AIService; fail-closed with a clear message when no vision provider is set up.
· AIService
Provider cost-tier/vision passthrough + internal one-shot vision endpoint
AiProviderController reads/echoes costTier + supportsVision. ProviderRoutingService gains selectVisionProvider(orgId, tier). **************** runs a one-shot vision completion reusing the org's provider/adapter (no session/RAG/tools). New AiInternalController POST /api/ai/internal/vision (X-Internal-Auth, OTK-exempt) for service-to-service callers.
· MediaService
AI auto-tag + caption via org's providers (P3)
MaterialAiController POST **************** verifies ownership, mints a short-lived signed material URL, and calls AIService's internal vision endpoint (org's own providers, LIGHT tier) via AiVisionClient. Lenient tag parsing; fail-closed if no vision provider configured.
· kamo-shared-library
AiProvider gharama tier + maono bendera (mbili orthogonal uwezo axes)
Adds costTier (LIGHT/MEDIUM/HEAVY via new AiProviderTier enum) and supportsVision boolean to AiProvider, so integrations can pick how expensive a provider to use and which support vision. Repo finder for active vision providers. Columns added to AI_PROVIDERS via ALTER.
· EmailService
Server-side "display external images" consent
Replaces the client-local (localStorage) remembering of the external-image choice with a durable per-member record. New RemoteImageConsentService (fail-soft reads so message fetch still works before the table exists) + POST /api/email/remote-image-consent to record consent. The full-message DTO now carries remoteImagesAllowed (looked up by member + Message-ID), populated in the single-message, thread, and shared-mailbox fetch paths so the client seeds its gate from the server.
· kamo-shared-library
EmailRemoteImageConsent entity + repository
Member-scoped record that a member has chosen to display external (remote) images for a specific message, keyed by member_id + normalized RFC Message-ID (unique). Follows the email_metadata member-scoped pattern (FilterRuleEntity). Backs the server-side "display external images" preference so the choice persists across devices and sessions. KamoInitializer creates the table on its next run.
· InitializerService
Add INVESTOR_PRICE column to rate_locks + loan_pricing_snapshots
@Order(80) idempotent ADD COLUMN IF NOT EXISTS (DECIMAL(9,4), matching the price-to-100 grids) so the MLOS RCE can record the true non-par investor execution price on the binding lock-of-record and its bound quote instead of par-by-omission. Additive nullable; mirrors RecordingTranscriptMigration.
· kamo-shared-library
Record the true non-par investor price on RateLock + LoanPricingSnapshot
The binding rate-lock-of-record and its bound quote carried only rate + lockDays; discount/origination points were left null, so the core entities read PAR while the real priced number **************** price-to-100 with lender margin baked in) lived only on the MLOS side-ledger MlosLockRecord.lockedPrice. Add an INVESTOR_PRICE column (DECIMAL(9,4), matching the shipped price-to-100 grids) to both entities + their DTOs + **************** It is the INVESTOR execution price, deliberately NOT decomposed into borrower points (that nets out margin and needs the fee model — decomposing now would misstate borrower points, a Reg-Z/ECOA disclosure error). Points stay null until the fee model lands; the raw price is now preserved on the lock-of-record, not just the side ledger. Populated by the RCE (MLOSCapitalMarketsService) from finalPrice; column materialized by KamoInitializer RateLockInvestorPriceMigration (ADD COLUMN IF NOT EXISTS).
· kamo-internal
Let admins connect RingCentral on a member's behalf
On another member's phone settings, an admin with manage-VOIP rights (canManageVoipConfig) now sees Connect/Reconnect/Disconnect for the member's RingCentral account instead of a read-only "they must connect it themselves" message — for the common case where a sysadmin holds the member's RingCentral credentials. The connect copy makes clear you sign in with THAT member's credentials, and the target memberID is passed through (server enforces the right).
· VOIPService
Allow admins to connect RingCentral on a member's behalf
The per-member RingCentral flow was self-serve only, so an admin managing another member's profile saw "they must connect it themselves". Sysadmins commonly create the member's RingCentral account and hold their credentials, so they should be able to connect on the member's behalf. - OAuthController member start/status/disconnect now accept an optional target memberId. Acting on another member requires MANAGE_EXTENSIONS or MANAGE_VOIP_SETTINGS (mirrors the profile-edit gate); self is always allowed. - start also verifies the target member is actually assigned that instance (the instance is org-scoped, so this confirms same-org). - Whoever completes the RingCentral login still determines the identity; the assigned-vs-connected extension guard flags a mismatch.
· kamo-internal
Uchambuzi wa matumizi + Maoni ya Maarifa (P2)
Records **************** events and an Insights dialog with org totals + the most-used materials (by downloads + previews).
· MediaService
MaterialAnalyticsController — record events + aggregates
Picha ya ****** (rekodi) + GET / analytics (kwa-mahesabu ya nyenzo) Aina ya + org.
· kamo-shared-library
MaterialEvent chombo + repo (usage analytics)
Append-only usage events **************** with a per-(imgId,type) aggregate query. Table MATERIAL_EVENTS (targeted CRDB DDL; KI auto-scans).
· kamo-internal
Approval workflow UI + load-all filtering (P2)
Status control in the drawer **************** status badge on tiles, and a status filter in the toolbar. Also loads all material pages up-front (capped) so search/tag/ campaign/status filters cover the whole library, not just the first page.
· MediaService
MaterialReviewController — status map + set-status
GET /api/media/materials/reviews (org-wide imgId→status map) + POST to set a material's status (validated, reviewer-stamped, upsert).
· kamo-shared-library
MaterialReview entity+repo (approval status side-table)
DRAFT/PENDING/APPROVED/ARCHIVED per material, keyed by imgId (imaging schema untouched). Table MATERIAL_REVIEWS (targeted CRDB DDL; KI auto-scans).
· kamo-internal
Kwa mwanachama RingCentral kuunganisha + softphone mtandao v2 fixes
Softphone SDK fixes (ringcentral-web-phone ni v2.4.0, si v0.x adapter) Ililengwa - matumizi ya zamani ya wp.userAgent. * yalitupa init: Rewrite RingCentralPhoneSdk kwa v2 API: moja sipInfo kitu, kuanza () / simu() /dispose(), matukio ya inboundCall / OutboundCall, mapema wiring, synthesized mute / kushikilia / unmuted, na kupitishwa kwa SDK Kipengele cha sauti kwa kila simu kama #rc-remote-audio hivyo AV kiasi / vifaa vya uendeshaji kazi. - PhoneSdk.SipInfo: kuongeza outboundProxyBackup + stunServers. - TumiaSoftphone: wazi bendera ya simu iliyokwama kwenye hangup ya mbali wakati the the the the the the; ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' Auto-answer + wito-kukubali mara mbili. Mawasiliano ya simu ya mkononi: - PhoneSettingsTab: Self-serve "Connect RingCentral" kadi kwenye mwanachama mwenyewe maelezo (admins kupata hali ya kusoma tu), OAuth redirect utunzaji, na Tahadhari ya muda mrefu. voipApi: mwanachama OAuth kuanza / status / kuunganisha. - kutumiaSoftphone + SoftphonePanel: mahitaji ya kujiunga na "Connect" Akaunti yako ya RingCentral” haraka badala ya kosa la usajili.
· VOIPService
Kwa kila mwanachama RingCentral OAuth utambulisho + softphone SIP fixes
Softphone SIP karatasi za plastiki: - kupataSipCredentials: ramani outboundProxyBackup + stunServers (mtandao wa simu v2 mahitaji) Wao kwa WSS failover + ICE / vyombo vya habari; kutupa MtoaException (502) badala ya 500 s 500 500 500 500 500 s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s Ufafanuzi wa SIP. Mawasiliano ya simu ya mkononi: RingCentralTokenResolver: kutatua / upya ishara ya mwanachama mwenyewe na Na kwa upande wa joto la juu, unyevu unahitajika. Kuondolewa kwa uhusiano. - OAuthController: ******** - mwanachama Id kutoka kikao Tu (kujihifadhi), upeo wa VoipCalling, PKCE; kuunganisha kumbukumbu za simu Kuunganisha. - SipController + PhoneProviderFactory: Simu laini inajiandikisha kama mwanachama Ugani wa OWN; inarudi diski ya usajili wa 200 wakati haujaunganishwa. - MemberVoipConfigController: kufichua hali ya uunganisho; kufuta upya. - New-table kusoma degradefully kama mwanachama voip oauth token si kuhama bado.
· kamo-shared-library
Kuongeza MemberVoipOAuthToken kwa kila mwanachama RingCentral connections
Kwa mwanachama wa OAuth ishara ya ufunguo (mwanachama, mtoa huduma, instanceId) msaada upanuzi-scoped RingCentral shughuli - softphone sip-provision pamoja na Ujumbe wa simu ya mwanachama / sauti / uwepo. Kuondoa kutoka kwa ↑ org/instance OrgOAuthToken (account-scoped). Anahitaji mtu mwenye uwezo wa kuongoza Uumbaji wa Uumbaji Kwa mfano, ***
· kamo-internal
UI au UI (P2)
Left-nav Collections section (create/select/delete), campaign filter on the collection view, and a collections editor in the detail drawer (add/remove material, create-and-add). Wired through /api/materials/campaigns/* + materialsCampaignsApi; workspace joins the item map client-side like tags.
· MediaService
MaterialCampaignController - CRUD + kipengee ramani + kuongeza / remove
/api/media/materials/campaigns: list/create/update/delete, GET /items (org-wide imgId↔campaignId map), POST /add + /remove with org-ownership checks.
· kamo-shared-library
MaterialCampaign + vyombo vya bidhaa / repos (makusanyiko)
First-class named collections grouping materials across folders. Tables MATERIAL_CAMPAIGNS + MATERIAL_CAMPAIGN_ITEMS (targeted CRDB DDL; KI auto-scans on next run).
· kamo-internal
Tags UI + udhibiti wa ngazi ya upatikanaji (P2)
Tags (org-scoped, cross-cutting): tag chips on tiles, a tag filter bar (AND across selected), and a tag editor in the detail drawer (assign/remove existing, create-and-assign new). Wired through /api/materials/tags/* proxies + materialsTagsApi. Also adds a Visibility (access-level) control to the drawer using the existing access-level endpoint.
· MediaService
MaterialTagController - tag CRUD + kugawa / saini + ramani ya kazi
/api/media/materials/tags: list/create/delete tags, GET /assignments (org-wide imgId↔tagId map the workspace joins client-side), POST /assign + /unassign with org-ownership checks.
· kamo-shared-library
MaterialTag + vyombo vya kazi / repos ( lebo za shirika)
Flat, cross-cutting tag mhimili juu ya folders kwa vifaa vya masoko. Picha zote na Wizara ya Mambo ya Ndani ya Nchi Material TAG ASSIGNMENTS (Iliyoundwa kupitia CRDB DDL; KI auto-scans juu ya kukimbia ijayo).
· kamo-internal
Managed public links UI (P1) — create/expiry/revoke/view-count
Mchoro wa kina hupata jopo la 'viungo vya Public' (ShareLinkManager): kuunda kiungo cha kudumu na Lebo ya hiari na expiry (1h / 1d / 7d / 30d / kamwe), nakala, angalia hesabu ya maoni yake, na uifute. Inasaidiwa na mwisho mpya wa Usajili wa Vyombo vya Habari kupitia /api / vifaa / viungo. Kwa kuwa Kiungo cha haraka cha nakala ya moja inakaa kwa kugawana haraka kijamii / barua pepe.
· MediaService
Endpoints za kiungo cha umma (unda / orodha / revoke) + huduma iliyofuatiliwa
Adds POST/GET /api/media/materials/links and DELETE /links/{id} backed by MaterialShareLink, and resolves managed tokens on the public GET first (checking revoked/expiry and bumping viewCount) before falling back to the legacy HMAC verifier. Random opaque tokens, org-scoped ownership checks, TTL clamped to <=1y.
· kamo-shared-library
MaterialShareLink registry entity + repo (managed/tracked public links)
Backs revocable, expiring, maoni-counted viungo vya umma kwa ajili ya vifaa vya masoko - kuendelea Kwa hivyo viungo vinaweza kuorodheshwa, kufutwa, na kuhesabiwa (vs. ishara za HMAC moja ya risasi). Auto-scanned na KI (@EntityScan com.kamo) na Media Service; inahitaji KI kukimbia kujenga Picha zote na Wizara ya Mambo ya Ndani ya Nchi.
· kamo-internal
Kuongeza kulia-click / short-press mazingira menu kwa majadiliano-view safu
Inakamilisha orodha ya hatua katika njia zote mbili za mtazamo. Mazungumzo ya sasa yafunguliwa Menyu hiyo iliyoshirikiwa kwenye bonyeza kulia na kugusa kwa muda mrefu na vitendo vya ngazi ya thread: Majibu / Majibu Yote / Mbele (kushirikiana na ujumbe wa hivi karibuni wa thread, fetched juu ya Mahitaji na linajumuisha kutoka kwa sanduku la barua la kazi, Ripoti Spam / Sio Spam na Futa (Picha zote na Wizara ya Mambo ya Ndani ya Nchi. ....................................................
· kamo-shared-library
DecisionGate.appliedThreshold exposes the actual confidence bar
The gate internally applies max(tenant override, safetyFloor, stage floor) but callers only had the pre-gate tenant wall. appliedThreshold returns the true bar so a decision-of-record can persist the threshold-IN-EFFECT (examiner- reproducible) instead of a value the gate silently raises. Additive; evaluate() unchanged. DecisionGateTest 14/14 pass.

Ulimwengu wako unasubiri.
Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.
Bure milele - hakuna kadi ya mkopo inahitajika