@tutti-os/agent-gui 0.0.218 → 0.0.220

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-PZWBLTYH.js";
10
+ } from "../chunk-6SYYX63E.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-OB7GGK6S.js";
3
+ } from "./chunk-DBM4HFIU.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-PZWBLTYH.js";
14
+ import "./chunk-6SYYX63E.js";
15
15
  import "./chunk-F6J3LJXK.js";
16
16
  import "./chunk-Z35E22WS.js";
17
17
  import "./chunk-LQMIEH4C.js";
@@ -3165,6 +3165,12 @@ aside.workspace-agents-status-panel
3165
3165
  color: var(--tutti-purple);
3166
3166
  }
3167
3167
 
3168
+ /* The Tutti intensity chip is a non-button-like indicator: keep it flat on
3169
+ hover instead of picking up the goal-actions button hover background. */
3170
+ .agent-gui-chrome__goal-actions button[data-agent-tutti-tier]:hover {
3171
+ background: transparent;
3172
+ }
3173
+
3168
3174
  .agent-gui-chrome__composer-disclosure {
3169
3175
  display: grid;
3170
3176
  min-width: 0;
@@ -9141,16 +9147,25 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9141
9147
  min-width: 0;
9142
9148
  }
9143
9149
 
9144
- .agent-gui-node__composer-menu-trigger[data-agent-plan-mode-badge="true"] {
9150
+ .agent-gui-node__composer-menu-trigger[data-agent-plan-mode-badge="true"],
9151
+ .agent-gui-node__composer-menu-trigger[data-agent-plan-mode-badge="true"]:hover:not(
9152
+ :disabled
9153
+ ) {
9145
9154
  color: var(--state-warning);
9146
9155
  }
9147
9156
 
9148
- .agent-gui-node__composer-menu-trigger[data-agent-goal-badge="true"] {
9157
+ .agent-gui-node__composer-menu-trigger[data-agent-goal-badge="true"],
9158
+ .agent-gui-node__composer-menu-trigger[data-agent-goal-badge="true"]:hover:not(
9159
+ :disabled
9160
+ ) {
9149
9161
  color: var(--tutti-purple);
9150
9162
  }
9151
9163
 
9152
9164
  /* Active Tutti Mode chip: icon (bg-current) and label both go tutti-purple. */
9153
- .agent-gui-node__composer-menu-trigger[data-agent-tutti-mode-active="true"] {
9165
+ .agent-gui-node__composer-menu-trigger[data-agent-tutti-mode-active="true"],
9166
+ .agent-gui-node__composer-menu-trigger[data-agent-tutti-mode-active="true"]:hover:not(
9167
+ :disabled
9168
+ ) {
9154
9169
  color: var(--tutti-purple);
9155
9170
  }
9156
9171
  .agent-gui-node__composer-menu-trigger:hover:not(:disabled) {
@@ -10865,8 +10880,16 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
10865
10880
  top: 50%;
10866
10881
  left: 0;
10867
10882
  width: max(0px, var(--agent-gui-star-stream-width, 0px));
10868
- height: 28px;
10869
- transform: translateY(calc(-50% - 2px));
10883
+ /* Match the slider track box (h-5 = 1.25rem). The Radix thumb is
10884
+ absolutely positioned, so the slider root -- and therefore this
10885
+ overlay's positioning parent -- is exactly the track height;
10886
+ centering on it keeps stars and their glow clipped to the track
10887
+ instead of spilling above and below it. */
10888
+ height: 1.25rem;
10889
+ transform: translateY(-50%);
10890
+ /* Mirror the slider track's rounded-full so the clipped star layer
10891
+ shares the same capsule silhouette as the gradient track beneath it. */
10892
+ border-radius: 9999px;
10870
10893
  overflow: hidden;
10871
10894
  pointer-events: none;
10872
10895
  }
@@ -13965,33 +13965,48 @@ import { Button as Button2 } from "@tutti-os/ui-system/components";
13965
13965
  import { ChevronDownIcon } from "@tutti-os/ui-system/icons";
13966
13966
 
13967
13967
  // shared/agentConversation/components/agentTurnWorkSectionModel.ts
13968
- function findParticipantHeaderRenderKeys(groups, rowKeys, modelByGroupKey) {
13969
- const headerKeys = /* @__PURE__ */ new Set();
13968
+ function findParticipantHeaderRenderKeys(groups, rowKeys, modelByGroupKey, participantTurnIndexByRowIndex) {
13969
+ const headerCandidateByTurn = /* @__PURE__ */ new Map();
13970
13970
  for (const group of groups) {
13971
13971
  const model = modelByGroupKey.get(group.key);
13972
- const renderedRows = model ? model.collapseEligible ? [
13973
- ...model.leadingRows,
13974
- ...model.sections.flatMap(
13975
- (section) => section.kind === "visible" ? section.rows : []
13976
- ),
13972
+ const renderedRows = model ? [
13973
+ ...model.leadingRows.map((entry) => ({
13974
+ entry,
13975
+ visibilityPriority: 0
13976
+ })),
13977
13977
  ...model.sections.flatMap(
13978
- (section) => section.kind === "work" ? section.rows : []
13978
+ (section) => section.rows.map((entry) => ({
13979
+ entry,
13980
+ visibilityPriority: model.collapseEligible && section.kind === "work" ? 1 : 0
13981
+ }))
13979
13982
  )
13980
- ] : [
13981
- ...model.leadingRows,
13982
- ...model.sections.flatMap((section) => section.rows)
13983
- ] : group.rows;
13984
- const seenSpeakers = /* @__PURE__ */ new Set();
13985
- for (const entry of renderedRows) {
13983
+ ] : group.rows.map((entry) => ({ entry, visibilityPriority: 0 }));
13984
+ for (const { entry, visibilityPriority } of renderedRows) {
13986
13985
  const row = entry.row;
13987
- if (row.kind !== "message" || row.messages.length === 0 || seenSpeakers.has(row.speaker)) {
13986
+ if (row.kind !== "message" || row.messages.length === 0) {
13987
+ continue;
13988
+ }
13989
+ const participantTurnIndex = participantTurnIndexByRowIndex.get(entry.rowIndex) ?? entry.rowIndex;
13990
+ let candidateBySpeaker = headerCandidateByTurn.get(participantTurnIndex);
13991
+ if (!candidateBySpeaker) {
13992
+ candidateBySpeaker = /* @__PURE__ */ new Map();
13993
+ headerCandidateByTurn.set(participantTurnIndex, candidateBySpeaker);
13994
+ }
13995
+ const currentCandidate = candidateBySpeaker.get(row.speaker);
13996
+ if (currentCandidate && currentCandidate.visibilityPriority <= visibilityPriority) {
13988
13997
  continue;
13989
13998
  }
13990
- seenSpeakers.add(row.speaker);
13991
- headerKeys.add(entry.renderKey ?? rowKeys[entry.rowIndex] ?? row.id);
13999
+ candidateBySpeaker.set(row.speaker, {
14000
+ renderKey: entry.renderKey ?? rowKeys[entry.rowIndex] ?? row.id,
14001
+ visibilityPriority
14002
+ });
13992
14003
  }
13993
14004
  }
13994
- return headerKeys;
14005
+ return new Set(
14006
+ [...headerCandidateByTurn.values()].flatMap(
14007
+ (candidateBySpeaker) => [...candidateBySpeaker.values()].map((candidate) => candidate.renderKey)
14008
+ )
14009
+ );
13995
14010
  }
13996
14011
  function resolveAgentTurnTiming(turn, isActiveTurn, submittedAtUnixMs) {
13997
14012
  if (!turn || !Number.isFinite(turn.startedAtUnixMs)) {
@@ -14675,14 +14690,21 @@ function findTurnDividerRowIndexes(turnIndexById, rows) {
14675
14690
  });
14676
14691
  return dividerRowIndexes;
14677
14692
  }
14678
- function findParticipantTurnDividerRowIndexes(rows) {
14693
+ function buildAgentParticipantTurnProjection(rows) {
14679
14694
  const dividerRowIndexes = /* @__PURE__ */ new Set();
14695
+ const turnIndexByRowIndex = /* @__PURE__ */ new Map();
14696
+ let turnIndex = 0;
14680
14697
  rows.forEach((row, rowIndex) => {
14681
14698
  if (rowIndex > 0 && row.kind === "message" && row.speaker === "user") {
14699
+ turnIndex += 1;
14682
14700
  dividerRowIndexes.add(rowIndex);
14683
14701
  }
14702
+ turnIndexByRowIndex.set(rowIndex, turnIndex);
14684
14703
  });
14685
- return dividerRowIndexes;
14704
+ return {
14705
+ dividerRowIndexes,
14706
+ turnIndexByRowIndex
14707
+ };
14686
14708
  }
14687
14709
  function attachLeadingToolRowsToFollowingMessages(rows) {
14688
14710
  const result = [];
@@ -14696,10 +14718,7 @@ function attachLeadingToolRowsToFollowingMessages(rows) {
14696
14718
  if (pendingToolRows.length > 0) {
14697
14719
  result.push({
14698
14720
  ...row,
14699
- leadingToolRows: [
14700
- ...row.leadingToolRows ?? [],
14701
- ...pendingToolRows
14702
- ]
14721
+ leadingToolRows: [...row.leadingToolRows ?? [], ...pendingToolRows]
14703
14722
  });
14704
14723
  pendingToolRows = [];
14705
14724
  continue;
@@ -14719,7 +14738,11 @@ function attachLeadingToolRowsToFollowingMessages(rows) {
14719
14738
  function useAgentTranscriptDisplayRows(rows, participantHeadersEnabled) {
14720
14739
  return useMemo7(() => {
14721
14740
  const displayRows = participantHeadersEnabled ? attachLeadingToolRowsToFollowingMessages(rows) : rows;
14722
- return { rows: displayRows, rowKeys: displayRows.map(transcriptRowKey) };
14741
+ return {
14742
+ rows: displayRows,
14743
+ rowKeys: displayRows.map(transcriptRowKey),
14744
+ participantTurnProjection: participantHeadersEnabled ? buildAgentParticipantTurnProjection(displayRows) : null
14745
+ };
14723
14746
  }, [rows, participantHeadersEnabled]);
14724
14747
  }
14725
14748
 
@@ -15542,6 +15565,7 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15542
15565
  );
15543
15566
  const displayRows = transcriptRowSet.rows;
15544
15567
  const rowKeys = transcriptRowSet.rowKeys;
15568
+ const participantTurnProjection = transcriptRowSet.participantTurnProjection;
15545
15569
  const turnGroups = useMemo9(
15546
15570
  () => buildAgentTranscriptTurnGroups(displayRows, rowKeys),
15547
15571
  [displayRows, rowKeys]
@@ -15580,8 +15604,8 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15580
15604
  [conversation.sourceDetail.turns]
15581
15605
  );
15582
15606
  const dividerRowIndexes = useMemo9(
15583
- () => participantHeadersEnabled ? findParticipantTurnDividerRowIndexes(displayRows) : findTurnDividerRowIndexes(turnIndexById, displayRows),
15584
- [displayRows, turnIndexById, participantHeadersEnabled]
15607
+ () => participantTurnProjection ? participantTurnProjection.dividerRowIndexes : findTurnDividerRowIndexes(turnIndexById, displayRows),
15608
+ [displayRows, turnIndexById, participantTurnProjection]
15585
15609
  );
15586
15610
  const canonicalTurnById = new Map(
15587
15611
  (conversation.sourceDetail.sessionTurns ?? []).map((turn) => [
@@ -15605,10 +15629,11 @@ var AgentTranscriptView = memo4(function AgentTranscriptView2({
15605
15629
  ];
15606
15630
  })
15607
15631
  );
15608
- const participantHeaderRenderKeys = participantHeadersEnabled ? findParticipantHeaderRenderKeys(
15632
+ const participantHeaderRenderKeys = participantTurnProjection ? findParticipantHeaderRenderKeys(
15609
15633
  turnGroups,
15610
15634
  rowKeys,
15611
- turnWorkSectionModelByKey
15635
+ turnWorkSectionModelByKey,
15636
+ participantTurnProjection.turnIndexByRowIndex
15612
15637
  ) : null;
15613
15638
  const basePath = conversation.sourceDetail.cwd;
15614
15639
  const workspaceRoot = conversation.workspaceRoot;
@@ -15942,4 +15967,4 @@ export {
15942
15967
  AgentConversationFlow,
15943
15968
  useProjectedAgentConversation
15944
15969
  };
15945
- //# sourceMappingURL=chunk-PZWBLTYH.js.map
15970
+ //# sourceMappingURL=chunk-6SYYX63E.js.map