@tutti-os/agent-gui 0.0.90 → 0.0.92

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/README.md CHANGED
@@ -131,6 +131,18 @@ directly. With multiple agents, it shows `All` plus the host-ordered agent rail
131
131
  and empty-home carousel. Hosts may customize the aggregate icon with
132
132
  `allAgentsPresentation.iconUrl`.
133
133
 
134
+ Inside AgentGUI, normalized directory entries use the canonical
135
+ `AgentGUIAgentTarget` / `agentTargets` vocabulary. `provider` is execution
136
+ metadata, not target identity. Rail tiles, the single-agent empty state, and
137
+ the WebGL empty-home carousel all project the same agent-target avatar
138
+ presentation, including the owner badge; renderer-specific DOM and WebGL code
139
+ must not rebuild partial icon-only models.
140
+
141
+ Hosts serving `owner.avatarUrl` from another origin must enable anonymous CORS
142
+ for that asset. The WebGL carousel keeps a local programmatic owner marker when
143
+ the remote image cannot be decoded or uploaded safely, while DOM avatar
144
+ surfaces continue using the same shared presentation.
145
+
134
146
  Use `agentsLoading` for directory hydration and `renderAgentsEmpty` for a
135
147
  host-specific loaded-empty state. Use `renderAgentUnavailableState` or
136
148
  `renderAgentReadinessState` for host-specific availability presentation, and
