@tutti-os/agent-gui 0.0.93 → 0.0.95

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 (164) hide show
  1. package/README.md +48 -32
  2. package/dist/AgentGUI-CwBLYtv-.d.ts +992 -0
  3. package/dist/agent-conversation/index.d.ts +5 -7
  4. package/dist/agent-conversation/index.js +13 -9
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.d.ts +14 -38
  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 +145 -122
  12. package/dist/agent-message-center/index.js +1473 -1398
  13. package/dist/agent-message-center/index.js.map +1 -1
  14. package/dist/{agentConversationVM-CfXN_TQ2.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
  15. package/dist/agentFileMentionContracts-Czvz6YMI.d.ts +107 -0
  16. package/dist/{agentGuiNodeTypes-rGaDqxVR.d.ts → agentGuiNodeTypes-DppADPHW.d.ts} +102 -149
  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 +431 -75
  21. package/dist/app/renderer/assets/icons/agent-vinyl-player-chassis.png +0 -0
  22. package/dist/app/renderer/assets/icons/agent-vinyl-tonearm.png +0 -0
  23. package/dist/app/renderer/assets/icons/agent-vinyls/claude-vinyl.png +0 -0
  24. package/dist/app/renderer/assets/icons/agent-vinyls/codex-vinyl.png +0 -0
  25. package/dist/app/renderer/assets/icons/agent-vinyls/cursor-vinyl.png +0 -0
  26. package/dist/app/renderer/assets/icons/agent-vinyls/hermes-vinyl.png +0 -0
  27. package/dist/app/renderer/assets/icons/agent-vinyls/openclaw-vinyl.png +0 -0
  28. package/dist/app/renderer/assets/icons/agent-vinyls/opencode-vinyl.png +0 -0
  29. package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
  30. package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
  31. package/dist/{chunk-7QHBFRG5.js → chunk-3R2D4E57.js} +3137 -3396
  32. package/dist/chunk-3R2D4E57.js.map +1 -0
  33. package/dist/chunk-4YG7YK7S.js +23 -0
  34. package/dist/chunk-4YG7YK7S.js.map +1 -0
  35. package/dist/chunk-5X7YDOC6.js +42 -0
  36. package/dist/chunk-5X7YDOC6.js.map +1 -0
  37. package/dist/{chunk-IBIMGLCD.js → chunk-7J4K6WKB.js} +1 -1
  38. package/dist/chunk-7J4K6WKB.js.map +1 -0
  39. package/dist/{chunk-KQE5KV2V.js → chunk-7PFDA2HQ.js} +505 -504
  40. package/dist/chunk-7PFDA2HQ.js.map +1 -0
  41. package/dist/{chunk-M2LWH54R.js → chunk-7RDD3EWP.js} +557 -569
  42. package/dist/chunk-7RDD3EWP.js.map +1 -0
  43. package/dist/{chunk-VWXFFSIM.js → chunk-AOS2VWU6.js} +1357 -1301
  44. package/dist/chunk-AOS2VWU6.js.map +1 -0
  45. package/dist/{chunk-3HARXLAZ.js → chunk-BFNJKTDV.js} +295 -255
  46. package/dist/chunk-BFNJKTDV.js.map +1 -0
  47. package/dist/{chunk-U7D7G3UU.js → chunk-BIHBXWK5.js} +2 -2
  48. package/dist/{chunk-XQUUELKF.js → chunk-C5FV4UGI.js} +2921 -2944
  49. package/dist/chunk-C5FV4UGI.js.map +1 -0
  50. package/dist/{chunk-HOSX5C5V.js → chunk-CRO2MV2Y.js} +36 -46
  51. package/dist/chunk-CRO2MV2Y.js.map +1 -0
  52. package/dist/chunk-FGLQZ6I4.js +9 -0
  53. package/dist/chunk-FGLQZ6I4.js.map +1 -0
  54. package/dist/chunk-H6IQ63DQ.js +14 -0
  55. package/dist/chunk-H6IQ63DQ.js.map +1 -0
  56. package/dist/{chunk-4SQNOOJ3.js → chunk-JX2SIXNL.js} +1293 -1702
  57. package/dist/chunk-JX2SIXNL.js.map +1 -0
  58. package/dist/chunk-KAL4XZMA.js +231 -0
  59. package/dist/chunk-KAL4XZMA.js.map +1 -0
  60. package/dist/chunk-KJQERFKX.js +259 -0
  61. package/dist/chunk-KJQERFKX.js.map +1 -0
  62. package/dist/chunk-LQVXBT65.js +491 -0
  63. package/dist/chunk-LQVXBT65.js.map +1 -0
  64. package/dist/{chunk-AOVPGJBC.js → chunk-NITOD7WF.js} +2 -2
  65. package/dist/{chunk-7LMJXF4R.js → chunk-NJAZ7LQM.js} +20 -16
  66. package/dist/chunk-NJAZ7LQM.js.map +1 -0
  67. package/dist/chunk-NX3CZJXW.js +25 -0
  68. package/dist/chunk-NX3CZJXW.js.map +1 -0
  69. package/dist/chunk-O6W72SEP.js +93 -0
  70. package/dist/chunk-O6W72SEP.js.map +1 -0
  71. package/dist/{chunk-PSLAWU25.js → chunk-R2EWECUP.js} +7 -1
  72. package/dist/chunk-R2EWECUP.js.map +1 -0
  73. package/dist/chunk-RY6GIO3K.js +31700 -0
  74. package/dist/chunk-RY6GIO3K.js.map +1 -0
  75. package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
  76. package/dist/chunk-UGVI47X6.js.map +1 -0
  77. package/dist/{chunk-XW4CVBUH.js → chunk-UQJPV6HP.js} +18 -11
  78. package/dist/chunk-UQJPV6HP.js.map +1 -0
  79. package/dist/{chunk-GAPTLVII.js → chunk-VF22EG3F.js} +1 -1
  80. package/dist/{chunk-GAPTLVII.js.map → chunk-VF22EG3F.js.map} +1 -1
  81. package/dist/{chunk-45FF4DQU.js → chunk-WEDMAVX2.js} +22 -24
  82. package/dist/chunk-WEDMAVX2.js.map +1 -0
  83. package/dist/{chunk-SXDLSEHO.js → chunk-XMO45GKA.js} +531 -401
  84. package/dist/chunk-XMO45GKA.js.map +1 -0
  85. package/dist/{chunk-UNO7CEAF.js → chunk-YE25HN6T.js} +6 -9
  86. package/dist/chunk-YE25HN6T.js.map +1 -0
  87. package/dist/context-mention-palette/index.d.ts +3 -2
  88. package/dist/context-mention-palette/index.js +19 -14
  89. package/dist/custom-mention.d.ts +44 -0
  90. package/dist/custom-mention.js +17 -0
  91. package/dist/custom-mention.js.map +1 -0
  92. package/dist/dock-icons.d.ts +6 -0
  93. package/dist/dock-icons.js +11 -0
  94. package/dist/dock-icons.js.map +1 -0
  95. package/dist/i18n/index.d.ts +852 -837
  96. package/dist/i18n/index.js +2 -2
  97. package/dist/index.d.ts +52 -1061
  98. package/dist/index.js +72 -35254
  99. package/dist/index.js.map +1 -1
  100. package/dist/mention-search.d.ts +226 -0
  101. package/dist/mention-search.js +29 -0
  102. package/dist/mention-search.js.map +1 -0
  103. package/dist/open-link-lined-JWEKUKME.svg +4 -0
  104. package/dist/provider-icons.d.ts +6 -0
  105. package/dist/provider-icons.js +12 -0
  106. package/dist/provider-icons.js.map +1 -0
  107. package/dist/provider-identity.d.ts +9 -0
  108. package/dist/provider-identity.js +21 -0
  109. package/dist/provider-identity.js.map +1 -0
  110. package/dist/runtime-BBNdWgDU.d.ts +10 -0
  111. package/dist/{types-PLFZ8SBX.d.ts → types-DX2bxgB8.d.ts} +28 -83
  112. package/dist/workbench/contribution.d.ts +32 -40
  113. package/dist/workbench/contribution.js +10 -6
  114. package/dist/workbench/index.d.ts +6 -2
  115. package/dist/workbench/index.js +24 -20
  116. package/dist/workbench/launch.d.ts +2 -5
  117. package/dist/workbench/launch.js +4 -3
  118. package/dist/workbench/providerCatalog.js +2 -1
  119. package/dist/workbench/sessionTitle.d.ts +4 -3
  120. package/dist/workbench/sessionTitle.js +4 -3
  121. package/dist/workbench/state.d.ts +1 -1
  122. package/dist/workbench/state.js +3 -2
  123. package/dist/workbench/types.d.ts +0 -3
  124. package/dist/workbench/types.js +1 -1
  125. package/dist/workspace-agent-generated-files.d.ts +20 -2
  126. package/dist/workspace-agent-generated-files.js +7 -6
  127. package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
  128. package/package.json +65 -28
  129. package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
  130. package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
  131. package/dist/chunk-3HARXLAZ.js.map +0 -1
  132. package/dist/chunk-45FF4DQU.js.map +0 -1
  133. package/dist/chunk-4HP6V2YA.js +0 -207
  134. package/dist/chunk-4HP6V2YA.js.map +0 -1
  135. package/dist/chunk-4SQNOOJ3.js.map +0 -1
  136. package/dist/chunk-7LMJXF4R.js.map +0 -1
  137. package/dist/chunk-7QHBFRG5.js.map +0 -1
  138. package/dist/chunk-HOSX5C5V.js.map +0 -1
  139. package/dist/chunk-IBIMGLCD.js.map +0 -1
  140. package/dist/chunk-KQE5KV2V.js.map +0 -1
  141. package/dist/chunk-LR4FA5X6.js +0 -368
  142. package/dist/chunk-LR4FA5X6.js.map +0 -1
  143. package/dist/chunk-M2LWH54R.js.map +0 -1
  144. package/dist/chunk-MKHDRIGN.js +0 -71
  145. package/dist/chunk-MKHDRIGN.js.map +0 -1
  146. package/dist/chunk-PSLAWU25.js.map +0 -1
  147. package/dist/chunk-SXDLSEHO.js.map +0 -1
  148. package/dist/chunk-UNO7CEAF.js.map +0 -1
  149. package/dist/chunk-VAKFNNKT.js +0 -410
  150. package/dist/chunk-VAKFNNKT.js.map +0 -1
  151. package/dist/chunk-VWXFFSIM.js.map +0 -1
  152. package/dist/chunk-XDV4ZRVK.js.map +0 -1
  153. package/dist/chunk-XQUUELKF.js.map +0 -1
  154. package/dist/chunk-XW4CVBUH.js.map +0 -1
  155. package/dist/plan-decision-ops.d.ts +0 -70
  156. package/dist/plan-decision-ops.js +0 -19
  157. package/dist/queued-prompt-runtime.d.ts +0 -115
  158. package/dist/queued-prompt-runtime.js +0 -9
  159. package/dist/workspaceAgentActivityListViewModel-TXH1VXrk.d.ts +0 -339
  160. package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
  161. /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
  162. /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
  163. /package/dist/{chunk-U7D7G3UU.js.map → chunk-BIHBXWK5.js.map} +0 -0
  164. /package/dist/{chunk-AOVPGJBC.js.map → chunk-NITOD7WF.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));
