@tutti-os/agent-gui 0.0.141 → 0.0.143

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
@@ -265,6 +265,12 @@ owner identity. Entries without explicit ownership remain unclassified; AgentGUI
265
265
  does not infer ownership from `owner.name`, `owner.avatarUrl`, or other
266
266
  presentation metadata.
267
267
 
268
+ Host-owned task or activity surfaces can render the same target picker with
269
+ `AgentHandoffMenu`. Pass the authoritative ready `AgentGUIAgentTarget` entries
270
+ and keep launch orchestration in the host's `onSelect` callback; the shared
271
+ component owns only menu disclosure, ownership presentation, and handoff-icon
272
+ motion.
273
+
268
274
  The old public `providerTargets`, `providerRailMode`, provider-target renderers,
269
275
  and `defaultProviderTargetId` contract is intentionally unsupported. Workbench
270
276
  state hydration performs a one-time read of legacy `providerTargetId` into
package/dist/agent-gui.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-VF5HD6RF.js";
3
+ } from "./chunk-Z2J3NPPX.js";
4
4
  import "./chunk-A4WCTHWS.js";
5
- import "./chunk-LIQWMDME.js";
5
+ import "./chunk-JME2T7T7.js";
6
6
  import "./chunk-TUWQV2MC.js";
7
7
  import "./chunk-MHOYBRCY.js";
8
8
  import "./chunk-Q2WMHYIB.js";
@@ -13,7 +13,7 @@ import "./chunk-N2NZASIS.js";
13
13
  import "./chunk-FM42UN2J.js";
14
14
  import "./chunk-UP3ZDYTN.js";
15
15
  import "./chunk-TJW5NWWH.js";
16
- import "./chunk-C4ACYHOY.js";
16
+ import "./chunk-66JZ7BQM.js";
17
17
  import "./chunk-DXT4W2SU.js";
18
18
  import "./chunk-5ZZMG4ZB.js";
19
19
  import "./chunk-VMPA46ET.js";
package/dist/agents.d.ts CHANGED
@@ -7,7 +7,7 @@ declare function resolveAgentGUISelectedDirectoryAgent(input: {
7
7
  agentTargetId?: string | null;
8
8
  defaultAgentTargetId?: string | null;
9
9
  }): AgentGUIAgent | null;
10
- /** Package-internal bridge while the carried node is migrated to agent names. */
11
- declare function projectAgentGUIAgentsToInternalTargets(agents: readonly AgentGUIAgent[]): AgentGUIAgentTarget[];
10
+ /** Projects the canonical Agent directory into target rows for selection menus. */
11
+ declare function projectAgentGUIAgentsToTargets(agents: readonly AgentGUIAgent[]): AgentGUIAgentTarget[];
12
12
 
13
- export { agentGUIAgentIsReady, normalizeAgentGUIAgents, projectAgentGUIAgentsToInternalTargets, resolveAgentGUISelectedDirectoryAgent };
13
+ export { agentGUIAgentIsReady, normalizeAgentGUIAgents, projectAgentGUIAgentsToTargets, resolveAgentGUISelectedDirectoryAgent };
package/dist/agents.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  agentGUIAgentIsReady,
3
3
  normalizeAgentGUIAgents,
4
- projectAgentGUIAgentsToInternalTargets,
4
+ projectAgentGUIAgentsToTargets,
5
5
  resolveAgentGUISelectedDirectoryAgent
6
- } from "./chunk-C4ACYHOY.js";
6
+ } from "./chunk-66JZ7BQM.js";
7
7
  export {
8
8
  agentGUIAgentIsReady,
9
9
  normalizeAgentGUIAgents,
10
- projectAgentGUIAgentsToInternalTargets,
10
+ projectAgentGUIAgentsToTargets,
11
11
  resolveAgentGUISelectedDirectoryAgent
12
12
  };
13
13
  //# sourceMappingURL=agents.js.map
@@ -6565,10 +6565,18 @@ button.agent-gui-node__conversation-section-toggle:hover
6565
6565
  }
6566
6566
 
6567
6567
  .agent-gui-node__conversation-provider-icon {
6568
- display: inline-block;
6569
6568
  flex: 0 0 14px;
6570
6569
  width: 14px;
6571
6570
  height: 14px;
6571
+ }
6572
+
6573
+ .agent-gui-node__conversation-provider-image {
6574
+ display: block;
6575
+ object-fit: contain;
6576
+ }
6577
+
6578
+ .agent-gui-node__conversation-provider-mask-icon {
6579
+ display: inline-block;
6572
6580
  color: var(--text-tertiary);
6573
6581
  background-color: currentColor;
6574
6582
  mask-position: center;
@@ -8729,6 +8737,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8729
8737
  align-items: center;
8730
8738
  justify-content: center;
8731
8739
  color: var(--text-secondary);
8740
+ contain: layout paint;
8732
8741
  }
