@senguoyun/dsh-arkme 0.1.59 → 0.1.60

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 (75) hide show
  1. package/docs/dsh-input-system-topic.md +7 -3
  2. package/lib/client.js +3355 -1674
  3. package/lib/client.js.map +1 -1
  4. package/lib/harness-sidebar-client.js +214 -23
  5. package/lib/index.js +4 -1
  6. package/lib/persistent-extension.js +1 -1
  7. package/lib/{persistent-runtime-ByM3JB3z.js → persistent-runtime-DqPfc6RO.js} +396 -59
  8. package/lib/types/arkme-service.d.ts +3 -0
  9. package/lib/types/arkme-service.d.ts.map +1 -1
  10. package/lib/types/client/ArkmeCalendarSurface.d.ts +22 -1
  11. package/lib/types/client/ArkmeCalendarSurface.d.ts.map +1 -1
  12. package/lib/types/client/ArkmeDshMenu.d.ts +38 -0
  13. package/lib/types/client/ArkmeDshMenu.d.ts.map +1 -0
  14. package/lib/types/client/ArkmeGroupChatControls.d.ts +4 -0
  15. package/lib/types/client/ArkmeGroupChatControls.d.ts.map +1 -1
  16. package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
  17. package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
  18. package/lib/types/client/ArkmeSourceBreadcrumb.d.ts +6 -2
  19. package/lib/types/client/ArkmeSourceBreadcrumb.d.ts.map +1 -1
  20. package/lib/types/client/ArkmeTopicDirectoryPopover.d.ts +4 -2
  21. package/lib/types/client/ArkmeTopicDirectoryPopover.d.ts.map +1 -1
  22. package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
  23. package/lib/types/client/DeepSeekHarnessSurface.d.ts.map +1 -1
  24. package/lib/types/client/PrivateChatActions.d.ts +15 -3
  25. package/lib/types/client/PrivateChatActions.d.ts.map +1 -1
  26. package/lib/types/client/calendar-invalidation-store.d.ts +10 -1
  27. package/lib/types/client/calendar-invalidation-store.d.ts.map +1 -1
  28. package/lib/types/client/calendar-month-cache.d.ts +37 -0
  29. package/lib/types/client/calendar-month-cache.d.ts.map +1 -0
  30. package/lib/types/client/conversation-export.d.ts +18 -0
  31. package/lib/types/client/conversation-export.d.ts.map +1 -0
  32. package/lib/types/client/conversation-menu-layer.d.ts +27 -0
  33. package/lib/types/client/conversation-menu-layer.d.ts.map +1 -0
  34. package/lib/types/client/conversation-menu-scrollbars.d.ts +3 -0
  35. package/lib/types/client/conversation-menu-scrollbars.d.ts.map +1 -0
  36. package/lib/types/client/conversation-selector-style.d.ts +34 -0
  37. package/lib/types/client/conversation-selector-style.d.ts.map +1 -0
  38. package/lib/types/client/harness-session-dropdown.d.ts.map +1 -1
  39. package/lib/types/client/harness-session-hover.d.ts +1 -1
  40. package/lib/types/client/harness-session-hover.d.ts.map +1 -1
  41. package/lib/types/client/harness-session-menu-bridge.d.ts +2 -0
  42. package/lib/types/client/harness-session-menu-bridge.d.ts.map +1 -1
  43. package/lib/types/client/harness-surface-viewport.d.ts +7 -0
  44. package/lib/types/client/harness-surface-viewport.d.ts.map +1 -0
  45. package/lib/types/client/navigation-cache.d.ts +6 -1
  46. package/lib/types/client/navigation-cache.d.ts.map +1 -1
  47. package/lib/types/client/provider-instance-runtime.d.ts.map +1 -1
  48. package/lib/types/client/realtime-client-events.d.ts.map +1 -1
  49. package/lib/types/client/self-topic-directory-cache.d.ts +42 -0
  50. package/lib/types/client/self-topic-directory-cache.d.ts.map +1 -0
  51. package/lib/types/client/self-topic-expansion-preference.d.ts +23 -0
  52. package/lib/types/client/self-topic-expansion-preference.d.ts.map +1 -0
  53. package/lib/types/client/self-topic-menu-bridge.d.ts +20 -0
  54. package/lib/types/client/self-topic-menu-bridge.d.ts.map +1 -0
  55. package/lib/types/client/self-topic-menu-hover.d.ts +3 -0
  56. package/lib/types/client/self-topic-menu-hover.d.ts.map +1 -0
  57. package/lib/types/client/use-calendar-month.d.ts +4 -0
  58. package/lib/types/client/use-calendar-month.d.ts.map +1 -0
  59. package/lib/types/dsh-agent-input-source.d.ts +2 -0
  60. package/lib/types/dsh-agent-input-source.d.ts.map +1 -1
  61. package/lib/types/host-api.d.ts.map +1 -1
  62. package/lib/types/services/calendar-service.d.ts +10 -0
  63. package/lib/types/services/calendar-service.d.ts.map +1 -1
  64. package/lib/types/services/chat-realtime-service.d.ts +3 -1
  65. package/lib/types/services/chat-realtime-service.d.ts.map +1 -1
  66. package/lib/types/services/chat-service.d.ts +3 -1
  67. package/lib/types/services/chat-service.d.ts.map +1 -1
  68. package/lib/types/services/record-service.d.ts.map +1 -1
  69. package/lib/types/services/service.d.ts +5 -0
  70. package/lib/types/services/service.d.ts.map +1 -1
  71. package/lib/types/services/source-service.d.ts +3 -0
  72. package/lib/types/services/source-service.d.ts.map +1 -1
  73. package/lib/types/types.d.ts +3 -1
  74. package/lib/types/types.d.ts.map +1 -1
  75. package/package.json +5 -5
