@tutti-os/agent-gui 0.0.94 → 0.0.96

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.
Files changed (163) hide show
  1. package/README.md +86 -38
  2. package/dist/AgentGUI-DWdvUV4x.d.ts +1038 -0
  3. package/dist/agent-conversation/index.d.ts +6 -7
  4. package/dist/agent-conversation/index.js +15 -10
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.d.ts +10 -36
  7. package/dist/agent-env/index.js +2 -57
  8. package/dist/agent-env/index.js.map +1 -1
  9. package/dist/agent-gui.d.ts +21 -0
  10. package/dist/agent-gui.js +39 -0
  11. package/dist/agent-message-center/index.d.ts +156 -124
  12. package/dist/agent-message-center/index.js +1656 -1463
  13. package/dist/agent-message-center/index.js.map +1 -1
  14. package/dist/{agentConversationVM-Cl4G0Lln.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
  15. package/dist/agentFileMentionContracts-58IjMU-u.d.ts +108 -0
  16. package/dist/{agentGuiNodeTypes-CAioPXK9.d.ts → agentGuiNodeTypes-B9X4aWfv.d.ts} +123 -163
  17. package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +37 -0
  18. package/dist/agents.d.ts +13 -0
  19. package/dist/agents.js +13 -0
  20. package/dist/app/renderer/agentactivity.css +276 -83
  21. package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
  22. package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
  23. package/dist/{chunk-7BUYFVRI.js → chunk-2HJEOO7W.js} +2931 -2946
  24. package/dist/chunk-2HJEOO7W.js.map +1 -0
  25. package/dist/{chunk-E5FOXRUM.js → chunk-3XXBDYAI.js} +293 -258
  26. package/dist/chunk-3XXBDYAI.js.map +1 -0
  27. package/dist/{chunk-ZUW4B5AT.js → chunk-3Y3F7CS5.js} +21 -32
  28. package/dist/chunk-3Y3F7CS5.js.map +1 -0
  29. package/dist/{chunk-SCLLP5DO.js → chunk-4PQPJ5OY.js} +50 -155
  30. package/dist/chunk-4PQPJ5OY.js.map +1 -0
  31. package/dist/chunk-4YG7YK7S.js +23 -0
  32. package/dist/chunk-4YG7YK7S.js.map +1 -0
  33. package/dist/chunk-5X7YDOC6.js +42 -0
  34. package/dist/chunk-5X7YDOC6.js.map +1 -0
  35. package/dist/{chunk-R2EWECUP.js → chunk-7BXWPI4F.js} +17 -2
  36. package/dist/{chunk-R2EWECUP.js.map → chunk-7BXWPI4F.js.map} +1 -1
  37. package/dist/chunk-AGT7MUTV.js +491 -0
  38. package/dist/chunk-AGT7MUTV.js.map +1 -0
  39. package/dist/chunk-C35SNDVZ.js +96 -0
  40. package/dist/chunk-C35SNDVZ.js.map +1 -0
  41. package/dist/{chunk-5FE7M42A.js → chunk-E4HQUTM3.js} +2 -2
  42. package/dist/chunk-FGLQZ6I4.js +9 -0
  43. package/dist/chunk-FGLQZ6I4.js.map +1 -0
  44. package/dist/chunk-H5F3QSCF.js +25 -0
  45. package/dist/chunk-H5F3QSCF.js.map +1 -0
  46. package/dist/chunk-H6IQ63DQ.js +14 -0
  47. package/dist/chunk-H6IQ63DQ.js.map +1 -0
  48. package/dist/{chunk-45FF4DQU.js → chunk-IYEXLOUE.js} +22 -27
  49. package/dist/chunk-IYEXLOUE.js.map +1 -0
  50. package/dist/{chunk-P72YLKC6.js → chunk-JKIZA7EJ.js} +3573 -3755
  51. package/dist/chunk-JKIZA7EJ.js.map +1 -0
  52. package/dist/chunk-KJQERFKX.js +259 -0
  53. package/dist/chunk-KJQERFKX.js.map +1 -0
  54. package/dist/{chunk-XW4CVBUH.js → chunk-L3GMMGRS.js} +25 -16
  55. package/dist/chunk-L3GMMGRS.js.map +1 -0
  56. package/dist/chunk-MASXZENX.js +231 -0
  57. package/dist/chunk-MASXZENX.js.map +1 -0
  58. package/dist/{chunk-BXVPOGYK.js → chunk-O3Q5SIJH.js} +505 -504
  59. package/dist/chunk-O3Q5SIJH.js.map +1 -0
  60. package/dist/{chunk-554VG7ZW.js → chunk-QVBF5BN5.js} +2 -2
  61. package/dist/{chunk-AWAIUYG4.js → chunk-RE4AXS27.js} +532 -565
  62. package/dist/chunk-RE4AXS27.js.map +1 -0
  63. package/dist/{chunk-7LMJXF4R.js → chunk-TVIGLNNI.js} +20 -16
  64. package/dist/chunk-TVIGLNNI.js.map +1 -0
  65. package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
  66. package/dist/chunk-UGVI47X6.js.map +1 -0
  67. package/dist/{chunk-GAPTLVII.js → chunk-UHBCM6RO.js} +1 -1
  68. package/dist/chunk-UHBCM6RO.js.map +1 -0
  69. package/dist/{chunk-UBDPV34P.js → chunk-W6WAGPMD.js} +1385 -1305
  70. package/dist/chunk-W6WAGPMD.js.map +1 -0
  71. package/dist/chunk-WKSFPJHZ.js +33054 -0
  72. package/dist/chunk-WKSFPJHZ.js.map +1 -0
  73. package/dist/{chunk-IGY4ASUF.js → chunk-WMNS4MAQ.js} +1288 -1696
  74. package/dist/chunk-WMNS4MAQ.js.map +1 -0
  75. package/dist/{chunk-MATIJPGF.js → chunk-XPFHJMZP.js} +541 -401
  76. package/dist/chunk-XPFHJMZP.js.map +1 -0
  77. package/dist/chunk-YMXYBG7U.js +12 -0
  78. package/dist/chunk-YMXYBG7U.js.map +1 -0
  79. package/dist/context-mention-palette/index.d.ts +3 -2
  80. package/dist/context-mention-palette/index.js +17 -12
  81. package/dist/custom-mention.d.ts +42 -0
  82. package/dist/custom-mention.js +17 -0
  83. package/dist/custom-mention.js.map +1 -0
  84. package/dist/dock-icons.d.ts +4 -0
  85. package/dist/dock-icons.js +11 -0
  86. package/dist/dock-icons.js.map +1 -0
  87. package/dist/i18n/index.d.ts +880 -841
  88. package/dist/i18n/index.js +2 -2
  89. package/dist/index.d.ts +56 -1063
  90. package/dist/index.js +78 -35532
  91. package/dist/index.js.map +1 -1
  92. package/dist/mention-search.d.ts +226 -0
  93. package/dist/mention-search.js +29 -0
  94. package/dist/mention-search.js.map +1 -0
  95. package/dist/open-link-lined-JWEKUKME.svg +4 -0
  96. package/dist/pastedTextKinds-D-XuInaS.d.ts +4 -0
  97. package/dist/provider-icons.d.ts +6 -0
  98. package/dist/provider-icons.js +12 -0
  99. package/dist/provider-icons.js.map +1 -0
  100. package/dist/provider-identity.d.ts +9 -0
  101. package/dist/provider-identity.js +21 -0
  102. package/dist/provider-identity.js.map +1 -0
  103. package/dist/runtime-BBNdWgDU.d.ts +10 -0
  104. package/dist/startup-shell.d.ts +8 -0
  105. package/dist/startup-shell.js +184 -0
  106. package/dist/startup-shell.js.map +1 -0
  107. package/dist/{types-PLFZ8SBX.d.ts → types-CnT8rNUI.d.ts} +43 -87
  108. package/dist/workbench/contribution.d.ts +34 -41
  109. package/dist/workbench/contribution.js +10 -6
  110. package/dist/workbench/index.d.ts +5 -4
  111. package/dist/workbench/index.js +27 -25
  112. package/dist/workbench/launch.d.ts +4 -7
  113. package/dist/workbench/launch.js +4 -3
  114. package/dist/workbench/providerCatalog.d.ts +2 -2
  115. package/dist/workbench/providerCatalog.js +2 -1
  116. package/dist/workbench/sessionTitle.d.ts +11 -14
  117. package/dist/workbench/sessionTitle.js +6 -7
  118. package/dist/workbench/state.d.ts +1 -1
  119. package/dist/workbench/state.js +3 -2
  120. package/dist/workbench/types.d.ts +2 -4
  121. package/dist/workbench/types.js +1 -1
  122. package/dist/workspace-agent-generated-files.d.ts +20 -2
  123. package/dist/workspace-agent-generated-files.js +6 -5
  124. package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
  125. package/package.json +70 -26
  126. package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
  127. package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
  128. package/dist/chunk-45FF4DQU.js.map +0 -1
  129. package/dist/chunk-4HP6V2YA.js +0 -207
  130. package/dist/chunk-4HP6V2YA.js.map +0 -1
  131. package/dist/chunk-7BUYFVRI.js.map +0 -1
  132. package/dist/chunk-7LMJXF4R.js.map +0 -1
  133. package/dist/chunk-AWAIUYG4.js.map +0 -1
  134. package/dist/chunk-BXVPOGYK.js.map +0 -1
  135. package/dist/chunk-E5FOXRUM.js.map +0 -1
  136. package/dist/chunk-GAPTLVII.js.map +0 -1
  137. package/dist/chunk-IBIMGLCD.js +0 -66
  138. package/dist/chunk-IBIMGLCD.js.map +0 -1
  139. package/dist/chunk-IGY4ASUF.js.map +0 -1
  140. package/dist/chunk-LR4FA5X6.js +0 -368
  141. package/dist/chunk-LR4FA5X6.js.map +0 -1
  142. package/dist/chunk-MATIJPGF.js.map +0 -1
  143. package/dist/chunk-MKHDRIGN.js +0 -71
  144. package/dist/chunk-MKHDRIGN.js.map +0 -1
  145. package/dist/chunk-P72YLKC6.js.map +0 -1
  146. package/dist/chunk-SCLLP5DO.js.map +0 -1
  147. package/dist/chunk-UBDPV34P.js.map +0 -1
  148. package/dist/chunk-VAKFNNKT.js +0 -410
  149. package/dist/chunk-VAKFNNKT.js.map +0 -1
  150. package/dist/chunk-XDV4ZRVK.js.map +0 -1
  151. package/dist/chunk-XW4CVBUH.js.map +0 -1
  152. package/dist/chunk-ZUW4B5AT.js.map +0 -1
  153. package/dist/plan-decision-ops.d.ts +0 -70
  154. package/dist/plan-decision-ops.js +0 -19
  155. package/dist/queued-prompt-runtime.d.ts +0 -115
  156. package/dist/queued-prompt-runtime.js +0 -9
  157. package/dist/uiSettings-BQS9r2eo.d.ts +0 -6
  158. package/dist/workspaceAgentActivityListViewModel-BzV-cf0D.d.ts +0 -340
  159. package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
  160. /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
  161. /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
  162. /package/dist/{chunk-5FE7M42A.js.map → chunk-E4HQUTM3.js.map} +0 -0
  163. /package/dist/{chunk-554VG7ZW.js.map → chunk-QVBF5BN5.js.map} +0 -0
@@ -136,6 +136,22 @@
136
136
  background: rgb(0 0 0 / 0%);
137
137
  }