8733
8742
 
8734
8743
  .agent-gui-node__composer-handoff-icon[data-playing="true"] {
@@ -8762,10 +8771,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8762
8771
  position: absolute;
8763
8772
  inset: 0;
8764
8773
  /* Match the APNG's padded 44px canvas to the static icon's visual size. */
8765
- transform: scale(1.3);
8774
+ transform: translateZ(0) scale(1.3);
8766
8775
  filter: var(--agent-gui-handoff-animation-filter, none);
8767
8776
  opacity: 0;
8768
8777
  pointer-events: none;
8778
+ backface-visibility: hidden;
8779
+ will-change: opacity, transform;
8769
8780
  }
8770
8781
 
8771
8782
  .agent-gui-node__composer-handoff-icon-animated[data-active="true"] {
@@ -8777,6 +8788,16 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8777
8788
  opacity: 0;
8778
8789
  }
8779
8790
 
8791
+ @media (prefers-reduced-motion: reduce) {
8792
+ .agent-gui-node__composer-handoff-icon-animated {
8793
+ display: none;
8794
+ }
8795
+
8796
+ .agent-gui-node__composer-handoff-icon-static {
8797
+ opacity: 1 !important;
8798
+ }
8799
+ }
8800
+
8780
8801
  :root[data-theme="dark"] .agent-gui-node__composer-handoff-icon-animated {
8781
8802
  --agent-gui-handoff-animation-filter: brightness(0) invert(1);
8782
8803
  }
@@ -54,7 +54,7 @@ function resolveAgentGUISelectedDirectoryAgent(input) {
54
54
  }
55
55
  return input.agents.find((agent) => agentGUIAgentIsReady(agent)) ?? input.agents[0] ?? null;
56
56
  }
