@senguoyun/dsh-arkme 0.1.70 → 0.1.71

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.
Files changed (77) hide show
  1. package/docs/calendar-tooltip-regression-2026-09-20.md +25 -0
  2. package/docs/calls-retention-contacts-responsive-regression-2026-09-20.md +40 -0
  3. package/docs/composer-focus-regression-2026-09-20.md +38 -0
  4. package/docs/conversation-header-regression-2026-09-20.md +22 -0
  5. package/docs/desktop-regression-2026-09-19.md +10 -0
  6. package/docs/harness-activity.md +8 -0
  7. package/docs/harness-quick-create.md +18 -0
  8. package/docs/harness-session-dropdown.md +12 -0
  9. package/docs/my-day-calendar.md +42 -1
  10. package/docs/private-chat-actions.md +10 -0
  11. package/docs/private-interaction-directory-regression-2026-09-20.md +38 -0
  12. package/lib/arko-native-client.js +40 -0
  13. package/lib/client.js +2104 -1208
  14. package/lib/client.js.map +1 -1
  15. package/lib/harness-model-client.js +9 -0
  16. package/lib/harness-native-selection-client.js +40 -0
  17. package/lib/harness-sidebar-client.js +121 -11
  18. package/lib/index.js +60 -1
  19. package/lib/persistent-extension.js +1 -1
  20. package/lib/{persistent-runtime-DxKHwHTw.js → persistent-runtime-Cb8xQ4w0.js} +210 -8
  21. package/lib/types/arkme-service.d.ts +18 -2
  22. package/lib/types/arkme-service.d.ts.map +1 -1
  23. package/lib/types/client/ArkmeCalendarDateTooltip.d.ts +8 -0
  24. package/lib/types/client/ArkmeCalendarDateTooltip.d.ts.map +1 -0
  25. package/lib/types/client/ArkmeCalendarSurface.d.ts.map +1 -1
  26. package/lib/types/client/ArkmeCallDetailContent.d.ts +2 -1
  27. package/lib/types/client/ArkmeCallDetailContent.d.ts.map +1 -1
  28. package/lib/types/client/ArkmeCallSurface.d.ts +2 -1
  29. package/lib/types/client/ArkmeCallSurface.d.ts.map +1 -1
  30. package/lib/types/client/ArkmeDayTimeline.d.ts.map +1 -1
  31. package/lib/types/client/ArkmeDshMenu.d.ts.map +1 -1
  32. package/lib/types/client/ArkmeNoteDetails.d.ts +10 -2
  33. package/lib/types/client/ArkmeNoteDetails.d.ts.map +1 -1
  34. package/lib/types/client/ArkmePersonalDayCalendar.d.ts.map +1 -1
  35. package/lib/types/client/ArkmeQuickAdd.d.ts +3 -1
  36. package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -1
  37. package/lib/types/client/ArkmeRetainedCallPage.d.ts +5 -0
  38. package/lib/types/client/ArkmeRetainedCallPage.d.ts.map +1 -0
  39. package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
  40. package/lib/types/client/ArkmeSourceBreadcrumb.d.ts +3 -1
  41. package/lib/types/client/ArkmeSourceBreadcrumb.d.ts.map +1 -1
  42. package/lib/types/client/ArkmeVirtualWorkspace.d.ts +4 -0
  43. package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
  44. package/lib/types/client/api.d.ts +1 -1
  45. package/lib/types/client/api.d.ts.map +1 -1
  46. package/lib/types/client/calendar-activity-model.d.ts +25 -1
  47. package/lib/types/client/calendar-activity-model.d.ts.map +1 -1
  48. package/lib/types/client/call-history-refresh.d.ts +5 -0
  49. package/lib/types/client/call-history-refresh.d.ts.map +1 -0
  50. package/lib/types/client/conversation-header-layout.d.ts +4 -0
  51. package/lib/types/client/conversation-header-layout.d.ts.map +1 -0
  52. package/lib/types/client/day-activity-presentation.d.ts +6 -0
  53. package/lib/types/client/day-activity-presentation.d.ts.map +1 -0
  54. package/lib/types/client/documented-day-activity-reader.d.ts +21 -0
  55. package/lib/types/client/documented-day-activity-reader.d.ts.map +1 -0
  56. package/lib/types/client/harness-session-dropdown.d.ts.map +1 -1
  57. package/lib/types/client/locales/dynamic-en.d.ts.map +1 -1
  58. package/lib/types/client/multisource-day-activity-reader.d.ts +10 -0
  59. package/lib/types/client/multisource-day-activity-reader.d.ts.map +1 -1
  60. package/lib/types/client/private-interaction-directory.d.ts +18 -0
  61. package/lib/types/client/private-interaction-directory.d.ts.map +1 -0
  62. package/lib/types/client/realtime-client-events.d.ts.map +1 -1
  63. package/lib/types/client/use-documented-day-month.d.ts +13 -0
  64. package/lib/types/client/use-documented-day-month.d.ts.map +1 -0
  65. package/lib/types/client/use-private-interaction-directory.d.ts +16 -0
  66. package/lib/types/client/use-private-interaction-directory.d.ts.map +1 -0
  67. package/lib/types/host-api.d.ts.map +1 -1
  68. package/lib/types/services/calendar-service.d.ts +15 -1
  69. package/lib/types/services/calendar-service.d.ts.map +1 -1
  70. package/lib/types/services/call-history-service.d.ts +4 -1
  71. package/lib/types/services/call-history-service.d.ts.map +1 -1
  72. package/lib/types/services/chat-service.d.ts.map +1 -1
  73. package/lib/types/services/interwoven-service.d.ts +2 -1
  74. package/lib/types/services/interwoven-service.d.ts.map +1 -1
  75. package/lib/types/types.d.ts +38 -1
  76. package/lib/types/types.d.ts.map +1 -1
  77. package/package.json +5 -5