138
138
 
139
+ .tsh-zoom-dialog[data-closing="true"] {
140
+ animation: tsh-zoom-dialog-close 180ms ease-out forwards;
141
+ }
142
+
143
+ @keyframes tsh-zoom-dialog-close {
144
+ to {
145
+ opacity: 0;
146
+ }
147
+ }
148
+
149
+ @media (prefers-reduced-motion: reduce) {
150
+ .tsh-zoom-dialog[data-closing="true"] {
151
+ animation-duration: 1ms;
152
+ }
153
+ }
154
+
139
155
  .tsh-zoom-dialog [data-rmiz-btn-unzoom] {
140
156
  position: fixed;
141
157
  top: max(20px, calc(var(--cove-titlebar-reserve, 0px) + 10px));
@@ -4457,6 +4473,20 @@ aside.workspace-agents-status-panel
4457
4473
  cursor: grabbing !important;
4458
4474
  }
4459
4475
 
4476
+ .workbench-window:has(
4477
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4478
+ )
4479
+ .workbench-window__header {
4480
+ z-index: calc(var(--z-panel) + 1);
4481
+ }
4482
+
4483
+ .workbench-window:has(
4484
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4485
+ )
4486
+ .agent-gui-workbench-header::after {
4487
+ display: none;
4488
+ }
4489
+
4460
4490
  .workbench-window:has([data-agent-gui-workbench-header="true"])
