@tutti-os/agent-gui 0.0.215 → 0.0.217
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 +9 -5
- package/dist/{agentFileMentionContracts-BeBex-Sf.d.ts → AgentMentionSearchContracts-y1_u9cPi.d.ts} +73 -1
- package/dist/{AgentRichTextReadonly-56TZAJ47.js → AgentRichTextReadonly-WZHUIARR.js} +7 -7
- package/dist/agent-conversation/index.d.ts +0 -2
- package/dist/agent-conversation/index.js +9 -9
- package/dist/agent-gui.d.ts +14 -8
- package/dist/agent-gui.js +23 -22
- package/dist/agent-message-center/index.d.ts +1 -2
- package/dist/agent-message-center/index.js +6 -6
- package/dist/app/renderer/agentactivity.css +93 -93
- package/dist/{chunk-KVFBUOKZ.js → chunk-2QF3RBR4.js} +4 -4
- package/dist/{chunk-XERDRMSF.js → chunk-44OCOBJS.js} +9 -11
- package/dist/chunk-44OCOBJS.js.map +1 -0
- package/dist/chunk-6GX57XB5.js +135 -0
- package/dist/chunk-6GX57XB5.js.map +1 -0
- package/dist/{chunk-AQ7CRDGX.js → chunk-FS7EMOVD.js} +8 -14
- package/dist/chunk-FS7EMOVD.js.map +1 -0
- package/dist/{chunk-ISC67YBJ.js → chunk-G2KRK7Z5.js} +44 -18
- package/dist/chunk-G2KRK7Z5.js.map +1 -0
- package/dist/{chunk-YTU6IUO2.js → chunk-GDLM6FLK.js} +123 -184
- package/dist/chunk-GDLM6FLK.js.map +1 -0
- package/dist/{chunk-BYHNJQYH.js → chunk-GLVENTN6.js} +2 -2
- package/dist/{chunk-2HYADTQP.js → chunk-JQOQETPN.js} +5 -5
- package/dist/{chunk-YBIT37P5.js → chunk-M6WEFXPL.js} +2 -2
- package/dist/{chunk-AD2RTSMS.js → chunk-N2M4B3G3.js} +2 -2
- package/dist/{chunk-MWAUXAD2.js → chunk-NXQGAXIE.js} +8 -8
- package/dist/{chunk-GUD5NOHO.js → chunk-O4QFGCLU.js} +44 -189
- package/dist/chunk-O4QFGCLU.js.map +1 -0
- package/dist/{chunk-KNSLQO52.js → chunk-PPAV2TB4.js} +7 -13
- package/dist/chunk-PPAV2TB4.js.map +1 -0
- package/dist/{chunk-4CHBM3G3.js → chunk-SUVMLCED.js} +5 -5
- package/dist/{chunk-JOUEYIV3.js → chunk-TKECUCUW.js} +863 -946
- package/dist/chunk-TKECUCUW.js.map +1 -0
- package/dist/{chunk-QVLEP54U.js → chunk-ZXEICU6J.js} +5 -3
- package/dist/chunk-ZXEICU6J.js.map +1 -0
- package/dist/context-mention-palette/index.d.ts +3 -3
- package/dist/context-mention-palette/index.js +12 -12
- package/dist/{contribution-DfeuQHH6.d.ts → contribution-D4lcOjSU.d.ts} +2 -14
- package/dist/headerLayout-CP4ujEbo.d.ts +14 -0
- package/dist/i18n/index.d.ts +4 -2
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +77 -53
- package/dist/index.js +46 -39
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +7 -0
- package/dist/layout.js +9 -0
- package/dist/layout.js.map +1 -0
- package/dist/mention-search.d.ts +6 -73
- package/dist/mention-search.js +8 -8
- package/dist/workbench/browser-element-context/index.js +2 -2
- package/dist/workbench/contribution.d.ts +1 -1
- package/dist/workbench/contribution.js +7 -8
- package/dist/workbench/index.d.ts +5 -3
- package/dist/workbench/index.js +10 -11
- package/dist/workbench/launch.js +2 -2
- package/dist/workbench/sessionTitle.js +2 -2
- package/dist/workbench/tool-sidebar/index.d.ts +14 -13
- package/dist/workbench/tool-sidebar/index.js +66 -55
- package/dist/workbench/tool-sidebar/index.js.map +1 -1
- package/package.json +23 -16
- package/dist/chunk-AQ7CRDGX.js.map +0 -1
- package/dist/chunk-GUD5NOHO.js.map +0 -1
- package/dist/chunk-ISC67YBJ.js.map +0 -1
- package/dist/chunk-JOUEYIV3.js.map +0 -1
- package/dist/chunk-KNSLQO52.js.map +0 -1
- package/dist/chunk-QVLEP54U.js.map +0 -1
- package/dist/chunk-XERDRMSF.js.map +0 -1
- package/dist/chunk-YTU6IUO2.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-56TZAJ47.js.map → AgentRichTextReadonly-WZHUIARR.js.map} +0 -0
- /package/dist/{chunk-KVFBUOKZ.js.map → chunk-2QF3RBR4.js.map} +0 -0
- /package/dist/{chunk-BYHNJQYH.js.map → chunk-GLVENTN6.js.map} +0 -0
- /package/dist/{chunk-2HYADTQP.js.map → chunk-JQOQETPN.js.map} +0 -0
- /package/dist/{chunk-YBIT37P5.js.map → chunk-M6WEFXPL.js.map} +0 -0
- /package/dist/{chunk-AD2RTSMS.js.map → chunk-N2M4B3G3.js.map} +0 -0
- /package/dist/{chunk-MWAUXAD2.js.map → chunk-NXQGAXIE.js.map} +0 -0
- /package/dist/{chunk-4CHBM3G3.js.map → chunk-SUVMLCED.js.map} +0 -0
|
@@ -2,30 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
/* Restored agent activity renderer styles from the TSH desktop source during the GUI migration. */
|
|
4
4
|
|
|
5
|
-
[data-agent-gui-preview="true"] {
|
|
6
|
-
pointer-events: none !important;
|
|
7
|
-
user-select: none;
|
|
8
|
-
-webkit-user-select: none;
|
|
9
|
-
cursor: default !important;
|
|
10
|
-
caret-color: transparent;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
[data-agent-gui-preview="true"],
|
|
14
|
-
[data-agent-gui-preview="true"] *,
|
|
15
|
-
[data-agent-gui-preview="true"] *::before,
|
|
16
|
-
[data-agent-gui-preview="true"] *::after {
|
|
17
|
-
animation: none !important;
|
|
18
|
-
transition: none !important;
|
|
19
|
-
scroll-behavior: auto !important;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
[data-agent-gui-preview="true"] *,
|
|
23
|
-
[data-agent-gui-preview="true"] *::before,
|
|
24
|
-
[data-agent-gui-preview="true"] *::after {
|
|
25
|
-
caret-color: transparent !important;
|
|
26
|
-
cursor: default !important;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
5
|
.workspace-agents-status-panel__detail-tool-code,
|
|
30
6
|
.workspace-agents-status-panel__detail-tool-terminal,
|
|
31
7
|
.workspace-agents-status-panel__detail-tool-diff,
|
|
@@ -4643,7 +4619,7 @@ aside.workspace-agents-status-panel
|
|
|
4643
4619
|
--background-session-sidepanel,
|
|
4644
4620
|
rgb(244 245 247)
|
|
4645
4621
|
);
|
|
4646
|
-
--agent-gui-detail-padding-x:
|
|
4622
|
+
--agent-gui-detail-padding-x: 48px;
|
|
4647
4623
|
width: 100%;
|
|
4648
4624
|
height: 100%;
|
|
4649
4625
|
container: agent-gui-node / inline-size;
|
|
@@ -4702,16 +4678,13 @@ aside.workspace-agents-status-panel
|
|
|
4702
4678
|
transition: none;
|
|
4703
4679
|
}
|
|
4704
4680
|
|
|
4705
|
-
.workbench-window[data-window-header-layout="overlay"]
|
|
4706
|
-
.workbench-window[data-agent-gui-standalone-window="true"] {
|
|
4681
|
+
.workbench-window[data-window-header-layout="overlay"] {
|
|
4707
4682
|
--agent-gui-workbench-header-height: 44px;
|
|
4708
4683
|
|
|
4709
4684
|
grid-template-rows: minmax(0, 1fr);
|
|
4710
4685
|
}
|
|
4711
4686
|
|
|
4712
4687
|
.workbench-window[data-window-header-layout="overlay"]
|
|
4713
|
-
.workbench-window__header,
|
|
4714
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4715
4688
|
.workbench-window__header {
|
|
4716
4689
|
position: absolute !important;
|
|
4717
4690
|
top: 0 !important;
|
|
@@ -4740,19 +4713,12 @@ aside.workspace-agents-status-panel
|
|
|
4740
4713
|
cursor: grabbing !important;
|
|
4741
4714
|
}
|
|
4742
4715
|
|
|
4743
|
-
.workbench-window[data-
|
|
4716
|
+
.workbench-window[data-window-header-layout="overlay"]
|
|
4744
4717
|
.workbench-window__header {
|
|
4745
4718
|
z-index: calc(var(--z-panel) + 1);
|
|
4746
4719
|
}
|
|
4747
4720
|
|
|
4748
|
-
.workbench-window[data-
|
|
4749
|
-
.agent-gui-workbench-header::after {
|
|
4750
|
-
display: none;
|
|
4751
|
-
}
|
|
4752
|
-
|
|
4753
|
-
.workbench-window[data-window-header-layout="overlay"] .workbench-window__body,
|
|
4754
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4755
|
-
.workbench-window__body {
|
|
4721
|
+
.workbench-window[data-window-header-layout="overlay"] .workbench-window__body {
|
|
4756
4722
|
grid-row: 1;
|
|
4757
4723
|
overflow: hidden;
|
|
4758
4724
|
}
|
|
@@ -4820,8 +4786,6 @@ aside.workspace-agents-status-panel
|
|
|
4820
4786
|
}
|
|
4821
4787
|
|
|
4822
4788
|
.workbench-window[data-window-header-layout="overlay"]
|
|
4823
|
-
.agent-gui-node__provider-rail-panel,
|
|
4824
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4825
4789
|
.agent-gui-node__provider-rail-panel {
|
|
4826
4790
|
padding-top: var(--agent-gui-workbench-header-height);
|
|
4827
4791
|
}
|
|
@@ -4831,28 +4795,20 @@ aside.workspace-agents-status-panel
|
|
|
4831
4795
|
toolbar has no such wrapper, so fold the same 2px into its offset to keep the
|
|
4832
4796
|
search field top aligned with the provider tiles. */
|
|
4833
4797
|
.workbench-window[data-window-header-layout="overlay"]
|
|
4834
|
-
.agent-gui-node__rail-toolbar,
|
|
4835
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4836
4798
|
.agent-gui-node__rail-toolbar {
|
|
4837
4799
|
padding-top: calc(var(--agent-gui-workbench-header-height) + 2px);
|
|
4838
4800
|
}
|
|
4839
4801
|
|
|
4840
4802
|
.workbench-window[data-window-header-layout="overlay"]
|
|
4841
|
-
.agent-gui-node__detail-panel,
|
|
4842
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4843
4803
|
.agent-gui-node__detail-panel {
|
|
4844
4804
|
position: relative;
|
|
4845
4805
|
}
|
|
4846
4806
|
|
|
4847
|
-
.workbench-window[data-window-header-layout="overlay"] .agent-gui-node__detail
|
|
4848
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4849
|
-
.agent-gui-node__detail {
|
|
4807
|
+
.workbench-window[data-window-header-layout="overlay"] .agent-gui-node__detail {
|
|
4850
4808
|
padding-top: var(--agent-gui-workbench-header-height);
|
|
4851
4809
|
}
|
|
4852
4810
|
|
|
4853
4811
|
.workbench-window[data-window-header-layout="overlay"]
|
|
4854
|
-
.agent-gui-node__timeline-with-composer,
|
|
4855
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
4856
4812
|
.agent-gui-node__timeline-with-composer {
|
|
4857
4813
|
padding-top: 20px;
|
|
4858
4814
|
}
|
|
@@ -4914,12 +4870,6 @@ aside.workspace-agents-status-panel
|
|
|
4914
4870
|
--agent-gui-workbench-header-title-max-width: calc(100% - 32px);
|
|
4915
4871
|
--agent-gui-workbench-header-text: var(--text-primary);
|
|
4916
4872
|
--agent-gui-workbench-header-muted: var(--text-secondary);
|
|
4917
|
-
--agent-gui-workbench-header-divider: color-mix(
|
|
4918
|
-
in srgb,
|
|
4919
|
-
var(--text-primary) 4%,
|
|
4920
|
-
transparent
|
|
4921
|
-
);
|
|
4922
|
-
|
|
4923
4873
|
position: relative;
|
|
4924
4874
|
display: grid;
|
|
4925
4875
|
width: 100%;
|
|
@@ -4937,17 +4887,6 @@ aside.workspace-agents-status-panel
|
|
|
4937
4887
|
user-select: none;
|
|
4938
4888
|
}
|
|
4939
4889
|
|
|
4940
|
-
.agent-gui-workbench-header[data-agent-gui-workbench-header-has-session="true"]::after {
|
|
4941
|
-
position: absolute;
|
|
4942
|
-
right: 0;
|
|
4943
|
-
bottom: 0;
|
|
4944
|
-
left: var(--agent-gui-workbench-header-rail-width);
|
|
4945
|
-
height: 1px;
|
|
4946
|
-
background: var(--agent-gui-workbench-header-divider);
|
|
4947
|
-
content: "";
|
|
4948
|
-
pointer-events: none;
|
|
4949
|
-
}
|
|
4950
|
-
|
|
4951
4890
|
.agent-gui-workbench-header:active {
|
|
4952
4891
|
cursor: grabbing;
|
|
4953
4892
|
}
|
|
@@ -4956,10 +4895,6 @@ aside.workspace-agents-status-panel
|
|
|
4956
4895
|
grid-template-columns: minmax(0, 0px) minmax(0, 1fr);
|
|
4957
4896
|
}
|
|
4958
4897
|
|
|
4959
|
-
.agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]::after {
|
|
4960
|
-
left: 0;
|
|
4961
|
-
}
|
|
4962
|
-
|
|
4963
4898
|
.agent-gui-workbench-header__primary {
|
|
4964
4899
|
display: flex;
|
|
4965
4900
|
box-sizing: border-box;
|
|
@@ -4981,10 +4916,11 @@ aside.workspace-agents-status-panel
|
|
|
4981
4916
|
}
|
|
4982
4917
|
|
|
4983
4918
|
/*
|
|
4984
|
-
*
|
|
4985
|
-
*
|
|
4986
|
-
*
|
|
4987
|
-
* the
|
|
4919
|
+
* Tool-sidebar actions belong to the single Agent window header regardless of
|
|
4920
|
+
* whether that header is owned by the native window or an embedding host.
|
|
4921
|
+
* Collapsing the conversation rail must not pull them into the 720px content
|
|
4922
|
+
* cap. Let the primary row span the host header and keep the same trailing
|
|
4923
|
+
* inset as the expanded detail row.
|
|
4988
4924
|
*
|
|
4989
4925
|
* The tool actions are absolutely positioned against the window's right edge,
|
|
4990
4926
|
* so they no longer occupy space in the flex row. In the collapsed primary row
|
|
@@ -4994,7 +4930,7 @@ aside.workspace-agents-status-panel
|
|
|
4994
4930
|
* trailing padding on the row itself so the title flex-grows and truncates
|
|
4995
4931
|
* before it can reach them, regardless of what precedes it.
|
|
4996
4932
|
*/
|
|
4997
|
-
.agent-gui-workbench-header[data-agent-gui-
|
|
4933
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"][data-agent-gui-workbench-header-collapsed="true"]
|
|
4998
4934
|
.agent-gui-workbench-header__primary {
|
|
4999
4935
|
width: 100%;
|
|
5000
4936
|
padding-inline-end: calc(
|
|
@@ -5003,18 +4939,18 @@ aside.workspace-agents-status-panel
|
|
|
5003
4939
|
);
|
|
5004
4940
|
}
|
|
5005
4941
|
|
|
5006
|
-
.agent-gui-workbench-header[data-agent-gui-
|
|
4942
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"]
|
|
5007
4943
|
.agent-gui-workbench-header__secondary-accessory {
|
|
5008
4944
|
padding-right: 0;
|
|
5009
4945
|
}
|
|
5010
4946
|
|
|
5011
|
-
/* Keep the
|
|
4947
|
+
/* Keep the tool header on the same right edge as its body panel.
|
|
5012
4948
|
The body panel is right-anchored independently of the Agent header's rail
|
|
5013
4949
|
grid; leaving this accessory in the grid makes its left edge drift when the
|
|
5014
4950
|
panel expands to the available width. */
|
|
5015
|
-
.agent-gui-workbench-header[data-agent-gui-
|
|
4951
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"]
|
|
5016
4952
|
.agent-gui-workbench-header__secondary-accessory:has(
|
|
5017
|
-
[data-
|
|
4953
|
+
[data-agent-tool-sidebar-header="true"]
|
|
5018
4954
|
) {
|
|
5019
4955
|
position: absolute;
|
|
5020
4956
|
top: 0;
|
|
@@ -5023,13 +4959,13 @@ aside.workspace-agents-status-panel
|
|
|
5023
4959
|
}
|
|
5024
4960
|
|
|
5025
4961
|
/*
|
|
5026
|
-
*
|
|
5027
|
-
*
|
|
5028
|
-
*
|
|
5029
|
-
*
|
|
5030
|
-
*
|
|
4962
|
+
* The detached-window button pushes the detail controls to the far edge while
|
|
4963
|
+
* the conversation rail is expanded. Once the rail collapses, every primary
|
|
4964
|
+
* control and the session title share one full-width row, so keep that group
|
|
4965
|
+
* anchored immediately after the traffic lights. Secondary tool actions retain
|
|
4966
|
+
* their own right alignment across the full header width.
|
|
5031
4967
|
*/
|
|
5032
|
-
.agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]
|
|
4968
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"]
|
|
5033
4969
|
.agent-gui-workbench-header__detached-window {
|
|
5034
4970
|
margin-left: 0;
|
|
5035
4971
|
}
|
|
@@ -5345,9 +5281,9 @@ aside.workspace-agents-status-panel
|
|
|
5345
5281
|
pointer-events: auto;
|
|
5346
5282
|
}
|
|
5347
5283
|
|
|
5348
|
-
.workbench-
|
|
5284
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"]
|
|
5349
5285
|
.agent-gui-workbench-header__session-title,
|
|
5350
|
-
.workbench-
|
|
5286
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"]
|
|
5351
5287
|
.agent-gui-workbench-header__detail-title {
|
|
5352
5288
|
box-sizing: border-box;
|
|
5353
5289
|
width: auto;
|
|
@@ -5366,7 +5302,7 @@ aside.workspace-agents-status-panel
|
|
|
5366
5302
|
* max-width here so the reservation is not counted twice, which would strand
|
|
5367
5303
|
* the title far short of the actions.
|
|
5368
5304
|
*/
|
|
5369
|
-
.agent-gui-workbench-header[data-agent-gui-
|
|
5305
|
+
.agent-gui-workbench-header[data-agent-gui-workbench-header-tool-sidebar="true"][data-agent-gui-workbench-header-collapsed="true"]
|
|
5370
5306
|
.agent-gui-workbench-header__session-title {
|
|
5371
5307
|
max-width: 100%;
|
|
5372
5308
|
}
|
|
@@ -5630,8 +5566,6 @@ aside.workspace-agents-status-panel
|
|
|
5630
5566
|
}
|
|
5631
5567
|
|
|
5632
5568
|
.workbench-window[data-window-header-layout="overlay"]
|
|
5633
|
-
.agent-gui-node__provider-rail-panel::after,
|
|
5634
|
-
.workbench-window[data-agent-gui-standalone-window="true"]
|
|
5635
5569
|
.agent-gui-node__provider-rail-panel::after {
|
|
5636
5570
|
top: var(--agent-gui-workbench-header-height);
|
|
5637
5571
|
}
|
|
@@ -5696,7 +5630,9 @@ aside.workspace-agents-status-panel
|
|
|
5696
5630
|
align-items: center;
|
|
5697
5631
|
gap: 10px;
|
|
5698
5632
|
min-width: 0;
|
|
5699
|
-
padding
|
|
5633
|
+
/* Right inset mirrors the conversation list's 4px padding + 8px native
|
|
5634
|
+
scrollbar gutter so the toolbar controls end flush with the row edges. */
|
|
5635
|
+
padding: 2px 12px 16px 12px;
|
|
5700
5636
|
}
|
|
5701
5637
|
|
|
5702
5638
|
.agent-gui-node__project-rail-header {
|
|
@@ -6036,7 +5972,10 @@ aside.workspace-agents-status-panel
|
|
|
6036
5972
|
min-height: 0;
|
|
6037
5973
|
overflow-x: hidden;
|
|
6038
5974
|
overflow-y: auto;
|
|
6039
|
-
|
|
5975
|
+
/* Right inset stays 4px because the always-visible native scrollbar already
|
|
5976
|
+
reserves an 8px gutter, keeping the visual right inset at 12px like the
|
|
5977
|
+
left side. */
|
|
5978
|
+
padding: 0 4px 18px 12px;
|
|
6040
5979
|
}
|
|
6041
5980
|
|
|
6042
5981
|
.agent-gui-node__conversation-section {
|
|
@@ -7000,7 +6939,7 @@ button.agent-gui-node__conversation-section-toggle:hover
|
|
|
7000
6939
|
--agent-message-locator-dot-size: 6px;
|
|
7001
6940
|
--agent-message-locator-hit-size: 36px;
|
|
7002
6941
|
--agent-message-locator-center-offset: 18px;
|
|
7003
|
-
--agent-message-locator-inline-shift:
|
|
6942
|
+
--agent-message-locator-inline-shift: 8px;
|
|
7004
6943
|
--agent-message-locator-scrollbar-gap: 8px;
|
|
7005
6944
|
--agent-message-locator-visible-height: 100vh;
|
|
7006
6945
|
--agent-message-locator-visible-top-offset: 0px;
|
|
@@ -10913,3 +10852,64 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
|
|
|
10913
10852
|
font-size: 11px;
|
|
10914
10853
|
line-height: 1.5;
|
|
10915
10854
|
}
|
|
10855
|
+
|
|
10856
|
+
/* Tutti intensity slider: stars pour out of the handle towards the left end
|
|
10857
|
+
of the track. The stream container is sized from React (track start to the
|
|
10858
|
+
handle's left edge); per-star duration/delay/drift come from CSS vars so a
|
|
10859
|
+
fixed pool can run continuously while intensity changes only toggle
|
|
10860
|
+
visibility. Stacking: the stream sits above the track (z-index 1) and below
|
|
10861
|
+
the handle (the slider thumb rules raise it to z-index 2). */
|
|
10862
|
+
.agent-gui-intensity-star-stream {
|
|
10863
|
+
position: absolute;
|
|
10864
|
+
z-index: 1;
|
|
10865
|
+
top: 50%;
|
|
10866
|
+
left: 0;
|
|
10867
|
+
width: max(0px, var(--agent-gui-star-stream-width, 0px));
|
|
10868
|
+
height: 28px;
|
|
10869
|
+
transform: translateY(calc(-50% - 2px));
|
|
10870
|
+
overflow: hidden;
|
|
10871
|
+
pointer-events: none;
|
|
10872
|
+
}
|
|
10873
|
+
|
|
10874
|
+
.agent-gui-intensity-star-stream__star {
|
|
10875
|
+
position: absolute;
|
|
10876
|
+
left: 100%;
|
|
10877
|
+
opacity: 0;
|
|
10878
|
+
filter: drop-shadow(0 0 3px currentColor) drop-shadow(0 0 6px currentColor);
|
|
10879
|
+
animation: agent-gui-intensity-star-stream-flow
|
|
10880
|
+
var(--agent-gui-star-duration, 2s) linear infinite;
|
|
10881
|
+
animation-delay: var(--agent-gui-star-delay, 0s);
|
|
10882
|
+
}
|
|
10883
|
+
|
|
10884
|
+
@keyframes agent-gui-intensity-star-stream-flow {
|
|
10885
|
+
0% {
|
|
10886
|
+
left: 100%;
|
|
10887
|
+
opacity: 0;
|
|
10888
|
+
transform: translateY(0) scale(0.5);
|
|
10889
|
+
}
|
|
10890
|
+
|
|
10891
|
+
10% {
|
|
10892
|
+
opacity: 0.95;
|
|
10893
|
+
}
|
|
10894
|
+
|
|
10895
|
+
50% {
|
|
10896
|
+
transform: translateY(var(--agent-gui-star-drift, 0px)) scale(1);
|
|
10897
|
+
}
|
|
10898
|
+
|
|
10899
|
+
85% {
|
|
10900
|
+
opacity: 0.95;
|
|
10901
|
+
}
|
|
10902
|
+
|
|
10903
|
+
100% {
|
|
10904
|
+
left: -16px;
|
|
10905
|
+
opacity: 0;
|
|
10906
|
+
transform: translateY(0) scale(0.6);
|
|
10907
|
+
}
|
|
10908
|
+
}
|
|
10909
|
+
|
|
10910
|
+
@media (prefers-reduced-motion: reduce) {
|
|
10911
|
+
.agent-gui-intensity-star-stream__star {
|
|
10912
|
+
animation: none;
|
|
10913
|
+
opacity: 0;
|
|
10914
|
+
}
|
|
10915
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
translateInUiLanguage
|
|
3
|
-
} from "./chunk-QVLEP54U.js";
|
|
4
1
|
import {
|
|
5
2
|
normalizeAgentTitleText
|
|
6
3
|
} from "./chunk-MIJXEELH.js";
|
|
4
|
+
import {
|
|
5
|
+
translateInUiLanguage
|
|
6
|
+
} from "./chunk-ZXEICU6J.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveAgentGUIProviderCatalogIdentity
|
|
9
9
|
} from "./chunk-O433KXLK.js";
|
|
@@ -335,4 +335,4 @@ export {
|
|
|
335
335
|
resolveAgentGuiWorkbenchHeaderTitle,
|
|
336
336
|
resolveAgentGuiWorkbenchSessionTitle
|
|
337
337
|
};
|
|
338
|
-
//# sourceMappingURL=chunk-
|
|
338
|
+
//# sourceMappingURL=chunk-2QF3RBR4.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
userAvatarPlaceholderUrl,
|
|
3
|
+
workspaceAgentActivityStatusLabel
|
|
4
|
+
} from "./chunk-N2M4B3G3.js";
|
|
1
5
|
import {
|
|
2
6
|
AGENT_MENTION_FILTER_TAB_ORDER,
|
|
3
7
|
agentGeneratedMentionItemKey,
|
|
@@ -5,21 +9,17 @@ import {
|
|
|
5
9
|
agentMentionFilterLabel,
|
|
6
10
|
agentMentionGroupLabel,
|
|
7
11
|
mentionGroupExpandCount
|
|
8
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-G2KRK7Z5.js";
|
|
9
13
|
import {
|
|
10
14
|
resolveAgentMentionFileThumbnailUrl,
|
|
11
15
|
resolveAgentMentionFileVisualKind
|
|
12
16
|
} from "./chunk-3V5OCA2M.js";
|
|
13
|
-
import {
|
|
14
|
-
userAvatarPlaceholderUrl,
|
|
15
|
-
workspaceAgentActivityStatusLabel
|
|
16
|
-
} from "./chunk-AD2RTSMS.js";
|
|
17
17
|
import {
|
|
18
18
|
managedAgentRoundedIconUrl
|
|
19
19
|
} from "./chunk-M6HTOCQK.js";
|
|
20
20
|
import {
|
|
21
21
|
translate
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-GLVENTN6.js";
|
|
23
23
|
|
|
24
24
|
// agent-gui/agentGuiNode/AgentFileMentionPalette.tsx
|
|
25
25
|
import {
|
|
@@ -335,14 +335,12 @@ function agentMentionItemToRowItem(item) {
|
|
|
335
335
|
}
|
|
336
336
|
if (item.kind === "session") {
|
|
337
337
|
const isMySession = item.scope === "my_sessions";
|
|
338
|
-
const
|
|
339
|
-
const participantTruncatableSegments = item.agentOwnerLabel && item.agentLabel ? isMySession ? [item.agentOwnerLabel] : [item.initiatorName, item.agentOwnerLabel] : null;
|
|
338
|
+
const participantTruncatableSegments = item.agentOwnerLabel && item.agentLabel ? [item.agentOwnerLabel] : null;
|
|
340
339
|
const participantFixedSuffix = participantTruncatableSegments && item.agentLabel ? ` \xB7 ${item.agentLabel}` : null;
|
|
341
340
|
return {
|
|
342
341
|
kind: "session",
|
|
343
|
-
participant,
|
|
342
|
+
participant: item.agentName,
|
|
344
343
|
participantTruncatableSegments,
|
|
345
|
-
participantSegmentSeparator: " & ",
|
|
346
344
|
participantFixedSuffix,
|
|
347
345
|
summary: item.title,
|
|
348
346
|
userAvatarUrl: isMySession ? null : item.initiatorAvatarUrl ?? null,
|
|
@@ -523,4 +521,4 @@ export {
|
|
|
523
521
|
AgentFileMentionPalette,
|
|
524
522
|
AgentContextMentionPalette
|
|
525
523
|
};
|
|
526
|
-
//# sourceMappingURL=chunk-
|
|
524
|
+
//# sourceMappingURL=chunk-44OCOBJS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../agent-gui/agentGuiNode/AgentFileMentionPalette.tsx","../shared/roomIssueStatusLabel.ts"],"sourcesContent":["import {\n normalizeAgentActivityDisplayStatus,\n type AgentActivityDisplayStatus\n} from \"@tutti-os/agent-activity-core\";\nimport {\n MentionPaletteFromState,\n flattenMentionPaletteEntries,\n renderMentionRow,\n type MentionPaletteEntry,\n type MentionPaletteState,\n type MentionPaletteTheme,\n type MentionRowClassNames,\n type MentionRowItem,\n type MentionRowStatusTag,\n type MentionRowStatusTone\n} from \"@tutti-os/ui-rich-text/at-panel\";\nimport { resolveIssueManagerStatusPresentation } from \"@tutti-os/workspace-issue-manager/ui\";\nimport { userAvatarPlaceholderUrl } from \"../../shared/userAvatarPlaceholder\";\nimport { translate } from \"../../i18n/index\";\nimport { managedAgentRoundedIconUrl } from \"../../shared/managedAgentIcons\";\nimport { workspaceAgentActivityStatusLabel } from \"../../shared/workspaceAgentActivityStatusLabel\";\nimport { roomIssueStatusLabel } from \"../../shared/roomIssueStatusLabel\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../shared/mentionFilePresentation\";\nimport {\n agentMentionEmptyGroupLabel,\n agentMentionFilterLabel,\n agentMentionGroupLabel\n} from \"./AgentMentionLabels\";\nimport {\n AGENT_MENTION_FILTER_TAB_ORDER,\n mentionGroupExpandCount\n} from \"./agentMentionSearchHelpers\";\nimport {\n type AgentMentionGroup,\n type AgentMentionBrowseCategory,\n type AgentMentionFilterId,\n type AgentMentionGroupId,\n type AgentMentionSearchState\n} from \"./AgentMentionSearchController\";\nimport { agentGeneratedMentionItemKey } from \"./agentMentionAgentGeneratedFilesPresentation\";\nimport type { AgentContextMentionItem } from \"./agentRichText/agentFileMentionExtension\";\nimport type { ReactNode } from \"react\";\n\nexport interface AgentMentionPaletteEntry {\n key: string;\n type: \"category\" | \"item\" | \"expand\";\n categoryId?: AgentMentionBrowseCategory[\"id\"];\n groupId?: AgentMentionGroupId;\n item?: AgentContextMentionItem;\n}\n\nexport interface AgentFileMentionPaletteProps {\n state: AgentMentionSearchState;\n highlightedKey: string | null;\n label: string;\n loadingLabel: string;\n emptyLabel: string;\n errorLabel: string;\n tabHintLabel: string;\n maxHeightPx: number;\n shouldCenterHighlightedItem?: boolean;\n onHighlightChange: (key: string) => void;\n onSelectItem: (entry: AgentContextMentionItem) => void;\n onSelectCategory: (categoryId: AgentMentionBrowseCategory[\"id\"]) => void;\n onSelectFilter: (filter: AgentMentionFilterId) => void;\n onExpandGroup: (groupId: AgentMentionGroupId) => void;\n onNavigateHierarchy?: (delta: 1 | -1) => void;\n onNavigateIntoItem?: (item: AgentContextMentionItem) => void;\n /**\n * 可选:点击 issue / app 行末尾的「查看产物」入口时回调(打开引用 picker 并定位)。\n * 仅 workspace-issue / workspace-app 行渲染该入口。\n */\n onOpenReferences?: (item: AgentContextMentionItem) => void;\n /** Controlled provenance filter supplied by the AgentGUI orchestration layer. */\n provenanceFilterControl?: ReactNode;\n}\n\nconst AGENT_MENTION_PALETTE_THEME: MentionPaletteTheme = {\n classNames: {\n palette: \"agent-gui-node__mention-palette\",\n header: \"agent-gui-node__mention-palette-header\",\n footer: \"agent-gui-node__mention-palette-footer\",\n tabs: \"agent-gui-node__mention-palette-tabs\",\n scrollRegion: \"agent-gui-node__mention-palette-scroll-region\",\n scrollbar:\n \"workspace-agents-status-panel__scrollbar agent-gui-node__mention-palette-scrollbar\",\n scrollbarThumb: \"workspace-agents-status-panel__scrollbar-thumb\",\n hint: \"agent-gui-node__mention-palette-hint\",\n hintItem: \"agent-gui-node__mention-palette-hint-item\",\n hintButton: \"agent-gui-node__mention-palette-hint-button\",\n hintSeparator: \"agent-gui-node__mention-palette-hint-separator\",\n shortcut: \"agent-gui-node__mention-palette-shortcut\",\n shortcutArrow: \"agent-gui-node__mention-palette-shortcut--arrow\",\n shortcutButton: \"agent-gui-node__mention-palette-shortcut-button\",\n shortcutGroup: \"agent-gui-node__mention-palette-shortcut-group\"\n },\n testIds: {\n emptyState: \"agent-gui-mention-palette-empty-state\",\n hint: \"agent-gui-mention-palette-hint\",\n scrollbar: \"agent-gui-mention-palette-scrollbar\",\n loadingSpinner: \"agent-mention-loading-spinner\"\n },\n groupDividerAttribute: \"data-agent-mention-group-divider\"\n};\n\n/**\n * The agent composer's existing structural row class names. Passing these to\n * {@link renderMentionRow} keeps the rendered DOM byte-identical to the\n * pre-refactor markup (the agent stylesheet `agentactivity.css` owns these\n * rules and the agent spec greps them), while the shared component defaults to\n * package-owned `rich-text-at-mention-*` names for other surfaces.\n */\nconst AGENT_MENTION_ROW_CLASS_NAMES: MentionRowClassNames = {\n fileIcon: \"agent-gui-node__mention-file-icon\",\n fileThumb: \"agent-gui-node__mention-file-thumb\",\n kindIcon: \"tsh-agent-object-token__kind-icon\",\n avatarImgUserPlaceholder:\n \"workspace-agents-status-panel__avatar-img--user-placeholder\"\n};\n\n/**\n * Stable per-item key suffix. The shared shell composes the full entry key as\n * `${group.id}:${agentMentionItemKey(item)}`, matching the agent's historical\n * `${group.id}:${item.kind}:${...}` format so highlight keys stay compatible.\n */\nexport function agentMentionItemKey(item: AgentContextMentionItem): string {\n return `${item.kind}:${\n item.kind === \"file\" ? agentGeneratedMentionItemKey(item) : item.targetId\n }`;\n}\n\nexport function isAgentMentionItemDisabled(\n item: AgentContextMentionItem\n): boolean {\n return (\n item.kind === \"agent-target\" &&\n item.availabilityStatus !== undefined &&\n item.availabilityStatus !== \"ready\" &&\n item.availabilityStatus !== \"available\"\n );\n}\n\nexport function flattenAgentMentionPaletteEntries(\n state: AgentMentionSearchState\n): AgentMentionPaletteEntry[] {\n return flattenMentionPaletteEntries(\n state,\n (item) => agentMentionItemKey(item),\n isAgentMentionItemDisabled\n ).map((entry: MentionPaletteEntry): AgentMentionPaletteEntry => {\n if (entry.type === \"item\") {\n const item =\n entry.groupId !== undefined && entry.itemIndex !== undefined\n ? state.groups.find((group) => group.id === entry.groupId)?.items[\n entry.itemIndex\n ]\n : undefined;\n return {\n key: entry.key,\n type: \"item\",\n groupId: entry.groupId as AgentMentionGroupId | undefined,\n item\n };\n }\n return {\n key: entry.key,\n type: entry.type,\n categoryId: entry.categoryId as AgentMentionFilterId | undefined,\n groupId: entry.groupId as AgentMentionGroupId | undefined\n };\n });\n}\n\nexport function groupStartKeys(state: AgentMentionSearchState): string[] {\n if (state.mode === \"browse\") {\n return state.categories.map((category) => `category:${category.id}`);\n }\n return state.groups\n .map((group) => {\n const firstItem = group.items.find(\n (item) => !isAgentMentionItemDisabled(item)\n );\n if (firstItem) {\n return `${group.id}:${agentMentionItemKey(firstItem)}`;\n }\n if (group.hasMore) {\n return `expand:${group.id}`;\n }\n return null;\n })\n .filter((key): key is string => key !== null);\n}\n\nexport function AgentFileMentionPalette({\n state,\n highlightedKey,\n label,\n loadingLabel,\n emptyLabel,\n errorLabel,\n tabHintLabel,\n maxHeightPx,\n shouldCenterHighlightedItem = false,\n onHighlightChange,\n onSelectItem,\n onSelectCategory,\n onSelectFilter,\n onExpandGroup,\n onNavigateHierarchy,\n onNavigateIntoItem,\n onOpenReferences,\n provenanceFilterControl\n}: AgentFileMentionPaletteProps): React.JSX.Element {\n \"use memo\";\n const openReferencesLabel = translate(\n \"agentHost.agentGui.mentionOpenReferences\"\n );\n const navigateIntoLabel = translate(\n \"agentHost.agentGui.fileMentionEnterFolder\"\n );\n const filter = state.filter as AgentMentionFilterId;\n const highlightedBrowseCategory = highlightedKey?.startsWith(\"category:\")\n ? highlightedKey.slice(\"category:\".length)\n : null;\n const showBrowseHint = shouldShowBrowseSearchHint({\n browseFilter: filter,\n groups: state.groups,\n highlightedBrowseCategory,\n mode: state.mode\n });\n\n // Browse mode carries its own category list (with labels); results mode tabs\n // are the fixed agent filter order. The shared shell renders a single tab\n // source, so resolve the right one here.\n const categories =\n state.mode === \"browse\"\n ? state.categories\n : AGENT_MENTION_FILTER_TAB_ORDER.map((id) => ({\n id,\n label: agentMentionFilterLabel(id)\n }));\n\n // When the agent wants the single keyboard browse hint we hand the shell an\n // empty group list so it renders its (keyboard-icon) empty state with our\n // computed hint copy. Otherwise we map the real groups, decorating each with\n // the agent-specific label / empty / expand / spacing chrome.\n const shellState: MentionPaletteState<AgentContextMentionItem> =\n showBrowseHint\n ? { ...state, categories, groups: [] }\n : {\n ...state,\n categories,\n groups: state.groups.map((group, index) =>\n decorateMentionGroup(\n group,\n index,\n state.groups,\n filter,\n state.query\n )\n )\n };\n\n const emptyLabelForShell = showBrowseHint\n ? browseHintForFilter(filter)\n : resolveMentionPaletteEmptyLabel({\n emptyLabel,\n filter,\n mode: state.mode,\n query: state.query\n });\n\n return (\n <MentionPaletteFromState<AgentContextMentionItem>\n state={shellState}\n highlightedKey={highlightedKey}\n getItemKey={agentMentionItemKey}\n isItemDisabled={isAgentMentionItemDisabled}\n renderItem={(item) =>\n renderMentionRow(agentMentionItemToRowItem(item), {\n classNames: AGENT_MENTION_ROW_CLASS_NAMES,\n dataAttributeMode: \"agent\",\n ...(onNavigateIntoItem && canNavigateIntoMentionItem(item)\n ? {\n onNavigateInto: () => onNavigateIntoItem(item),\n navigateIntoLabel\n }\n : {}),\n ...(onOpenReferences && isReferenceableMentionItem(item)\n ? {\n onOpenReferences: () => onOpenReferences(item),\n openReferencesLabel\n }\n : {})\n })\n }\n labels={{\n loading: loadingLabel,\n empty: emptyLabelForShell,\n error: errorLabel,\n tabHint: tabHintLabel,\n listbox: label\n }}\n hintLabels={{\n cycleFilter: translate(\"agentHost.agentGui.fileMentionSwitchCategory\"),\n moveSelection: translate(\n \"agentHost.agentGui.fileMentionSwitchSelection\"\n ),\n navigateHierarchy: translate(\n \"agentHost.agentGui.fileMentionNavigateHierarchy\"\n )\n }}\n maxHeightPx={maxHeightPx}\n headerActions={\n filter === \"session\" || filter === \"file\" || filter === \"issue\"\n ? provenanceFilterControl\n : undefined\n }\n scrollHighlightedIntoViewCentered={shouldCenterHighlightedItem}\n theme={AGENT_MENTION_PALETTE_THEME}\n callbacks={{\n onHighlightChange,\n onActiveCategoryIdChange: (categoryId) => {\n onSelectCategory(categoryId as AgentMentionBrowseCategory[\"id\"]);\n onSelectFilter(categoryId as AgentMentionFilterId);\n },\n onExpandGroup: (groupId) =>\n onExpandGroup(groupId as AgentMentionGroupId),\n onSelectItem\n }}\n onNavigateHierarchy={onNavigateHierarchy}\n />\n );\n}\n\nexport const AgentContextMentionPalette = AgentFileMentionPalette;\nexport type AgentContextMentionPaletteProps = AgentFileMentionPaletteProps;\n\n/**\n * Map a controller group onto the shared shell group, layering in the\n * agent-specific chrome the generic shell intentionally omits: translated\n * group / empty / expand labels, file-search chrome suppression, and the extra\n * top margin between the \"my sessions\" and \"collab sessions\" groups.\n */\nfunction decorateMentionGroup(\n group: AgentMentionGroup,\n index: number,\n groups: ReadonlyArray<AgentMentionGroup>,\n filter: AgentMentionFilterId,\n query: string\n): AgentMentionGroup {\n const groupId = group.id as AgentMentionGroupId;\n const suppressChrome = shouldSuppressFileSearchGroupChrome(filter, query);\n const followsMySessions =\n groupId === \"collab_sessions\" &&\n (groups[index - 1]?.id as AgentMentionGroupId) === \"my_sessions\";\n const showLabel = shouldRenderMentionGroupLabel({\n filter,\n groupCount: groups.length,\n groupId,\n groupLabel: group.label,\n query\n });\n const groupLabel = group.label ?? agentMentionGroupLabel(groupId);\n return {\n ...group,\n label: showLabel ? groupLabel : undefined,\n emptyLabel: suppressChrome\n ? undefined\n : (group.emptyLabel ?? agentMentionEmptyGroupLabel(groupId, query)),\n expandLabel: group.hasMore\n ? translate(\"agentHost.agentGui.contextPickerExpandMore\", {\n count: mentionGroupExpandCount(group, filter)\n })\n : undefined,\n expandLoadingLabel: translate(\n \"agentHost.agentGui.contextPickerLoadMoreLoading\"\n ),\n expandErrorLabel: translate(\n \"agentHost.agentGui.contextPickerLoadMoreRetry\"\n ),\n sectionClassName: followsMySessions ? \"mt-2\" : undefined,\n hideTopDivider: suppressChrome\n };\n}\n\nfunction shouldSuppressFileSearchGroupChrome(\n filter: AgentMentionFilterId,\n query: string\n): boolean {\n return filter === \"file\" && query.trim().length > 0;\n}\n\nfunction resolveMentionPaletteEmptyLabel(input: {\n emptyLabel: string;\n filter: AgentMentionFilterId;\n mode: AgentMentionSearchState[\"mode\"];\n query: string;\n}): string {\n if (\n input.mode === \"results\" &&\n input.filter === \"file\" &&\n input.query.trim().length > 0\n ) {\n return translate(\"agentHost.agentGui.mentionNoMatchingFiles\");\n }\n if (input.filter === \"session\") {\n return agentMentionEmptyGroupLabel(\"my_sessions\", input.query);\n }\n if (input.filter === \"app\") {\n return agentMentionEmptyGroupLabel(\"apps\", input.query);\n }\n if (input.filter === \"agent\") {\n return agentMentionEmptyGroupLabel(\"agents\", input.query);\n }\n if (input.filter === \"issue\") {\n return agentMentionEmptyGroupLabel(\"issues\", input.query);\n }\n return input.emptyLabel;\n}\n\nfunction shouldRenderMentionGroupLabel(input: {\n filter: AgentMentionFilterId;\n groupCount: number;\n groupId: AgentMentionGroupId;\n groupLabel?: string;\n query: string;\n}): boolean {\n if (shouldSuppressFileSearchGroupChrome(input.filter, input.query)) {\n return false;\n }\n if (input.groupCount !== 1) {\n return true;\n }\n if (input.groupId.startsWith(\"agent:\")) {\n return true;\n }\n return (\n (input.groupLabel ?? agentMentionGroupLabel(input.groupId)) !==\n agentMentionFilterLabel(input.filter)\n );\n}\n\n/**\n * Resolve an agent mention item into the shared, display-ready\n * {@link MentionRowItem} view-model the generic {@link renderMentionRow}\n * consumes. All agent-specific bits — i18n via {@link translate}, the user\n * avatar placeholder asset, the managed-agent rounded icon, and the activity /\n * issue status labels — are resolved here so the shared renderer stays pure.\n */\nfunction agentMentionItemToRowItem(\n item: AgentContextMentionItem\n): MentionRowItem {\n if (item.kind === \"file\") {\n const visualKind = resolveAgentMentionFileVisualKind({\n entryKind: item.entryKind,\n href: item.href,\n mentionNavigation: item.mentionNavigation,\n name: item.name,\n path: item.path\n });\n const isNavigableFolder =\n item.mentionNavigation === \"agent-generated-folder\" ||\n item.mentionNavigation === \"workspace-folder\";\n const childCountLabel =\n isNavigableFolder && typeof item.childCount === \"number\"\n ? translate(\"agentHost.agentGui.mentionFolderChildCount\", {\n count: item.childCount\n })\n : null;\n return {\n kind: \"file\",\n name: item.name,\n visualKind,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl(item) ?? null,\n childCountLabel,\n entryKind: item.entryKind,\n mentionNavigation: item.mentionNavigation\n };\n }\n\n if (item.kind === \"session\") {\n const isMySession = item.scope === \"my_sessions\";\n const participantTruncatableSegments =\n item.agentOwnerLabel && item.agentLabel ? [item.agentOwnerLabel] : null;\n const participantFixedSuffix =\n participantTruncatableSegments && item.agentLabel\n ? ` · ${item.agentLabel}`\n : null;\n return {\n kind: \"session\",\n participant: item.agentName,\n participantTruncatableSegments,\n participantFixedSuffix,\n summary: item.title,\n userAvatarUrl: isMySession ? null : (item.initiatorAvatarUrl ?? null),\n userAvatarPlaceholderUrl,\n agentIconUrl:\n item.agentIconUrl?.trim() ||\n managedAgentRoundedIconUrl(\n mentionSessionAgentProvider(item) ?? item.agentName\n ),\n showUserAvatar: !isMySession,\n statusTag: agentSessionStatusTag(item.status)\n };\n }\n\n if (item.kind === \"workspace-app\") {\n return {\n kind: \"app\",\n name: item.name,\n description: mentionDescriptionWithoutTerminalPeriod(item.description),\n iconUrl: item.iconUrl ?? null\n };\n }\n\n if (item.kind === \"agent-target\") {\n return {\n kind: \"app\",\n name: item.name,\n description: mentionDescriptionWithoutTerminalPeriod(item.description),\n iconUrl: item.iconUrl ?? managedAgentRoundedIconUrl(item.agentProviderId),\n statusTag: agentTargetAvailabilityStatusTag(item.availabilityStatus)\n };\n }\n\n if (item.kind === \"workspace-reference\") {\n return {\n kind: \"app\",\n name: item.name,\n description: null,\n iconUrl: item.iconUrl ?? null\n };\n }\n\n if (item.kind === \"workspace-app-factory\") {\n return {\n kind: \"app-factory\",\n name: item.name\n };\n }\n\n if (item.kind === \"custom\") {\n // 自定义 mention 只经 draftPrompt prefill 进入 composer,不出现在 @ 面板候选;\n // 兜底按通用条目展示(label 即注册方给的 name)。\n return {\n kind: \"issue\",\n title: item.name,\n creatorName: null,\n statusTag: null\n };\n }\n\n return {\n kind: \"issue\",\n title: item.title,\n creatorName: item.creatorName ?? null,\n statusTag: agentIssueStatusTag(item.status)\n };\n}\n\nfunction mentionDescriptionWithoutTerminalPeriod(\n description: string | null | undefined\n): string | null {\n const normalizedDescription = description?.trimEnd();\n return normalizedDescription\n ? normalizedDescription.replace(/[。.]+$/u, \"\")\n : null;\n}\n\n/**\n * 仅 workspace-issue 行,以及声明了能够提供产物文件(reference)的 workspace-app 行,\n * 才在行末尾展示「查看产物」入口。应用是否能提供产物文件由其 manifest 的\n * references 能力决定(`referencesListSupported`),而非硬编码应用名单。\n */\nfunction isReferenceableMentionItem(item: AgentContextMentionItem): boolean {\n if (item.kind === \"workspace-issue\") {\n return true;\n }\n if (item.kind === \"workspace-app\") {\n return item.referencesListSupported === true;\n }\n return false;\n}\n\nfunction canNavigateIntoMentionItem(item: AgentContextMentionItem): boolean {\n return (\n item.kind === \"file\" &&\n (item.mentionNavigation === \"agent-generated-folder\" ||\n item.mentionNavigation === \"workspace-folder\")\n );\n}\n\nfunction mentionSessionAgentProvider(\n item: Extract<AgentContextMentionItem, { kind: \"session\" }>\n): string | null {\n const queryStart = item.href.indexOf(\"?\");\n if (queryStart < 0) {\n return null;\n }\n return new URLSearchParams(item.href.slice(queryStart + 1)).get(\"provider\");\n}\n\nfunction agentSessionStatusTag(\n status: string | undefined\n): MentionRowStatusTag | null {\n if (!status) {\n return null;\n }\n const activityStatus = normalizeAgentActivityDisplayStatus(status);\n return {\n label: workspaceAgentActivityStatusLabel(activityStatus),\n tone: mentionStatusTone(activityStatus),\n pulse: activityStatus === \"working\" || activityStatus === \"waiting\",\n variant: \"activity\",\n dataStatus: activityStatus\n };\n}\n\n/**\n * Shared agent targets remain discoverable while their owner is offline. Their\n * availability badge communicates whether the target can currently be invoked.\n */\nfunction agentTargetAvailabilityStatusTag(\n availabilityStatus: string | undefined\n): MentionRowStatusTag {\n const available =\n availabilityStatus === undefined ||\n availabilityStatus === \"ready\" ||\n availabilityStatus === \"available\";\n return {\n label: translate(\n available\n ? \"agentHost.agentGui.mentionAgentTargetAvailable\"\n : \"agentHost.agentGui.mentionAgentTargetUnavailable\"\n ),\n tone: available ? \"green\" : \"neutral\",\n variant: \"activity\",\n dataStatus: available ? \"available\" : \"unavailable\"\n };\n}\n\nfunction agentIssueStatusTag(\n status: string | undefined\n): MentionRowStatusTag | null {\n if (!status) {\n return null;\n }\n const presentation = resolveIssueManagerStatusPresentation(status);\n return {\n label: roomIssueStatusLabel(status),\n tone: presentation.mentionTone,\n variant: \"issue\",\n dataStatus: presentation.dataStatus\n };\n}\n\nfunction mentionStatusTone(\n status: AgentActivityDisplayStatus\n): MentionRowStatusTone {\n if (status === \"working\") {\n return \"blue\";\n }\n if (status === \"waiting\" || status === \"canceled\") {\n return \"amber\";\n }\n if (status === \"completed\" || status === \"idle\") {\n return \"green\";\n }\n if (status === \"failed\") {\n return \"red\";\n }\n return \"neutral\";\n}\n\nfunction browseHintForFilter(filter: AgentMentionFilterId): string {\n switch (filter) {\n case \"agent\":\n return translate(\"agentHost.agentGui.contextPickerBrowseAgentHint\");\n case \"app\":\n return translate(\"agentHost.agentGui.contextPickerBrowseAppHint\");\n case \"file\":\n return translate(\"agentHost.agentGui.contextPickerBrowseFileHint\");\n case \"session\":\n return translate(\"agentHost.agentGui.contextPickerBrowseSessionHint\");\n case \"issue\":\n return translate(\"agentHost.agentGui.contextPickerBrowseIssueHint\");\n }\n}\n\nfunction hasInteractiveGroupEntries(\n groups: ReadonlyArray<AgentMentionGroup>\n): boolean {\n return groups.some((group) => group.items.length > 0 || group.hasMore);\n}\n\nfunction isFileBrowseGroupsOnlyEmpty(\n groups: ReadonlyArray<AgentMentionGroup>\n): boolean {\n const fileGroups = groups.filter(\n (group) =>\n group.id === \"opened_files\" || group.id === \"agent_generated_files\"\n );\n if (fileGroups.length === 0) {\n return false;\n }\n return fileGroups.every(\n (group) => group.items.length === 0 && !group.hasMore\n );\n}\n\nfunction shouldShowBrowseSearchHint(input: {\n browseFilter: AgentMentionFilterId;\n groups: ReadonlyArray<AgentMentionGroup>;\n highlightedBrowseCategory: string | null;\n mode: AgentMentionSearchState[\"mode\"];\n}): boolean {\n if (input.mode !== \"browse\" || hasInteractiveGroupEntries(input.groups)) {\n return false;\n }\n if (input.groups.length === 0) {\n return true;\n }\n if (\n input.highlightedBrowseCategory !== null &&\n input.highlightedBrowseCategory !== input.browseFilter\n ) {\n return true;\n }\n return (\n input.browseFilter === \"file\" && isFileBrowseGroupsOnlyEmpty(input.groups)\n );\n}\n","import { translate, type TranslateFn } from \"../i18n/index\";\n\nexport function roomIssueStatusLabel(status: string, t?: TranslateFn): string {\n const translateFn = t ?? translate;\n switch (status) {\n case \"not_started\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusNotStarted\");\n case \"running\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusRunning\");\n case \"in_progress\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusInProgress\");\n case \"pending_acceptance\":\n return translateFn(\n \"agentHost.roomIssueNode.issueStatusPendingAcceptance\"\n );\n case \"completed\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusCompleted\");\n case \"failed\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusFailed\");\n case \"canceled\":\n return translateFn(\"agentHost.roomIssueNode.issueStatusCanceled\");\n default:\n return (\n status || translateFn(\"agentHost.roomIssueNode.issueStatusUnknown\")\n );\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// agent-gui/agentGuiNode/model/agentGuiRailLayout.ts
|
|
2
|
+
function clamp(value, min, max) {
|
|
3
|
+
return Math.min(max, Math.max(min, value));
|
|
4
|
+
}
|
|
5
|
+
var AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX = 280;
|
|
6
|
+
var AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX = 248;
|
|
7
|
+
var AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX = 520;
|
|
8
|
+
var AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;
|
|
9
|
+
var AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX = 320;
|
|
10
|
+
var AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX = 10;
|
|
11
|
+
var AGENT_GUI_PROVIDER_RAIL_WIDTH_PX = 52;
|
|
12
|
+
var AGENT_GUI_COLLAPSED_MIN_WIDTH_PX = 460;
|
|
13
|
+
var AGENT_GUI_STANDALONE_MIDDLE_CONTENT_MIN_WIDTH_PX = AGENT_GUI_COLLAPSED_MIN_WIDTH_PX - AGENT_GUI_PROVIDER_RAIL_WIDTH_PX;
|
|
14
|
+
var AGENT_GUI_EXPANDED_MIN_WIDTH_PX = AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
|
|
15
|
+
var AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX = AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX + AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX + AGENT_GUI_PROVIDER_RAIL_WIDTH_PX;
|
|
16
|
+
var AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;
|
|
17
|
+
function shouldAutoCollapseAgentGUIConversationRail(containerWidthPx, options) {
|
|
18
|
+
if (options?.mode === "preserve-middle-content" && Number.isFinite(containerWidthPx) && containerWidthPx > 0) {
|
|
19
|
+
return containerWidthPx < resolveStandaloneAgentGUIViewportMinimumWidthPx({
|
|
20
|
+
conversationRailCollapsed: false,
|
|
21
|
+
conversationRailWidthPx: options.conversationRailWidthPx
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return Number.isFinite(containerWidthPx) && containerWidthPx > 0 && containerWidthPx <= AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX;
|
|
25
|
+
}
|
|
26
|
+
function resolveAgentGUIConversationRailPresentation(input) {
|
|
27
|
+
const isAutoCollapsed = shouldAutoCollapseAgentGUIConversationRail(
|
|
28
|
+
input.containerWidthPx,
|
|
29
|
+
{
|
|
30
|
+
mode: input.autoCollapseMode,
|
|
31
|
+
conversationRailWidthPx: input.conversationRailWidthPx
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
return {
|
|
35
|
+
conversationRailWidthPx: clampAgentGUIConversationRailWidthPx(
|
|
36
|
+
input.conversationRailWidthPx,
|
|
37
|
+
input.containerWidthPx
|
|
38
|
+
),
|
|
39
|
+
isAutoCollapsed,
|
|
40
|
+
isCollapsed: input.conversationRailCollapsed === true || isAutoCollapsed
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function resolveStandaloneAgentGUIViewportMinimumWidthPx(input) {
|
|
44
|
+
if (input.conversationRailCollapsed === true) {
|
|
45
|
+
return AGENT_GUI_COLLAPSED_MIN_WIDTH_PX;
|
|
46
|
+
}
|
|
47
|
+
return AGENT_GUI_PROVIDER_RAIL_WIDTH_PX + resolvePreferredConversationRailWidthPx(input.conversationRailWidthPx) + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX + AGENT_GUI_STANDALONE_MIDDLE_CONTENT_MIN_WIDTH_PX;
|
|
48
|
+
}
|
|
49
|
+
function resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx) {
|
|
50
|
+
const safeContainerWidth = Number.isFinite(containerWidthPx) && containerWidthPx > 0 ? containerWidthPx : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
|
|
51
|
+
return Math.max(
|
|
52
|
+
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
53
|
+
Math.min(
|
|
54
|
+
AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX,
|
|
55
|
+
safeContainerWidth - AGENT_GUI_DETAIL_MIN_WIDTH_PX - AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
function clampAgentGUIConversationRailWidthPx(widthPx, containerWidthPx) {
|
|
60
|
+
return clamp(
|
|
61
|
+
resolvePreferredConversationRailWidthPx(widthPx),
|
|
62
|
+
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
63
|
+
resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
function resolvePreferredConversationRailWidthPx(widthPx) {
|
|
67
|
+
const preferredWidthPx = typeof widthPx === "number" && Number.isFinite(widthPx) ? Math.round(widthPx) : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX;
|
|
68
|
+
return clamp(
|
|
69
|
+
preferredWidthPx,
|
|
70
|
+
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
71
|
+
AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function resolveNextAgentGUIConversationRailWidthPx(input) {
|
|
75
|
+
const nextWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
76
|
+
input.requestedWidthPx,
|
|
77
|
+
input.containerWidthPx
|
|
78
|
+
);
|
|
79
|
+
if (input.currentWidthPx === nextWidthPx) {
|
|
80
|
+
return input.currentWidthPx;
|
|
81
|
+
}
|
|
82
|
+
if (input.currentWidthPx === null || input.currentWidthPx === void 0) {
|
|
83
|
+
const defaultWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
84
|
+
null,
|
|
85
|
+
input.containerWidthPx
|
|
86
|
+
);
|
|
87
|
+
if (nextWidthPx === defaultWidthPx) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return nextWidthPx;
|
|
92
|
+
}
|
|
93
|
+
function resolveAgentGUIExpandedWindowFrame(input) {
|
|
94
|
+
const desiredRailWidthPx = clampAgentGUIConversationRailWidthPx(
|
|
95
|
+
input.conversationRailWidthPx,
|
|
96
|
+
AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
|
|
97
|
+
);
|
|
98
|
+
const desiredWidthPx = Math.max(
|
|
99
|
+
Math.round(input.width),
|
|
100
|
+
desiredRailWidthPx + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX,
|
|
101
|
+
AGENT_GUI_EXPANDED_MIN_WIDTH_PX,
|
|
102
|
+
AGENT_GUI_EXPANDED_TARGET_WIDTH_PX
|
|
103
|
+
);
|
|
104
|
+
const desktopWidthPx = Number.isFinite(input.desktopSize.width) && input.desktopSize.width > 0 ? Math.round(input.desktopSize.width) : desiredWidthPx;
|
|
105
|
+
const nextWidthPx = Math.min(desiredWidthPx, desktopWidthPx);
|
|
106
|
+
const maxX = Math.max(0, desktopWidthPx - nextWidthPx);
|
|
107
|
+
const nextX = clamp(Math.round(input.position.x), 0, maxX);
|
|
108
|
+
return {
|
|
109
|
+
position: {
|
|
110
|
+
x: nextX,
|
|
111
|
+
y: input.position.y
|
|
112
|
+
},
|
|
113
|
+
size: {
|
|
114
|
+
width: nextWidthPx,
|
|
115
|
+
height: input.height
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export {
|
|
121
|
+
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
122
|
+
AGENT_GUI_DETAIL_MIN_WIDTH_PX,
|
|
123
|
+
AGENT_GUI_PROVIDER_RAIL_WIDTH_PX,
|
|
124
|
+
AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
|
|
125
|
+
AGENT_GUI_STANDALONE_MIDDLE_CONTENT_MIN_WIDTH_PX,
|
|
126
|
+
AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,
|
|
127
|
+
shouldAutoCollapseAgentGUIConversationRail,
|
|
128
|
+
resolveAgentGUIConversationRailPresentation,
|
|
129
|
+
resolveStandaloneAgentGUIViewportMinimumWidthPx,
|
|
130
|
+
resolveAgentGUIConversationRailMaxWidthPx,
|
|
131
|
+
clampAgentGUIConversationRailWidthPx,
|
|
132
|
+
resolveNextAgentGUIConversationRailWidthPx,
|
|
133
|
+
resolveAgentGUIExpandedWindowFrame
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=chunk-6GX57XB5.js.map
|