@tutti-os/agent-gui 0.0.220 → 0.0.222

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.
@@ -7,7 +7,7 @@ import {
7
7
  reconcileProjectedAgentConversationVM,
8
8
  serializeAgentConversationForClipboard,
9
9
  useProjectedAgentConversation
10
- } from "../chunk-6SYYX63E.js";
10
+ } from "../chunk-BJSTRLSI.js";
11
11
  import "../chunk-F6J3LJXK.js";
12
12
  import "../chunk-Z35E22WS.js";
13
13
  import "../chunk-LQMIEH4C.js";
package/dist/agent-gui.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-DBM4HFIU.js";
3
+ } from "./chunk-LZW5S3XJ.js";
4
4
  import "./chunk-LB4AGT7B.js";
5
5
  import "./chunk-A4WCTHWS.js";
6
6
  import "./chunk-7V5XYXKB.js";
@@ -11,7 +11,7 @@ import "./chunk-MGSRWYRN.js";
11
11
  import "./chunk-CBMWHQ7P.js";
12
12
  import "./chunk-KZIW5CCW.js";
13
13
  import "./chunk-EVQ4JY3N.js";
14
- import "./chunk-6SYYX63E.js";
14
+ import "./chunk-BJSTRLSI.js";
15
15
  import "./chunk-F6J3LJXK.js";
16
16
  import "./chunk-Z35E22WS.js";
17
17
  import "./chunk-LQMIEH4C.js";
@@ -3797,6 +3797,17 @@ aside.workspace-agents-status-panel
3797
3797
  margin-right: -36px;
3798
3798
  }
3799
3799
 
3800
+ /*
3801
+ * Participant headers render once per visible turn. Later assistant-owned
3802
+ * transcript rows are siblings of that header row, so carry the same
3803
+ * avatar-and-gap inset onto their content without changing host row padding.
3804
+ */
3805
+ .agent-gui-transcript-row[data-agent-transcript-row-participant-content="assistant"]
3806
+ > * {
3807
+ box-sizing: border-box;
3808
+ padding-left: 36px;
3809
+ }
3810
+
3800
3811
  .agent-gui-conversation__participant-name {
3801
3812
  overflow: hidden;
3802
3813
  font-size: 13px;
@@ -5636,8 +5647,6 @@ aside.workspace-agents-status-panel
5636
5647
  align-items: center;
5637
5648
  gap: 10px;
5638
5649
  min-width: 0;
5639
- /* Right inset mirrors the conversation list's 4px padding + 8px native
5640
- scrollbar gutter so the toolbar controls end flush with the row edges. */
5641
5650
  padding: 2px 12px 16px 12px;
5642
5651
  }
5643
5652
 
@@ -5978,10 +5987,9 @@ aside.workspace-agents-status-panel
5978
5987
  min-height: 0;
5979
5988
  overflow-x: hidden;
5980
5989
  overflow-y: auto;
5981
- /* Right inset stays 4px because the always-visible native scrollbar already
5982
- reserves an 8px gutter, keeping the visual right inset at 12px like the
5983
- left side. */
5984
- padding: 0 4px 18px 12px;
5990
+ /* The native overlay scrollbar does not reserve a gutter on macOS, so the
5991
+ right inset must match the left side explicitly. */
5992
+ padding: 0 12px 18px 12px;
5985
5993
  }
5986
5994
 
5987
5995
  .agent-gui-node__conversation-section {
@@ -8900,6 +8908,64 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8900
8908
  opacity: 1;
8901
8909
  }
8902
8910
 
8911
+ .agent-gui-node__composer-tutti-mode-icon {
8912
+ position: relative;
8913
+ display: inline-flex;
8914
+ width: 16px;
8915
+ height: 16px;
8916
+ flex: 0 0 16px;
8917
+ align-items: center;
8918
+ justify-content: center;
8919
+ /* Inherit color from the chip label so the mark tracks every state:
8920
+ text-secondary at rest, text-primary on hover, tutti-purple when armed. */
8921
+ contain: layout paint;
8922
+ }
8923
+
8924
+ .agent-gui-node__composer-tutti-mode-icon-static,
8925
+ .agent-gui-node__composer-tutti-mode-icon-animated {
8926
+ width: 16px;
8927
+ height: 16px;
8928
+ display: block;
8929
+ }
8930
+
8931
+ .agent-gui-node__composer-tutti-mode-icon-static {
8932
+ background-color: currentColor;
8933
+ opacity: 1;
8934
+ }
8935
+
8936
+ .agent-gui-node__composer-tutti-mode-icon:has(
8937
+ .agent-gui-node__composer-tutti-mode-icon-animated[data-active="true"]
8938
+ )
8939
+ .agent-gui-node__composer-tutti-mode-icon-static {
8940
+ opacity: 0;
8941
+ }
8942
+
8943
+ .agent-gui-node__composer-tutti-mode-icon-animated {
8944
+ position: absolute;
8945
+ inset: 0;
8946
+ /* Match the 16px static mark exactly; the APNG canvas already pads the
8947
+ snapping hand and bursting stars, so no enlargement is applied. */
8948
+ transform: translateZ(0);
8949
+ opacity: 0;
8950
+ pointer-events: none;
8951
+ backface-visibility: hidden;
8952
+ will-change: opacity, transform;
8953
+ }
8954
+
8955
+ .agent-gui-node__composer-tutti-mode-icon-animated[data-active="true"] {
8956
+ opacity: 1;
8957
+ }
8958
+
8959
+ @media (prefers-reduced-motion: reduce) {
8960
+ .agent-gui-node__composer-tutti-mode-icon-animated {
8961
+ display: none;
8962
+ }
8963
+
8964
+ .agent-gui-node__composer-tutti-mode-icon-static {
8965
+ opacity: 1 !important;
8966
+ }
8967
+ }
8968
+
8903
8969
  .agent-gui-node__composer-handoff-icon[data-disabled="true"]