4461
4491
  .workbench-window__body {
4462
4492
  grid-row: 1;
@@ -4680,16 +4710,32 @@ aside.workspace-agents-status-panel
4680
4710
  .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]
4681
4711
  .agent-gui-workbench-header__primary {
4682
4712
  grid-column: 1 / -1;
4683
- width: min(100%, 720px);
4713
+ width: 100%;
4684
4714
  background: transparent;
4685
4715
  }
4686
4716
 
4717
+ /*
4718
+ * The standalone window's tool actions belong to native-window chrome, so
4719
+ * collapsing the conversation rail must not pull them into the 720px content
4720
+ * cap. Let the primary row span the window and keep the same trailing inset as
4721
+ * the expanded detail row.
4722
+ */
4723
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"][data-agent-gui-workbench-header-collapsed="true"]
4724
+ .agent-gui-workbench-header__primary {
4725
+ width: 100%;
4726
+ }
4727
+
4728
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4729
+ .agent-gui-workbench-header__secondary-accessory {
4730
+ padding-right: 0;
4731
+ }
4732
+
4687
4733
  /*
4688
4734
  * In the collapsed empty state there is no session title to anchor the control
4689
4735
  * cluster, so the detached-window button's margin-left:auto would strand the
4690
- * icons (in the middle of the 720px content cap, or at the far window edge).
4691
- * Drop the auto push so the controls sit as a compact group right after the
4692
- * traffic lights instead.
4736
+ * icons at the far window edge. Drop the auto push so those window controls sit
4737
+ * as a compact group right after the traffic lights instead. Secondary tool
4738
+ * actions retain their own right alignment across the full header width.
4693
4739
  */