@@ -604,6 +620,7 @@
604
620
 
605
621
  .agent-gui-chrome__card--warning,
606
622
  .agent-gui-chrome__card--danger,
623
+ .agent-gui-chrome__card--success,
607
624
  .agent-gui-chrome__card--muted,
608
625
  .agent-gui-chrome__card--connecting {
609
626
  animation: none !important;
@@ -2750,6 +2767,7 @@ aside.workspace-agents-status-panel
2750
2767
 
2751
2768
  .agent-gui-chrome__card--warning,
2752
2769
  .agent-gui-chrome__card--danger,
2770
+ .agent-gui-chrome__card--success,
2753
2771
  .agent-gui-chrome__card--muted,
2754
2772
  .agent-gui-chrome__card--connecting {
2755
2773
  --agent-gui-chrome-card-spring: cubic-bezier(0.22, 1.18, 0.36, 1);
@@ -2915,6 +2933,58 @@ aside.workspace-agents-status-panel
2915
2933
  color: var(--status-danger-hover, var(--state-danger-hover));
2916
2934
  }
2917
2935
 
2936
+ .agent-gui-chrome__card--success {
2937
+ /* --state-success alone reads ~2:1 against the light-theme card wash;
2938
+ mixing toward --text-primary keeps the hue while adapting the contrast
2939
+ in both themes (45% keeps 13px text past the 4.5:1 target). Borders and
2940
+ backgrounds stay on the raw token. */
2941
+ --agent-gui-chrome-success-foreground: color-mix(
2942
+ in srgb,
2943
+ var(--state-success) 45%,
2944
+ var(--text-primary)
2945
+ );
2946
+
2947
+ border-color: color-mix(in srgb, var(--state-success) 28%, transparent);
2948
+ border-bottom: 0;
2949
+ border-top-left-radius: 8px;
2950
+ border-top-right-radius: 8px;
2951
+ border-bottom-right-radius: 0;
2952
+ border-bottom-left-radius: 0;
2953
+ background: color-mix(
2954
+ in srgb,
2955
+ var(--state-success) 10%,
2956
+ var(--background-fronted)
2957
+ );
2958
+ grid-template-columns: minmax(0, 1fr) auto;
2959
+ align-items: center;
2960
+ min-height: 36px;
2961
+ padding: 6px 16px;
2962
+ cursor: default;
2963
+ }
2964
+
2965
+ .agent-gui-chrome__card--success .agent-gui-chrome__icon,
2966
+ .agent-gui-chrome__card--success .agent-gui-chrome__message {
2967
+ color: var(--agent-gui-chrome-success-foreground, var(--state-success));
2968
+ }
2969
+
2970
+ .agent-gui-chrome__success-ghost-button {
2971
+ background: transparent;
2972
+ color: var(--agent-gui-chrome-success-foreground, var(--state-success));
2973
+ font-size: 13px;
2974
+ font-weight: 400;
2975
+ }
2976
+
2977
+ .agent-gui-chrome__success-ghost-button:hover:not(:disabled) {
2978
+ background: color-mix(in srgb, var(--state-success) 14%, transparent);
2979
+ }
2980
+
2981
+ .agent-gui-chrome__success-ghost-button:focus-visible {
2982
+ border-color: var(--state-success);
2983
+ color: var(--agent-gui-chrome-success-foreground, var(--state-success));
2984
+ box-shadow: 0 0 0 2px
2985
+ color-mix(in srgb, var(--state-success) 25%, transparent);
2986
+ }
2987
+
2918
2988
  .agent-gui-chrome__danger-ghost-button:focus-visible {
2919
2989
  border-color: var(--status-danger, var(--state-danger));
2920
2990
  color: var(--status-danger, var(--state-danger));
@@ -2959,6 +3029,8 @@ aside.workspace-agents-status-panel
2959
3029
  .agent-gui-chrome__message:not(.agent-gui-chrome__notice-message),
2960
3030
  .agent-gui-chrome__card--danger
2961
3031
  .agent-gui-chrome__message:not(.agent-gui-chrome__notice-message),
3032
+ .agent-gui-chrome__card--success
3033
+ .agent-gui-chrome__message:not(.agent-gui-chrome__notice-message),
2962
3034
  .agent-gui-chrome__card--muted
2963
3035
  .agent-gui-chrome__message:not(.agent-gui-chrome__notice-message),
2964
3036
  .agent-gui-chrome__card--connecting
@@ -4401,6 +4473,20 @@ aside.workspace-agents-status-panel
4401
4473
  cursor: grabbing !important;
4402
4474
  }
4403
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
+
4404
4490
  .workbench-window:has([data-agent-gui-workbench-header="true"])
4405
4491
  .workbench-window__body {
4406
4492
  grid-row: 1;
@@ -4624,16 +4710,32 @@ aside.workspace-agents-status-panel
4624
4710
  .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]
4625
4711
  .agent-gui-workbench-header__primary {
4626
4712
  grid-column: 1 / -1;
4627
- width: min(100%, 720px);
4713
+ width: 100%;
4628
4714
  background: transparent;
4629
4715
  }
4630
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
+
4631
4733
  /*
4632
4734
  * In the collapsed empty state there is no session title to anchor the control
4633
4735
  * cluster, so the detached-window button's margin-left:auto would strand the
4634
- * icons (in the middle of the 720px content cap, or at the far window edge).
4635
- * Drop the auto push so the controls sit as a compact group right after the
4636
- * 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.
4637
4739
  */
4638
4740
  .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"][data-agent-gui-workbench-header-has-session="false"]
4639
4741
  .agent-gui-workbench-header__detached-window {
@@ -4763,6 +4865,40 @@ aside.workspace-agents-status-panel
4763
4865
  gap: 8px;
4764
4866
  }
4765
4867
 
4868
+ .agent-gui-workbench-header__primary-accessory {
4869
+ display: inline-flex;
4870
+ min-width: 0;
4871
+ flex: 0 0 auto;
4872
+ align-items: center;
4873
+ -webkit-app-region: no-drag;
4874
+ }
4875
+
4876
+ .agent-gui-workbench-header__detail {
4877
+ display: flex;
4878
+ width: 100%;
4879
+ height: 100%;
4880
+ min-width: 0;
4881
+ align-items: center;
4882
+ }
4883
+
4884
+ .agent-gui-workbench-header__secondary-accessory {
4885
+ display: inline-flex;
4886
+ min-width: 0;
4887
+ flex: 0 0 auto;
4888
+ align-items: center;
4889
+ margin-left: auto;
4890
+ padding-right: var(--agent-gui-workbench-header-padding-x);
4891
+ pointer-events: auto;
4892
+ -webkit-app-region: no-drag;
4893
+ }
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
+
4766
4902
  .agent-gui-workbench-header__agent-name,
4767
4903
  .agent-gui-workbench-header__session-title,
4768
4904
  .agent-gui-workbench-header__detail-title {
@@ -4821,6 +4957,7 @@ aside.workspace-agents-status-panel
4821
4957
  .agent-gui-workbench-header__detail-title {
4822
4958
  display: flex;
4823
4959
  height: 100%;
4960
+ flex: 1 1 auto;
4824
4961
  max-width: min(100%, var(--agent-gui-workbench-header-title-max-width));
4825
4962
  min-width: 0;
4826
4963
  align-items: center;
@@ -4829,6 +4966,24 @@ aside.workspace-agents-status-panel
4829
4966
  pointer-events: none;
4830
4967
  }
4831
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
+
4832
4987
  .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
4833
4988
  .agent-gui-workbench-header__agent-brand,
4834
4989
  .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
@@ -4895,7 +5050,8 @@ aside.workspace-agents-status-panel
4895
5050
 
4896
5051
  .agent-gui-workbench-header__detached-window
4897
5052
  + .agent-gui-workbench-header__rail-toggle {
4898
- margin-left: 0;
5053
+ /* The primary row gap is 12px; keep this icon pair at a net 8px. */
5054
+ margin-left: -4px;
4899
5055
  }
4900
5056
 
4901
5057
  .workbench-window:has([data-workbench-node-render-error="true"])
@@ -5842,17 +5998,14 @@ button.agent-gui-node__conversation-section-toggle:hover
5842
5998
 
5843
5999
  .agent-gui-node__conversation-list-skeleton-rib {
5844
6000
  height: 12px;
5845
- transform-origin: left center;
5846
6001
  }
5847
6002
 
5848
6003
  .agent-gui-node__conversation-list-skeleton-rib-primary {
5849
6004
  width: 78%;
5850
- transform: rotate(1deg);
5851
6005
  }
5852
6006
 
5853
6007
  .agent-gui-node__conversation-list-skeleton-rib-secondary {
5854
6008
  width: 52%;
5855
- transform: rotate(-1deg);
5856
6009
  opacity: 0.72;
5857
6010
  }
5858
6011
 
@@ -7254,7 +7407,7 @@ button.agent-gui-node__conversation-section-toggle:hover
7254
7407
  isolation: isolate;
7255
7408
  z-index: 2;
7256
7409
  min-width: 0;
7257
- padding: 12px;
7410
+ padding: 8px;
7258
7411
  border: 1px solid var(--agent-gui-border-subtle);
7259
7412
  border-radius: 12px;
7260
7413
  background: var(--agent-gui-surface-raised);
@@ -7262,6 +7415,12 @@ button.agent-gui-node__conversation-section-toggle:hover
7262
7415
  transition: box-shadow 140ms ease;
7263
7416
  }
7264
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
+
7265
7424
  .agent-gui-node__composer[data-layout="dock"]
7266
7425
  .agent-gui-node__composer-input-shell {
7267
7426
  gap: 6px;
@@ -8178,12 +8337,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8178
8337
  align-items: center;
8179
8338
  justify-content: space-between;
8180
8339
  gap: 8px;
8181
- padding: 2px 12px;
8340
+ padding: 2px 8px;
8182
8341
  }
8183
8342
 
8184
8343
  .agent-gui-node__composer-input-group-hero
8185
8344
  .agent-gui-node__composer-project-row {
8186
- padding: 2px 12px;
8345
+ padding: 2px 8px;
8187
8346
  }
8188
8347
 
8189
8348
  .agent-gui-node__composer-project-row .agent-gui-node__composer-menu-trigger {
@@ -8685,7 +8844,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8685
8844
  flex: 1 1 auto;
8686
8845
  flex-direction: column;
8687
8846
  align-items: center;
8688
- padding: 2px 0 12px;
8847
+ padding: 2px 0 16px;
8689
8848
  overflow-x: hidden;
8690
8849
  overflow-y: auto;
8691
8850
  mask-image: linear-gradient(
@@ -8712,10 +8871,22 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8712
8871
  align-items: center;
8713
8872
  justify-content: center;
8714
8873
  gap: 8px;
8715
- padding: 0 0 12px;
8874
+ padding: 0;
8716
8875
  -webkit-app-region: no-drag;
8717
8876
  }
8718
8877
 
8878
+ .agent-gui-node__provider-rail-config-footer {
8879
+ padding-bottom: 8px;
8880
+ }
8881
+
8882
+ .agent-gui-node__provider-rail-config-footer:last-child {
8883
+ padding-bottom: 12px;
8884
+ }
8885
+
8886
+ .agent-gui-node__provider-rail-sidebar-footer {
8887
+ padding-bottom: 12px;
8888
+ }
8889
+
8719
8890
  .agent-gui-node__provider-rail-config-button {
8720
8891
  display: grid;
8721
8892
  width: 32px;
@@ -8964,10 +9135,14 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8964
9135
  }
8965
9136
 
8966
9137
  .agent-gui-node__empty-hero {
9138
+ /* Center one shared frame instead of each state's intrinsic content height.
9139
+ Wrapped titles, composer controls, and readiness actions then grow down. */
9140
+ --agent-gui-empty-hero-anchor-block-size: 398px;
9141
+
8967
9142
  display: flex;
8968
9143
  width: 100%;
8969
9144
  min-height: 100%;
8970
- align-items: flex-start;
9145
+ align-items: center;
8971
9146
  justify-content: center;
8972
9147
  padding: 24px clamp(32px, 4vw, 48px) 40px;
8973
9148
  }
@@ -8977,6 +9152,8 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
8977
9152
 
8978
9153
  display: grid;
8979
9154
  width: min(820px, 100%);
9155
+ block-size: var(--agent-gui-empty-hero-anchor-block-size);
9156
+ align-content: start;
8980
9157
  gap: var(--agent-gui-empty-hero-gap);
8981
9158
  justify-items: center;
8982
9159
  }
@@ -9000,6 +9177,7 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9000
9177
 
9001
9178
  .agent-gui-node__empty-hero-carousel-stage {
9002
9179
  position: relative;
9180
+ top: -24px;
9003
9181
  width: 100%;
9004
9182
  min-height: 100%;
9005
9183
  }
@@ -9007,10 +9185,14 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9007
9185
  .agent-gui-node__empty-hero-carousel-layer {
9008
9186
  position: absolute;
9009
9187
  z-index: 1;
9010
- top: 24px;
9188
+
9189
+ /* The stage measures the body's placeholder slot and pins the layer to it;
9190
+ the calc() remains only as the first-paint estimate. */
9191
+ top: var(--agent-gui-hero-carousel-slot-top, calc(50% - 210px));
9011
9192
  left: 50%;
9012
- width: min(400px, calc(100% - 64px));
9013
- transform: translateX(-50%);
9193
+ width: round(nearest, min(400px, calc(100% - 64px)), 1px);
9194
+ transform: translateX(-50%) scale(0.8);
9195
+ transform-origin: center center;
9014
9196
  }
9015
9197
 
9016
9198
  .agent-gui-node__empty-hero-carousel-placeholder {
@@ -9038,76 +9220,243 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9038
9220
  both;
9039
9221
  }
9040
9222
 
9041
- .agent-gui-node__empty-hero-icon-rail {
9223
+ /* Empty-hero agent carousel ("All" tab): a three.js ring of same-sized agent
9224
+ records (see agentGuiHeroCarouselScene.ts). Records farther around the ring
9225
+ genuinely shrink and fade with perspective; visuals live on the canvas,
9226
+ while visually-hidden buttons keep the switcher reachable by keyboard,
9227
+ screen readers, and DOM tests. */
9228
+ .agent-gui-node__empty-hero-carousel {
9229
+ position: relative;
9230
+ width: 100%;
9231
+ height: 112px;
9232
+ outline: none;
9233
+ touch-action: pan-y;
9234
+ animation: agent-gui-empty-hero-enter 260ms cubic-bezier(0.16, 1, 0.3, 1) 40ms
9235
+ both;
9236
+ }
9237
+
9238
+ /* Reference VinylPlayer structure, scaled from 440px to the 112px hero slot. */
9239
+ .agent-gui-vinyl-player {
9240
+ position: absolute;
9241
+ top: 50%;
9242
+ left: 50%;
9243
+ z-index: 2;
9244
+ width: 440px;
9245
+ height: 440px;
9246
+ overflow: visible;
9247
+ border-radius: 40px;
9248
+ background: transparent;
9249
+ pointer-events: none;
9250
+ transform: translate(-50%, -50%) scale(0.25);
9251
+ transform-origin: center;
9252
+ }
9253
+
9254
+ .agent-gui-vinyl-player__chassis {
9255
+ position: absolute;
9256
+ top: 12px;
9257
+ left: 0;
9258
+ z-index: 0;
9259
+ width: 440px;
9260
+ height: 416px;
9261
+ object-fit: fill;
9262
+ pointer-events: none;
9263
+ }
9264
+
9265
+ .agent-gui-vinyl-player__indicator {
9266
+ position: absolute;
9267
+ top: 32px;
9268
+ left: 32px;
9269
+ display: grid;
9270
+ width: 26px;
9271
+ height: 26px;
9272
+ place-items: center;
9273
+ border: 1px solid #c0c2c4;
9274
+ border-radius: 50%;
9275
+ background: #9ea0a3;
9276
+ box-shadow:
9277
+ 0 2px 4px rgb(0 0 0 / 10%),
9278
+ inset 0 1px 2px rgb(255 255 255 / 80%);
9279
+ display: none;
9280
+ }
9281
+
9282
+ .agent-gui-vinyl-player__indicator-light {
9042
9283
  display: flex;
9043
- width: min(216px, 44vw);
9044
- height: 64px;
9284
+ width: 20px;
9285
+ height: 20px;
9045
9286
  align-items: center;
9287
+ justify-content: center;
9288
+ gap: 2px;
9289
+ border: 1px solid #384a3c;
9290
+ border-radius: 50%;
9291
+ background: #4b6652;
9292
+ box-shadow: inset 0 2px 6px rgb(0 0 0 / 40%);
9293
+ }
9294
+
9295
+ .agent-gui-vinyl-player__indicator-light--playing {
9296
+ border-color: #86f0a6;
9297
+ background: #5edb84;
9298
+ box-shadow:
9299
+ 0 0 12px rgb(74 222 128 / 70%),
9300
+ inset 0 1px 4px rgb(255 255 255 / 60%);
9301
+ }
9302
+
9303
+ .agent-gui-vinyl-player__indicator-light > span {
9304
+ width: 1px;
9305
+ height: 8px;
9306
+ background: rgb(255 255 255 / 80%);
9307
+ }
9308
+
9309
+ .agent-gui-vinyl-player__platter {
9310
+ position: absolute;
9311
+ top: 29px;
9312
+ left: 24px;
9313
+ display: grid;
9314
+ width: 370px;
9315
+ height: 370px;
9316
+ place-items: center;
9317
+ border-radius: 50%;
9318
+ background: transparent;
9319
+ box-shadow: none;
9320
+ }
9321
+
9322
+ .agent-gui-vinyl-player__platter-inner {
9323
+ display: grid;
9324
+ width: 340px;
9325
+ height: 340px;
9326
+ place-items: center;
9327
+ border-radius: 50%;
9328
+ background: transparent;
9329
+ box-shadow: none;
9330
+ }
9331
+
9332
+ .agent-gui-vinyl-player__record {
9333
+ position: relative;
9334
+ display: grid;
9335
+ width: 326px;
9336
+ height: 326px;
9337
+ place-items: center;
9046
9338
  overflow: hidden;
9047
- object-fit: unset;
9339
+ border-radius: 50%;
9340
+ background:
9341
+ repeating-radial-gradient(
9342
+ circle at center,
9343
+ rgb(255 255 255 / 9%) 0 2px,
9344
+ rgb(0 0 0 / 0%) 2px 8px
9345
+ ),
9346
+ #111;
9347
+ box-shadow: 0 4px 15px rgb(0 0 0 / 60%);
9048
9348
  }
9049
9349
 
9050
- .agent-gui-node__empty-hero-icon-rail-scroller {
9051
- display: flex;
9052
- width: 100%;
9053
- min-width: 0;
9054
- align-items: center;
9055
- gap: 12px;
9056
- overflow-x: auto;
9057
- overflow-y: hidden;
9058
- padding: 8px 20px;
9059
- overscroll-behavior-x: contain;
9060
- scrollbar-width: none;
9061
- scroll-snap-type: x proximity;
9062
- mask-image: linear-gradient(
9063
- 90deg,
9064
- transparent 0,
9065
- #000 24px,
9066
- #000 calc(100% - 24px),
9067
- transparent 100%
9068
- );
9350
+ .agent-gui-vinyl-player__groove,
9351
+ .agent-gui-vinyl-player__reflection,
9352
+ .agent-gui-vinyl-player__label,
9353
+ .agent-gui-vinyl-player__hole {
9354
+ position: absolute;
9355
+ border-radius: 50%;
9069
9356
  }
9070
9357
 
9071
- .agent-gui-node__empty-hero-icon-rail-scroller::-webkit-scrollbar {
9072
- display: none;
9358
+ .agent-gui-vinyl-player__groove {
9359
+ border: 2px solid rgb(255 255 255 / 12%);
9360
+ }
9361
+
9362
+ .agent-gui-vinyl-player__reflection {
9363
+ inset: 0;
9364
+ background: conic-gradient(
9365
+ from 0deg,
9366
+ transparent 0deg,
9367
+ rgb(255 255 255 / 15%) 45deg,
9368
+ transparent 90deg,
9369
+ transparent 180deg,
9370
+ rgb(255 255 255 / 15%) 225deg,
9371
+ transparent 270deg
9372
+ );
9373
+ mix-blend-mode: screen;
9374
+ opacity: 0.35;
9073
9375
  }
9074
9376
 
9075
- .agent-gui-node__empty-hero-icon-rail-item {
9377
+ .agent-gui-vinyl-player__label {
9076
9378
  display: grid;
9077
- width: 48px;
9078
- height: 48px;
9079
- flex: 0 0 48px;
9379
+ width: 144px;
9380
+ height: 144px;
9080
9381
  place-items: center;
9081
- scroll-snap-align: center;
9082
- transition:
9083
- opacity 140ms ease,
9084
- transform 140ms ease;
9382
+ overflow: hidden;
9383
+ background: #2a2a2a;
9384
+ box-shadow: inset 0 0 12px rgb(0 0 0 / 60%);
9085
9385
  }
9086
9386
 
9087
- .agent-gui-node__empty-hero-icon-rail-item:hover {
9088
- transform: translateY(-1px);
9387
+ .agent-gui-vinyl-player__label > img {
9388
+ width: 100%;
9389
+ height: 100%;
9390
+ object-fit: cover;
9089
9391
  }
9090
9392
 
9091
- .agent-gui-node__empty-hero-icon-rail-item > img {
9092
- display: block;
9093
- width: 48px;
9094
- height: 48px;
9393
+ .agent-gui-vinyl-player__tonearm {
9394
+ position: absolute;
9395
+ top: -20px;
9396
+ right: 14px;
9397
+ z-index: 4;
9398
+ width: 140px;
9399
+ height: 400px;
9095
9400
  object-fit: contain;
9401
+ pointer-events: none;
9402
+ transform: rotate(15deg);
9403
+ transform-origin: 50% 8%;
9096
9404
  }
9097
9405
 
9098
- /* Empty-hero agent carousel ("All" tab): a three.js ring of same-sized agent
9099
- records (see agentGuiHeroCarouselScene.ts). Records farther around the ring
9100
- genuinely shrink and fade with perspective; visuals live on the canvas,
9101
- while visually-hidden buttons keep the switcher reachable by keyboard,
9102
- screen readers, and DOM tests. */
9103
- .agent-gui-node__empty-hero-carousel {
9104
- position: relative;
9105
- width: 100%;
9106
- height: 112px;
9107
- outline: none;
9108
- touch-action: pan-y;
9109
- animation: agent-gui-empty-hero-enter 260ms cubic-bezier(0.16, 1, 0.3, 1) 40ms
9110
- both;
9406
+ .agent-gui-vinyl-player__hole {
9407
+ width: 12px;
9408
+ height: 12px;
9409
+ border: 0.5px solid #717171;
9410
+ background: #e0e2e5;
9411
+ box-shadow: inset 0 1px 4px rgb(0 0 0 / 80%);
9412
+ }
9413
+
9414
+ .agent-gui-vinyl-player__power-control {
9415
+ position: absolute;
9416
+ bottom: 32px;
9417
+ left: 32px;
9418
+ display: none;
9419
+ flex-direction: column;
9420
+ align-items: center;
9421
+ gap: 8px;
9422
+ }
9423
+
9424
+ .agent-gui-vinyl-player__lever {
9425
+ display: block;
9426
+ width: 16px;
9427
+ height: 44px;
9428
+ border: 1px solid #111;
9429
+ border-radius: 10px;
9430
+ background: linear-gradient(90deg, #1a1a1a, #3a3a3a, #1a1a1a);
9431
+ box-shadow: 4px 2px 8px rgb(0 0 0 / 40%);
9432
+ transform-origin: bottom;
9433
+ }
9434
+
9435
+ .agent-gui-vinyl-player__power-label {
9436
+ color: #3f4144;
9437
+ font-size: 10px;
9438
+ font-weight: 700;
9439
+ }
9440
+
9441
+ .agent-gui-vinyl-player__tone-control {
9442
+ position: absolute;
9443
+ right: 32px;
9444
+ bottom: 32px;
9445
+ display: none;
9446
+ align-items: center;
9447
+ gap: 12px;
9448
+ color: #65676b;
9449
+ font-size: 10px;
9450
+ font-weight: 700;
9451
+ }
9452
+
9453
+ .agent-gui-vinyl-player__tone-control > span:first-child {
9454
+ width: 30px;
9455
+ height: 52px;
9456
+ border: 1px solid #a0a2a4;
9457
+ border-radius: 6px;
9458
+ background: linear-gradient(#b0b2b5, #ced0d3);
9459
+ box-shadow: inset 0 2px 5px rgb(0 0 0 / 30%);
9111
9460
  }
9112
9461
 
9113
9462
  .agent-gui-node__empty-hero-carousel:has(:focus-visible) {
@@ -9122,14 +9471,21 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9122
9471
  opacity: 0;
9123
9472
  transition: opacity 120ms ease-out;
9124
9473
 
9125
- /* Fade-out mask: a horizontal band dissolves tiles toward the stage sides
9126
- (the fully-transparent stops sit where the outermost tiles ride, not at
9127
- the canvas edges), intersected with a vertical band so tiles sinking
9128
- down the wheel melt away instead of being cut by the canvas bottom. */
9474
+ /* Fade-out mask: the horizontal fade runs edge to edge so there is no dead
9475
+ band beside the integer-aligned canvas buffer. The vertical band melts
9476
+ tiles sinking down the wheel instead of clipping them at the bottom. */
9129
9477
  mask-image:
9130
- linear-gradient(90deg, transparent 4%, #000 30%, #000 70%, transparent 96%),
9131
- linear-gradient(180deg, #000 0%, #000 70%, transparent 96%);
9478
+ linear-gradient(
9479
+ 90deg,
9480
+ transparent 0%,
9481
+ #000 20%,
9482
+ #000 80%,
9483
+ transparent 100%
9484
+ ),
9485
+ linear-gradient(180deg, #000 0%, #000 70%, transparent 100%);
9132
9486
  mask-composite: intersect;
9487
+ mask-size: 100% 100%;
9488
+ mask-position: center;
9133
9489
  }
9134
9490
 
9135
9491
  .agent-gui-node__empty-hero-carousel[data-icons-ready="true"]