@auto-ai/agent 2.1.157 → 2.1.160

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 (135) hide show
  1. package/.env.example +7 -0
  2. package/dist/404/index.html +1 -1
  3. package/dist/404.html +1 -1
  4. package/dist/_next/static/chunks/0bb72b120dc81a85.js +1 -0
  5. package/dist/_next/static/chunks/0eeaf05fe8e92617.js +1 -0
  6. package/dist/_next/static/chunks/14114800ef3e692e.js +1 -0
  7. package/dist/_next/static/chunks/1d51ed7830318474.js +1 -0
  8. package/dist/_next/static/chunks/1ffb3acecdbda566.js +1 -0
  9. package/dist/_next/static/chunks/22d483db0dece6fa.js +1 -0
  10. package/dist/_next/static/chunks/289e2d5005a099d3.js +1 -0
  11. package/dist/_next/static/chunks/292d0b687a419387.js +1 -0
  12. package/dist/_next/static/chunks/2bbdc3c6bbaac93f.js +1 -0
  13. package/dist/_next/static/chunks/{87e12ecbe9521f9b.js → 314d4f64173e0e4f.js} +1 -1
  14. package/dist/_next/static/chunks/376aaeae24164c1a.js +1 -0
  15. package/dist/_next/static/chunks/39fed6244d398269.js +1 -0
  16. package/dist/_next/static/chunks/48bc54794d1c3561.js +1 -0
  17. package/dist/_next/static/chunks/5534f66638e5a2e8.js +1 -0
  18. package/dist/_next/static/chunks/5817c66b26ce8538.css +1 -0
  19. package/dist/_next/static/chunks/{4d129d4e15c8c424.js → 59baceab6698f9f7.js} +1 -1
  20. package/dist/_next/static/chunks/5d5fe2c255f43fec.js +1 -0
  21. package/dist/_next/static/chunks/61676890ad8fe194.js +1 -0
  22. package/dist/_next/static/chunks/67bb401596b3c723.js +1 -0
  23. package/dist/_next/static/chunks/{5d79b7f202080232.js → 6c49d19eb7e88b9c.js} +1 -1
  24. package/dist/_next/static/chunks/{9ccf7a8bca1730bf.js → 76a71d344cc15a9f.js} +1 -1
  25. package/dist/_next/static/chunks/7de1ab3b78f48430.js +1 -0
  26. package/dist/_next/static/chunks/{94029062f236cadc.js → 83e39d76d6f07968.js} +1 -1
  27. package/dist/_next/static/chunks/{522518d740397639.js → 91adb7bdb9870c6a.js} +1 -1
  28. package/dist/_next/static/chunks/{8f5be275907dd98c.js → 93102efda2769ba5.js} +1 -1
  29. package/dist/_next/static/chunks/950875832bab2141.js +1 -0
  30. package/dist/_next/static/chunks/98a41a7efbe71682.js +1 -0
  31. package/dist/_next/static/chunks/{3dcb1dcf23e7ab9c.js → 9aea16dd9db3a8bd.js} +1 -1
  32. package/dist/_next/static/chunks/9e2cffe3c17fd0e7.js +1 -0
  33. package/dist/_next/static/chunks/a79654d570ac30eb.js +1 -0
  34. package/dist/_next/static/chunks/a8e06ee8243e3389.js +1 -0
  35. package/dist/_next/static/chunks/{cd5eec7d305aa041.js → aadf128359998a2d.js} +1 -1
  36. package/dist/_next/static/chunks/ad419be63e291696.js +1 -0
  37. package/dist/_next/static/chunks/{b30f1da4e57f459a.js → b929fc868619ccb9.js} +1 -1
  38. package/dist/_next/static/chunks/{106955e3cc6a6843.js → b99d7c931432a00e.js} +1 -1
  39. package/dist/_next/static/chunks/bcefc2c679f3ada6.js +1 -0
  40. package/dist/_next/static/chunks/c1cfc60c17638a73.js +1 -0
  41. package/dist/_next/static/chunks/c26f95ab8ad3dcf0.js +1 -0
  42. package/dist/_next/static/chunks/{270d7571d2eea071.js → c5af60c028e52cf8.js} +1 -1
  43. package/dist/_next/static/chunks/cb4dec27441d471a.js +1 -0
  44. package/dist/_next/static/chunks/{63ec034afca4b5d6.js → cbb200599eb3e6d0.js} +1 -1
  45. package/dist/_next/static/chunks/d3af8988bf25a7de.js +1 -0
  46. package/dist/_next/static/chunks/d3ccfb3dcef5974f.js +1 -0
  47. package/dist/_next/static/chunks/d504c4e2ebc5319a.js +1 -0
  48. package/dist/_next/static/chunks/e2833182a81cd867.js +1 -0
  49. package/dist/_next/static/chunks/e520aa06a5014225.js +1 -0
  50. package/dist/_next/static/chunks/e7bd145455a541af.css +4 -0
  51. package/dist/_next/static/chunks/eae304701469d3a8.js +1 -0
  52. package/dist/_next/static/chunks/eba0719a42605421.js +1 -0
  53. package/dist/_next/static/chunks/f2a87f0c7c1ec9f4.js +1 -0
  54. package/dist/_next/static/chunks/{7bdf0e5b41aeb209.css → fa361913d47fdc14.css} +3 -0
  55. package/dist/_next/static/chunks/faaf4e0c2d5cffda.js +1 -0
  56. package/dist/_next/static/chunks/fc4be3bcf72559a0.js +1 -0
  57. package/dist/_next/static/chunks/{turbopack-63952675b1d69124.js → turbopack-030a42d60560a927.js} +1 -1
  58. package/dist/agent-office.html +226 -155
  59. package/dist/index.html +2 -2
  60. package/dist/index.txt +21 -21
  61. package/dist/manage/about/index.html +2 -2
  62. package/dist/manage/about/index.txt +22 -23
  63. package/dist/manage/add-account/basic/index.html +2 -0
  64. package/dist/manage/add-account/basic/index.txt +38 -0
  65. package/dist/manage/add-account/index.html +2 -0
  66. package/dist/manage/add-account/index.txt +36 -0
  67. package/dist/manage/env/index.html +2 -2
  68. package/dist/manage/env/index.txt +24 -25
  69. package/dist/manage/general/index.html +2 -2
  70. package/dist/manage/general/index.txt +22 -23
  71. package/dist/manage/index.html +2 -2
  72. package/dist/manage/index.txt +19 -20
  73. package/dist/manage/mcp/index.html +2 -2
  74. package/dist/manage/mcp/index.txt +21 -22
  75. package/dist/manage/permissions/index.html +2 -2
  76. package/dist/manage/permissions/index.txt +22 -23
  77. package/dist/manage/skills/index.html +2 -2
  78. package/dist/manage/skills/index.txt +21 -22
  79. package/dist/manage/task/index.html +2 -2
  80. package/dist/manage/task/index.txt +21 -22
  81. package/dist/manage/teams/index.html +2 -2
  82. package/dist/manage/teams/index.txt +21 -22
  83. package/dist/manage/tools/index.html +2 -2
  84. package/dist/manage/tools/index.txt +21 -22
  85. package/dist/ws-test.css +2880 -0
  86. package/dist/ws-test.html +77 -9740
  87. package/dist/ws-test.js +7442 -0
  88. package/package.json +6 -6
  89. package/skills-runtime/deploy-test-env/SKILL.md +1 -1
  90. package/skills-runtime/dev-task-flow/SKILL.md +4 -4
  91. package/skills-runtime/self-test-flow/SKILL.md +2 -2
  92. package/skills-runtime/workflow-hub/SKILL.md +1 -1
  93. package/dist/_next/static/chunks/06b383e8ee499be7.js +0 -1
  94. package/dist/_next/static/chunks/0ce6504fc10ce408.js +0 -1
  95. package/dist/_next/static/chunks/0fa3b1f693a23b15.js +0 -1
  96. package/dist/_next/static/chunks/1c9321874fea5f0d.js +0 -1
  97. package/dist/_next/static/chunks/1cb7453376657ffb.css +0 -1
  98. package/dist/_next/static/chunks/2014b101125849fd.js +0 -1
  99. package/dist/_next/static/chunks/2df3e464b6247e75.js +0 -1
  100. package/dist/_next/static/chunks/32b9bdd82a961878.js +0 -1
  101. package/dist/_next/static/chunks/371449b804c846f7.js +0 -1
  102. package/dist/_next/static/chunks/38b035f49fa68570.js +0 -1
  103. package/dist/_next/static/chunks/3ddf56f78e79b076.js +0 -1
  104. package/dist/_next/static/chunks/46b326fcd7b2e8ab.js +0 -1
  105. package/dist/_next/static/chunks/489266ff75dbd7fd.js +0 -1
  106. package/dist/_next/static/chunks/4b1cbde821e7ad65.js +0 -1
  107. package/dist/_next/static/chunks/5853f68e75f5f7ab.js +0 -1
  108. package/dist/_next/static/chunks/5bad5163b6e015f5.js +0 -1
  109. package/dist/_next/static/chunks/5f6769a92729c6c3.js +0 -1
  110. package/dist/_next/static/chunks/65efa67b7efe0f72.js +0 -1
  111. package/dist/_next/static/chunks/6e61f670898cb297.css +0 -1
  112. package/dist/_next/static/chunks/6f4460bd0b8a57af.js +0 -1
  113. package/dist/_next/static/chunks/73930967cfa80238.js +0 -1
  114. package/dist/_next/static/chunks/73e518d4b3543b8f.js +0 -1
  115. package/dist/_next/static/chunks/799f92e88bfeb469.js +0 -1
  116. package/dist/_next/static/chunks/7f52fbd725b13904.js +0 -1
  117. package/dist/_next/static/chunks/a6737fc58619eae5.js +0 -1
  118. package/dist/_next/static/chunks/a7d1ae46740fe1db.js +0 -1
  119. package/dist/_next/static/chunks/b896987ddf6315c9.js +0 -1
  120. package/dist/_next/static/chunks/bbcf9daa108b22fb.js +0 -1
  121. package/dist/_next/static/chunks/bf2c1c402dbcccdf.js +0 -1
  122. package/dist/_next/static/chunks/bfc6ee42cec583d5.js +0 -1
  123. package/dist/_next/static/chunks/c79da9dd69089e4f.js +0 -1
  124. package/dist/_next/static/chunks/c933951b3113492f.js +0 -1
  125. package/dist/_next/static/chunks/d2d432a9facf4278.js +0 -1
  126. package/dist/_next/static/chunks/d4fd1b2f761be57f.css +0 -7
  127. package/dist/_next/static/chunks/d5e3d29f769997cc.js +0 -1
  128. package/dist/_next/static/chunks/da89e354de542422.js +0 -1
  129. package/dist/_next/static/chunks/e7bcbeb465fa49cf.js +0 -1
  130. package/dist/_next/static/chunks/ecaea9e9321ec538.js +0 -1
  131. package/dist/_next/static/media/data-loading.be8d921a.png +0 -0
  132. package/dist/_next/static/media/no-data.48c973b9.png +0 -0
  133. /package/dist/_next/static/{vjdTWbN05kyCgPusoPl-g → WYrSrJ9dye9qgdGCYVOpA}/_buildManifest.js +0 -0
  134. /package/dist/_next/static/{vjdTWbN05kyCgPusoPl-g → WYrSrJ9dye9qgdGCYVOpA}/_clientMiddlewareManifest.json +0 -0
  135. /package/dist/_next/static/{vjdTWbN05kyCgPusoPl-g → WYrSrJ9dye9qgdGCYVOpA}/_ssgManifest.js +0 -0