@@ -4,11 +4,11 @@ import { W as WorkspaceLinkAction } from '../workspaceLinkActions-DS9LWqzI.js';
4
4
  import { A as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-DeYPURtF.js';
5
5
  import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-CfXN_TQ2.js';
6
6
  export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-CfXN_TQ2.js';
7
- import { e as AgentGUIProviderSkillOption } from '../agentGuiNodeTypes-D4mk1Nr3.js';
7
+ import { e as AgentGUIProviderSkillOption } from '../agentGuiNodeTypes-rGaDqxVR.js';
8
8
  export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-TXH1VXrk.js';
9
9
  import '@tutti-os/workspace-issue-manager/core';
10
10
  import '@tutti-os/agent-activity-core';
11
- import '../types-BvztUbHf.js';
11
+ import '../types-PLFZ8SBX.js';
12
12
  import '@tutti-os/workspace-user-project/contracts';
13
13
 
14
14
  interface AgentConversationFlowProps {
@@ -6,7 +6,7 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-KTXWPKGP.js";
9
+ } from "../chunk-7QHBFRG5.js";
10
10
  import "../chunk-XQUUELKF.js";
11
11
  import "../chunk-PSLAWU25.js";
12
12
  import "../chunk-KQE5KV2V.js";
@@ -1,5 +1,5 @@
1
1
  import { AgentActivityUsage } from '@tutti-os/agent-activity-core';
2
- import { k as AgentHostAgentSessionCommand, l as AgentHostAgentSessionComposerSettings, n as AgentHostAgentSessionReasoningEffort, o as AgentHostAgentSessionSpeed, m as AgentHostAgentSessionPermissionConfig, p as AgentHostAgentSessionState, g as AgentGUIProvider, s as AgentPromptContentBlock, f as AgentGUINodeData, i as AgentGUIProviderTarget, h as AgentGUIProviderReadinessGate } from './types-BvztUbHf.js';
2
+ import { k as AgentHostAgentSessionCommand, l as AgentHostAgentSessionComposerSettings, n as AgentHostAgentSessionReasoningEffort, o as AgentHostAgentSessionSpeed, m as AgentHostAgentSessionPermissionConfig, p as AgentHostAgentSessionState, h as AgentGUIProvider, s as AgentPromptContentBlock, g as AgentGUINodeData, e as AgentGUIAgentTarget, i as AgentGUIProviderReadinessGate } from './types-PLFZ8SBX.js';
3
3
  import { A as AgentHostBatchUserInfoInput, a as AgentHostBatchUserInfoResult, b as AgentHostDeleteWorkspaceAgentSessionInput, k as AgentHostWorkspaceAgentSessionSummaryInput, j as AgentHostWorkspaceAgentSessionSummary, e as AgentHostWorkspaceAgentListInput, l as AgentHostWorkspaceAgentSnapshot, i as AgentHostWorkspaceAgentSessionMessagesInput, h as AgentHostWorkspaceAgentSessionMessages, p as WorkspaceAgentActivitySyncState } from './workspaceAgentActivityListViewModel-TXH1VXrk.js';
4
4
  import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-CfXN_TQ2.js';
5
5
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
@@ -604,10 +604,10 @@ interface AgentGUINodeViewModel {
604
604
  workspacePath?: string | null;
605
605
  currentUserId?: string | null;
606
606
  data: AgentGUINodeData;
607
- selectedProviderTarget: AgentGUIProviderTarget;
608
- providerTargets: readonly AgentGUIProviderTarget[];
609
- handoffProviderTargets: readonly AgentGUIProviderTarget[];
610
- providerTargetsLoading: boolean;
607
+ selectedAgentTarget: AgentGUIAgentTarget;
608
+ agentTargets: readonly AgentGUIAgentTarget[];
609
+ handoffAgentTargets: readonly AgentGUIAgentTarget[];
610
+ agentTargetsLoading: boolean;
611
611
  conversationFilter: AgentGUIConversationFilter;
612
612
  conversations: AgentGUIConversationSummary[];
613
613
  userProjects: AgentGUIConversationUserProject[];
@@ -6644,7 +6644,7 @@ button.agent-gui-node__conversation-section-toggle:hover
6644
6644
 
6645
6645
  .agent-gui-node__timeline-centered {
6646
6646
  display: flex;
6647
- align-items: center;
6647
+ align-items: stretch;
6648
6648
  justify-content: center;
6649
6649
  }
6650
6650
 
@@ -8852,6 +8852,9 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8852
8852
  }
8853
8853
 
8854
8854
  .agent-gui-node__provider-rail-avatar {
8855
+ --agent-gui-avatar-badge-offset: -4px;
8856
+ --agent-gui-avatar-badge-size: 16px;
8857
+
8855
8858
  position: relative;
8856
8859
  box-sizing: border-box;
8857
8860
  display: grid;
@@ -8905,23 +8908,34 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8905
8908
  object-fit: contain;
8906
8909
  }
8907
8910
 
8908
- .agent-gui-node__provider-rail-badge {
8911
+ .agent-gui-node__agent-avatar {
8912
+ position: relative;
8913
+ }
8914
+
8915
+ .agent-gui-node__agent-avatar-image {
8916
+ display: block;
8917
+ width: 100%;
8918
+ height: 100%;
8919
+ object-fit: contain;
8920
+ }
8921
+
8922
+ .agent-gui-node__agent-avatar-badge {
8909
8923
  position: absolute;
8910
- right: -4px;
8911
- bottom: -4px;
8924
+ right: var(--agent-gui-avatar-badge-offset, -4px);
8925
+ bottom: var(--agent-gui-avatar-badge-offset, -4px);
8912
8926
  box-sizing: border-box;
8913
8927
  display: grid;
8914
- width: 16px;
8915
- height: 16px;
8928
+ width: var(--agent-gui-avatar-badge-size, 16px);
8929
+ height: var(--agent-gui-avatar-badge-size, 16px);
8916
8930
  place-items: center;
8917
8931
  overflow: hidden;
8918
- border: 1px solid #fff;
8932
+ border: 1px solid var(--background-fronted);
8919
8933
  border-radius: 999px;
8920
- background: #fff;
8934
+ background: var(--background-fronted);
8921
8935
  pointer-events: none;
8922
8936
  }
8923
8937
 
8924
- .agent-gui-node__provider-rail-badge-image {
8938
+ .agent-gui-node__agent-avatar-badge-image {
8925
8939
  width: 100%;
8926
8940
  height: 100%;
8927
8941
  object-fit: cover;
@@ -8953,7 +8967,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8953
8967
  display: flex;
8954
8968
  width: 100%;
8955
8969
  min-height: 100%;
8956
- align-items: center;
8970
+ align-items: flex-start;
8957
8971
  justify-content: center;
8958
8972
  padding: 24px clamp(32px, 4vw, 48px) 40px;
8959
8973
  }
@@ -8978,12 +8992,44 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8978
8992
  slot; keep it centered in the hero column. */
8979
8993
  .agent-gui-node__empty-hero-icon-slot:has(
8980
8994
  > .agent-gui-node__empty-hero-carousel
8981
- ) {
8995
+ ),
8996
+ .agent-gui-node__empty-hero-icon-slot[data-carousel-placeholder="true"] {
8982
8997
  width: min(400px, 100%);
8983
- height: auto;
8998
+ height: 112px;
8999
+ }
9000
+
9001
+ .agent-gui-node__empty-hero-carousel-stage {
9002
+ position: relative;
9003
+ width: 100%;
9004
+ min-height: 100%;
9005
+ }
9006
+
9007
+ .agent-gui-node__empty-hero-carousel-layer {
9008
+ position: absolute;
9009
+ z-index: 1;
9010
+ top: 24px;
9011
+ left: 50%;
9012
+ width: min(400px, calc(100% - 64px));
9013
+ transform: translateX(-50%);
9014
+ }
9015
+
9016
+ .agent-gui-node__empty-hero-carousel-placeholder {
9017
+ width: min(400px, 100%);
9018
+ height: 112px;
9019
+ flex: 0 0 auto;
9020
+ }
9021
+
9022
+ /* Keep the overlayed carousel interactive while the ready/gated body below it
9023
+ changes independently. */
9024
+ .agent-gui-node__empty-hero-carousel-layer
9025
+ > .agent-gui-node__empty-hero-carousel {
9026
+ pointer-events: auto;
8984
9027
  }
8985
9028
 
8986
9029
  .agent-gui-node__empty-hero-icon-effect {
9030
+ --agent-gui-avatar-badge-offset: -5px;
9031
+ --agent-gui-avatar-badge-size: 18px;
9032
+
8987
9033
  display: block;
8988
9034
  width: 48px;
8989
9035
  height: 48px;
@@ -9050,7 +9096,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9050
9096
  }
9051
9097
 
9052
9098
  /* Empty-hero agent carousel ("All" tab): a three.js ring of same-sized agent
9053
- tiles (see agentGuiHeroCarouselScene.ts). Tiles farther around the ring
9099
+ records (see agentGuiHeroCarouselScene.ts). Records farther around the ring
9054
9100
  genuinely shrink and fade with perspective; visuals live on the canvas,
9055
9101
  while visually-hidden buttons keep the switcher reachable by keyboard,
9056
9102
  screen readers, and DOM tests. */
@@ -9081,13 +9127,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9081
9127
  the canvas edges), intersected with a vertical band so tiles sinking
9082
9128
  down the wheel melt away instead of being cut by the canvas bottom. */
9083
9129
  mask-image:
9084
- linear-gradient(
9085
- 90deg,
9086
- transparent 12%,
9087
- #000 36%,
9088
- #000 64%,
9089
- transparent 88%
9090
- ),
9130
+ linear-gradient(90deg, transparent 4%, #000 30%, #000 70%, transparent 96%),
9091
9131
  linear-gradient(180deg, #000 0%, #000 70%, transparent 96%);
9092
9132
  mask-composite: intersect;
9093
9133
  }
@@ -9133,7 +9173,9 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9133
9173
 
9134
9174
  /* Gate gap is 8px; add 16px so the icon-to-title spacing is 24px. */
9135
9175
  .agent-gui-node__empty-provider-gate > .agent-gui-node__empty-hero-icon-effect,
9136
- .agent-gui-node__empty-provider-gate > .agent-gui-node__empty-hero-carousel {
9176
+ .agent-gui-node__empty-provider-gate > .agent-gui-node__empty-hero-carousel,
9177
+ .agent-gui-node__empty-provider-gate
9178
+ > .agent-gui-node__empty-hero-carousel-placeholder {
9137
9179
  margin-bottom: 16px;
9138
9180
  }
9139
9181
 
@@ -15505,4 +15505,4 @@ export {
15505
15505
  AgentConversationFlow,
15506
15506
  useProjectedAgentConversation
15507
15507
  };
15508
- //# sourceMappingURL=chunk-KTXWPKGP.js.map
15508
+ //# sourceMappingURL=chunk-7QHBFRG5.js.map