@@ -1456,6 +1456,14 @@ Arkme 账号|Arkme account
1456
1456
  return [line.slice(0, index), line.slice(index + 1)];
1457
1457
  }));
1458
1458
  Object.fromEntries(`
1459
+ {v0} 条相关消息|{v0} related messages
1460
+ 录音 {v0}|Recorded {v0}
1461
+ 始于前一天|Started the previous day
1462
+ 延续至下一天|Continues into the next day
1463
+ 暂无内容预览,展开查看详情|No preview available. Expand for details
1464
+ 已有摘要:|Existing summary:
1465
+ 群互动同步暂未完成,点击重试|Group interactions could not sync. Click to retry
1466
+ 较早群互动暂未加载,点击重试|Earlier group interactions are not loaded. Click to retry
1459
1467
  {v0}的头像|Avatar of {v0}
1460
1468
  {v0} 的头像|Avatar of {v0}
1461
1469
  {v0}头像|Avatar of {v0}
@@ -1502,6 +1510,7 @@ Arkme 账号|Arkme account
1502
1510
  {v0} 像素|{v0} px
1503
1511
  来源:{v0}|Source: {v0}
1504
1512
  私聊 {v0} 条|{v0} direct messages
1513
+ 多来源活动|Activity from multiple sources
1505
1514
  群聊互动 {v0} 条|{v0} group interactions
1506
1515
  查看地点:{v0}|View location: {v0}
1507
1516
  查看小结来源:{v0}|View recap source: {v0}
@@ -3724,6 +3724,14 @@ Arkme 账号|Arkme account
3724
3724
  return [line.slice(0, index), line.slice(index + 1)];
3725
3725
  }));
3726
3726
  Object.fromEntries(`
3727
+ {v0} 条相关消息|{v0} related messages
3728
+ 录音 {v0}|Recorded {v0}
3729
+ 始于前一天|Started the previous day
3730
+ 延续至下一天|Continues into the next day
3731
+ 暂无内容预览,展开查看详情|No preview available. Expand for details
3732
+ 已有摘要:|Existing summary:
3733
+ 群互动同步暂未完成,点击重试|Group interactions could not sync. Click to retry
3734
+ 较早群互动暂未加载,点击重试|Earlier group interactions are not loaded. Click to retry
3727
3735
  {v0}的头像|Avatar of {v0}
3728
3736
  {v0} 的头像|Avatar of {v0}
3729
3737
  {v0}头像|Avatar of {v0}
@@ -3770,6 +3778,7 @@ Arkme 账号|Arkme account
3770
3778
  {v0} 像素|{v0} px
3771
3779
  来源:{v0}|Source: {v0}
3772
3780
  私聊 {v0} 条|{v0} direct messages
3781
+ 多来源活动|Activity from multiple sources
3773
3782
  群聊互动 {v0} 条|{v0} group interactions
3774
3783
  查看地点:{v0}|View location: {v0}
3775
3784
  查看小结来源:{v0}|View recap source: {v0}
@@ -4270,6 +4279,37 @@ Arkme 用户 {v0}|Arkme user {v0}
4270
4279
  document.removeEventListener("keydown", onKey);
4271
4280
  };
4272
4281
  }, [open]);