@@ -3,136 +3,157 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>Agent 列表</title>
6
+ <title>办公室</title>
7
+ <link rel="stylesheet" href="/ws-test.css" />
7
8
  <style>
8
- :root {
9
- color-scheme: light;
10
- --ds-page: #f2f2f7;
11
- --ds-bg: #ffffff;
12
- --ds-border: #e5e5ea;
13
- --ds-text: #1c1c1e;
14
- --ds-muted: #8e8e93;
15
- --ds-accent: #0a84ff;
16
- --ds-accent-hover: #0070e0;
17
- --ds-danger: #ff3b30;
18
- }
19
- * { box-sizing: border-box; }
20
- html, body { height: 100%; margin: 0; }
21
9
  body {
22
- font-family: 'PingFang SC', 'Microsoft YaHei', ui-sans-serif, system-ui, sans-serif;
23
- background: var(--ds-page);
24
- color: var(--ds-text);
25
10
  overflow: hidden;
11
+ -webkit-font-smoothing: antialiased;
26
12
  }
27
- #officeApp {
13
+ .office-app {
28
14
  display: flex;
29
15
  flex-direction: column;
30
16
  width: 100%;
31
17
  height: 100%;
18
+ background: var(--ds-bg);
32
19
  }
33
- .office-topbar {
20
+ .office-header {
34
21
  flex-shrink: 0;
35
22
  display: flex;
36
23
  align-items: center;
37
24
  justify-content: space-between;
38
- padding: 14px 20px;
39
- background: var(--ds-bg);
25
+ gap: 16px;
26
+ min-height: 52px;
27
+ padding: 0 20px;
40
28
  border-bottom: 1px solid var(--ds-border);
29
+ background: var(--ds-bg);
41
30
  }
42
- .office-brand h1 {
31
+ .office-header-main {
32
+ min-width: 0;
33
+ flex: 1;
34
+ }
35
+ .office-header-title {
43
36
  margin: 0;
44
- font-size: 1.15rem;
37
+ font-size: 16px;
45
38
  font-weight: 600;
39
+ line-height: 1.3;
40
+ color: var(--ds-text);
46
41
  }
47
- .office-brand p {
48
- margin: 0.2rem 0 0;
49
- font-size: 0.82rem;
42
+ .office-header-sub {
43
+ margin: 2px 0 0;
44
+ font-size: 12px;
50
45
  color: var(--ds-muted);
46
+ line-height: 1.4;
51
47
  }
52
- .office-top-actions {
53
- display: flex;
54
- gap: 8px;
48
+ .btn-office-new {
49
+ flex-shrink: 0;
50
+ display: inline-flex;
51
+ align-items: center;
52
+ gap: 6px;
53
+ padding: 8px 14px;
54
+ border: none;
55
+ border-radius: 999px;
56
+ background: var(--ds-accent);
57
+ color: #fff;
58
+ font-size: 14px;
59
+ font-weight: 500;
60
+ font-family: inherit;
61
+ cursor: pointer;
62
+ transition: background 120ms ease;
63
+ }
64
+ .btn-office-new:hover {
65
+ background: var(--ds-accent-hover);
66
+ }
67
+ .btn-office-new svg {
68
+ flex-shrink: 0;
55
69
  }
56
70
  .office-main {
57
71
  flex: 1;
58
72
  display: flex;
59
73
  min-height: 0;
60
74
  overflow: hidden;
75
+ background: var(--ds-bg);
61
76
  }
62
- #agentListRoot {
77
+ .office-list-root {
63
78
  flex: 1;
64
79
  overflow: auto;
65
- padding: 16px 20px 24px;
80
+ padding: 20px;
66
81
  min-width: 0;
67
82
  }
68
83
  .agent-list {
69
84
  list-style: none;
70
- margin: 0;
85
+ margin: 0 auto;
71
86
  padding: 0;
72
87
  display: flex;
73
88
  flex-direction: column;
74
- gap: 10px;
75
- max-width: 720px;
89
+ gap: 2px;
90
+ max-width: 640px;
76
91
  }
77
92
  .agent-list-empty {
78
93
  color: var(--ds-muted);
79
- font-size: 0.9rem;
80
- padding: 48px 16px;
94
+ font-size: 14px;
95
+ padding: 64px 16px;
81
96
  text-align: center;
97
+ max-width: 640px;
98
+ margin: 0 auto;
82
99
  }
83
100
  .agent-list-item {
84
- display: flex;
85
- align-items: center;
86
- gap: 14px;
101
+ display: block;
87
102
  width: 100%;
88
- padding: 14px 16px;
89
- border: 1px solid var(--ds-border);
90
- border-radius: 12px;
91
- background: var(--ds-bg);
103
+ padding: 12px 14px;
104
+ border: none;
105
+ border-radius: 10px;
106
+ background: transparent;
92
107
  cursor: pointer;
93
108
  text-align: left;
94
109
  font: inherit;
95
110
  color: inherit;
96
- transition: border-color 0.15s, box-shadow 0.15s;
111
+ transition: background 120ms ease;
97
112
  }
98
113
  .agent-list-item:hover {
99
- border-color: rgba(10, 132, 255, 0.35);
100
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
114
+ background: var(--ds-item-hover);
101
115
  }
102
116
  .agent-list-item.is-selected {
103
- border-color: var(--ds-accent);
104
- box-shadow: 0 0 0 1px var(--ds-accent);
105
- }
106
- .agent-list-accent {
107
- flex-shrink: 0;
108
- width: 4px;
109
- height: 40px;
110
- border-radius: 2px;
117
+ background: var(--ds-item-active);
111
118
  }
112
119
  .agent-list-body {
113
- flex: 1;
114
- min-width: 0;
115
120
  display: flex;
116
121
  flex-direction: column;
117
- gap: 4px;
122
+ gap: 3px;
123
+ min-width: 0;
118
124
  }
119
- .agent-list-id {
120
- font-size: 1rem;
125
+ .agent-list-name {
126
+ font-size: 15px;
121
127
  font-weight: 600;
128
+ line-height: 1.35;
129
+ color: var(--ds-text);
130
+ overflow: hidden;
131
+ text-overflow: ellipsis;
132
+ white-space: nowrap;
122
133
  }
123
- .agent-list-desc {
124
- font-size: 0.82rem;
134
+ .agent-list-id-sub {
135
+ font-size: 12px;
136
+ font-family: ui-monospace, Menlo, monospace;
125
137
  color: var(--ds-muted);
126
- white-space: nowrap;
127
138
  overflow: hidden;
128
139
  text-overflow: ellipsis;
140
+ white-space: nowrap;
141
+ }
142
+ .agent-list-desc {
143
+ font-size: 13px;
144
+ color: var(--ds-secondary);
145
+ line-height: 1.45;
146
+ display: -webkit-box;
147
+ -webkit-box-orient: vertical;
148
+ -webkit-line-clamp: 2;
149
+ overflow: hidden;
129
150
  }
130
151
  .agent-list-team {
131
- font-size: 0.78rem;
132
- color: var(--ds-accent);
133
- white-space: nowrap;
152
+ font-size: 12px;
153
+ color: var(--ds-muted);
134
154
  overflow: hidden;
135
155
  text-overflow: ellipsis;
156
+ white-space: nowrap;
136
157
  }
137
158
  .office-team-section {
138
159
  margin-bottom: 1rem;
@@ -155,11 +176,11 @@
155
176
  display: inline-flex;
156
177
  align-items: center;
157
178
  gap: 4px;
158
- padding: 0.2rem 0.45rem 0.2rem 0.55rem;
179
+ padding: 4px 10px;
159
180
  border-radius: 999px;
160
- background: rgba(10, 132, 255, 0.1);
161
- border: 1px solid rgba(10, 132, 255, 0.25);
162
- font-size: 0.78rem;
181
+ background: var(--ds-item-hover);
182
+ border: 1px solid var(--ds-border);
183
+ font-size: 12px;
163
184
  }
164
185
  .office-team-chip button {
165
186
  border: none;
@@ -189,22 +210,18 @@
189
210
  padding: 0.45rem 0.55rem;
190
211
  font: inherit;
191
212
  }
192
- .agent-list-arrow {
193
- flex-shrink: 0;
194
- color: var(--ds-muted);
195
- font-size: 1.2rem;
196
- line-height: 1;
197
- }
198
213
  .office-btn {
199
214
  border: 1px solid var(--ds-border);
200
215
  background: var(--ds-bg);
201
216
  color: var(--ds-text);
202
- border-radius: 10px;
203
- padding: 0.45rem 0.85rem;
204
- font-size: 0.85rem;
217
+ border-radius: var(--ds-radius-sm);
218
+ padding: 8px 14px;
219
+ font-size: 13px;
220
+ font-family: inherit;
205
221
  cursor: pointer;
222
+ transition: background 120ms ease, border-color 120ms ease;
206
223
  }
207
- .office-btn:hover { background: #fafafa; }
224
+ .office-btn:hover { background: var(--ds-item-hover); }
208
225
  .office-btn-primary {
209
226
  background: var(--ds-accent);
210
227
  border-color: var(--ds-accent);
@@ -213,86 +230,121 @@
213
230
  .office-btn-primary:hover { background: var(--ds-accent-hover); }
214
231
  .office-btn-danger {
215
232
  color: var(--ds-danger);
216
- border-color: rgba(255, 59, 48, 0.35);
233
+ border-color: rgba(220, 38, 38, 0.25);
234
+ background: #fff;
217
235
  }
218
- #officePanel {
236
+ .office-btn-danger:hover {
237
+ background: #fef2f2;
238
+ border-color: var(--ds-danger);
239
+ }
240
+ .office-panel {
219
241
  flex-shrink: 0;
220
- width: min(380px, 42vw);
242
+ width: min(400px, 44vw);
221
243
  background: var(--ds-bg);
222
244
  border-left: 1px solid var(--ds-border);
223
245
  display: none;
224
246
  flex-direction: column;
225
247
  min-height: 0;
226
248
  }
227
- #officePanel.is-open {
249
+ .office-panel.is-open {
228
250
  display: flex;
229
251
  }
230
252
  .office-panel-head {
231
253
  display: flex;
232
254
  align-items: center;
233
255
  justify-content: space-between;
234
- padding: 1rem 1rem 0.5rem;
256
+ gap: 12px;
257
+ padding: 14px 16px;
235
258
  border-bottom: 1px solid var(--ds-border);
259
+ flex-shrink: 0;
236
260
  }
237
261
  .office-panel-head h2 {
238
262
  margin: 0;
239
- font-size: 1rem;
263
+ font-size: 15px;
264
+ font-weight: 600;
265
+ line-height: 1.3;
266
+ overflow: hidden;
267
+ text-overflow: ellipsis;
268
+ white-space: nowrap;
269
+ min-width: 0;
240
270
  }
241
271
  .office-panel-close {
272
+ flex-shrink: 0;
273
+ width: 28px;
274
+ height: 28px;
242
275
  border: none;
276
+ border-radius: 6px;
243
277
  background: transparent;
244
- font-size: 1.4rem;
278
+ font-size: 18px;
245
279
  line-height: 1;
246
280
  cursor: pointer;
247
281
  color: var(--ds-muted);
248
282
  }
283
+ .office-panel-close:hover {
284
+ background: var(--ds-item-hover);
285
+ color: var(--ds-text);
286
+ }
249
287
  .office-panel-body {
250
- padding: 1rem;
288
+ padding: 16px;
251
289
  overflow: auto;
252
290
  flex: 1;
253
291
  min-height: 0;
254
292
  }
255
293
  .office-panel-meta {
256
- margin: 0 0 0.75rem;
257
- font-size: 0.8rem;
294
+ margin: 0 0 14px;
295
+ font-size: 12px;
258
296
  color: var(--ds-muted);
297
+ line-height: 1.45;
259
298
  }
260
299
  .office-form-row {
261
300
  display: flex;
262
301
  flex-direction: column;
263
- gap: 0.35rem;
264
- margin-bottom: 0.85rem;
302
+ gap: 6px;
303
+ margin-bottom: 14px;
265
304
  }
266
305
  .office-form-row label {
267
- font-size: 0.82rem;
306
+ font-size: 12px;
307
+ font-weight: 500;
268
308
  color: var(--ds-muted);
269
309
  }
270
310
  .office-form-row input,
271
- .office-form-row textarea {
311
+ .office-form-row textarea,
312
+ .office-team-add select {
272
313
  width: 100%;
273
314
  border: 1px solid var(--ds-border);
274
- border-radius: 10px;
275
- padding: 0.55rem 0.65rem;
315
+ border-radius: var(--ds-radius-sm);
316
+ padding: 9px 11px;
276
317
  font: inherit;
318
+ font-size: 14px;
277
319
  resize: vertical;
320
+ background: var(--ds-bg);
321
+ color: var(--ds-text);
278
322
  }
279
- .office-form-row textarea { min-height: 72px; }
323
+ .office-form-row input:focus,
324
+ .office-form-row textarea:focus,
325
+ .office-team-add select:focus {
326
+ outline: none;
327
+ border-color: var(--ds-accent);
328
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.12);
329
+ }
330
+ .office-form-row textarea { min-height: 80px; line-height: 1.5; }
280
331
  .office-form-actions {
281
332
  display: flex;
282
333
  flex-wrap: wrap;
283
334
  gap: 8px;
284
- margin-top: 0.5rem;
335
+ margin-top: 8px;
336
+ padding-top: 4px;
285
337
  }
286
338
  #officeToast {
287
339
  position: fixed;
288
340
  left: 50%;
289
341
  bottom: 28px;
290
342
  transform: translateX(-50%) translateY(12px);
291
- background: rgba(28, 28, 30, 0.92);
343
+ background: var(--ds-text);
292
344
  color: #fff;
293
- padding: 0.65rem 1rem;
294
- border-radius: 10px;
295
- font-size: 0.85rem;
345
+ padding: 10px 16px;
346
+ border-radius: var(--ds-radius);
347
+ font-size: 13px;
296
348
  opacity: 0;
297
349
  pointer-events: none;
298
350
  transition: opacity 0.2s, transform 0.2s;
@@ -304,10 +356,19 @@
304
356
  opacity: 1;
305
357
  transform: translateX(-50%) translateY(0);
306
358
  }
307
- #officeToast.is-error { background: rgba(192, 57, 43, 0.95); }
359
+ #officeToast.is-error { background: var(--ds-danger); }
360
+ .office-list-root::-webkit-scrollbar,
361
+ .office-panel-body::-webkit-scrollbar {
362
+ width: 5px;
363
+ }
364
+ .office-list-root::-webkit-scrollbar-thumb,
365
+ .office-panel-body::-webkit-scrollbar-thumb {
366
+ background: rgba(0, 0, 0, 0.15);
367
+ border-radius: 999px;
368
+ }
308
369
  @media (max-width: 768px) {
309
370
  .office-main { flex-direction: column; }
310
- #officePanel {
371
+ .office-panel {
311
372
  width: 100%;
312
373
  border-left: none;
313
374
  border-top: 1px solid var(--ds-border);
@@ -317,21 +378,24 @@
317
378
  </style>
318
379
  </head>
319
380
  <body>
320
- <div id="officeApp">
321
- <header class="office-topbar">
322
- <div class="office-brand">
323
- <h1>Agent 列表</h1>
324
- <p id="officeSubtitle">加载中…</p>
325
- </div>
326
- <div class="office-top-actions">
327
- <button type="button" class="office-btn office-btn-primary" id="btnOfficeNewAgent">新建 Agent</button>
381
+ <div id="officeApp" class="office-app">
382
+ <header class="office-header">
383
+ <div class="office-header-main">
384
+ <h1 class="office-header-title">办公室</h1>
385
+ <p class="office-header-sub" id="officeSubtitle">加载中…</p>
328
386
  </div>
387
+ <button type="button" class="btn-office-new" id="btnOfficeNewAgent">
388
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
389
+ <path d="M12 5v14M5 12h14"/>
390
+ </svg>
391
+ <span>新建 Agent</span>
392
+ </button>
329
393
  </header>
330
394
 
331
395
  <div class="office-main">
332
- <div id="agentListRoot" aria-label="Agent 列表"></div>
396
+ <div id="agentListRoot" class="office-list-root" aria-label="Agent 列表"></div>
333
397
 
334
- <aside id="officePanel" aria-label="Agent 管理面板">
398
+ <aside id="officePanel" class="office-panel" aria-label="Agent 管理面板">
335
399
  <div class="office-panel-head">
336
400
  <h2 id="officePanelTitle">Agent</h2>
337
401
  <button type="button" class="office-panel-close" id="btnOfficePanelClose" aria-label="关闭">&times;</button>
@@ -598,31 +662,21 @@
598
662
  return id
599
663
  }
600
664
 
601
- const AGENT_ACCENT_COLORS = [
602
- '#22d3c5',
603
- '#4da3ff',
604
- '#8b5cf6',
605
- '#e84855',
606
- '#f5c518',
607
- '#c5e84c',
608
- ]
609
-
610
- const KNOWN_ACCENTS = {
611
- dev: '#22d3c5',
612
- edr: '#4da3ff',
613
- qihoo: '#8b5cf6',
665
+ /** 列表主标题:优先 displayName,否则用 id */
666
+ function agentListTitle(row) {
667
+ const id = String(row.id || '').trim()
668
+ const dn =
669
+ row && typeof row.displayName === 'string' && row.displayName.trim()
670
+ ? row.displayName.trim()
671
+ : ''
672
+ return dn || id
614
673
  }
615
674
 
616
- /** 根据 agent id 分配列表左侧色带 */
617
- function accentColorForId(id) {
618
- const key = String(id || '').trim().toLowerCase()
619
- if (KNOWN_ACCENTS[key]) return KNOWN_ACCENTS[key]
620
- const s = String(id || 'a')
621
- let h = 0
622
- for (let i = 0; i < s.length; i++) {
623
- h = (h + s.charCodeAt(i) * 17) % AGENT_ACCENT_COLORS.length
624
- }
625
- return AGENT_ACCENT_COLORS[h]
675
+ /** 列表副 id:displayName id 不同时展示 id */
676
+ function agentListSubId(row) {
677
+ const id = String(row.id || '').trim()
678
+ const title = agentListTitle(row)
679
+ return title !== id ? id : ''
626
680
  }
627
681
 
628
682
  /** 列表页选中状态:仅维护当前 agent id */
@@ -672,7 +726,7 @@
672
726
  if (!agents.length) {
673
727
  const empty = document.createElement('div')
674
728
  empty.className = 'agent-list-empty'
675
- empty.textContent = '暂无 Agent,点击右上角「新建 Agent」创建'
729
+ empty.textContent = '暂无 Agent,点击「新建 Agent」创建'
676
730
  this.container.appendChild(empty)
677
731
  return
678
732
  }
@@ -693,22 +747,26 @@
693
747
  'agent-list-item' + (selectedId === id ? ' is-selected' : '')
694
748
  btn.setAttribute('aria-pressed', selectedId === id ? 'true' : 'false')
695
749
 
696
- const accent = document.createElement('span')
697
- accent.className = 'agent-list-accent'
698
- accent.style.background = accentColorForId(id)
699
-
700
750
  const body = document.createElement('span')
701
751
  body.className = 'agent-list-body'
702
752
 
703
753
  const title = document.createElement('span')
704
- title.className = 'agent-list-id'
705
- title.textContent = id
754
+ title.className = 'agent-list-name'
755
+ title.textContent = agentListTitle(row)
756
+
757
+ body.appendChild(title)
758
+
759
+ const subId = agentListSubId(row)
760
+ if (subId) {
761
+ const idEl = document.createElement('span')
762
+ idEl.className = 'agent-list-id-sub'
763
+ idEl.textContent = subId
764
+ body.appendChild(idEl)
765
+ }
706
766
 
707
767
  const desc = document.createElement('span')
708
768
  desc.className = 'agent-list-desc'
709
- desc.textContent = truncateListDesc(row.whentouse, 80)
710
-
711
- body.appendChild(title)
769
+ desc.textContent = truncateListDesc(row.whentouse, 120)
712
770
  body.appendChild(desc)
713
771
 
714
772
  const teamLine = formatAgentTeamLine(row)
@@ -719,13 +777,7 @@
719
777
  body.appendChild(team)
720
778
  }
721
779
 
722
- const arrow = document.createElement('span')
723
- arrow.className = 'agent-list-arrow'
724
- arrow.textContent = '›'
725
-
726
- btn.appendChild(accent)
727
780
  btn.appendChild(body)
728
- btn.appendChild(arrow)
729
781
 
730
782
  btn.addEventListener('click', () => {
731
783
  if (this.onPick) this.onPick(id)
@@ -1002,7 +1054,12 @@
1002
1054
  if (!agentId) return
1003
1055
  this.mode = 'edit'
1004
1056
  this.editingId = agentId
1005
- if (this.panelTitleEl) this.panelTitleEl.textContent = 'Agent · ' + agentId
1057
+ const cached = this.agents.find(function (a) {
1058
+ return String(a.id || '').trim() === agentId
1059
+ })
1060
+ if (this.panelTitleEl) {
1061
+ this.panelTitleEl.textContent = cached ? agentListTitle(cached) : agentId
1062
+ }
1006
1063
  if (this.panelMetaEl) this.panelMetaEl.textContent = '加载中…'
1007
1064
  if (this.btnDelete) {
1008
1065
  this.btnDelete.disabled = false
@@ -1027,6 +1084,15 @@
1027
1084
  this.promptInput.value =
1028
1085
  typeof agent.prompt === 'string' ? agent.prompt : ''
1029
1086
  }
1087
+ if (this.panelTitleEl) {
1088
+ const dn =
1089
+ typeof agent.displayName === 'string' && agent.displayName.trim()
1090
+ ? agent.displayName.trim()
1091
+ : cached
1092
+ ? agentListTitle(cached)
1093
+ : agentId
1094
+ this.panelTitleEl.textContent = dn
1095
+ }
1030
1096
  const members = Array.isArray(agent.agentTeamMembers)
1031
1097
  ? agent.agentTeamMembers
1032
1098
  : []
@@ -1098,7 +1164,12 @@
1098
1164
  this.btnDelete.disabled = false
1099
1165
  }
1100
1166
  if (this.btnWorkbench) this.btnWorkbench.disabled = false
1101
- if (this.panelTitleEl) this.panelTitleEl.textContent = 'Agent · ' + id
1167
+ const savedRow = this.agents.find(function (a) {
1168
+ return String(a.id || '').trim() === id
1169
+ })
1170
+ if (this.panelTitleEl) {
1171
+ this.panelTitleEl.textContent = savedRow ? agentListTitle(savedRow) : id
1172
+ }
1102
1173
  this.controller.selectAgent(id)
1103
1174
  this.syncUrlAgentParam(id)
1104
1175
  if (isEdit) {
@@ -1197,7 +1268,7 @@
1197
1268
  const subtitle = document.getElementById('officeSubtitle')
1198
1269
  if (subtitle) {
1199
1270
  subtitle.textContent =
1200
- String(agents.length) + ' 个 Agent · 点击列表项管理'
1271
+ String(agents.length) + ' 个 Agent'
1201
1272
  }
1202
1273
  list.render(agents, controller.selectedId)
1203
1274
  },