@senguoyun/dsh-arkme 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as securePrivateDirectory, c as securePrivateFileSync, i as prepareProfilePackageManager, n as isArkmeProfilePackageName, o as securePrivateDirectorySync, r as localExtensionPnpmArgs, s as securePrivateFile, t as applyArkmeProfileBundlePolicy } from "./profile-bundle-policy-CvojZuTD.js";
2
- import { A as readNativeBundleTarballV3, B as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, C as arkmeSandboxEntryId, D as inspectNativeBundleArtifactV3, E as inspectBundleArtifact, F as unpackArkmeExtension, H as validateVoiceprintPcm16Wav, I as ARKME_EXTENSION_FORMAT, J as ARKME_WORLD_PUBLISH_MAX_IMAGES, M as assertExtensionArtifactSize, N as canonicalExtensionJson, O as packBundleFiles, P as sha256Hex, Q as ArkmeOutgoingCallError, S as ArkmeBundleArtifactError, T as canonicalBundleJson, U as ARKME_DEFAULT_SHARE_WEBSITE, V as ArkmeService, W as ARKME_PROVIDER_CONTRACT_VERSION, X as isArkmeBotAvatarRef, Y as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, Z as ArkmePluginError, _ as verifyExtensionResolutionSignature, c as quarantinePersistentExtension, d as writePersistentExtensionActivation, f as renderArkmeBundleClientBundle, g as verifyBundleResolutionSignature, h as arkmeClientContentDigestFromSource, i as invokePersistentArkmeExtension, j as renderArkmeSandboxHostEntry, k as packLocalNativeBundleDirectoryV3, l as readPersistentExtensionActivation, m as arkmeClientContentDigest, o as persistentArkmeExtensionRuntimeState, p as activeProfileExtensionOwnerConflicts, r as deactivatePersistentArkmeExtension, s as materializePersistentExtensionBundle, t as activatePersistentArkmeExtension, u as refreshPersistentClientWrapper, v as verifyNativeBundleResolutionSignature, w as bundleSha256, x as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, y as ARKME_BUNDLE_ARTIFACT_KIND } from "./persistent-runtime-BIJ2Er-6.js";
2
+ import { A as readNativeBundleTarballV3, B as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, C as arkmeSandboxEntryId, D as inspectNativeBundleArtifactV3, E as inspectBundleArtifact, F as unpackArkmeExtension, H as validateVoiceprintPcm16Wav, I as ARKME_EXTENSION_FORMAT, J as ARKME_WORLD_PUBLISH_MAX_IMAGES, M as assertExtensionArtifactSize, N as canonicalExtensionJson, O as packBundleFiles, P as sha256Hex, Q as ArkmeOutgoingCallError, S as ArkmeBundleArtifactError, T as canonicalBundleJson, U as ARKME_DEFAULT_SHARE_WEBSITE, V as ArkmeService, W as ARKME_PROVIDER_CONTRACT_VERSION, X as isArkmeBotAvatarRef, Y as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, Z as ArkmePluginError, _ as verifyExtensionResolutionSignature, c as quarantinePersistentExtension, d as writePersistentExtensionActivation, f as renderArkmeBundleClientBundle, g as verifyBundleResolutionSignature, h as arkmeClientContentDigestFromSource, i as invokePersistentArkmeExtension, j as renderArkmeSandboxHostEntry, k as packLocalNativeBundleDirectoryV3, l as readPersistentExtensionActivation, m as arkmeClientContentDigest, o as persistentArkmeExtensionRuntimeState, p as activeProfileExtensionOwnerConflicts, r as deactivatePersistentArkmeExtension, s as materializePersistentExtensionBundle, t as activatePersistentArkmeExtension, u as refreshPersistentClientWrapper, v as verifyNativeBundleResolutionSignature, w as bundleSha256, x as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, y as ARKME_BUNDLE_ARTIFACT_KIND } from "./persistent-runtime-BqJb5fuJ.js";
3
3
  import { _ as validatePluginUpdateArtifactOrigin, d as ARKME_PLUGIN_PACKAGE_NAME, f as PluginUpdateArtifactError, g as pluginUpdateEndpointUrl, h as parsePluginUpdateManifest, m as existingCachedPluginArtifactPath, n as buildTargetInstallArgs, o as reconcilePluginUpdaterProfilePolicy, p as downloadAndCachePluginArtifact, t as assertTargetArtifactIntegrity, u as PluginUpdateInstallStateStore, v as validatePluginUpdateServiceOrigin } from "./plugin-updater-helper-Lmz7W2ph.js";
