@tutti-os/agent-gui 0.0.51 → 0.0.53

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/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  AgentInteractivePromptSurface,
24
24
  approvalOptionDisplayLabel
25
- } from "./chunk-M7GNA2WD.js";
25
+ } from "./chunk-BFIYBPFD.js";
26
26
  import {
27
27
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
28
28
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -63,13 +63,13 @@ import {
63
63
  skillTriggerForPrefix,
64
64
  toLocalShortDateTime,
65
65
  useProjectedAgentConversation
66
- } from "./chunk-23YM25SG.js";
66
+ } from "./chunk-3ZVVFQH5.js";
67
67
  import {
68
68
  AgentMessageMarkdown,
69
69
  ZoomableImage,
70
70
  cn,
71
71
  resolveWorkspaceLinkAction
72
- } from "./chunk-RKZMETSQ.js";
72
+ } from "./chunk-PIKG746A.js";
73
73
  import {
74
74
  AGENT_MENTION_FILTER_TAB_ORDER,
75
75
  AgentFileMentionPalette,
@@ -77,7 +77,7 @@ import {
77
77
  DEFAULT_AGENT_MENTION_FILTER,
78
78
  agentMentionItemKey,
79
79
  preloadAgentMentionBrowse
80
- } from "./chunk-BQVYICR7.js";
80
+ } from "./chunk-2OLYX32K.js";
81
81
  import {
82
82
  WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
83
83
  buildWorkspaceAgentActivityListViewModel,
@@ -87,7 +87,7 @@ import {
87
87
  isWorkspaceAgentUntitledTask,
88
88
  mergeWorkspaceAgentActivityDurableAndOverlayMessages,
89
89
  selectWorkspaceAgentActivityOverlayMessages
90
- } from "./chunk-ARCM7YB2.js";
90
+ } from "./chunk-GWHPTB4L.js";
91
91
  import {
92
92
  MANAGED_AGENT_ICON_FALLBACK_URL,
93
93
  MANAGED_AGENT_ICON_URLS,
@@ -105,7 +105,7 @@ import {
105
105
  mentionItemToAttrs,
106
106
  normalizeAgentSessionMentionTitle,
107
107
  parseMentionItemFromHref
108
- } from "./chunk-UUY5VEK4.js";
108
+ } from "./chunk-UKDC63WG.js";
109
109
  import "./chunk-Y35GDLP2.js";
110
110
  import "./chunk-LUGELG5V.js";