4282
+ (0, react.useEffect)(() => {
4283
+ if (!open || typeof document === "undefined") return;
4284
+ const own = root.current?.ownerDocument ?? document;
4285
+ if (typeof own?.addEventListener !== "function") return;
4286
+ let pending;
4287
+ const cancel = () => {
4288
+ if (pending !== void 0) {
4289
+ clearTimeout(pending);
4290
+ pending = void 0;
4291
+ }
4292
+ };
4293
+ const outside = (event) => {
4294
+ const target = event.target;
4295
+ if (!(target instanceof Node)) return;
4296
+ if (root.current?.contains(target) === true) return;
4297
+ if (menu.current?.contains(target) === true) return;
4298
+ cancel();
4299
+ pending = setTimeout(() => {
4300
+ pending = void 0;
4301
+ closeRef.current();
4302
+ }, 0);
4303
+ };
4304
+ const arrived = () => cancel();
4305
+ own.addEventListener("pointerdown", outside, true);
4306
+ own.addEventListener("pointerdown", arrived);
4307
+ return () => {
4308
+ cancel();
4309
+ own.removeEventListener("pointerdown", outside, true);
4310
+ own.removeEventListener("pointerdown", arrived);
4311
+ };
4312
+ }, [open]);
4273
4313
  (0, react.useEffect)(() => {
4274
4314
  if (!open || !props.point || typeof document === "undefined" || typeof document.createElement !== "function") return;
4275
4315
  const doc = props.pointDocument ?? document;
@@ -300,6 +300,9 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
300
300
  };
301
301
  }
302
302
  //#endregion
303
+ //#region src/client/conversation-header-layout.ts
304
+ const HARNESS_CONVERSATION_NAME = "DeepSeek Harness";
305
+ //#endregion
303
306
  //#region src/client/harness-session-dropdown.ts
304
307
  const PREFIX = "data-arkme-session-";
305
308
  const HEADER = "[data-slot=\"conversation.session.header\"] > header";
@@ -386,13 +389,34 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
386
389
  const row = cluster?.parentElement;
387
390
  const nav = cluster?.querySelector(":scope > nav");
388
391
  if (!actions || !cluster || !row || !nav || row.parentElement !== header || cluster.children.length !== 2 || cluster.firstElementChild !== nav || cluster.lastElementChild !== actions) return [];
392
+ const utilities = [...row.children].filter((node) => node !== cluster && !node.hasAttribute("data-arkme-session-identity"));
389
393
  return [
394
+ [header, "header"],
390
395
  [row, "title-row"],
391
396
  [cluster, "title-cluster"],
392
397
  [actions, "summary"],
393
- [nav, "title-nav"]
398
+ [nav, "title-nav"],
399
+ ...utilities.map((node) => [node, "utilities"]),
400
+ ...utilities[0] ? [[utilities[0], "utilities-start"]] : []
394
401
  ];
395
402
  }