57
- function projectAgentGUIAgentsToInternalTargets(agents) {
57
+ function projectAgentGUIAgentsToTargets(agents) {
58
58
  return agents.map((agent) => ({
59
59
  targetId: agent.agentTargetId,
60
60
  agentTargetId: agent.agentTargetId,
@@ -99,6 +99,6 @@ export {
99
99
  normalizeAgentGUIAgents,
100
100
  agentGUIAgentIsReady,
101
101
  resolveAgentGUISelectedDirectoryAgent,
102
- projectAgentGUIAgentsToInternalTargets
102
+ projectAgentGUIAgentsToTargets
103
103
  };
104
- //# sourceMappingURL=chunk-C4ACYHOY.js.map
104
+ //# sourceMappingURL=chunk-66JZ7BQM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agents.ts"],"sourcesContent":["import type {\n AgentGUIAgent,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentTarget\n} from \"./types.ts\";\n\nexport function normalizeAgentGUIAgents(\n agents: readonly AgentGUIAgent[] | null | undefined\n): AgentGUIAgent[] {\n const normalized: AgentGUIAgent[] = [];\n const seenAgentTargetIds = new Set<string>();\n for (const agent of agents ?? []) {\n const agentTargetId = agent.agentTargetId.trim();\n const name = agent.name.trim();\n const iconUrl = agent.iconUrl.trim();\n const maskIconUrl = agent.maskIconUrl?.trim() ?? \"\";\n const heroImageUrl = agent.heroImageUrl?.trim() ?? \"\";\n if (\n !agentTargetId ||\n !name ||\n !iconUrl ||\n seenAgentTargetIds.has(agentTargetId)\n ) {\n continue;\n }\n seenAgentTargetIds.add(agentTargetId);\n const ownerName = agent.owner?.name?.trim() ?? \"\";\n const ownerAvatarUrl = agent.owner?.avatarUrl?.trim() ?? \"\";\n const reason = agent.availability.reason?.trim() ?? \"\";\n normalized.push({\n agentTargetId,\n name,\n iconUrl,\n ...(maskIconUrl ? { maskIconUrl } : {}),\n ...(heroImageUrl ? { heroImageUrl } : {}),\n ...(agent.description?.trim()\n ? { description: agent.description.trim() }\n : {}),\n ...(ownerName || ownerAvatarUrl\n ? {\n owner: {\n ...(ownerName ? { name: ownerName } : {}),\n ...(ownerAvatarUrl ? { avatarUrl: ownerAvatarUrl } : {})\n }\n }\n : {}),\n ...(agent.ownership === \"self\" || agent.ownership === \"shared\"\n ? { ownership: agent.ownership }\n : {}),\n availability: {\n status: normalizeAgentGUIAgentAvailabilityStatus(\n agent.availability.status\n ),\n ...(reason ? { reason } : {}),\n ...(agent.availability.pendingAction\n ? { pendingAction: agent.availability.pendingAction }\n : {})\n },\n provider: agent.provider,\n ...(agent.setupKind === \"target_runtime\"\n ? { setupKind: \"target_runtime\" as const }\n : {})\n });\n }\n return normalized;\n}\n\nexport function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean {\n return agent.availability.status === \"ready\";\n}\n\nexport function resolveAgentGUISelectedDirectoryAgent(input: {\n agents: readonly AgentGUIAgent[];\n agentTargetId?: string | null;\n defaultAgentTargetId?: string | null;\n}): AgentGUIAgent | null {\n const explicitAgentTargetId =\n input.agentTargetId?.trim() || input.defaultAgentTargetId?.trim() || \"\";\n if (explicitAgentTargetId) {\n return (\n input.agents.find(\n (agent) => agent.agentTargetId === explicitAgentTargetId\n ) ?? null\n );\n }\n return (\n input.agents.find((agent) => agentGUIAgentIsReady(agent)) ??\n input.agents[0] ??\n null\n );\n}\n\n/** Projects the canonical Agent directory into target rows for selection menus. */\nexport function projectAgentGUIAgentsToTargets(\n agents: readonly AgentGUIAgent[]\n): AgentGUIAgentTarget[] {\n return agents.map((agent) => ({\n targetId: agent.agentTargetId,\n agentTargetId: agent.agentTargetId,\n provider: agent.provider,\n ref: {\n kind: \"agent-directory\",\n provider: agent.provider,\n agentTargetId: agent.agentTargetId,\n ...(agent.setupKind ? { setupKind: agent.setupKind } : {})\n },\n label: agent.name,\n availability: agent.availability,\n ...(agent.description ? { description: agent.description } : {}),\n iconUrl: agent.iconUrl,\n ...(agent.maskIconUrl ? { maskIconUrl: agent.maskIconUrl } : {}),\n ...(agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {}),\n ...(agent.owner?.avatarUrl\n ? {\n badge: {\n iconUrl: agent.owner.avatarUrl,\n ...(agent.owner.name ? { label: agent.owner.name } : {})\n }\n }\n : {}),\n ...(agent.owner?.name ? { ownerLabel: agent.owner.name } : {}),\n ...(agent.ownership ? { ownership: agent.ownership } : {}),\n ...(agent.availability.status !== \"ready\" && !agent.setupKind\n ? { disabled: true }\n : {}),\n ...(agent.availability.reason\n ? { unavailableReason: agent.availability.reason }\n : {})\n }));\n}\n\nfunction normalizeAgentGUIAgentAvailabilityStatus(\n status: AgentGUIAgentAvailabilityStatus\n): AgentGUIAgentAvailabilityStatus {\n switch (status) {\n case \"ready\":\n case \"checking\":\n case \"coming_soon\":\n case \"not_installed\":\n case \"auth_required\":\n case \"unavailable\":\n return status;\n }\n}\n"],"mappings":"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","names":[]}
@@ -23,8 +23,8 @@ import {
23
23
  } from "./chunk-R2ZADXRB.js";
24
24
  import {
25
25
  normalizeAgentGUIAgents,
26
- projectAgentGUIAgentsToInternalTargets
27
- } from "./chunk-C4ACYHOY.js";
26
+ projectAgentGUIAgentsToTargets
27
+ } from "./chunk-66JZ7BQM.js";
28
28
  import {
29
29
  agentGuiDockIconUrls
30
30
  } from "./chunk-DXT4W2SU.js";
@@ -1131,7 +1131,7 @@ function readTrimmedString(value) {
1131
1131
  return typeof value === "string" && value.trim() ? value.trim() : null;
1132
1132
  }
1133
1133
  function resolveUnifiedAgentGuiDockTarget(input) {
1134
- const targets = projectAgentGUIAgentsToInternalTargets(
1134
+ const targets = projectAgentGUIAgentsToTargets(
1135
1135
  normalizeAgentGUIAgents(input.agentDirectory.getSnapshot().agents)
1136
1136
  ).filter(
1137
1137
  (target) => isAgentGuiWorkbenchProvider(target.provider) && isUnifiedAgentGuiDockProvider(target.provider) && target.disabled !== true && isAgentGuiProviderAvailable(target.provider, input.providerAvailability)
@@ -1632,4 +1632,4 @@ export {
1632
1632
  AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT,
1633
1633
  createAgentGuiWorkbenchContribution
1634
1634
  };
1635
- //# sourceMappingURL=chunk-LIQWMDME.js.map
1635
+ //# sourceMappingURL=chunk-JME2T7T7.js.map