4694
4740
  .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"][data-agent-gui-workbench-header-has-session="false"]
4695
4741
  .agent-gui-workbench-header__detached-window {
@@ -4846,6 +4892,13 @@ aside.workspace-agents-status-panel
4846
4892
  -webkit-app-region: no-drag;
4847
4893
  }
4848
4894
 
4895
+ /* The collapsed primary row already supplies the header's right inset. Avoid
4896
+ stacking the accessory inset when actions move out of the detail column. */
4897
+ .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]
4898
+ .agent-gui-workbench-header__secondary-accessory {
4899
+ padding-right: 0;
4900
+ }
4901
+
4849
4902
  .agent-gui-workbench-header__agent-name,
4850
4903
  .agent-gui-workbench-header__session-title,
4851
4904
  .agent-gui-workbench-header__detail-title {
@@ -4913,6 +4966,24 @@ aside.workspace-agents-status-panel
4913
4966
  pointer-events: none;
4914
4967
  }
4915
4968
 
4969
+ .workbench-window:has(
4970
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4971
+ )
4972
+ .agent-gui-workbench-header__session-title,
4973
+ .workbench-window:has(
4974
+ .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4975
+ )
4976
+ .agent-gui-workbench-header__detail-title {
4977
+ box-sizing: border-box;
4978
+ width: auto;
4979
+ max-width: calc(
4980
+ 100% - var(--agent-gui-tool-sidebar-layout-width, 0px) - 16px
4981
+ );
4982
+ flex: 1 1 0;
4983
+ min-width: 0;
4984
+ overflow: hidden;
4985
+ }
4986
+
4916
4987
  .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4917
4988
  .agent-gui-workbench-header__agent-brand,
4918
4989
  .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
@@ -4979,7 +5050,8 @@ aside.workspace-agents-status-panel
4979
5050
 
4980
5051
  .agent-gui-workbench-header__detached-window
4981
5052
  + .agent-gui-workbench-header__rail-toggle {
4982
- margin-left: 0;
5053
+ /* The primary row gap is 12px; keep this icon pair at a net 8px. */
5054
+ margin-left: -4px;
4983
5055
  }
4984
5056
 
4985
5057
  .workbench-window:has([data-workbench-node-render-error="true"])
@@ -5926,17 +5998,14 @@ button.agent-gui-node__conversation-section-toggle:hover
5926
5998
 
5927
5999
  .agent-gui-node__conversation-list-skeleton-rib {
5928
6000
  height: 12px;
5929
- transform-origin: left center;
5930
6001
  }
5931
6002
 
5932
6003
  .agent-gui-node__conversation-list-skeleton-rib-primary {
5933
6004
  width: 78%;
5934
- transform: rotate(1deg);
5935
6005
  }
5936
6006
 
5937
6007
  .agent-gui-node__conversation-list-skeleton-rib-secondary {
5938
6008
  width: 52%;
5939
- transform: rotate(-1deg);
5940
6009
  opacity: 0.72;
5941
6010
  }
5942
6011
 