111
111
  import {
@@ -4100,7 +4100,7 @@ function setAgentSessionViewDetailMessages(ref, nextMessages, options = {}) {
4100
4100
  return;
4101
4101
  }
4102
4102
  updateAgentSessionView(normalized, (current) => {
4103
- const detailMessages = mergeMessages([], nextMessages);
4103
+ const detailMessages = mergeMessages([], durableOnlyMessages(nextMessages));
4104
4104
  const oldestLoadedVersion = oldestMessageVersion(detailMessages);
4105
4105
  if (sameMessages(current.detailMessages, detailMessages) && current.oldestLoadedVersion === oldestLoadedVersion && current.hasOlderMessages === (options.hasOlderMessages ?? current.hasOlderMessages) && current.isLoadingOlderMessages === (options.isLoadingOlderMessages ?? current.isLoadingOlderMessages)) {
4106
4106
  return current;
@@ -4120,7 +4120,10 @@ function mergeAgentSessionViewDetailMessages(ref, nextMessages, options = {}) {
4120
4120
  return;
4121
4121
  }
4122
4122
  updateAgentSessionView(normalized, (current) => {
4123
- const detailMessages = mergeMessages(current.detailMessages, nextMessages);
4123
+ const detailMessages = mergeMessages(
4124
+ current.detailMessages,
4125
+ durableOnlyMessages(nextMessages)
4126
+ );
4124
4127
  const oldestLoadedVersion = oldestMessageVersion(detailMessages);
4125
4128
  if (sameMessages(current.detailMessages, detailMessages) && current.oldestLoadedVersion === oldestLoadedVersion && current.hasOlderMessages === (options.hasOlderMessages ?? current.hasOlderMessages) && current.isLoadingOlderMessages === (options.isLoadingOlderMessages ?? current.isLoadingOlderMessages)) {
4126
4129
  return current;
@@ -4581,8 +4584,13 @@ function sameMessages(left, right) {
4581
4584
  (item, index) => equivalentMessageValue(item, right[index])
4582
4585
  );
4583
4586
  }
4587
+ function durableOnlyMessages(messages) {
4588
+ return messages.filter(
4589
+ (message) => !isWorkspaceAgentActivityOptimisticMessage(message)
4590
+ );
4591
+ }
4584
4592
  function oldestMessageVersion(messages) {
4585
- const versions = messages.map((message) => message.version).filter((version) => Number.isFinite(version));
4593
+ const versions = messages.filter((message) => !isWorkspaceAgentActivityOptimisticMessage(message)).map((message) => message.version).filter((version) => Number.isFinite(version));
4586
4594
  return versions.length === 0 ? null : Math.min(...versions);
4587
4595
  }
4588
4596
  function equivalentMessageValue(left, right) {
@@ -6096,6 +6104,42 @@ function useAgentGuiConversationList(query) {
6096
6104
  );
6097
6105
  }
6098
6106
 
6107
+ // agent-gui/agentGuiNode/controller/agentGuiController.promptHelpers.ts
6108
+ function createOptimisticPromptMessage(input) {
6109
+ const clientSubmitMessageId = input.clientSubmitId ? createWorkspaceAgentActivityUserMessageIdFromClientSubmitId(
6110
+ input.clientSubmitId
6111
+ ) : null;
6112
+ return {
6113
+ id: 0,
6114
+ workspaceId: input.workspaceId,
6115
+ agentSessionId: input.agentSessionId,
6116
+ messageId: clientSubmitMessageId ?? `optimistic:user:${input.turnId}`,
6117
+ version: 0,
6118
+ turnId: input.turnId,
6119
+ role: "user",
6120
+ kind: "text",
6121
+ payload: {
6122
+ __agentGuiOptimisticPrompt: true,
6123
+ actorId: input.userId,
6124
+ ...input.clientSubmitId ? { clientSubmitId: input.clientSubmitId } : {},
6125
+ content: input.content,
6126
+ text: input.prompt
6127
+ },
6128
+ occurredAtUnixMs: input.occurredAtUnixMs,
6129
+ startedAtUnixMs: input.occurredAtUnixMs
6130
+ };
6131
+ }
6132
+ function normalizeOptionalText(value) {
6133
+ if (typeof value !== "string") {
6134
+ return null;
6135
+ }
6136
+ const trimmed = value.trim();
6137
+ return trimmed ? trimmed : null;
6138
+ }
6139
+ function recordValue(value) {
6140
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
6141
+ }
6142
+
6099
6143
  // agent-gui/agentGuiNode/controller/useAgentGUIActivation.ts
6100
6144
  import { useCallback as useCallback3, useMemo as useMemo3, useState as useState3 } from "react";
6101
6145
  function useAgentGUIActivation({
@@ -6305,18 +6349,6 @@ function composerSettingsSupportFromOptions(composerOptions, sessionRuntimeConte
6305
6349
  };
6306
6350
  }
6307
6351
 
6308
- // agent-gui/agentGuiNode/controller/agentGuiController.promptHelpers.ts
6309
- function normalizeOptionalText(value) {
6310
- if (typeof value !== "string") {
6311
- return null;
6312
- }
6313
- const trimmed = value.trim();
6314
- return trimmed ? trimmed : null;
6315
- }
6316
- function recordValue(value) {
6317
- return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
6318
- }
6319
-
6320
6352
  // agent-gui/agentGuiNode/controller/agentGuiController.composerHelpers.ts
6321
6353
  function normalizeConfigOptionValue(value) {
6322
6354
  return typeof value === "string" && value.trim() ? value.trim() : null;
@@ -7410,17 +7442,46 @@ function messageActivityTimeUnixMs(message) {
7410
7442
  function minFiniteMessageVersion(messages) {
7411
7443
  let result = null;
7412
7444
  for (const message of messages) {
7413
- if (!Number.isFinite(message.version)) {
7445
+ if (!Number.isFinite(message.version) || isWorkspaceAgentActivityOptimisticMessage(message)) {
7414
7446
  continue;
7415
7447
  }
7416
7448
  result = result === null ? message.version : Math.min(result, message.version);
7417
7449
  }
7418
7450
  return result;
7419
7451
  }
7420
- function hasUserTextMessage(messages) {
7421
- return messages.some(
7422
- (message) => message.kind.trim().toLowerCase() === "text" && message.role.trim().toLowerCase() === "user" && workspaceAgentActivityMessageText(message).trim() !== ""
7423
- );
7452
+ function isUserTextMessage(message) {
7453
+ return message.kind.trim().toLowerCase() === "text" && message.role.trim().toLowerCase() === "user" && workspaceAgentActivityMessageText(message).trim() !== "";
7454
+ }
7455
+ function windowHasTurnMissingUserPrompt(messages, newestPagedVersion) {
7456
+ if (newestPagedVersion === null) {
7457
+ return messages.length > 0 && !messages.some(isUserTextMessage);
7458
+ }
7459
+ const turnIdsWithUserPrompt = /* @__PURE__ */ new Set();
7460
+ const pagedTurnIds = /* @__PURE__ */ new Set();
7461
+ for (const message of messages) {
7462
+ if (isWorkspaceAgentActivityOptimisticMessage(message)) {
7463
+ continue;
7464
+ }
7465
+ const turnId = message.turnId?.trim() ?? "";
7466
+ if (!turnId) {
7467
+ continue;
7468
+ }
7469
+ if (Number.isFinite(message.version) && message.version <= newestPagedVersion) {
7470
+ pagedTurnIds.add(turnId);
7471
+ }
7472
+ if (isUserTextMessage(message)) {
7473
+ turnIdsWithUserPrompt.add(turnId);
7474
+ }
7475
+ }
7476
+ if (pagedTurnIds.size === 0) {
7477
+ return false;
7478
+ }
7479
+ for (const turnId of pagedTurnIds) {
7480
+ if (!turnIdsWithUserPrompt.has(turnId)) {
7481
+ return true;
7482
+ }
7483
+ }
7484
+ return false;
7424
7485
  }
7425
7486
  function workspaceAgentActivityMessageText(message) {
7426
7487
  const payload = message.payload;
@@ -7450,7 +7511,7 @@ function workspaceAgentActivityMessageText(message) {
7450
7511
  function maxFiniteMessageVersion(messages) {
7451
7512
  let result = null;
7452
7513
  for (const message of messages) {
7453
- if (!Number.isFinite(message.version)) {
7514
+ if (!Number.isFinite(message.version) || isWorkspaceAgentActivityOptimisticMessage(message)) {
7454
7515
  continue;
7455
7516
  }
7456
7517
  result = result === null ? message.version : Math.max(result, message.version);
@@ -7627,30 +7688,6 @@ function createAgentGUIConversationId() {
7627
7688
  const fallbackHex = Math.random().toString(16).slice(2).padEnd(12, "0");
7628
7689
  return `00000000-0000-4000-8000-${fallbackHex.slice(0, 12)}`;
7629
7690
  }
7630
- function createOptimisticPromptMessage(input) {
7631
- const clientSubmitMessageId = input.clientSubmitId ? createWorkspaceAgentActivityUserMessageIdFromClientSubmitId(
7632
- input.clientSubmitId
7633
- ) : null;
7634
- return {
7635
- id: Math.max(1, Math.floor(input.occurredAtUnixMs)),
7636
- workspaceId: input.workspaceId,
7637
- agentSessionId: input.agentSessionId,
7638
- messageId: clientSubmitMessageId ?? `optimistic:user:${input.turnId}`,
7639
- version: Math.max(1, Math.floor(input.occurredAtUnixMs)),
7640
- turnId: input.turnId,
7641
- role: "user",
7642
- kind: "text",
7643
- payload: {
7644
- __agentGuiOptimisticPrompt: true,
7645
- actorId: input.userId,
7646
- ...input.clientSubmitId ? { clientSubmitId: input.clientSubmitId } : {},
7647
- content: input.content,
7648
- text: input.prompt
7649
- },
7650
- occurredAtUnixMs: input.occurredAtUnixMs,
7651
- startedAtUnixMs: input.occurredAtUnixMs
7652
- };
7653
- }
7654
7691
  function createPendingOptimisticTurnId(clientSubmitId) {
7655
7692
  return `pending:${clientSubmitId}`;
7656
7693
  }
@@ -9987,7 +10024,10 @@ function useAgentGUINodeController({
9987
10024
  );
9988
10025
  let hasOlderMessages = page.hasMore && page.messages.length > 0;
9989
10026
  let oldestLoadedVersion = minFiniteMessageVersion(detailMessages);
9990
- for (let backfillPageIndex = 0; hasOlderMessages && !hasUserTextMessage(detailMessages) && oldestLoadedVersion !== null && backfillPageIndex < AGENT_GUI_DETAIL_MISSING_USER_BACKFILL_PAGE_LIMIT; backfillPageIndex += 1) {
10027
+ for (let backfillPageIndex = 0; hasOlderMessages && windowHasTurnMissingUserPrompt(
10028
+ detailMessages,
10029
+ maxFiniteMessageVersion(page.messages)
10030
+ ) && oldestLoadedVersion !== null && backfillPageIndex < AGENT_GUI_DETAIL_MISSING_USER_BACKFILL_PAGE_LIMIT; backfillPageIndex += 1) {
9991
10031
  reportAgentGUIMessagePageDiagnostic({
9992
10032
  agentSessionId: normalizedAgentSessionId,
9993
10033
  details: {
@@ -26228,13 +26268,20 @@ function getDockAgentProbeLineLabel(line) {
26228
26268
  function AgentProbeInfoPopover({
26229
26269
  lines,
26230
26270
  testId = "agent-probe-info",
26231
- className
26271
+ className,
26272
+ onOpen
26232
26273
  }) {
26233
26274
  "use memo";
26234
26275
  const anchorRef = useRef13(null);
26235
26276
  const popoverRef = useRef13(null);
26236
26277
  const [isOpen, setIsOpen] = useState12(false);
26237
26278
  const [popoverStyle, setPopoverStyle] = useState12(null);
26279
+ const openPopover = useCallback11(() => {
26280
+ if (!isOpen) {
26281
+ onOpen?.();
26282
+ }
26283
+ setIsOpen(true);
26284
+ }, [isOpen, onOpen]);
26238
26285
  const closeIfPointerLeavesPopover = useCallback11((event) => {
26239
26286
  const nextTarget = event.relatedTarget;
26240
26287
  if (nextTarget instanceof Node && (anchorRef.current?.contains(nextTarget) || popoverRef.current?.contains(nextTarget))) {
@@ -26296,7 +26343,7 @@ function AgentProbeInfoPopover({
26296
26343
  className: "desktop-dock-popup__agent-info-popover desktop-dock-popup__agent-info-popover--portal",
26297
26344
  role: "status",
26298
26345
  style: popoverStyle ?? void 0,
26299
- onMouseEnter: () => setIsOpen(true),
26346
+ onMouseEnter: openPopover,
26300
26347
  onMouseLeave: closeIfPointerLeavesPopover,
26301
26348
  children: /* @__PURE__ */ jsx32("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
26302
26349
  const label = getDockAgentProbeLineLabel(line);
@@ -26334,12 +26381,12 @@ function AgentProbeInfoPopover({
26334
26381
  "data-testid": testId,
26335
26382
  onMouseEnter: () => {
26336
26383
  updatePopoverPosition();
26337
- setIsOpen(true);
26384
+ openPopover();
26338
26385
  },
26339
26386
  onMouseLeave: closeIfPointerLeavesPopover,
26340
26387
  onFocus: () => {
26341
26388
  updatePopoverPosition();
26342
- setIsOpen(true);
26389
+ openPopover();
26343
26390
  },
26344
26391
  onBlur: () => setIsOpen(false),
26345
26392
  children: [
@@ -26692,7 +26739,7 @@ function areAgentGUINodePropsEqual(previous, next) {
26692
26739
  previous.workspaceAgentProbes,
26693
26740
  next.workspaceAgentProbes,
26694
26741
  previous.state.provider
26695
- ) && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
26742
+ ) && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
26696
26743
  }
26697
26744
  var AgentGUINode = memo2(function AgentGUINode2({
26698
26745
  nodeId,
@@ -26738,6 +26785,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
26738
26785
  onShowMessage,
26739
26786
  workspaceAgentProbes,
26740
26787
  onAgentProbeDemandChange,
26788
+ onAgentProbeRefreshRequest,
26741
26789
  managedAgentsState,
26742
26790
  contextMentionProviders,
26743
26791
  workspaceAppIcons,
@@ -27472,6 +27520,12 @@ var AgentGUINode = memo2(function AgentGUINode2({
27472
27520
  onAgentProbeDemandChange(null, probeSourceId);
27473
27521
  };
27474
27522
  }, [activeProbeProvider, nodeId, onAgentProbeDemandChange, previewMode]);
27523
+ const handleAgentProbeInfoOpen = useCallback12(() => {
27524
+ if (previewMode || !onAgentProbeRefreshRequest) {
27525
+ return;
27526
+ }
27527
+ onAgentProbeRefreshRequest(activeProbeProvider, `agent-gui:${nodeId}`);
27528
+ }, [activeProbeProvider, nodeId, onAgentProbeRefreshRequest, previewMode]);
27475
27529
  return /* @__PURE__ */ jsx33(
27476
27530
  WorkspaceNodeWindow,
27477
27531
  {
@@ -27504,7 +27558,8 @@ var AgentGUINode = memo2(function AgentGUINode2({
27504
27558
  {
27505
27559
  lines: agentProbeLines,
27506
27560
  testId: "agent-gui-window-agent-info",
27507
- className: AgentGUINode_styles_default.windowAgentInfo
27561
+ className: AgentGUINode_styles_default.windowAgentInfo,
27562
+ onOpen: handleAgentProbeInfoOpen
27508
27563
  }
27509
27564
  ),
27510
27565
  /* @__PURE__ */ jsx33(