@tutti-os/agent-gui 0.0.142 → 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-QRBQ6OHG.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
@@ -8737,6 +8737,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8737
8737
  align-items: center;
8738
8738
  justify-content: center;
8739
8739
  color: var(--text-secondary);
8740
+ contain: layout paint;
8740
8741
  }
8741
8742
 
8742
8743
  .agent-gui-node__composer-handoff-icon[data-playing="true"] {
@@ -8770,10 +8771,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8770
8771
  position: absolute;
8771
8772
  inset: 0;
8772
8773
  /* Match the APNG's padded 44px canvas to the static icon's visual size. */
8773
- transform: scale(1.3);
8774
+ transform: translateZ(0) scale(1.3);
8774
8775
  filter: var(--agent-gui-handoff-animation-filter, none);
8775
8776
  opacity: 0;
8776
8777
  pointer-events: none;
8778
+ backface-visibility: hidden;
8779
+ will-change: opacity, transform;
8777
8780
  }
8778
8781
 
8779
8782
  .agent-gui-node__composer-handoff-icon-animated[data-active="true"] {
@@ -8785,6 +8788,16 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8785
8788
  opacity: 0;
8786
8789
  }
8787
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
+
8788
8801
  :root[data-theme="dark"] .agent-gui-node__composer-handoff-icon-animated {
8789
8802
  --agent-gui-handoff-animation-filter: brightness(0) invert(1);
8790
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