@@ -71,6 +71,181 @@ window.__ModuleLoader__.load({
71
71
  const HARNESS_MENU_CLOSE = "arkme:harness-menu-close";
72
72
  const HARNESS_MENU_POSITION = "arkme:harness-menu-position";
73
73
  //#endregion
74
+ //#region src/client/conversation-selector-style.ts
75
+ /** Native DSH menu metrics, shared by both topic-menu entry points and the session adapter. */
76
+ const CONVERSATION_MENU_LAYOUT = {
77
+ width: 320,
78
+ maxHeight: 560,
79
+ paddingY: 8,
80
+ paddingX: 10,
81
+ rowHeight: 32,
82
+ rowGap: 2,
83
+ titleFontSize: 14,
84
+ secondaryFontSize: 12,
85
+ lineHeight: "20px",
86
+ listBottomPadding: 16,
87
+ fadeHeight: 24,
88
+ createHeight: 38,
89
+ hoverGap: 8,
90
+ viewportInset: 12,
91
+ scrollbarWidth: 8,
92
+ scrollbarContentPadding: 2,
93
+ scrollbarLingerMs: 2e3
94
+ };
95
+ /** Keep the current selection distinct from a transient hover in both menus. */
96
+ const CONVERSATION_MENU_COLORS = {
97
+ selected: "#eef1f8",
98
+ hover: "var(--dsw-alias-interactive-bg-hover, #f3f4f7)"
99
+ };
100
+ const CONVERSATION_MENU_SURFACE = {
101
+ background: "var(--dsw-specific-sidebar-fill, #f9fafb)",
102
+ border: "1px solid var(--dsw-alias-border-l3, #e5e7eb)",
103
+ borderRadius: 10,
104
+ boxShadow: "0 10px 32px #0000001f"
105
+ };
106
+ /** Shared by the native DSH adapter and the self-topic selector, including focus feedback. */
107
+ const CONVERSATION_SELECTOR_CSS = `
108
+ /* Both menus use the native scrollbar tokens and a stable gutter. The list's
109
+ own variables deliberately override the native sidebar's ancestor quietBars. */
110
+ [data-arkme-menu-scroll] {
111
+ --dsh-scrollbar-thumb: transparent;
112
+ --dsh-scrollbar-thumb-hover: transparent;
113
+ scrollbar-gutter: stable;
114
+ padding-right: ${CONVERSATION_MENU_LAYOUT.scrollbarContentPadding}px;
115
+ padding-bottom: ${CONVERSATION_MENU_LAYOUT.listBottomPadding}px;
116
+ }
117
+ [data-arkme-menu-scrollbars="visible"] [data-arkme-menu-scroll] {
118
+ --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);
119
+ --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);
120
+ }
121
+ [data-arkme-menu-scroll]::-webkit-scrollbar { width: ${CONVERSATION_MENU_LAYOUT.scrollbarWidth}px; height: ${CONVERSATION_MENU_LAYOUT.scrollbarWidth}px; }
122
+ [data-arkme-menu-scroll]::-webkit-scrollbar-thumb { background: var(--dsh-scrollbar-thumb); border-radius: 4px; }
123
+ [data-arkme-menu-scroll]::-webkit-scrollbar-thumb:hover { background: var(--dsh-scrollbar-thumb-hover); }
124
+ [data-arkme-menu-scroll]::-webkit-scrollbar-track, [data-arkme-menu-scroll]::-webkit-scrollbar-corner { background: transparent; }
125
+ @supports not selector(::-webkit-scrollbar) {
126
+ [data-arkme-menu-scroll] { scrollbar-width: thin; scrollbar-color: var(--dsh-scrollbar-thumb) transparent; }
127
+ }
128
+ /* Match DSH's solid selector footer and its native New Session / View Options controls. */
129
+ :is([data-arkme-workspace], [data-arkme-self-topic-menu]) .arkme-self-topic-create-button { flex: 1; }
130
+ :is([data-arkme-workspace], [data-arkme-self-topic-menu]) .arkme-self-topic-create-button,
131
+ [data-arkme-session-create] {
132
+ min-width: 0;
133
+ height: 38px;
134
+ border: 1px solid var(--dsw-alias-border-l2, #dfe1e5);
135
+ border-radius: 12px;
136
+ background: var(--dsw-alias-button-elevated-fill, #fff);
137
+ color: var(--dsw-alias-label-primary, #171923);
138
+ padding: 8px 16px;
139
+ gap: 6px;
140
+ font-size: 14px;
141
+ font-weight: 500;
142
+ line-height: 22px;
143
+ white-space: nowrap;
144
+ }
145
+ :is([data-arkme-workspace], [data-arkme-self-topic-menu]) .arkme-self-topic-create-button:hover:not(:disabled),
146
+ [data-arkme-session-create]:hover:not(:disabled) {
147
+ background: var(--dsw-alias-button-floating-hover, #f3f4f7);
148
+ border-color: var(--dsw-alias-border-l2, #d9dade);
149
+ }
150
+ :is([data-arkme-workspace], [data-arkme-self-topic-menu]) .arkme-dsh-view-options-button,
151
+ [data-arkme-session-tools-actions] button {
152
+ corner-shape: round;
153
+ box-sizing: border-box;
154
+ width: 28px;
155
+ height: 28px;
156
+ flex: none;
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ padding: 0;
161
+ border: none;
162
+ border-radius: 50%;
163
+ background: transparent;
164
+ color: var(--dsw-alias-label-secondary);
165
+ cursor: pointer;
166
+ }
167
+ :is([data-arkme-workspace], [data-arkme-self-topic-menu]) .arkme-dsh-view-options-button:hover,
168
+ [data-arkme-session-tools-actions] button:hover {
169
+ background: var(--dsw-alias-interactive-bg-hover);
170
+ }
171
+ [data-arkme-conversation-selector] {
172
+ display: inline-flex; align-items: stretch; gap: 0; min-width: 0; max-width: 100%; height: 30px;
173
+ border: 1px solid var(--dsw-alias-border-l3, #d4d6da); border-radius: 10px; padding: 0; margin-left: 0; box-sizing: border-box;
174
+ color: var(--dsw-alias-label-primary, inherit); background: var(--dsw-alias-button-elevated-fill, #fff); font: inherit;
175
+ font-size: 16px; font-weight: 600; line-height: 28px; overflow: hidden; cursor: pointer; outline: none;
176
+ }
177
+ [data-arkme-conversation-selector] > span:first-child { padding: 0 10px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
178
+ [data-arkme-conversation-selector] > span:last-child {
179
+ color: var(--dsw-alias-label-secondary, #626872); flex: none; width: 28px;
180
+ border-left: 1px solid var(--dsw-alias-border-l3, #d4d6da); display: flex; align-items: center; justify-content: center;
181
+ }
182
+ [data-arkme-conversation-selector][aria-expanded="true"] svg { transform: rotate(180deg); }
183
+ [data-arkme-conversation-selector]:hover, [data-arkme-conversation-selector][aria-expanded="true"] { background: var(--dsw-alias-interactive-bg-hover, #f3f4f6); }
184
+ [data-arkme-conversation-selector]:focus-visible { outline: 2px solid #4c70ef; outline-offset: -2px; }
185
+ `;
186
+ //#endregion
187
+ //#region src/client/conversation-menu-layer.ts
188
+ function conversationMenuPosition(anchor, width, height, viewport) {
189
+ const { hoverGap, viewportInset } = CONVERSATION_MENU_LAYOUT;
190
+ const right = anchor.right + hoverGap;
191
+ const left = right + width <= viewport.width - viewportInset ? right : anchor.left - width - hoverGap;
192
+ return {
193
+ left: Math.max(viewportInset, Math.min(left, viewport.width - width - viewportInset)),
194
+ top: Math.max(viewportInset, Math.min(anchor.top, viewport.height - height - viewportInset))
195
+ };
196
+ }
197
+ //#endregion
198
+ //#region src/client/conversation-menu-scrollbars.ts
199
+ /** The native DSH recipe: reveal on entry, linger for 2s on exit, never resize. */
200
+ function watchConversationMenuScrollbars(menu, list) {
201
+ const doc = menu.ownerDocument;
202
+ const win = doc.defaultView;
203
+ let timer;
204
+ let visible = false;
205
+ const setVisible = (next) => {
206
+ visible = next;
207
+ menu.setAttribute("data-arkme-menu-scrollbars", next ? "visible" : "quiet");
208
+ };
209
+ const cancel = () => {
210
+ win.clearTimeout(timer);
211
+ timer = void 0;
212
+ };
213
+ const enter = () => {
214
+ cancel();
215
+ setVisible(true);
216
+ };
217
+ const leave = () => {
218
+ if (!visible || timer !== void 0) return;
219
+ timer = win.setTimeout(() => {
220
+ timer = void 0;
221
+ setVisible(false);
222
+ }, CONVERSATION_MENU_LAYOUT.scrollbarLingerMs);
223
+ };
224
+ const move = (event) => {
225
+ if (!visible) return;
226
+ const rect = menu.getBoundingClientRect();
227
+ if (event.clientX >= rect.left && event.clientX < rect.right && event.clientY >= rect.top && event.clientY < rect.bottom) cancel();
228
+ else leave();
229
+ };
230
+ list.setAttribute("data-arkme-menu-scroll", "");
231
+ setVisible(menu.matches(":hover"));
232
+ menu.addEventListener("pointerenter", enter);
233
+ menu.addEventListener("pointerleave", leave);
234
+ menu.addEventListener("dragenter", enter);
235
+ doc.addEventListener("pointermove", move);
236
+ doc.addEventListener("dragover", move);
237
+ return () => {
238
+ cancel();
239
+ menu.removeEventListener("pointerenter", enter);
240
+ menu.removeEventListener("pointerleave", leave);
241
+ menu.removeEventListener("dragenter", enter);
242
+ doc.removeEventListener("pointermove", move);
243
+ doc.removeEventListener("dragover", move);
244
+ menu.removeAttribute("data-arkme-menu-scrollbars");
245
+ list.removeAttribute("data-arkme-menu-scroll");
246
+ };
247
+ }
248
+ //#endregion
74
249
  //#region src/client/harness-session-dropdown.ts
75
250
  const PREFIX = "data-arkme-session-";
76
251
  const HEADER = "[data-slot=\"conversation.session.header\"] > header";
@@ -183,6 +358,8 @@ window.__ModuleLoader__.load({
183
358
  const rowFocusCleanups = /* @__PURE__ */ new Map();
184
359
  let toolbarMarks = [];
185
360
  let summaryMarks = [];
361
+ let scrollList;
362
+ let stopScrollbars;
186
363
  let initiallyCollapsed = false;
187
364
  let expandedByUs = false;
188
365
  let columnBefore = {
@@ -196,6 +373,7 @@ window.__ModuleLoader__.load({
196
373
  trigger.type = "button";
197
374
  trigger.setAttribute("aria-haspopup", "dialog");
198
375
  trigger.setAttribute("aria-expanded", "false");
376
+ trigger.setAttribute("data-arkme-conversation-selector", "");
199
377
  mark(trigger, "trigger");
200
378
  const label = doc.createElement("span");
201
379
  const arrow = doc.createElement("span");
@@ -222,26 +400,27 @@ window.__ModuleLoader__.load({
222
400
  html[${PREFIX}preview] body { visibility: hidden !important; }
223
401
  html[${PREFIX}preview] [${PREFIX}column], html[${PREFIX}preview] [role="menu"],
224
402
  html[${PREFIX}preview] [role="dialog"], html[${PREFIX}preview] [role="alertdialog"] { visibility: visible !important; }
225
- [${PREFIX}frame] { grid-template-columns: 0px minmax(0, 1fr) var(--arkme-session-rightbar) !important; }
403
+ [${PREFIX}frame] { grid-template-columns: 0px minmax(0, 1fr) var(--arkme-session-rightbar) !important; transition: none !important; }
226
404
  [${PREFIX}frame] > :nth-child(2) { grid-column: 2; }
227
405
  [${PREFIX}frame] > [data-rightbar-col] { grid-column: 3; }
228
406
  [${PREFIX}frame] > [data-side="sidebar"] { display: none !important; }
229
407
  [${PREFIX}column] {
230
408
  position: fixed !important; left: var(--arkme-session-left); top: var(--arkme-session-top);
231
409
  width: var(--arkme-session-width); height: auto; max-height: var(--arkme-session-height); z-index: 80;
232
- border: 1px solid var(--dsw-alias-border-l3, #e5e7eb); border-radius: 10px;
233
- box-shadow: 0 10px 32px #0000001f; box-sizing: border-box; overflow: visible !important;
410
+ border: ${CONVERSATION_MENU_SURFACE.border}; border-radius: ${CONVERSATION_MENU_SURFACE.borderRadius}px;
411
+ background: ${CONVERSATION_MENU_SURFACE.background}; box-shadow: ${CONVERSATION_MENU_SURFACE.boxShadow}; box-sizing: border-box; overflow: visible !important;
234
412
  display: none !important; pointer-events: none;
235
413
  }
236
414
  [${PREFIX}column][${PREFIX}open] { display: block !important; pointer-events: auto; }
237
- [${PREFIX}root] { width: 100% !important; height: auto; max-height: var(--arkme-session-height); border-radius: 9px; padding: 8px 10px !important; position: relative; }
415
+ html[data-arkme-harness-viewport] [${PREFIX}column] { box-shadow: none; }
416
+ [${PREFIX}root] { width: 100% !important; height: auto; max-height: var(--arkme-session-height); border-radius: 9px; padding: ${CONVERSATION_MENU_LAYOUT.paddingY}px ${CONVERSATION_MENU_LAYOUT.paddingX}px !important; position: relative; }
238
417
  [${PREFIX}brand], [${PREFIX}native-title] { display: none !important; }
239
418
  [${PREFIX}create] { order: 10; flex-shrink: 0; margin: 8px 0 0 !important; }
240
419
  [${PREFIX}root][${PREFIX}compact-tools] [${PREFIX}create] { width: calc(100% - var(--arkme-session-tools-width) - 8px); }
241
420
  [${PREFIX}tools-header] { display: contents !important; }
242
421
  [${PREFIX}tools-label], [${PREFIX}tools-search] { display: none !important; }
243
422
  [${PREFIX}tools-actions] {
244
- position: absolute !important; bottom: 8px; right: 10px; height: 38px;
423
+ position: absolute !important; bottom: ${CONVERSATION_MENU_LAYOUT.paddingY}px; right: ${CONVERSATION_MENU_LAYOUT.paddingX}px; height: ${CONVERSATION_MENU_LAYOUT.createHeight}px;
245
424
  display: flex !important; align-items: center; gap: 4px; max-width: none !important;
246
425
  opacity: 1 !important; visibility: visible !important; transform: none !important;
247
426
  }
@@ -253,21 +432,15 @@ window.__ModuleLoader__.load({
253
432
  [${PREFIX}summary] [data-slot="conversation.session.header.actions"] > * { font-size: inherit; line-height: inherit; }
254
433
  [${PREFIX}turn-count] { display: inline-flex; align-items: center; white-space: nowrap; }
255
434
  [${PREFIX}summary] [data-slot="conversation.session.header.actions"] > * + [${PREFIX}turn-count]::before { content: '·'; margin: 0 7px; }
256
- [${PREFIX}anchor][${PREFIX}fallback] { width: max-content; position: absolute; top: 10px; left: 20px; z-index: 10; max-width: calc(100% - 40px); }
257
- [${PREFIX}trigger] {
258
- display: inline-flex; align-items: stretch; gap: 0; min-width: 0; max-width: 100%; height: 30px;
259
- border: 1px solid var(--dsw-alias-border-l3, #d4d6da); border-radius: 10px; padding: 0; margin-left: 0; box-sizing: border-box;
260
- color: var(--dsw-alias-label-primary, inherit); background: var(--dsw-alias-button-elevated-fill, #fff); font: inherit;
261
- font-size: 16px; font-weight: 600; line-height: 28px; overflow: hidden; cursor: pointer;
262
- }
263
- [${PREFIX}trigger] > span:first-child { padding: 0 10px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
264
- [${PREFIX}trigger] > span:last-child {
265
- color: var(--dsw-alias-label-secondary, #626872); flex: none; width: 28px;
266
- border-left: 1px solid var(--dsw-alias-border-l3, #d4d6da); display: flex; align-items: center; justify-content: center;
435
+ [${PREFIX}anchor][${PREFIX}fallback] {
436
+ width: max-content; position: absolute; top: 10px;
437
+ left: 20px; z-index: 10; max-width: calc(100% - 40px);
267
438
  }
268
- [${PREFIX}trigger][aria-expanded="true"] svg { transform: rotate(180deg); }
269
- [${PREFIX}trigger]:hover, [${PREFIX}trigger][aria-expanded="true"] { background: var(--dsw-alias-interactive-bg-hover, #f3f4f6); }
270
- [${PREFIX}trigger]:focus-visible, [${PREFIX}column] [role="treeitem"]:focus-visible { outline: 2px solid #4c70ef; outline-offset: -2px; }
439
+ ${CONVERSATION_SELECTOR_CSS}
440
+ [${PREFIX}column] [role="treeitem"][aria-selected]:hover { background: ${CONVERSATION_MENU_COLORS.hover}; }
441
+ [${PREFIX}column] [role="treeitem"][aria-selected="true"],
442
+ [${PREFIX}column] [role="treeitem"][aria-selected="true"]:hover { background: ${CONVERSATION_MENU_COLORS.selected}; }
443
+ [${PREFIX}column] [role="treeitem"]:focus-visible { outline: 2px solid #4c70ef; outline-offset: -2px; }
271
444
  `;
272
445
  doc.head.append(style);
273
446
  function close(focus = false) {
@@ -283,6 +456,9 @@ window.__ModuleLoader__.load({
283
456
  }
284
457
  function restore() {
285
458
  close();
459
+ stopScrollbars?.();
460
+ stopScrollbars = void 0;
461
+ scrollList = void 0;
286
462
  for (const cleanup of rowFocusCleanups.values()) cleanup();
287
463
  for (const [node, key] of toolbarMarks) node.removeAttribute(PREFIX + key);
288
464
  toolbarMarks = [];
@@ -320,13 +496,17 @@ window.__ModuleLoader__.load({
320
496
  function position() {
321
497
  if (!current) return;
322
498
  const rect = trigger.getBoundingClientRect();
323
- const width = Math.min(320, win.innerWidth - 24);
499
+ const width = Math.min(CONVERSATION_MENU_LAYOUT.width, win.innerWidth - 24);
324
500
  const anchor = external?.anchor();
325
- const top = anchor ? Math.max(12, Math.min(anchor.top, win.innerHeight - Math.min(560, win.innerHeight - 24) - 12)) : Math.max(8, Math.min(rect.bottom + 7, win.innerHeight - 100));
326
- variable(current.column, "--arkme-session-left", `${Math.max(12, Math.min(anchor?.left ?? rect.left, win.innerWidth - width - 12))}px`);
501
+ const hoverPosition = anchor && conversationMenuPosition(anchor, width, Math.min(CONVERSATION_MENU_LAYOUT.maxHeight, win.innerHeight - 24), {
502
+ width: win.innerWidth,
503
+ height: win.innerHeight
504
+ });
505
+ const top = hoverPosition?.top ?? Math.max(8, Math.min(rect.bottom + 7, win.innerHeight - 100));
506
+ variable(current.column, "--arkme-session-left", `${hoverPosition?.left ?? Math.max(CONVERSATION_MENU_LAYOUT.viewportInset, Math.min(rect.left, win.innerWidth - width - CONVERSATION_MENU_LAYOUT.viewportInset))}px`);
327
507
  variable(current.column, "--arkme-session-top", `${top}px`);
328
508
  variable(current.column, "--arkme-session-width", `${width}px`);
329
- variable(current.column, "--arkme-session-height", `${Math.min(560, win.innerHeight - top - 12)}px`);
509
+ variable(current.column, "--arkme-session-height", `${Math.min(CONVERSATION_MENU_LAYOUT.maxHeight, win.innerHeight - top - CONVERSATION_MENU_LAYOUT.viewportInset)}px`);
330
510
  external?.onLayout();
331
511
  }
332
512
  function sync() {
@@ -355,6 +535,17 @@ window.__ModuleLoader__.load({
355
535
  mark(next.root, "root");
356
536
  mark(next.brand, "brand");
357
537
  mark(next.create, "create");
538
+ const tree = next.root.querySelector("[data-slot=\"sidebar.workspaces\"] [role=\"tree\"]");
539
+ let list = tree ?? void 0;
540
+ for (let node = tree; node && node !== next.root; node = node.parentElement) if (win.getComputedStyle(node).overflowY === "auto") {
541
+ list = node;
542
+ break;
543
+ }
544
+ if (list !== scrollList) {
545
+ stopScrollbars?.();
546
+ scrollList = list;
547
+ stopScrollbars = list ? watchConversationMenuScrollbars(next.root, list) : void 0;
548
+ }
358
549
  const nextTools = compactTools(next);
359
550
  for (const [node, key] of toolbarMarks) if (!nextTools.some(([nextNode, nextKey]) => node === nextNode && key === nextKey)) node.removeAttribute(PREFIX + key);
360
551
  toolbarMarks = nextTools;
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as ARKME_DEFAULT_SHARE_WEBSITE, A as inspectNativeBundleArtifactV3, At as createDesktopLifecycleReader, D as bundleSha256, Dt as ArkmePluginError, E as arkmeSandboxEntryId, Et as normalizeRecentEmojiIds, F as assertExtensionArtifactSize, Ft as __toCommonJS, G as validateVoiceprintPcm16Wav, I as canonicalExtensionJson, J as arkmeRequiredLinkMetadataFallback, K as arkmeExtensionShareRefFromLink, L as sha256Hex, M as packLocalNativeBundleDirectoryV3, Mt as __esmMin, N as readNativeBundleTarballV3, Nt as __exportAll, O as canonicalBundleJson, Ot as retryAfterMillis, P as renderArkmeSandboxHostEntry, Pt as __require, Q as parseArkmeRecordReeditAttachments, R as unpackArkmeExtension, S as ARKME_BUNDLE_ARTIFACT_KIND, St as sameRecordingImportIdentity, T as ArkmeBundleArtifactError, Tt as isRecentEmojiId, U as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, W as ArkmeService, X as arkmeRichBackgroundSound, Y as arkmeFileBackgroundSound, Z as ArkmeRecordReeditDraftConflict, _ as arkmeClientContentDigest, _t as SecretValue, at as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, b as verifyExtensionResolutionSignature, bt as isUnresolvedRecordingImportJob, c as persistentExtensionBundleDirectory, ct as mergeMemberJoinEvents, d as readPersistentExtensionActivation, dt as ARKME_TOOL_FILE_MAX_BYTES, et as ARKME_PROVIDER_CONTRACT_VERSION, f as refreshPersistentClientWrapper, ft as arkmeCanInlineLocalFile, g as activeProfileExtensionOwnerConflicts, gt as ArkmeOutgoingCallError, h as renderArkmeBundleClientBundle, ht as isArkmeBotAvatarRef, i as invokePersistentArkmeExtension, it as ARKME_WORLD_PUBLISH_MAX_IMAGES, j as packBundleFiles, jt as __commonJSMin, k as inspectBundleArtifact, kt as recordOwnerId, l as persistentExtensionPackageIdentity, lt as validateMemberUpdate, m as writePersistentExtensionActivation, mt as arkmePickedFileKind, o as persistentArkmeExtensionRuntimeState, ot as applyMemberUpdate, p as repairPersistentExtensionInstallation, pt as arkmeNormalizedFileMimeType, q as arkmeIsGenericLinkMetadataTitle, r as deactivatePersistentArkmeExtension, s as materializePersistentExtensionBundle, st as cachedMemberItem, t as activatePersistentArkmeExtension, u as quarantinePersistentExtension, ut as ARKME_RUNTIME_INSTANCE_ID, v as arkmeClientContentDigestFromSource, vt as ArkmeDirectMessageAdmissionError, w as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, wt as recordingImportFileNameKey, x as verifyNativeBundleResolutionSignature, xt as recordingImportFileKind, y as verifyBundleResolutionSignature, yt as isRecordingInstantOnOrAfterUnixEpoch, z as ARKME_EXTENSION_FORMAT } from "./persistent-runtime-ByM3JB3z.js";
1
+ import { $ as ARKME_DEFAULT_SHARE_WEBSITE, A as inspectNativeBundleArtifactV3, At as createDesktopLifecycleReader, D as bundleSha256, Dt as ArkmePluginError, E as arkmeSandboxEntryId, Et as normalizeRecentEmojiIds, F as assertExtensionArtifactSize, Ft as __toCommonJS, G as validateVoiceprintPcm16Wav, I as canonicalExtensionJson, J as arkmeRequiredLinkMetadataFallback, K as arkmeExtensionShareRefFromLink, L as sha256Hex, M as packLocalNativeBundleDirectoryV3, Mt as __esmMin, N as readNativeBundleTarballV3, Nt as __exportAll, O as canonicalBundleJson, Ot as retryAfterMillis, P as renderArkmeSandboxHostEntry, Pt as __require, Q as parseArkmeRecordReeditAttachments, R as unpackArkmeExtension, S as ARKME_BUNDLE_ARTIFACT_KIND, St as sameRecordingImportIdentity, T as ArkmeBundleArtifactError, Tt as isRecentEmojiId, U as ARKME_EXTENSION_RUNTIME_UNAVAILABLE_MESSAGE, W as ArkmeService, X as arkmeRichBackgroundSound, Y as arkmeFileBackgroundSound, Z as ArkmeRecordReeditDraftConflict, _ as arkmeClientContentDigest, _t as SecretValue, at as ARKME_WORLD_PUBLISH_MAX_IMAGE_BYTES, b as verifyExtensionResolutionSignature, bt as isUnresolvedRecordingImportJob, c as persistentExtensionBundleDirectory, ct as mergeMemberJoinEvents, d as readPersistentExtensionActivation, dt as ARKME_TOOL_FILE_MAX_BYTES, et as ARKME_PROVIDER_CONTRACT_VERSION, f as refreshPersistentClientWrapper, ft as arkmeCanInlineLocalFile, g as activeProfileExtensionOwnerConflicts, gt as ArkmeOutgoingCallError, h as renderArkmeBundleClientBundle, ht as isArkmeBotAvatarRef, i as invokePersistentArkmeExtension, it as ARKME_WORLD_PUBLISH_MAX_IMAGES, j as packBundleFiles, jt as __commonJSMin, k as inspectBundleArtifact, kt as recordOwnerId, l as persistentExtensionPackageIdentity, lt as validateMemberUpdate, m as writePersistentExtensionActivation, mt as arkmePickedFileKind, o as persistentArkmeExtensionRuntimeState, ot as applyMemberUpdate, p as repairPersistentExtensionInstallation, pt as arkmeNormalizedFileMimeType, q as arkmeIsGenericLinkMetadataTitle, r as deactivatePersistentArkmeExtension, s as materializePersistentExtensionBundle, st as cachedMemberItem, t as activatePersistentArkmeExtension, u as quarantinePersistentExtension, ut as ARKME_RUNTIME_INSTANCE_ID, v as arkmeClientContentDigestFromSource, vt as ArkmeDirectMessageAdmissionError, w as ARKME_NATIVE_BUNDLE_ARTIFACT_KIND, wt as recordingImportFileNameKey, x as verifyNativeBundleResolutionSignature, xt as recordingImportFileKind, y as verifyBundleResolutionSignature, yt as isRecordingInstantOnOrAfterUnixEpoch, z as ARKME_EXTENSION_FORMAT } from "./persistent-runtime-DqPfc6RO.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-y7wzJLOx.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";
@@ -11558,7 +11558,9 @@ async function dispatchArkmeHostOperation(service, operation, params, updateMana
11558
11558
  scope: recordingSpeakerScopeParam(params)
11559
11559
  }, requestSignal);
11560
11560
  case "calendar.buckets": return await service.calendarBuckets({
11561
+ ...params?.background === true ? { background: true } : {},
11561
11562
  startDate: stringParam(params, "startDate"),
11563
+ ...params?.sourceRef === void 0 ? {} : { sourceRef: stringParam(params, "sourceRef") },
11562
11564
  ...requestSignal === void 0 ? {} : { signal: requestSignal },
11563
11565
  endDate: stringParam(params, "endDate"),
11564
11566
  ...stringParam(params, "timezone") === "" ? {} : { timezone: stringParam(params, "timezone") }
@@ -11567,6 +11569,7 @@ async function dispatchArkmeHostOperation(service, operation, params, updateMana
11567
11569
  const cursor = cursorParam(params);
11568
11570
  return await service.calendarRecords({
11569
11571
  bucketDate: stringParam(params, "bucketDate"),
11572
+ ...params?.sourceRef === void 0 ? {} : { sourceRef: stringParam(params, "sourceRef") },
11570
11573
  ...requestSignal === void 0 ? {} : { signal: requestSignal },
11571
11574
  limit: numberParam(params, "limit", 20),
11572
11575
  ...stringParam(params, "timezone") === "" ? {} : { timezone: stringParam(params, "timezone") },
@@ -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-ByM3JB3z.js";
1
+ import { a as persistentArkmeExtensionActive, i as invokePersistentArkmeExtension, n as applyPersistentArkmeHostExtension, o as persistentArkmeExtensionRuntimeState, r as deactivatePersistentArkmeExtension, t as activatePersistentArkmeExtension } from "./persistent-runtime-DqPfc6RO.js";
2
2
  export { activatePersistentArkmeExtension, applyPersistentArkmeHostExtension, deactivatePersistentArkmeExtension, invokePersistentArkmeExtension, persistentArkmeExtensionActive, persistentArkmeExtensionRuntimeState };