@@ -6477,7 +6546,7 @@ button.agent-gui-node__conversation-section-toggle:hover
6477
6546
  .agent-gui-message-locator__track-segment {
6478
6547
  position: absolute;
6479
6548
  top: var(--agent-message-locator-segment-position);
6480
- left: 50%;
6549
+ left: calc(var(--agent-message-locator-hit-size) / 2);
6481
6550
  width: 1px;
6482
6551
  height: 8px;
6483
6552
  transform: translate(-50%, -50%);
@@ -7338,7 +7407,7 @@ button.agent-gui-node__conversation-section-toggle:hover
7338
7407
  isolation: isolate;
7339
7408
  z-index: 2;
7340
7409
  min-width: 0;
7341
- padding: 12px;
7410
+ padding: 8px;
7342
7411
  border: 1px solid var(--agent-gui-border-subtle);
7343
7412
  border-radius: 12px;
7344
7413
  background: var(--agent-gui-surface-raised);
@@ -7346,8 +7415,27 @@ button.agent-gui-node__conversation-section-toggle:hover
7346
7415
  transition: box-shadow 140ms ease;
7347
7416
  }
7348
7417
 
7418
+ .agent-gui-node__composer-hero-prompt-input-area {
7419
+ box-sizing: border-box;
7420
+ width: calc(100% - 8px);
7421
+ margin-inline: 4px;
7422
+ }
7423
+
7424
+ .agent-gui-node__composer[data-layout="dock"] {
7425
+ /* Opaque backdrop for the footer strip: the timeline can slide beneath the
7426
+ dock, and a transparent footer would show message rows behind the
7427
+ toolbar controls. */
7428
+ background: var(--agent-gui-session-flow-background);
7429
+ }
7430
+
7349
7431
  .agent-gui-node__composer[data-layout="dock"]
7350
7432
  .agent-gui-node__composer-input-shell {
7433
+ /* Reserve only the collapsed input height (56px, keep in sync with
7434
+ DOCK_COMPOSER_INPUT_MIN_HEIGHT) in the layout flow. A growing draft
7435
+ (long paste, attachments) expands the text box upward over the
7436
+ conversation instead of enlarging the dock and pushing the message
7437
+ stream up. */
7438
+ grid-template-rows: 56px auto;
7351
7439
  gap: 6px;
7352
7440
  padding: 0;
7353
7441
  border: 0;
@@ -7364,6 +7452,7 @@ button.agent-gui-node__conversation-section-toggle:hover
7364
7452
  min-height: 56px;
7365
7453
  max-height: var(--agent-gui-composer-input-max-height, 110px);
7366
7454
  align-items: end;
7455
+ align-self: end;
7367
7456
  overflow: hidden;
7368
7457
  padding: 0 12px;
7369
7458
  border: 1px solid var(--line-2);
@@ -7825,7 +7914,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
7825
7914
 
7826
7915
  .agent-gui-node__composer-queued-prompt-header {
7827
7916
  display: flex;
7828
- align-items: center;
7917
+ align-items: flex-start;
7829
7918
  justify-content: flex-start;
7830
7919
  gap: 4px;
7831
7920
  min-height: 20px;
@@ -7904,12 +7993,19 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
7904
7993
  }
7905
7994
 
7906
7995
  .agent-gui-node__composer-queued-prompt-label {
7996
+ min-width: 0;
7907
7997
  font-size: 13px;
7908
7998
  font-weight: 600;
7909
7999
  color: var(--agent-gui-accent-strong);
7910
8000
  line-height: 20px;
7911
8001
  }
7912
8002
 
8003
+ .agent-gui-node__composer-queued-prompt-panel[data-queue-status="paused_by_user"]
8004
+ .agent-gui-node__composer-queued-prompt-label {
8005
+ overflow-wrap: anywhere;
8006
+ white-space: normal;
8007
+ }
8008
+
7913
8009
  .agent-gui-node__composer-queued-prompt-count {
7914
8010
  margin-left: 4px;
7915
8011
  color: var(--agent-gui-accent-strong);
@@ -8262,12 +8358,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8262
8358
  align-items: center;
8263
8359
  justify-content: space-between;
8264
8360
  gap: 8px;
8265
- padding: 2px 12px;
8361
+ padding: 2px 8px;
8266
8362
  }
8267
8363
 
8268
8364
  .agent-gui-node__composer-input-group-hero
8269
8365
  .agent-gui-node__composer-project-row {
8270
- padding: 2px 12px;
8366
+ padding: 2px 8px;
8271
8367
  }
8272
8368
 
8273
8369
  .agent-gui-node__composer-project-row .agent-gui-node__composer-menu-trigger {
@@ -8493,7 +8589,10 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8493
8589
  }
8494
8590
 
8495
8591
  .agent-gui-node__composer[data-layout="dock"] .agent-gui-node__composer-footer {
8496
- padding: 0 2px;
8592
+ position: relative;
8593
+ margin: 0 -12px -12px;
8594
+ padding: 0 14px 12px;
8595
+ background: var(--agent-gui-session-flow-background);
8497
8596
  }
8498
8597
 
8499
8598
  .agent-gui-node__composer-footer-left,
@@ -8684,6 +8783,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8684
8783
  line-height: 1.2;
8685
8784
  }