8904
8970
  .agent-gui-node__composer-handoff-icon-animated {
8905
8971
  opacity: 0;
@@ -12251,7 +12251,7 @@ function AgentVisibleErrorMessage({
12251
12251
  {
12252
12252
  role: isPlanOrQuotaLimit ? "status" : "alert",
12253
12253
  className: `box-border w-full min-w-0 rounded-[8px] border p-3 text-[13px] leading-5 text-[var(--text-primary)] ${ERROR_BANNER_CLASS_NAME}`,
12254
- children: /* @__PURE__ */ jsxs42("div", { className: "flex min-w-0 items-start gap-3", children: [
12254
+ children: /* @__PURE__ */ jsxs42("div", { className: "flex min-w-0 items-center gap-3", children: [
12255
12255
  /* @__PURE__ */ jsxs42("div", { className: "min-w-0 flex-1", children: [
12256
12256
  /* @__PURE__ */ jsx58("div", { className: "font-medium text-[var(--text-primary)]", children: headline }),
12257
12257
  hint ? /* @__PURE__ */ jsx58("div", { className: "mt-1 text-[11px] text-[var(--text-secondary)]", children: hint }) : null
@@ -12262,7 +12262,7 @@ function AgentVisibleErrorMessage({
12262
12262
  type: "button",
12263
12263
  variant: "ghost",
12264
12264
  size: "sm",
12265
- className: "mt-0.5 shrink-0",
12265
+ className: "shrink-0",
12266
12266
  onClick: () => {
12267
12267
  if (externalAction?.url) {
12268
12268
  onExternalLink?.(externalAction.url);
@@ -15509,6 +15509,19 @@ function participantPresentationEqual(previous, next) {
15509
15509
  }
15510
15510
  return previous.user.name === next.user.name && previous.user.avatarUrl === next.user.avatarUrl && previous.agent.name === next.agent.name && previous.agent.avatarUrl === next.agent.avatarUrl;
15511
15511
  }
15512
+ function isAssistantParticipantContentRow(row) {
15513
+ switch (row.kind) {
15514
+ case "message":
15515
+ return row.speaker === "assistant";
15516
+ case "generated-image":
15517
+ case "processing":
15518
+ case "tool-group":
15519
+ case "turn-summary":
15520
+ return true;
15521
+ case "goal-control":
15522
+ return false;
15523
+ }
15524
+ }
15512
15525
  function transcriptLabelsEqual(previous, next) {
15513
15526
  return previous === next || previous.thinkingLabel === next.thinkingLabel && previous.processing === next.processing && previous.turnSummary === next.turnSummary && previous.rawTimelineJson === next.rawTimelineJson && previous.userMessageLocator === next.userMessageLocator && previous.toolCallsLabel === next.toolCallsLabel;
15514
15527
  }
@@ -15700,6 +15713,8 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15700
15713
  const renderRow = (row, rowIndex, renderKey) => {
15701
15714
  const rowKey = renderKey ?? (displayRows[rowIndex] === row ? rowKeys[rowIndex] ?? transcriptRowKey(row) : transcriptRowKey(row));
15702
15715
  const shouldAnimateEnter = row.kind !== "processing" && enteringRowKeys.has(rowKey);
15716
+ const showParticipantHeader = participantHeaderRenderKeys?.has(rowKey) ?? false;
15717
+ const participantContent = participantHeadersEnabled && !showParticipantHeader && isAssistantParticipantContentRow(row) ? "assistant" : void 0;
15703
15718
  return /* @__PURE__ */ jsx70(
15704
15719
  "div",
15705
15720
  {
@@ -15710,6 +15725,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15710
15725
  "data-agent-transcript-row-thinking-first": row.kind === "message" && row.speaker === "assistant" && row.thinking.length > 0 ? "true" : void 0,
15711
15726
  "data-agent-transcript-row-thinking-last": row.kind === "message" && row.speaker === "assistant" && row.thinking.length > 0 && row.messages.length === 0 ? "true" : void 0,
15712
15727
  "data-agent-transcript-row-index": rowIndex,
15728
+ "data-agent-transcript-row-participant-content": participantContent,
15713
15729
  "data-agent-transcript-row-enter": shouldAnimateEnter ? "true" : void 0,
15714
15730
  children: /* @__PURE__ */ jsx70(
15715
15731
  AgentTranscriptItemView,
@@ -15725,7 +15741,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15725
15741
  workspaceAppIcons,
15726
15742
  showRawTimelineJson,
15727
15743
  participantPresentation,
15728
- showParticipantHeader: participantHeaderRenderKeys?.has(rowKey) ?? false,
15744
+ showParticipantHeader,
15729
15745
  toolGroupExpanded: row.kind === "tool-group" ? expandedToolRows[rowKey] === true : void 0,
15730
15746
  toolGroupExpansionKey: row.kind === "tool-group" ? rowKey : void 0,
15731
15747
  onToolGroupExpandedChange: handleToolGroupExpandedChange
@@ -15967,4 +15983,4 @@ export {
15967
15983
  AgentConversationFlow,
15968
15984
  useProjectedAgentConversation
15969
15985
  };
15970
- //# sourceMappingURL=chunk-6SYYX63E.js.map
15986
+ //# sourceMappingURL=chunk-BJSTRLSI.js.map