403
+ function selectedRowStatus(value) {
404
+ const slot = value.column.querySelector("[role=\"treeitem\"][aria-selected=\"true\"]")?.firstElementChild;
405
+ const dot = slot?.querySelector("[data-state]");
406
+ const state = dot?.getAttribute("data-state");
407
+ if (!slot || !dot || state === null || ![
408
+ "done",
409
+ "warning",
410
+ "ongoing",
411
+ "error",
412
+ "idle"
413
+ ].includes(state)) return void 0;
414
+ return {
415
+ dot,
416
+ labels: [...slot.querySelectorAll("span:not([data-state])")].map((node) => node.textContent?.trim() ?? "").filter((text) => text !== ""),
417
+ state
418
+ };
419
+ }
396
420
  /**
397
421
  * Presentation-only adapter: the native SidebarRoot, WorkspaceBrowser, their
398
422
  * live slots, handlers, menus, stores and React ancestry all stay mounted in
@@ -405,6 +429,7 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
405
429
  if (!win || !doc.body) return () => {};
406
430
  let current;
407
431
  let title;
432
+ let statusSignature = "";
408
433
  let open = false;
409
434
  let external;
410
435
  let disposed = false;
@@ -423,6 +448,12 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
423
448
  };
424
449
  const host = doc.createElement("span");
425
450
  mark(host, "anchor");
451
+ const identity = doc.createElement("span");
452
+ mark(identity, "identity");
453
+ identity.textContent = HARNESS_CONVERSATION_NAME;
454
+ identity.title = HARNESS_CONVERSATION_NAME;
455
+ identity.setAttribute("role", "heading");
456
+ identity.setAttribute("aria-level", "2");
426
457
  const trigger = doc.createElement("button");
427
458
  trigger.type = "button";
428
459
  trigger.setAttribute("aria-haspopup", "dialog");
@@ -430,6 +461,14 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
430
461
  trigger.setAttribute("data-arkme-conversation-selector", "");
431
462
  mark(trigger, "trigger");
432
463
  const label = doc.createElement("span");
464
+ const status = doc.createElement("span");
465
+ mark(status, "status");
466
+ status.setAttribute("aria-hidden", "true");
467
+ const statusLabel = doc.createElement("span");
468
+ mark(statusLabel, "status-label");
469
+ statusLabel.setAttribute("aria-hidden", "true");
470
+ const labelText = doc.createElement("span");
471
+ label.append(status, labelText, statusLabel);
433
472
  const arrow = doc.createElement("span");
434
473
  const chevron = doc.createElementNS("http://www.w3.org/2000/svg", "svg");
435
474
  chevron.setAttribute("viewBox", "0 0 16 16");
@@ -478,16 +517,45 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
478
517
  opacity: 1 !important; visibility: visible !important; transform: none !important;
479
518
  }
480
519
  [${PREFIX}anchor] { display: inline-flex; width: max-content; min-width: 0; max-width: 100%; }
481
- [${PREFIX}title-row] { align-items: flex-start; }
482
- [${PREFIX}title-cluster] { flex-direction: column; align-items: stretch; gap: 4px; }
483
- [${PREFIX}title-nav] { width: 100%; }
484
- [${PREFIX}summary] { min-width: 0; min-height: 18px; gap: 0; flex-wrap: wrap; color: var(--dsw-alias-label-secondary, #626872); font-size: 12px; line-height: 18px; }
520
+ /* The selected row's own status dot, mirrored beside the fixed title. Empty
521
+ when the session has no status, so the title keeps its full width. */
522
+ [${PREFIX}status] {
523
+ display: none; flex: none; width: 16px; height: 16px; margin-right: 6px;
524
+ align-items: center; justify-content: center; vertical-align: middle;
525
+ }
526
+ [${PREFIX}status]:not(:empty) { display: inline-flex; }
527
+ [${PREFIX}status-label] {
528
+ display: none; flex: none; min-width: 0; max-width: 96px; margin-left: 6px;
529
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
530
+ color: var(--dsw-alias-label-secondary, #626872); font-size: 12px; font-weight: 500; line-height: 18px;
531
+ }
532
+ [${PREFIX}status-label]:not(:empty) { display: inline-block; }
533
+ [${PREFIX}header] { padding-left: 20px; padding-right: 20px; }
534
+ [${PREFIX}title-row] {
535
+ --arkme-header-side: max(calc((100% - 8px) / 4), var(--arkme-header-utilities-width, 0px));
536
+ display: flex !important; flex-wrap: nowrap; gap: 4px; align-items: flex-start;
537
+ }
538
+ [${PREFIX}identity] {
539
+ flex: 0 0 var(--arkme-header-side); min-width: 0; max-width: 100%;
540
+ color: var(--dsw-alias-label-primary); font-size: 15px; font-weight: 600; line-height: 30px;
541
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
542
+ }
543
+ [${PREFIX}identity][${PREFIX}fallback] { position: absolute; top: 10px; left: 20px; max-width: calc(25% - 24px); }
544
+ [${PREFIX}title-cluster] { flex: 0 0 max(0px, calc(100% - 2 * var(--arkme-header-side) - 8px)); min-width: 0; flex-direction: column; align-items: stretch; gap: 4px; }
545
+ [${PREFIX}utilities] { flex: 0 0 auto; min-width: 0; }
546
+ [${PREFIX}utilities-start] { margin-left: auto; }
547
+ /* Equal side reservations center both native rows without moving any of the
548
+ multiple upstream right-side control groups into a new grid row. */
549
+ [${PREFIX}title-nav] { width: 100%; display: flex; justify-content: center; }
550
+ [${PREFIX}title-nav] > * { min-width: 0; max-width: 100%; }
551
+ [${PREFIX}summary] { min-width: 0; height: 18px; min-height: 18px; gap: 0; flex-wrap: nowrap; overflow: hidden; white-space: nowrap; justify-content: center; color: var(--dsw-alias-label-secondary, #626872); font-size: 12px; line-height: 18px; }
552
+ [${PREFIX}summary] [data-slot="conversation.session.header.actions"] { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
485
553
  [${PREFIX}summary] [data-slot="conversation.session.header.actions"] > * { font-size: inherit; line-height: inherit; }
486
554
  [${PREFIX}turn-count] { display: inline-flex; align-items: center; white-space: nowrap; }
487
555
  [${PREFIX}summary] [data-slot="conversation.session.header.actions"] > * + [${PREFIX}turn-count]::before { content: '·'; margin: 0 7px; }
488
556
  [${PREFIX}anchor][${PREFIX}fallback] {
489
557
  width: max-content; position: absolute; top: 10px;
490
- left: 20px; z-index: 10; max-width: calc(100% - 40px);
558
+ left: 50%; transform: translateX(-50%); z-index: 10; max-width: calc(50% - 8px);
491
559
  }
492
560
  ${CONVERSATION_SELECTOR_CSS}
493
561
  [${PREFIX}column] [role="treeitem"][aria-selected]:hover { background: ${CONVERSATION_MENU_COLORS.hover}; }
@@ -515,11 +583,18 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
515
583
  for (const cleanup of rowFocusCleanups.values()) cleanup();
516
584
  for (const [node, key] of toolbarMarks) node.removeAttribute(PREFIX + key);
517
585
  toolbarMarks = [];
518
- for (const [node, key] of summaryMarks) node.removeAttribute(PREFIX + key);
586
+ for (const [node, key] of summaryMarks) {
587
+ node.removeAttribute(PREFIX + key);
588
+ if (key === "title-row") node.style.removeProperty("--arkme-header-utilities-width");
589
+ }
519
590
  summaryMarks = [];
520
591
  title?.removeAttribute("data-arkme-session-native-title");
521
592
  title = void 0;
593
+ statusSignature = "";
594
+ status.replaceChildren();
595
+ statusLabel.textContent = "";
522
596
  host.remove();
597
+ identity.remove();
523
598
  if (current) {
524
599
  const { frame, column, root, brand, create, toggle } = current;
525
600
  for (const [node, key] of [
@@ -615,10 +690,24 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
615
690
  variable(next.frame, "--arkme-session-rightbar", next.rightTrack);
616
691
  const header = next.center.querySelector(HEADER);
617
692
  const nextSummary = summaryLayout(header ?? void 0);
618
- for (const [node, key] of summaryMarks) if (!nextSummary.some(([nextNode, nextKey]) => node === nextNode && key === nextKey)) node.removeAttribute(PREFIX + key);
693
+ for (const [node, key] of summaryMarks) if (!nextSummary.some(([nextNode, nextKey]) => node === nextNode && key === nextKey)) {
694
+ node.removeAttribute(PREFIX + key);
695
+ if (key === "title-row") node.style.removeProperty("--arkme-header-utilities-width");
696
+ }
619
697
  summaryMarks = nextSummary;
620
698
  for (const [node, key] of summaryMarks) mark(node, key);
621
699
  const visibleHeader = header && header.getAttribute("aria-hidden") !== "true";
700
+ const titleRow = summaryMarks.find(([, key]) => key === "title-row")?.[0];
701
+ if (titleRow) {
702
+ const utilityNodes = summaryMarks.filter(([, key]) => key === "utilities").map(([node]) => node);
703
+ const utilityWidth = utilityNodes.reduce((sum, node) => sum + node.getBoundingClientRect().width, 0) + Math.max(0, utilityNodes.length - 1) * 4;
704
+ variable(titleRow, "--arkme-header-utilities-width", `${Math.ceil(utilityWidth)}px`);
705
+ identity.removeAttribute("data-arkme-session-fallback");
706
+ if (identity.parentElement !== titleRow) titleRow.prepend(identity);
707
+ } else if (!visibleHeader) {
708
+ mark(identity, "fallback");
709
+ if (identity.parentElement !== next.center) next.center.append(identity);
710
+ } else identity.remove();
622
711
  const nativeTitle = visibleHeader ? header?.querySelector("nav > :last-child > button:disabled") : void 0;
623
712
  if (title !== nativeTitle) {
624
713
  title?.removeAttribute("data-arkme-session-native-title");
@@ -637,9 +726,29 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
637
726
  if (host.parentElement !== next.center) next.center.append(host);
638
727
  }
639
728
  const text = title?.textContent?.trim() || (visibleHeader ? next.copy.sessions : next.copy.blank);
640
- if (label.textContent !== text) label.textContent = text;
729
+ if (labelText.textContent !== text) labelText.textContent = text;
641
730
  trigger.title = text;
642
- trigger.setAttribute("aria-label", `${next.copy.choose}:${text}`);
731
+ const nativeStatus = selectedRowStatus(next);
732
+ const statusText = nativeStatus?.labels.join("、") ?? "";
733
+ const signature = nativeStatus === void 0 ? "" : `${nativeStatus.dot.outerHTML}\u0000${statusText}\u0000${nativeStatus.state}`;
734
+ if (statusSignature !== signature) {
735
+ statusSignature = signature;
736
+ status.replaceChildren();
737
+ statusLabel.textContent = "";
738
+ if (nativeStatus !== void 0) {
739
+ const mirror = nativeStatus.dot.cloneNode(true);
740
+ mark(mirror, "status-dot");
741
+ status.append(mirror);
742
+ statusLabel.textContent = nativeStatus.labels[0] ?? {
743
+ ongoing: next.copy.expand === "Open sidebar" ? "Running" : "进行中",
744
+ done: next.copy.expand === "Open sidebar" ? "Completed" : "已完成",
745
+ warning: next.copy.expand === "Open sidebar" ? "Needs attention" : "等待处理",
746
+ error: next.copy.expand === "Open sidebar" ? "Error" : "出错",
747
+ idle: next.copy.expand === "Open sidebar" ? "Idle" : "空闲"
748
+ }[nativeStatus.state];
749
+ }
750
+ }
751
+ trigger.setAttribute("aria-label", statusText === "" ? `${next.copy.choose}:${text}` : `${next.copy.choose}:${text}(${statusText})`);
643
752
  position();
644
753
  }
645
754
  function schedule() {
@@ -754,7 +863,8 @@ body:has([data-arkme-self-topic-menu]) > [role="menu"] { z-index: 10030; }
754
863
  "aria-hidden",
755
864
  "aria-selected",
756
865
  "disabled",
757
- "data-slot"
866
+ "data-slot",
867
+ "data-state"
758
868
  ]
759
869
  });
760
870
  doc.addEventListener("pointerdown", pointer, true);
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as inspectNativeBundleArtifactV3, At as parseArkmeRecordReeditAttachments, Ct as isRecentEmojiId, D as bundleSha256, Dt as retryAfterMillis, E as arkmeSandboxEntryId, Et as ArkmePluginError, F as assertExtensionArtifactSize, Ft as __esmMin, G as validateVoiceprintPcm16Wav, I as canonicalExtensionJson, It as __exportAll, J as arkmeRequiredLinkMetadataFallback, K as arkmeExtensionShareRefFromLink, L as sha256Hex, Lt as __require, M as packLocalNativeBundleDirectoryV3, Mt as registerDSHAgentInputRecordSync, N as readNativeBundleTarballV3, Nt as createDesktopLifecycleReader, O as canonicalBundleJson, Ot as recordOwnerId, P as renderArkmeSandboxHostEntry, Pt as __commonJSMin, Q as ARKME_PROVIDER_CONTRACT_VERSION, R as unpackArkmeExtension, Rt as __toCommonJS, S as ARKME_BUNDLE_ARTIFACT_KIND, St as recordingImportFileNameKey, T as ArkmeBundleArtifactError, Tt as registerManagedAiProvider, U as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, W as ArkmeService, X as arkmeRichBackgroundSound, Y as arkmeFileBackgroundSound, Z as ARKME_DEFAULT_SHARE_WEBSITE, _ as arkmeClientContentDigest, _t as isRecordingInstantOnOrAfterUnixEpoch, at as cachedMemberItem, b as verifyExtensionResolutionSignature, bt as sameRecordingImportIdentity, c as persistentExtensionBundleDirectory, ct as ARKME_RUNTIME_INSTANCE_ID, d as readPersistentExtensionActivation, dt as arkmeNormalizedFileMimeType, f as refreshPersistentClientWrapper, ft as arkmePickedFileKind, g as activeProfileExtensionOwnerConflicts, gt as ArkmeDirectMessageAdmissionError, h as renderArkmeBundleClientBundle, ht as SecretValue, i as invokePersistentArkmeExtension, it as applyMemberUpdate, j as packBundleFiles, jt as parseArkmeRecordReeditMentions, k as inspectBundleArtifact, kt as ArkmeRecordReeditDraftConflict, l as persistentExtensionPackageIdentity, lt as ARKME_TOOL_FILE_MAX_BYTES, m as writePersistentExtensionActivation, mt as ArkmeOutgoingCallError, nt as ARKME_WORLD_PUBLISH_MAX_IMAGES, o as persistentArkmeExtensionRuntimeState, ot as mergeMemberJoinEvents, p as repairPersistentExtensionInstallation, pt as isArkmeBotAvatarRef, q as arkmeIsGenericLinkMetadataTitle, r as deactivatePersistentArkmeExtension, rt as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, s as materializePersistentExtensionBundle, st as validateMemberUpdate, t as activatePersistentArkmeExtension, u as quarantinePersistentExtension, ut as arkmeCanInlineLocalFile, v as arkmeClientContentDigestFromSource, vt as isUnresolvedRecordingImportJob, w as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, wt as normalizeRecentEmojiIds, x as verifyNativeBundleResolutionSignature, y as verifyBundleResolutionSignature, yt as recordingImportFileKind, z as ARKME_EXTENSION_FORMAT } from "./persistent-runtime-DxKHwHTw.js";
1
+ import { A as inspectNativeBundleArtifactV3, At as parseArkmeRecordReeditAttachments, Ct as isRecentEmojiId, D as bundleSha256, Dt as retryAfterMillis, E as arkmeSandboxEntryId, Et as ArkmePluginError, F as assertExtensionArtifactSize, Ft as __esmMin, G as validateVoiceprintPcm16Wav, I as canonicalExtensionJson, It as __exportAll, J as arkmeRequiredLinkMetadataFallback, K as arkmeExtensionShareRefFromLink, L as sha256Hex, Lt as __require, M as packLocalNativeBundleDirectoryV3, Mt as registerDSHAgentInputRecordSync, N as readNativeBundleTarballV3, Nt as createDesktopLifecycleReader, O as canonicalBundleJson, Ot as recordOwnerId, P as renderArkmeSandboxHostEntry, Pt as __commonJSMin, Q as ARKME_PROVIDER_CONTRACT_VERSION, R as unpackArkmeExtension, Rt as __toCommonJS, S as ARKME_BUNDLE_ARTIFACT_KIND, St as recordingImportFileNameKey, T as ArkmeBundleArtifactError, Tt as registerManagedAiProvider, U as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, W as ArkmeService, X as arkmeRichBackgroundSound, Y as arkmeFileBackgroundSound, Z as ARKME_DEFAULT_SHARE_WEBSITE, _ as arkmeClientContentDigest, _t as isRecordingInstantOnOrAfterUnixEpoch, at as cachedMemberItem, b as verifyExtensionResolutionSignature, bt as sameRecordingImportIdentity, c as persistentExtensionBundleDirectory, ct as ARKME_RUNTIME_INSTANCE_ID, d as readPersistentExtensionActivation, dt as arkmeNormalizedFileMimeType, f as refreshPersistentClientWrapper, ft as arkmePickedFileKind, g as activeProfileExtensionOwnerConflicts, gt as ArkmeDirectMessageAdmissionError, h as renderArkmeBundleClientBundle, ht as SecretValue, i as invokePersistentArkmeExtension, it as applyMemberUpdate, j as packBundleFiles, jt as parseArkmeRecordReeditMentions, k as inspectBundleArtifact, kt as ArkmeRecordReeditDraftConflict, l as persistentExtensionPackageIdentity, lt as ARKME_TOOL_FILE_MAX_BYTES, m as writePersistentExtensionActivation, mt as ArkmeOutgoingCallError, nt as ARKME_WORLD_PUBLISH_MAX_IMAGES, o as persistentArkmeExtensionRuntimeState, ot as mergeMemberJoinEvents, p as repairPersistentExtensionInstallation, pt as isArkmeBotAvatarRef, q as arkmeIsGenericLinkMetadataTitle, r as deactivatePersistentArkmeExtension, rt as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, s as materializePersistentExtensionBundle, st as validateMemberUpdate, t as activatePersistentArkmeExtension, u as quarantinePersistentExtension, ut as arkmeCanInlineLocalFile, v as arkmeClientContentDigestFromSource, vt as isUnresolvedRecordingImportJob, w as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, wt as normalizeRecentEmojiIds, x as verifyNativeBundleResolutionSignature, y as verifyBundleResolutionSignature, yt as recordingImportFileKind, z as ARKME_EXTENSION_FORMAT } from "./persistent-runtime-Cb8xQ4w0.js";
2
2
  import { _ as parsePluginUpdateManifest, b as validatePluginUpdateServiceOrigin, d as writePluginUpdateLifecycleLog, f as PluginUpdateInstallStateStore, g as existingCachedPluginArtifactPath, h as downloadAndCachePluginArtifact, m as PluginUpdateArtifactError, n as buildTargetInstallArgs, o as reconcilePluginUpdaterProfilePolicy, p as ARKME_PLUGIN_PACKAGE_NAME$1, t as assertTargetArtifactIntegrity, u as detachManagedProfilePluginLink, v as pluginUpdateEndpointUrl, y as validatePluginUpdateArtifactOrigin } from "./plugin-updater-helper-Ny1szQA0.js";
3
3
  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-DLXDyohJ.js";
4
4
  import { i as invokeArkmeBundle, n as arkmeBundleActive, r as deactivateArkmeBundle } from "./bundle-runtime-CE73h3vS.js";
@@ -11462,6 +11462,38 @@ async function dispatchArkmeHostOperation(service, operation, params, updateMana
11462
11462
  ...stringParam(params, "remark").trim() === "" ? {} : { remark: stringParam(params, "remark") },
11463
11463
  ...stringParam(params, "requestUid").trim() === "" ? {} : { requestUid: stringParam(params, "requestUid") }
11464
11464
  });
11465
+ case "private-interaction.summary": {
11466
+ const sourceRef = stringParam(params, "sourceRef").trim();
11467
+ if (sourceRef === "") throw new ArkmePluginError("interaction-source-invalid", "请选择一个私聊联系人", false, 400);
11468
+ const expectedVersion = stringParam(params, "expectedVersion").trim();
11469
+ return await service.privateInteractionSummary(sourceRef, {
11470
+ ...expectedVersion === "" ? {} : { expectedVersion },
11471
+ ...requestSignal === void 0 ? {} : { signal: requestSignal }
11472
+ });
11473
+ }
11474
+ case "private-interaction.directory": {
11475
+ const cursor = stringParam(params, "cursor").trim();
11476
+ const expectedVersion = stringParam(params, "expectedVersion").trim();
11477
+ return await service.privateInteractionDirectory({
11478
+ limit: Math.min(100, Math.max(1, Math.trunc(numberParam(params, "limit", 100)))),
11479
+ ...cursor === "" ? {} : { cursor },
11480
+ ...expectedVersion === "" ? {} : { expectedVersion },
11481
+ ...requestSignal === void 0 ? {} : { signal: requestSignal }
11482
+ });
11483
+ }
11484
+ case "private-interaction.query": {
11485
+ const cursor = stringParam(params, "cursor").trim();
11486
+ const expectedVersion = stringParam(params, "expectedVersion").trim();
11487
+ const sourceRef = stringParam(params, "sourceRef").trim();
11488
+ return await service.queryPrivateInteractions({
11489
+ ...sourceRef === "" ? {} : { sourceRef },
11490
+ ...params.unreadOnly === void 0 ? {} : { unreadOnly: booleanParam(params, "unreadOnly") },
11491
+ limit: Math.min(50, Math.max(1, Math.trunc(numberParam(params, "limit", 30)))),
11492
+ ...cursor === "" ? {} : { cursor },
11493
+ ...expectedVersion === "" ? {} : { expectedVersion },
11494
+ ...requestSignal === void 0 ? {} : { signal: requestSignal }
11495
+ });
11496
+ }
11465
11497
  case "directory.list": {
11466
11498
  const countOnly = booleanParam(params, "countOnly");
11467
11499
  const cursor = stringParam(params, "cursor").trim();
@@ -11578,6 +11610,33 @@ async function dispatchArkmeHostOperation(service, operation, params, updateMana
11578
11610
  endDate: stringParam(params, "endDate"),
11579
11611
  ...stringParam(params, "timezone") === "" ? {} : { timezone: stringParam(params, "timezone") }
11580
11612
  });
11613
+ case "calendar.activity": {
11614
+ const source = params?.source;
11615
+ const mode = params?.mode;
11616
+ if (![
11617
+ "record",
11618
+ "chat",
11619
+ "call",
11620
+ "audio",
11621
+ "arko",
11622
+ "bot"
11623
+ ].includes(source) || ![
11624
+ "buckets",
11625
+ "details",
11626
+ "coverage",
11627
+ "transcripts"
11628
+ ].includes(mode)) throw new ArkmePluginError("calendar-activity-invalid", "我的一天数据源或读取模式无效", false, 400);
11629
+ const body = params?.body;
11630
+ if (body === null || typeof body !== "object" || Array.isArray(body)) throw new ArkmePluginError("calendar-activity-body-invalid", "我的一天请求参数无效", false, 400);
11631
+ return await service.calendarBuckets({
11632
+ activity: {
11633
+ source,
11634
+ mode,
11635
+ body
11636
+ },
11637
+ ...requestSignal === void 0 ? {} : { signal: requestSignal }
11638
+ });
11639
+ }
11581
11640
  case "calendar.day-recap": return await service.generateDayRecap(params, requestSignal);
11582
11641
  case "calendar.record-location": return await service.calendarRecordLocation(stringParam(params, "locationRef"), requestSignal);
11583
11642
  case "calendar.records": {
@@ -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-DxKHwHTw.js";
1
+ import { a as persistentArkmeExtensionActive, i as invokePersistentArkmeExtension, n as applyPersistentArkmeHostExtension, o as persistentArkmeExtensionRuntimeState, r as deactivatePersistentArkmeExtension, t as activatePersistentArkmeExtension } from "./persistent-runtime-Cb8xQ4w0.js";
2
2
  export { activatePersistentArkmeExtension, applyPersistentArkmeHostExtension, deactivatePersistentArkmeExtension, invokePersistentArkmeExtension, persistentArkmeExtensionActive, persistentArkmeExtensionRuntimeState };