8686
8785
 
8786
+ .agent-gui-node__composer-menu-item[data-disabled] {
8787
+ cursor: not-allowed;
8788
+ color: var(--text-disabled);
8789
+ opacity: 0.5;
8790
+ }
8791
+
8687
8792
  .agent-gui-node__composer-menu-content[data-agent-composer-settings-layout="model-primary"]
8688
8793
  .agent-gui-node__composer-menu-item,
8689
8794
  .agent-gui-node__composer-menu-content[data-agent-composer-settings-layout="model-submenu"]
@@ -8769,7 +8874,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8769
8874
  flex: 1 1 auto;
8770
8875
  flex-direction: column;
8771
8876
  align-items: center;
8772
- padding: 2px 0 12px;
8877
+ padding: 2px 0 16px;
8773
8878
  overflow-x: hidden;
8774
8879
  overflow-y: auto;
8775
8880
  mask-image: linear-gradient(
@@ -8796,10 +8901,31 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8796
8901
  align-items: center;
8797
8902
  justify-content: center;
8798
8903
  gap: 8px;
8799
- padding: 0 0 12px;
8904
+ padding: 0;
8800
8905
  -webkit-app-region: no-drag;
8801
8906
  }
8802
8907
 
8908
+ .agent-gui-node__provider-rail-config-footer {
8909
+ padding-bottom: 8px;
8910
+ }
8911
+
8912
+ .agent-gui-node__provider-rail-config-footer:last-child {
8913
+ padding-bottom: 12px;
8914
+ }
8915
+
8916
+ .agent-gui-node__provider-rail-sidebar-footer {
8917
+ padding-bottom: 0;
8918
+ }
8919
+
8920
+ .agent-gui-node__provider-rail-sidebar-footer:last-child {
8921
+ padding-bottom: 12px;
8922
+ }
8923
+
8924
+ .agent-gui-node__provider-rail-sidebar-footer
8925
+ + .agent-gui-node__provider-rail-config-footer {
8926
+ margin-top: 8px;
8927
+ }
8928
+
8803
8929
  .agent-gui-node__provider-rail-config-button {
8804
8930
  display: grid;
8805
8931
  width: 32px;
@@ -9037,6 +9163,114 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9037
9163
  animation: agent-gui-provider-target-loading 1.2s ease-in-out infinite;
9038
9164
  }
9039
9165
 