4
4
  import { i as invokeArkmeBundle, n as arkmeBundleActive, r as deactivateArkmeBundle } from "./bundle-runtime-BTzRlc6V.js";
5
5
  import { t as ArkmeExtensionInstallStore } from "./install-store-C1tAM346.js";
@@ -1,2 +1,2 @@
1
- import { a as persistentArkmeExtensionActive, i as invokePersistentArkmeExtension, n as applyPersistentArkmeHostExtension, o as persistentArkmeExtensionRuntimeState, r as deactivatePersistentArkmeExtension, t as activatePersistentArkmeExtension } from "./persistent-runtime-BIJ2Er-6.js";
1
+ import { a as persistentArkmeExtensionActive, i as invokePersistentArkmeExtension, n as applyPersistentArkmeHostExtension, o as persistentArkmeExtensionRuntimeState, r as deactivatePersistentArkmeExtension, t as activatePersistentArkmeExtension } from "./persistent-runtime-BqJb5fuJ.js";
2
2
  export { activatePersistentArkmeExtension, applyPersistentArkmeHostExtension, deactivatePersistentArkmeExtension, invokePersistentArkmeExtension, persistentArkmeExtensionActive, persistentArkmeExtensionRuntimeState };
@@ -10637,12 +10637,64 @@ var MediaService = class {
10637
10637
  const record = objectValue$1(root.record);
10638
10638
  const payload = jsonObjectValue(record.payload);
10639
10639
  const core = objectValue$1(root.record_core);
10640
- return jsonObjectValue(root.content_payload ?? payload.content_payload ?? record.content_payload ?? core.content_payload);
10640
+ return jsonObjectValue(root.content_payload ?? root.contentPayload ?? payload.content_payload ?? payload.contentPayload ?? record.content_payload ?? record.contentPayload ?? core.content_payload ?? core.contentPayload);
10641
+ }
10642
+ /**
10643
+ * Older quick-record projections carry their voice outside media_refs. The
10644
+ * Flutter clients accept these payload forms, so normalize them before the
10645
+ * shared display-item hydration and rich-content renderer see the record.
10646
+ */
10647
+ recordVoiceMediaRef(raw) {
10648
+ const root = objectValue$1(raw);
10649
+ const record = objectValue$1(root.record);
10650
+ const payload = jsonObjectValue(record.payload);
10651
+ const core = objectValue$1(root.record_core);
10652
+ const contentPayload = this.recordContentPayload(raw);
10653
+ const candidates = [
10654
+ contentPayload.voice,
10655
+ contentPayload.voice_media,
10656
+ contentPayload.voiceMedia,
10657
+ payload.voice,
10658
+ payload.voice_media,
10659
+ payload.voiceMedia,
10660
+ record.voice,
10661
+ record.voice_media,
10662
+ record.voiceMedia,
10663
+ core.voice,
10664
+ core.voice_media,
10665
+ core.voiceMedia,
10666
+ root.voice,
10667
+ root.voice_media,
10668
+ root.voiceMedia
10669
+ ];
10670
+ for (const candidate of candidates) {
10671
+ const voice = jsonObjectValue(candidate);
10672
+ const fileAssetUid = [
10673
+ voice.source_file_asset_uid,
10674
+ voice.sourceFileAssetUid,
10675
+ voice.file_asset_uid,
10676
+ voice.fileAssetUid,
10677
+ voice.file_id,
10678
+ voice.fileId,
10679
+ voice.uid
10680
+ ].map((value) => stringValue$1(value).trim()).find((value) => value !== "");
10681
+ if (fileAssetUid === void 0) continue;
10682
+ const durationSeconds = numberValue$9(voice.duration_sec ?? voice.durationSec ?? voice.duration);
10683
+ const durationMillis = numberValue$9(voice.duration_millis ?? voice.durationMillis ?? voice.duration_ms);
10684
+ return {
10685
+ ...voice,
10686
+ file_asset_uid: fileAssetUid,
10687
+ file_kind: 2,
10688
+ ...stringValue$1(voice.mime_type ?? voice.mimeType).trim() === "" ? {} : { mime_type: stringValue$1(voice.mime_type ?? voice.mimeType).trim() },
10689
+ ...durationSeconds > 0 ? { duration_sec: durationSeconds } : durationMillis > 0 ? { duration_sec: Math.ceil(durationMillis / 1e3) } : {}
10690
+ };
10691
+ }
10641
10692
  }
