@stofone/dsh-agent-roster 0.9.1 → 0.9.2
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/CHANGELOG.md +14 -1
- package/client.js +49 -24
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.2] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
### The member list is a table
|
|
10
|
+
|
|
11
|
+
- **Four columns now line up across rows.** Each member row used to compute its own grid, so the
|
|
12
|
+
name / description / tool policy / model columns drifted from row to row and the list read as
|
|
13
|
+
separate blocks. `.rstr-members` owns the column widths and every row uses `subgrid`.
|
|
14
|
+
- **One line per member at narrow widths**: name and role on the left, the policy pinned right,
|
|
15
|
+
description and model beneath — four lines instead of five, and nothing overlaps.
|
|
16
|
+
- Member notes (aliases, declared skills, inherited fields) span the full row instead of pushing
|
|
17
|
+
the columns around.
|
|
18
|
+
|
|
7
19
|
## [0.9.1] - 2026-11-03
|
|
8
20
|
|
|
9
21
|
### Expansion stops clipping itself
|
|
@@ -376,7 +388,8 @@
|
|
|
376
388
|
- 工具返回值含 `undefined` 键,运行时按 `value is not lossless JSON` 整次拒绝;缺失值统一写 `null`,
|
|
377
389
|
且所有返回值先过 `lib/json.js#lossless`。
|
|
378
390
|
|
|
379
|
-
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.9.
|
|
391
|
+
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.9.2...main
|
|
392
|
+
[0.9.2]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.2
|
|
380
393
|
[0.9.1]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.1
|
|
381
394
|
[0.9.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.0
|
|
382
395
|
[0.8.3]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.3
|
package/client.js
CHANGED
|
@@ -468,6 +468,20 @@ window.__ModuleLoader__.load({
|
|
|
468
468
|
/* ------------------------------------------------------------------ */
|
|
469
469
|
|
|
470
470
|
function MemberBlock({ member }) {
|
|
471
|
+
// 四列由 .rstr-members 的 subgrid 统一给宽度:姓名 / 说明 / 策略 / 模型。
|
|
472
|
+
// 说明与策略即使为空也占位,否则后面的列会整体左移,表格就对不齐了。
|
|
473
|
+
const notes = [];
|
|
474
|
+
if (Array.isArray(member.aliases) && member.aliases.length > 0) {
|
|
475
|
+
notes.push(`${t("member.aliases")}: ${member.aliases.join(", ")}`);
|
|
476
|
+
}
|
|
477
|
+
if (Array.isArray(member.skills) && member.skills.length > 0) {
|
|
478
|
+
notes.push(`${t("member.skills")}: ${member.skills.join(", ")}(${t("member.skillsHint")})`);
|
|
479
|
+
}
|
|
480
|
+
if (Array.isArray(member.inherited) && member.inherited.length > 0) {
|
|
481
|
+
notes.push(`inherited: ${member.inherited.join(", ")}`);
|
|
482
|
+
}
|
|
483
|
+
if (member.notes) notes.push(member.notes);
|
|
484
|
+
|
|
471
485
|
return h(
|
|
472
486
|
"div",
|
|
473
487
|
{ className: "rstr-member" },
|
|
@@ -477,33 +491,24 @@ window.__ModuleLoader__.load({
|
|
|
477
491
|
h("strong", { className: "rstr-member-name" }, member.name),
|
|
478
492
|
member.role ? h(Chip, null, member.role) : null,
|
|
479
493
|
),
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
:
|
|
494
|
+
h("p", { className: "rstr-member-desc" }, member.description ?? ""),
|
|
495
|
+
h(
|
|
496
|
+
"span",
|
|
497
|
+
{ className: "rstr-member-policy" },
|
|
498
|
+
member.toolPolicy ? h(Chip, { tone: "policy" }, member.toolPolicy) : null,
|
|
499
|
+
),
|
|
484
500
|
h(
|
|
485
501
|
"div",
|
|
486
502
|
{ className: "rstr-member-meta" },
|
|
487
|
-
member.
|
|
488
|
-
member.
|
|
489
|
-
member.reasoningEffort ? h("span", null, `${t("member.effort")}: ${member.reasoningEffort}`) : null,
|
|
503
|
+
member.model ? h("span", null, member.model) : null,
|
|
504
|
+
member.reasoningEffort ? h("span", null, member.reasoningEffort) : null,
|
|
490
505
|
member.fallback ? h("span", null, `${t("member.fallback")}: ${member.fallback}`) : null,
|
|
491
506
|
member.toolScope?.allow?.length
|
|
492
507
|
? h("span", null, `${t("member.tools")}: ${member.toolScope.allow.join(", ")}`)
|
|
493
508
|
: null,
|
|
494
509
|
h("span", { className: "rstr-muted" }, t("team.promptChars", { count: member.systemPromptChars })),
|
|
495
510
|
),
|
|
496
|
-
|
|
497
|
-
? h(
|
|
498
|
-
"p",
|
|
499
|
-
{ className: "rstr-muted rstr-small" },
|
|
500
|
-
`${t("member.skills")}: ${member.skills.join(", ")}(${t("member.skillsHint")})`,
|
|
501
|
-
)
|
|
502
|
-
: null,
|
|
503
|
-
Array.isArray(member.inherited) && member.inherited.length > 0
|
|
504
|
-
? h("p", { className: "rstr-muted rstr-small" }, `inherited: ${member.inherited.join(", ")}`)
|
|
505
|
-
: null,
|
|
506
|
-
member.notes ? h("p", { className: "rstr-muted rstr-small" }, member.notes) : null,
|
|
511
|
+
notes.map((text, index) => h("p", { key: `note-${index}`, className: "rstr-member-note" }, text)),
|
|
507
512
|
);
|
|
508
513
|
}
|
|
509
514
|
|
|
@@ -2360,21 +2365,41 @@ window.__ModuleLoader__.load({
|
|
|
2360
2365
|
|
|
2361
2366
|
/* ---- 成员块 ----------------------------------------------------------- */
|
|
2362
2367
|
|
|
2363
|
-
|
|
2368
|
+
/* 成员是一张表:四列由容器统一给宽度(subgrid),否则每一行各算各的网格,
|
|
2369
|
+
姓名 / 说明 / 策略 / 模型四列对不齐,读起来就是散的。 */
|
|
2370
|
+
.rstr-members {
|
|
2371
|
+
display: grid;
|
|
2372
|
+
grid-template-columns: minmax(120px, 172px) minmax(0, 1fr) 104px 244px;
|
|
2373
|
+
column-gap: 14px;
|
|
2374
|
+
border-top: 1px dashed var(--dsw-alias-border-l1);
|
|
2375
|
+
}
|
|
2364
2376
|
.rstr-member {
|
|
2365
2377
|
display: grid;
|
|
2366
|
-
grid-
|
|
2367
|
-
|
|
2378
|
+
grid-column: 1 / -1;
|
|
2379
|
+
grid-template-columns: subgrid;
|
|
2380
|
+
column-gap: 14px;
|
|
2381
|
+
row-gap: 2px;
|
|
2368
2382
|
align-items: baseline;
|
|
2369
|
-
padding:
|
|
2383
|
+
padding: 10px 4px;
|
|
2370
2384
|
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2371
2385
|
min-width: 0;
|
|
2372
2386
|
}
|
|
2373
2387
|
.rstr-member:last-child { border-bottom: none; }
|
|
2374
2388
|
.rstr-member-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; min-width: 0; }
|
|
2375
|
-
.rstr-member-name { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-primary); }
|
|
2389
|
+
.rstr-member-name { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; font-weight: 600; color: var(--dsw-alias-label-primary); overflow: hidden; text-overflow: ellipsis; }
|
|
2376
2390
|
.rstr-member-desc { margin: 0; font-size: 12px; color: var(--dsw-alias-label-secondary); min-width: 0; }
|
|
2377
|
-
.rstr-member-
|
|
2391
|
+
.rstr-member-policy { justify-self: start; min-width: 0; }
|
|
2392
|
+
.rstr-member-meta { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; font-size: 11px; color: var(--dsw-alias-label-secondary); justify-self: end; font-variant-numeric: tabular-nums; }
|
|
2393
|
+
.rstr-member-note { grid-column: 1 / -1; margin: 0; font-size: 11px; color: var(--dsw-alias-label-secondary); }
|
|
2394
|
+
@media (max-width: 900px) {
|
|
2395
|
+
/* 窄面板:姓名一行、策略贴右;说明与模型各占一整行。 */
|
|
2396
|
+
.rstr-members { grid-template-columns: minmax(0, 1fr) auto; }
|
|
2397
|
+
.rstr-member-head { grid-column: 1; grid-row: 1; }
|
|
2398
|
+
.rstr-member-policy { grid-column: 2; grid-row: 1; justify-self: end; }
|
|
2399
|
+
.rstr-member-desc { grid-column: 1 / -1; grid-row: 2; margin-top: 2px; }
|
|
2400
|
+
.rstr-member-meta { grid-column: 1 / -1; grid-row: 3; justify-self: start; }
|
|
2401
|
+
.rstr-member-note { grid-row: auto; }
|
|
2402
|
+
}
|
|
2378
2403
|
|
|
2379
2404
|
/* ---- 队长块 ----------------------------------------------------------- */
|
|
2380
2405
|
|
package/package.json
CHANGED