9166
+ .agent-gui-provider-manager-tile[data-dragging="true"] {
9167
+ opacity: 0.45;
9168
+ }
9169
+
9170
+ .agent-gui-provider-manager-drop-zone {
9171
+ transition:
9172
+ background-color 140ms ease,
9173
+ box-shadow 140ms ease;
9174
+ }
9175
+
9176
+ .agent-gui-provider-manager-drop-zone[data-drop-active="true"] {
9177
+ background: color-mix(
9178
+ in srgb,
9179
+ var(--brand-primary, var(--tutti-purple)) 7%,
9180
+ transparent
9181
+ );
9182
+ box-shadow: inset 0 0 0 1px
9183
+ color-mix(
9184
+ in srgb,
9185
+ var(--brand-primary, var(--tutti-purple)) 42%,
9186
+ transparent
9187
+ );
9188
+ }
9189
+
9190
+ .agent-gui-provider-manager-drop-zone[data-drop-blocked="true"] {
9191
+ background: color-mix(in srgb, var(--state-danger) 6%, transparent);
9192
+ box-shadow: inset 0 0 0 1px
9193
+ color-mix(in srgb, var(--state-danger) 28%, transparent);
9194
+ }
9195
+
9196
+ .agent-gui-provider-manager-tile
9197
+ > :not(.agent-gui-provider-manager-drop-indicator) {
9198
+ transition: translate 140ms ease;
9199
+ }
9200
+
9201
+ .agent-gui-provider-manager-tile[data-drag-over="before"]
9202
+ > :not(.agent-gui-provider-manager-drop-indicator) {
9203
+ translate: 8px 0;
9204
+ }
9205
+
9206
+ .agent-gui-provider-manager-tile[data-drag-over="after"]
9207
+ > :not(.agent-gui-provider-manager-drop-indicator) {
9208
+ translate: -8px 0;
9209
+ }
9210
+
9211
+ .agent-gui-provider-manager-drop-indicator {
9212
+ position: absolute;
9213
+ top: 4px;
9214
+ bottom: 4px;
9215
+ width: 2px;
9216
+ border-radius: 999px;
9217
+ background: var(--brand-primary, var(--tutti-purple));
9218
+ pointer-events: none;
9219
+ }
9220
+
9221
+ .agent-gui-provider-manager-drop-indicator[data-position="before"] {
9222
+ left: -9px;
9223
+ }
9224
+
9225
+ .agent-gui-provider-manager-drop-indicator[data-position="after"] {
9226
+ right: -9px;
9227
+ }
9228
+
9229
+ .agent-gui-provider-manager-tile[data-long-press="true"] {
9230
+ animation: agent-gui-provider-manager-long-press 550ms linear;
9231
+ }
9232
+
9233
+ .agent-gui-provider-manager-tile[data-editing="true"] {
9234
+ transform-origin: 50% 42%;
9235
+ animation: agent-gui-provider-manager-wiggle 180ms ease-in-out infinite
9236
+ alternate;
9237
+ }
9238
+
9239
+ .agent-gui-provider-manager-tile[data-editing="true"]:nth-child(2n) {
9240
+ animation-delay: -90ms;
9241
+ animation-direction: alternate-reverse;
9242
+ }
9243
+
9244
+ .agent-gui-provider-manager-tile[data-editing="true"][data-drag-active="true"] {
9245
+ animation: none;
9246
+ }
9247
+
9248
+ @keyframes agent-gui-provider-manager-wiggle {
9249
+ 0% {
9250
+ transform: rotate(-1.2deg) translateY(0);
9251
+ }
9252
+
9253
+ 100% {
9254
+ transform: rotate(1.2deg) translateY(-0.5px);
9255
+ }
9256
+ }
9257
+
9258
+ @keyframes agent-gui-provider-manager-long-press {
9259
+ from {
9260
+ scale: 1;
9261
+ }
9262
+
9263
+ to {
9264
+ scale: 1;
9265
+ }
9266
+ }
9267
+
9268
+ @media (prefers-reduced-motion: reduce) {
9269
+ .agent-gui-provider-manager-tile[data-editing="true"] {
9270
+ animation: none;
9271
+ }
9272
+ }
9273
+
9040
9274
  @keyframes agent-gui-provider-target-loading {
9041
9275
  0% {
9042
9276
  background-position: 100% 0;
@@ -9048,6 +9282,10 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9048
9282
  }
9049
9283
 
9050
9284
  .agent-gui-node__empty-hero {
9285
+ /* Center one shared frame instead of each state's intrinsic content height.
9286
+ Wrapped titles, composer controls, and readiness actions then grow down. */
9287
+ --agent-gui-empty-hero-anchor-block-size: 398px;
9288
+
9051
9289
  display: flex;
9052
9290
  width: 100%;
9053
9291
  min-height: 100%;
@@ -9061,6 +9299,8 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9061
9299
 
9062
9300
  display: grid;
9063
9301
  width: min(820px, 100%);
9302
+ block-size: var(--agent-gui-empty-hero-anchor-block-size);
9303
+ align-content: start;
9064
9304
  gap: var(--agent-gui-empty-hero-gap);
9065
9305
  justify-items: center;
9066
9306
  }
@@ -9092,10 +9332,14 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9092
9332
  .agent-gui-node__empty-hero-carousel-layer {
9093
9333
  position: absolute;
9094
9334
  z-index: 1;
9095
- top: calc(50% - 210px);
9335
+
9336
+ /* The stage measures the body's placeholder slot and pins the layer to it;
9337
+ the calc() remains only as the first-paint estimate. */
9338
+ top: var(--agent-gui-hero-carousel-slot-top, calc(50% - 210px));
9096
9339
  left: 50%;
9097
- width: min(400px, calc(100% - 64px));
9098
- transform: translateX(-50%);
9340
+ width: round(nearest, min(400px, calc(100% - 64px)), 1px);
9341
+ transform: translateX(-50%) scale(0.8);
9342
+ transform-origin: center center;
9099
9343
  }
9100
9344
 
9101
9345
  .agent-gui-node__empty-hero-carousel-placeholder {
@@ -9123,63 +9367,6 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9123
9367
  both;
9124
9368
  }
9125
9369
 
9126
- .agent-gui-node__empty-hero-icon-rail {
9127
- display: flex;
9128
- width: min(216px, 44vw);
9129
- height: 64px;
9130
- align-items: center;
9131
- overflow: hidden;
9132
- object-fit: unset;
9133
- }
9134
-
9135
- .agent-gui-node__empty-hero-icon-rail-scroller {
9136
- display: flex;
9137
- width: 100%;
9138
- min-width: 0;
9139
- align-items: center;
9140
- gap: 12px;
9141
- overflow-x: auto;
9142
- overflow-y: hidden;
9143
- padding: 8px 20px;
9144
- overscroll-behavior-x: contain;
9145
- scrollbar-width: none;
9146
- scroll-snap-type: x proximity;
9147
- mask-image: linear-gradient(
9148
- 90deg,
9149
- transparent 0,
9150
- #000 24px,
9151
- #000 calc(100% - 24px),
9152
- transparent 100%
9153
- );
9154
- }
9155
-
9156
- .agent-gui-node__empty-hero-icon-rail-scroller::-webkit-scrollbar {
9157
- display: none;
9158
- }
9159
-
9160
- .agent-gui-node__empty-hero-icon-rail-item {
9161
- display: grid;
9162
- width: 48px;
9163
- height: 48px;
9164
- flex: 0 0 48px;
9165
- place-items: center;
9166
- scroll-snap-align: center;
9167
- transition:
9168
- opacity 140ms ease,
9169
- transform 140ms ease;
9170
- }
9171
-
9172
- .agent-gui-node__empty-hero-icon-rail-item:hover {
9173
- transform: translateY(-1px);
9174
- }
9175
-
9176
- .agent-gui-node__empty-hero-icon-rail-item > img {
9177
- display: block;
9178
- width: 48px;
9179
- height: 48px;
9180
- object-fit: contain;
9181
- }
9182
-
9183
9370
  /* Empty-hero agent carousel ("All" tab): a three.js ring of same-sized agent
9184
9371
  records (see agentGuiHeroCarouselScene.ts). Records farther around the ring
9185
9372
  genuinely shrink and fade with perspective; visuals live on the canvas,
@@ -9431,14 +9618,21 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9431
9618
  opacity: 0;
9432
9619
  transition: opacity 120ms ease-out;
9433
9620
 
9434
- /* Fade-out mask: a horizontal band dissolves tiles toward the stage sides
9435
- (the fully-transparent stops sit where the outermost tiles ride, not at
9436
- the canvas edges), intersected with a vertical band so tiles sinking
9437
- down the wheel melt away instead of being cut by the canvas bottom. */
9621
+ /* Fade-out mask: the horizontal fade runs edge to edge so there is no dead
9622
+ band beside the integer-aligned canvas buffer. The vertical band melts
9623
+ tiles sinking down the wheel instead of clipping them at the bottom. */
9438
9624
  mask-image:
9439
- linear-gradient(90deg, transparent 4%, #000 30%, #000 70%, transparent 96%),
9440
- linear-gradient(180deg, #000 0%, #000 70%, transparent 96%);
9625
+ linear-gradient(
9626
+ 90deg,
9627
+ transparent 0%,
9628
+ #000 20%,
9629
+ #000 80%,
9630
+ transparent 100%
9631
+ ),
9632
+ linear-gradient(180deg, #000 0%, #000 70%, transparent 100%);
9441
9633
  mask-composite: intersect;
9634
+ mask-size: 100% 100%;
9635
+ mask-position: center;
9442
9636
  }
9443
9637
 
9444
9638
  .agent-gui-node__empty-hero-carousel[data-icons-ready="true"]
@@ -9478,7 +9672,6 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9478
9672
  .agent-gui-node__empty-provider-gate {
9479
9673
  max-width: 520px;
9480
9674
  gap: 8px;
9481
- transform: translateY(-40px);
9482
9675
  }
9483
9676
 
9484
9677
  /* Gate gap is 8px; add 16px so the icon-to-title spacing is 24px. */
@@ -0,0 +1,4 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M14 3H21V10M20 4L10 14" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M19 13V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7C3 5.89543 3.89543 5 5 5H11" stroke="black" stroke-width="2" stroke-linecap="round"/>
4
+ </svg>