10642
10693
  recordMediaRefs(raw) {
10643
- return listValue$10(this.recordContentPayload(raw).media_refs).map(objectValue$1).filter((item) => {
10644
- return Math.trunc(numberValue$9(item.content_file_role)) !== RECORD_CONTENT_FILE_ROLE_BACKGROUND_SOUND && stringValue$1(item.file_asset_uid).trim() !== "";
10645
- });
10694
+ const contentPayload = this.recordContentPayload(raw);
10695
+ const voiceRef = this.recordVoiceMediaRef(raw);
10696
+ const refs = [...listValue$10(contentPayload.media_refs ?? contentPayload.mediaRefs).map(objectValue$1), ...voiceRef === void 0 ? [] : [voiceRef]].filter((item) => Math.trunc(numberValue$9(item.content_file_role)) !== RECORD_CONTENT_FILE_ROLE_BACKGROUND_SOUND && stringValue$1(item.file_asset_uid).trim() !== "");
10697
+ return [...new Map(refs.map((item) => [stringValue$1(item.file_asset_uid).trim(), item])).values()];
10646
10698
  }
10647
10699
  async queryRecordMediaDisplayItems(recordUids, session, signal) {
10648
10700
  const expectedRecordUids = [...new Set(recordUids.map((value) => value.trim()).filter((value) => value !== ""))];
@@ -10799,7 +10851,7 @@ var MediaService = class {
10799
10851
  const record = objectValue$1(root.record);
10800
10852
  const payload = jsonObjectValue(record.payload);
10801
10853
  const core = objectValue$1(root.record_core);
10802
- const contentPayload = this.recordContentPayload(raw);
10854
+ this.recordContentPayload(raw);
10803
10855
  const displayItems = [
10804
10856
  ...listValue$10(root.media_display_items),
10805
10857
  ...listValue$10(record.media_display_items),
@@ -10812,7 +10864,7 @@ var MediaService = class {
10812
10864
  const uid = stringValue$1(item.file_asset_uid).trim();
10813
10865
  if (uid !== "") displayByAsset.set(uid, item);
10814
10866
  }
10815
- const mediaRefs = listValue$10(contentPayload.media_refs).map(objectValue$1);
10867
+ const mediaRefs = this.recordMediaRefs(raw);
10816
10868
  return (mediaRefs.length > 0 ? mediaRefs.map((ref) => ({
10817
10869
  ...displayByAsset.get(stringValue$1(ref.file_asset_uid).trim()) ?? {},
10818
10870
  ...ref
@@ -12020,6 +12072,11 @@ function optionalNumberValue(value) {
12020
12072
  if (Number.isFinite(parsed)) return parsed;
12021
12073
  }
12022
12074
  }
12075
+ function positiveNumberValue(value) {
12076
+ const parsed = optionalNumberValue(value);
12077
+ if (parsed === void 0 || !Number.isSafeInteger(parsed) || parsed <= 0) return void 0;
12078
+ return parsed;
12079
+ }
12023
12080
  function uniqueStrings(values) {
12024
12081
  return [...new Set(values.map((value) => stringValue(value).trim()).filter((value) => value !== ""))];
12025
12082
  }
@@ -12029,7 +12086,7 @@ function displayTimestamp(value) {
12029
12086
  const parsed = Date.parse(stringValue(value));
12030
12087
  return Number.isFinite(parsed) ? parsed : 0;
12031
12088
  }
12032
- function projectRecordingTranscripts(response, speakerResponse) {
12089
+ function projectRecordingTranscripts(response, speakerResponse, profilesByUserId = /* @__PURE__ */ new Map()) {
12033
12090
  const data = objectValue(response);
12034
12091
  const sessions = /* @__PURE__ */ new Map();
12035
12092
  const sessionSpeakerColorIndexes = /* @__PURE__ */ new Map();
@@ -12060,7 +12117,7 @@ function projectRecordingTranscripts(response, speakerResponse) {
12060
12117
  const speakerRows = Array.isArray(speakerResponse) ? speakerResponse : listValue$6(objectValue(speakerResponse).speaker_ls ?? objectValue(speakerResponse).speakers);
12061
12118
  for (const rawSpeaker of speakerRows) {
12062
12119
  const speaker = objectValue(rawSpeaker);
12063
- const id = stringValue(speaker.id ?? speaker.spk_id).trim();
12120
+ const id = stringValue(speaker.id ?? speaker.speaker_id ?? speaker.spk_id).trim();
12064
12121
  if (id !== "") speakers.set(id, speaker);
12065
12122
  }
12066
12123
  const projected = [];
@@ -12083,11 +12140,13 @@ function projectRecordingTranscripts(response, speakerResponse) {
12083
12140
  const sessionSpeaker = sessionSpeakers.find((candidate) => numberValue$5(candidate.num) === rawSpeakerNumber) ?? {};
12084
12141
  const formalSpeakerId = stringValue(row.effective_spk_id ?? sessionSpeaker.spk_id ?? sessionSpeaker.speaker_id).trim();
12085
12142
  const formalSpeaker = speakers.get(formalSpeakerId) ?? {};
12086
- const isSelf = numberValue$5(formalSpeaker.ref_usr_id ?? formalSpeaker.ref_user_id) > 0 && numberValue$5(formalSpeaker.ref_usr_id ?? formalSpeaker.ref_user_id) === numberValue$5(session.belong_usr);
12143
+ const speakerUserId = positiveNumberValue(formalSpeaker.ref_usr_id ?? formalSpeaker.ref_user_id ?? formalSpeaker.user_id);
12144
+ const profile = speakerUserId === void 0 ? void 0 : profilesByUserId.get(speakerUserId);
12145
+ const isSelf = speakerUserId !== void 0 && speakerUserId === numberValue$5(session.belong_usr);
12087
12146
  const persistentSpeakerNumber = optionalNumberValue(sessionSpeaker.speaker_display_number ?? sessionSpeaker.speakerDisplayNumber);
12088
12147
  const speakerNumber = persistentSpeakerNumber !== void 0 && persistentSpeakerNumber > 0 ? persistentSpeakerNumber : rawSpeakerNumber;
12089
12148
  const speakerColorIndex = sessionSpeakerColorIndexes.get(`${sessionId}:${rawSpeakerNumber}`) ?? Math.max(0, rawSpeakerNumber);
12090
- const speakerLabel = speakerNumber >= 0 ? `说话人 ${speakerNumber}` : "未知说话人";
12149
+ const speakerLabel = stringValue(formalSpeaker.nick_name ?? formalSpeaker.nickname ?? formalSpeaker.display_name ?? formalSpeaker.name).trim() || profile?.displayName.trim() || (speakerNumber >= 0 ? `说话人 ${speakerNumber}` : "未知说话人");
12091
12150
  const startOffset = numberValue$5(row.s ?? row.start_at);
12092
12151
  const endOffset = Math.max(startOffset, numberValue$5(row.e ?? row.end_at));
12093
12152
  projected.push({
@@ -12101,6 +12160,7 @@ function projectRecordingTranscripts(response, speakerResponse) {
12101
12160
  speakerNumber,
12102
12161
  speakerColorIndex,
12103
12162
  speakerLabel,
12163
+ ...profile?.avatarRef === void 0 ? {} : { speakerAvatarRef: profile.avatarRef },
12104
12164
  isSelf,
12105
12165
  isBackground,
12106
12166
  text,
@@ -12303,6 +12363,18 @@ function numberValue$4(value) {
12303
12363
  function listValue$5(value) {
12304
12364
  return Array.isArray(value) ? value : [];
12305
12365
  }
12366
+ function positiveUserId(value) {
12367
+ const numeric = numberValue$4(value);
12368
+ const userId = Math.trunc(numeric);
12369
+ return Number.isSafeInteger(userId) && userId > 0 ? userId : void 0;
12370
+ }
12371
+ function speakerUserIds(speakerData) {
12372
+ return [...new Set(speakerData.flatMap((raw) => {
12373
+ const speaker = objectValue$1(raw);
12374
+ const userId = positiveUserId(speaker.ref_usr_id ?? speaker.ref_user_id ?? speaker.user_id);
12375
+ return userId === void 0 ? [] : [userId];
12376
+ }))];
12377
+ }
12306
12378
  function encodeOpaqueJson$2(value) {
12307
12379
  return Buffer.from(JSON.stringify(value), "utf8").toString("base64url");
12308
12380
  }
@@ -12316,8 +12388,10 @@ function safeFailureMessage$1(error) {
12316
12388
  }
12317
12389
  var RecordingService = class {
12318
12390
  runtime;
12319
- constructor(runtime) {
12391
+ profile;
12392
+ constructor(runtime, profile) {
12320
12393
  this.runtime = runtime;
12394
+ this.profile = profile;
12321
12395
  }
12322
12396
  async recordingCalendar(fromStamp, toStamp, signal) {
12323
12397
  const from = Math.trunc(fromStamp);
@@ -12354,7 +12428,7 @@ var RecordingService = class {
12354
12428
  const dayStart = this.recordingDayStart(dateStamp);
12355
12429
  const date = dayStart.getTime();
12356
12430
  const session = await this.runtime.requireSession();
12357
- const [transcriptResult, speakerResult] = await Promise.allSettled([this.runtime.authenticatedAudioPost("/api/v1/audio/one-day-trans-v2", {
12431
+ const [transcriptResult, speakerResult] = await Promise.allSettled([this.runtime.authenticatedAudioPost("/api/v1/audio/one-day-trans", {
12358
12432
  start_at: date,
12359
12433
  tz_offset: -dayStart.getTimezoneOffset() * 6e4
12360
12434
  }, session, signal), this.runtime.authenticatedAudioPost("/api/v1/audio/get-speaker-ls", {}, session, signal)]);
@@ -12362,7 +12436,9 @@ var RecordingService = class {
12362
12436
  let totalDurationMillis = 0;
12363
12437
  for (const rawSession of listValue$5(transcriptResult.value.session_ls)) totalDurationMillis += Math.max(0, numberValue$4(objectValue$1(rawSession).duration));
12364
12438
  const speakerData = speakerResult.status === "fulfilled" ? listValue$5(speakerResult.value.spk_ls) : [];
12365
- const items = projectRecordingTranscripts(transcriptResult.value, speakerData);
12439
+ const userIds = speakerUserIds(speakerData);
12440
+ const profilesByUserId = await this.recordingSpeakerProfiles(userIds, session, signal);
12441
+ const items = projectRecordingTranscripts(transcriptResult.value, speakerData, profilesByUserId);
12366
12442
  return {
12367
12443
  state: items.length > 0 ? "ready" : "empty",
12368
12444
  items,
@@ -12450,6 +12526,24 @@ var RecordingService = class {
12450
12526
  async recordingCursorKey(userId) {
12451
12527
  return createHmac("sha256", await this.runtime.stateStore.uniqueCode()).update(`arkme-recording-cursor:${String(userId)}`).digest();
12452
12528
  }
12529
+ async recordingSpeakerProfiles(userIds, session, signal) {
12530
+ if (this.profile === void 0) return /* @__PURE__ */ new Map();
12531
+ if (userIds.length === 0) return /* @__PURE__ */ new Map();
12532
+ try {
12533
+ const publicProfiles = await this.profile.publicProfileSummariesByUserIds(userIds, session, signal);
12534
+ const entries = await Promise.all([...publicProfiles].map(async ([userId, profile]) => {
12535
+ const displayName = profile.displayName.trim() || profile.nickname.trim();
12536
+ const avatarRef = profile.avatarUrl === void 0 ? void 0 : await this.profile.sealProfileImageRef(session.userId, userId);
12537
+ return [userId, {
12538
+ displayName,
12539
+ ...avatarRef === void 0 ? {} : { avatarRef }
12540
+ }];
12541
+ }));
12542
+ return new Map(entries);
12543
+ } catch {
12544
+ return /* @__PURE__ */ new Map();
12545
+ }
12546
+ }
12453
12547
  recordingDayStart(dateStamp) {
12454
12548
  const date = Math.trunc(dateStamp);
12455
12549
  const dayStart = new Date(date);
@@ -15694,8 +15788,8 @@ var ArkmeService = class {
15694
15788
  this.arrangement = new ArrangementService(this.runtime);
15695
15789
  this.calendar = new CalendarService(this.runtime, this.privacy);
15696
15790
  this.wechat = new WechatService(this.runtime);
15697
- this.recording = new RecordingService(this.runtime);
15698
15791
  this.profile = new ProfileService(this.runtime);
15792
+ this.recording = new RecordingService(this.runtime, this.profile);
15699
15793
  this.callHistory = new CallHistoryService(this.runtime, this.profile);
15700
15794
  this.extensionReview = new ExtensionReviewService(this.runtime, this.profile, { createTextForConversation: async (recordUid, textContent) => {
15701
15795
  return await this.createTextForConversation(recordUid, textContent);
@@ -1,11 +1,4 @@
1
- import type { ArkmeRecordingCalendarDay } from '../types.js';
2
- export declare function RecordingCalendarCell({ date, meta, selected, isToday, onClick }: {
3
- date: Date;
4
- meta: ArkmeRecordingCalendarDay | undefined;
5
- selected: boolean;
6
- isToday: boolean;
7
- onClick(): void;
8
- }): import("react").JSX.Element;
1
+ export declare function recordingCalendarDuration(milliseconds: number): string;
9
2
  export declare function RecordingSpeakerLabel({ label, colorIndex, isBackground }: {
10
3
  label: string;
11
4
  colorIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"ArkmeRecordingSurface.d.ts","sourceRoot":"","sources":["../../../src/client/ArkmeRecordingSurface.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,yBAAyB,EAK1B,MAAM,aAAa,CAAA;AAuLpB,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAChF,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,yBAAyB,GAAG,SAAS,CAAA;IAC3C,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,IAAI,IAAI,CAAA;CAChB,+BAKA;AAED,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,OAAO,CAAA;CACtB,+BAMA;AAmED,wBAAgB,qBAAqB,gCA4NpC"}
1
+ {"version":3,"file":"ArkmeRecordingSurface.d.ts","sourceRoot":"","sources":["../../../src/client/ArkmeRecordingSurface.tsx"],"names":[],"mappings":"AAyLA,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAItE;AAED,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,OAAO,CAAA;CACtB,+BAMA;AA8ED,wBAAgB,qBAAqB,gCA2MpC"}
@@ -39,7 +39,8 @@ export interface ArkmeWorldTarget {
39
39
  }
40
40
  export declare class ArkmeUiController {
41
41
  private state;
42
- private lastConversationSource;
42
+ /** Runtime-only conversation memory. A fresh client always starts in Harness. */
43
+ private lastConversationDestination;
43
44
  private readonly listeners;
44
45
  private settingsOpener;
45
46
  private conversationTargetRevision;
@@ -1 +1 @@
1
- {"version":3,"file":"ui-controller.d.ts","sourceRoot":"","sources":["../../../src/client/ui-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-controller.d.ts","sourceRoot":"","sources":["../../../src/client/ui-controller.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { ArkmeRecordingTimelineEvent, ArkmeRecordingTranscriptItem, ArkmeRecordingVersion } from './types.js';
2
- export declare function projectRecordingTranscripts(response: unknown, speakerResponse: unknown): ArkmeRecordingTranscriptItem[];
2
+ export declare function projectRecordingTranscripts(response: unknown, speakerResponse: unknown, profilesByUserId?: ReadonlyMap<number, {
3
+ displayName: string;
4
+ avatarRef?: string;
5
+ }>): ArkmeRecordingTranscriptItem[];
3
6
  export declare function parseRecordingTimeline(value: unknown): ArkmeRecordingTimelineEvent[];
4
7
  export declare function projectRecordingVersions(response: unknown, kind: 'summary' | 'timeline'): ArkmeRecordingVersion[];
5
8
  //# sourceMappingURL=recording-presentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recording-presentation.d.ts","sourceRoot":"","sources":["../../src/recording-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EAEtB,MAAM,YAAY,CAAA;AA8CnB,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,eAAe,EAAE,OAAO,GACvB,4BAA4B,EAAE,CAgHhC;AAsJD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,EAAE,CAYpF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,SAAS,GAAG,UAAU,GAC3B,qBAAqB,EAAE,CAgCzB"}
1
+ {"version":3,"file":"recording-presentation.d.ts","sourceRoot":"","sources":["../../src/recording-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EAEtB,MAAM,YAAY,CAAA;AAoDnB,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,eAAe,EAAE,OAAO,EACxB,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAa,GAC7F,4BAA4B,EAAE,CA2HhC;AAsJD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,2BAA2B,EAAE,CAYpF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,SAAS,GAAG,UAAU,GAC3B,qBAAqB,EAAE,CAgCzB"}
@@ -79,6 +79,12 @@ export declare class MediaService {
79
79
  private readImageUncached;
80
80
  private mediaKind;
81
81
  recordContentPayload(raw: unknown): Record<string, unknown>;
82
+ /**
83
+ * Older quick-record projections carry their voice outside media_refs. The
84
+ * Flutter clients accept these payload forms, so normalize them before the
85
+ * shared display-item hydration and rich-content renderer see the record.
86
+ */
87
+ private recordVoiceMediaRef;
82
88
  private recordMediaRefs;
83
89
  private queryRecordMediaDisplayItems;
84
90
  issueSearchAudioMediaRefs(requests: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/services/media-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/services/media-service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
+ import type { ArkmeSessionCredentials } from '../keychain-store.js';
1
2
  import type { ArkmeRecordingCalendarMonth, ArkmeRecordingCursorPayload, ArkmeRecordingDay, ArkmeRecordingProjectionKind, ArkmeRecordingSection, ArkmeRecordingTranscriptSection, ArkmeRecordingVersion } from '../types.js';
2
3
  import { ServiceRuntime } from './service.js';
4
+ import type { ArkmePublicProfile } from './profile-service.js';
5
+ export interface ArkmeRecordingProfileReader {
6
+ publicProfileSummariesByUserIds(userIds: readonly number[], session: ArkmeSessionCredentials, signal?: AbortSignal): Promise<Map<number, ArkmePublicProfile>>;
7
+ sealProfileImageRef(viewerUserId: number, targetUserId: number): Promise<string>;
8
+ }
3
9
  export declare class RecordingService {
4
10
  private readonly runtime;
5
- constructor(runtime: ServiceRuntime);
11
+ private readonly profile?;
12
+ constructor(runtime: ServiceRuntime, profile?: ArkmeRecordingProfileReader | undefined);
6
13
  recordingCalendar(fromStamp: number, toStamp: number, signal?: AbortSignal): Promise<ArkmeRecordingCalendarMonth>;
7
14
  recordingTranscript(dateStamp: number, signal?: AbortSignal): Promise<ArkmeRecordingTranscriptSection>;
8
15
  recordingProjection(dateStamp: number, kind: ArkmeRecordingProjectionKind, signal?: AbortSignal): Promise<ArkmeRecordingSection<ArkmeRecordingVersion>>;
@@ -10,6 +17,7 @@ export declare class RecordingService {
10
17
  openRecordingCursor(cursor: string): Promise<ArkmeRecordingCursorPayload>;
11
18
  recordingDay(dateStamp: number): Promise<ArkmeRecordingDay>;
12
19
  private recordingCursorKey;
20
+ private recordingSpeakerProfiles;
13
21
  private recordingDayStart;
14
22
  private recordingVersionSection;
15
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recording-service.d.ts","sourceRoot":"","sources":["../../../src/services/recording-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAoB,cAAc,EAA4B,MAAM,cAAc,CAAA;AAwBzF,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,2BAA2B,CAAC;IAiCjC,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,+BAA+B,CAAC;IAiCrC,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,4BAA4B,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;IAmBlD,mBAAmB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1E,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA8CzE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAyBnD,kBAAkB;IAMhC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,uBAAuB;CAYhC"}
1
+ {"version":3,"file":"recording-service.d.ts","sourceRoot":"","sources":["../../../src/services/recording-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAEnE,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAoB,cAAc,EAA4B,MAAM,cAAc,CAAA;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,MAAM,WAAW,2BAA2B;IAC1C,+BAA+B,CAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAC3C,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACjF;AAsCD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBADR,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,2BAA2B,YAAA;IAGlD,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,2BAA2B,CAAC;IAiCjC,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,+BAA+B,CAAC;IAsCrC,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,4BAA4B,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;IAmBlD,mBAAmB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1E,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA8CzE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAyBnD,kBAAkB;YAMlB,wBAAwB;IA2BtC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,uBAAuB;CAYhC"}
@@ -1563,6 +1563,8 @@ export interface ArkmeRecordingTranscriptItem {
1563
1563
  speakerNumber: number;
1564
1564
  speakerColorIndex: number;
1565
1565
  speakerLabel: string;
1566
+ /** Opaque image reference for a speaker already associated with an Arkme user. */
1567
+ speakerAvatarRef?: string;
1566
1568
  isSelf: boolean;
1567
1569
  isBackground: boolean;
1568
1570
  text: string;