@stofone/dsh-agent-roster 0.9.0 → 0.9.1
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 +22 -1
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/client.js +53 -27
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.1] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
### Expansion stops clipping itself
|
|
10
|
+
|
|
11
|
+
- **No more scroll boxes inside expansions.** 0.8.3 capped the expanded collection list at
|
|
12
|
+
`max-height: 340px` with its own scrollbar; with 21 rosters that reads as "the list is cut off".
|
|
13
|
+
The cap and the nested scroller are gone — the panel root is the only thing that scrolls, and
|
|
14
|
+
an expanded section simply grows.
|
|
15
|
+
- **The sources tab gets its page padding back** (`16px 28px 28px`); its collections had been
|
|
16
|
+
rendering flush against the window edge, hard against `overflow-x: hidden`.
|
|
17
|
+
- **Source collections use the ledger row**, like rosters and teams. They were still emitting
|
|
18
|
+
`.rstr-card*` class names whose rules disappeared in the 0.9.0 ledger rewrite, so the tab
|
|
19
|
+
rendered unstyled elements. A regression assertion now forbids those class names returning.
|
|
20
|
+
- **Member rows keep name and role on one line**: `toolPolicy` moved from the head to the meta
|
|
21
|
+
strip, where the model, effort and prompt size already sit.
|
|
22
|
+
- **Wider id column with a title tooltip**, so `agent-roster-collective` is readable instead of
|
|
23
|
+
truncated to `agent-roster-collec…`.
|
|
24
|
+
- The CSS guard now asserts the opposite of what it did in 0.8.3: expansions must carry neither
|
|
25
|
+
`max-height` nor `overflow`, because nested scrolling is what made the content look incomplete.
|
|
26
|
+
|
|
7
27
|
## [0.9.0] - 2026-11-03
|
|
8
28
|
|
|
9
29
|
### The roster list is a ledger
|
|
@@ -356,7 +376,8 @@
|
|
|
356
376
|
- 工具返回值含 `undefined` 键,运行时按 `value is not lossless JSON` 整次拒绝;缺失值统一写 `null`,
|
|
357
377
|
且所有返回值先过 `lib/json.js#lossless`。
|
|
358
378
|
|
|
359
|
-
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.9.
|
|
379
|
+
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.9.1...main
|
|
380
|
+
[0.9.1]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.1
|
|
360
381
|
[0.9.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.9.0
|
|
361
382
|
[0.8.3]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.3
|
|
362
383
|
[0.8.2]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.2
|
package/README.md
CHANGED
|
@@ -268,7 +268,7 @@ member and finally `roster_verify`. Creating the team stays with the runtime.
|
|
|
268
268
|
|
|
269
269
|
## Sidebar panel
|
|
270
270
|
|
|
271
|
-
The roster list is a **ledger, not a wall of cards**: one row per roster — a 3px state edge (lit only when something is wrong, quiet when it is fine), a monospace id column, the title with a one-line description, right-aligned counts (members / errors / warnings / deployment), and a quiet pair of actions (edit, expand). Duplicate, copy-create and delete moved into the expanded area, which turns 105 buttons across 21 rosters into 42. Below 860px the tag pool becomes a top row and the metadata wraps.
|
|
271
|
+
The roster list is a **ledger, not a wall of cards**: one row per roster — a 3px state edge (lit only when something is wrong, quiet when it is fine), a monospace id column, the title with a one-line description, right-aligned counts (members / errors / warnings / deployment), and a quiet pair of actions (edit, expand). Duplicate, copy-create and delete moved into the expanded area, which turns 105 buttons across 21 rosters into 42. Below 860px the tag pool becomes a top row and the metadata wraps. Expansions never build their own scroll box: the panel root is the only scroller, so an expanded section grows as tall as its content instead of showing "just a few rows".
|
|
272
272
|
|
|
273
273
|
The panel takes the full page width; nothing constrains it to a reading column. The archive list has
|
|
274
274
|
a **tag pool** on the left: every tag present in the library, with how many archives carry it. Clicking
|
package/README.zh.md
CHANGED
|
@@ -262,7 +262,7 @@ node bin/cli.mjs validate --dir orgs/agent-roster-collective
|
|
|
262
262
|
|
|
263
263
|
面板铺满整个页面宽度,外层容器不设阅读列宽度。
|
|
264
264
|
|
|
265
|
-
档案列表是**账本,不是卡片墙**:一行一份档案——左沿 3 像素状态色(只有出错或有提醒时才亮,正常的档案不标记)、等宽字体的 id 列、标题与一句话描述、右侧计数(成员数 / 错误 / 提醒 / 部署态),最后是一对安静的操作(编辑、展开成员)。复制、复制建队、删除收在展开区里,21 份档案的 105 个按钮因此变成 42 个。窄于 860
|
|
265
|
+
档案列表是**账本,不是卡片墙**:一行一份档案——左沿 3 像素状态色(只有出错或有提醒时才亮,正常的档案不标记)、等宽字体的 id 列、标题与一句话描述、右侧计数(成员数 / 错误 / 提醒 / 部署态),最后是一对安静的操作(编辑、展开成员)。复制、复制建队、删除收在展开区里,21 份档案的 105 个按钮因此变成 42 个。窄于 860 像素时标签池从左侧栏变成顶上一行、元数据自动折行。展开区不另建小滚动盒:整页只有面板根滚动,展开多少内容就撑多高,不会出现「展开了却只看得到几条」。
|
|
266
266
|
|
|
267
267
|
档案列表左侧是**标签池**:列出全库出现过的标签
|
|
268
268
|
以及各标签的档案数,点标签即筛选——多选是「且」,一个按钮清除选择。标签池只影响视图,不会把
|
package/client.js
CHANGED
|
@@ -474,9 +474,8 @@ window.__ModuleLoader__.load({
|
|
|
474
474
|
h(
|
|
475
475
|
"div",
|
|
476
476
|
{ className: "rstr-member-head" },
|
|
477
|
-
h("strong",
|
|
477
|
+
h("strong", { className: "rstr-member-name" }, member.name),
|
|
478
478
|
member.role ? h(Chip, null, member.role) : null,
|
|
479
|
-
member.toolPolicy ? h(Chip, { tone: "policy" }, `${t("member.policy")}: ${member.toolPolicy}`) : null,
|
|
480
479
|
),
|
|
481
480
|
member.description ? h("p", { className: "rstr-member-desc" }, member.description) : null,
|
|
482
481
|
Array.isArray(member.aliases) && member.aliases.length > 0
|
|
@@ -485,6 +484,7 @@ window.__ModuleLoader__.load({
|
|
|
485
484
|
h(
|
|
486
485
|
"div",
|
|
487
486
|
{ className: "rstr-member-meta" },
|
|
487
|
+
member.toolPolicy ? h(Chip, { tone: "policy" }, member.toolPolicy) : null,
|
|
488
488
|
member.model ? h("span", null, `${t("member.model")}: ${member.model}`) : null,
|
|
489
489
|
member.reasoningEffort ? h("span", null, `${t("member.effort")}: ${member.reasoningEffort}`) : null,
|
|
490
490
|
member.fallback ? h("span", null, `${t("member.fallback")}: ${member.fallback}`) : null,
|
|
@@ -1755,22 +1755,34 @@ window.__ModuleLoader__.load({
|
|
|
1755
1755
|
collections.map((collection) =>
|
|
1756
1756
|
h(
|
|
1757
1757
|
"article",
|
|
1758
|
-
{
|
|
1759
|
-
|
|
1760
|
-
"
|
|
1761
|
-
|
|
1762
|
-
h("h3", { className: "rstr-card-title" }, collection.title || collection.id),
|
|
1763
|
-
h(Badge, { tone: "neutral" }, t("source.registered", { count: collection.rosters?.length ?? 0 })),
|
|
1764
|
-
),
|
|
1765
|
-
collection.description ? h("p", { className: "rstr-card-desc" }, collection.description) : null,
|
|
1766
|
-
h(
|
|
1767
|
-
"p",
|
|
1768
|
-
{ className: "rstr-muted rstr-small" },
|
|
1769
|
-
`${t("source.repo")} ${collection.repo ?? ""}@${collection.ref ?? "main"}${collection.path ? `/${collection.path}` : ""}`,
|
|
1770
|
-
),
|
|
1758
|
+
{
|
|
1759
|
+
key: `${collection.origin?.source ?? ""}::${collection.id}`,
|
|
1760
|
+
className: openId === collection.id ? "rstr-row rstr-row-open" : "rstr-row",
|
|
1761
|
+
},
|
|
1771
1762
|
h(
|
|
1772
1763
|
"div",
|
|
1773
|
-
{ className: "rstr-
|
|
1764
|
+
{ className: "rstr-row-body" },
|
|
1765
|
+
h("code", { className: "rstr-row-id", title: collection.id }, collection.id),
|
|
1766
|
+
h(
|
|
1767
|
+
"div",
|
|
1768
|
+
{ className: "rstr-row-text" },
|
|
1769
|
+
h(
|
|
1770
|
+
"h3",
|
|
1771
|
+
{ className: "rstr-row-title" },
|
|
1772
|
+
collection.title || collection.id,
|
|
1773
|
+
h(Badge, { tone: "neutral" }, t("source.registered", { count: collection.rosters?.length ?? 0 })),
|
|
1774
|
+
),
|
|
1775
|
+
collection.description ? h("p", { className: "rstr-row-desc" }, collection.description) : null,
|
|
1776
|
+
h(
|
|
1777
|
+
"p",
|
|
1778
|
+
{ className: "rstr-source-meta" },
|
|
1779
|
+
`${collection.repo ?? ""}@${collection.ref ?? "main"}${collection.path ? `/${collection.path}` : ""}`,
|
|
1780
|
+
),
|
|
1781
|
+
),
|
|
1782
|
+
h("div", { className: "rstr-row-stats" }, h("span", null, `${collection.rosters?.length ?? 0}`)),
|
|
1783
|
+
h(
|
|
1784
|
+
"div",
|
|
1785
|
+
{ className: "rstr-row-actions" },
|
|
1774
1786
|
h(
|
|
1775
1787
|
"button",
|
|
1776
1788
|
{
|
|
@@ -1785,6 +1797,7 @@ window.__ModuleLoader__.load({
|
|
|
1785
1797
|
"button",
|
|
1786
1798
|
{ type: "button", className: "rstr-btn", onClick: () => toggle(collection) },
|
|
1787
1799
|
openId === collection.id ? t("source.hide") : t("source.open"),
|
|
1800
|
+
),
|
|
1788
1801
|
),
|
|
1789
1802
|
),
|
|
1790
1803
|
openId === collection.id
|
|
@@ -2301,7 +2314,7 @@ window.__ModuleLoader__.load({
|
|
|
2301
2314
|
|
|
2302
2315
|
.rstr-row-body {
|
|
2303
2316
|
display: grid;
|
|
2304
|
-
grid-template-columns: minmax(
|
|
2317
|
+
grid-template-columns: minmax(110px, 176px) minmax(0, 1fr) auto auto;
|
|
2305
2318
|
align-items: baseline;
|
|
2306
2319
|
gap: 8px 16px;
|
|
2307
2320
|
padding: 13px 8px 13px 0;
|
|
@@ -2336,11 +2349,12 @@ window.__ModuleLoader__.load({
|
|
|
2336
2349
|
.rstr-row-detail {
|
|
2337
2350
|
display: flex;
|
|
2338
2351
|
flex-direction: column;
|
|
2339
|
-
gap:
|
|
2340
|
-
padding:
|
|
2352
|
+
gap: 14px;
|
|
2353
|
+
padding: 12px 16px 20px 16px;
|
|
2341
2354
|
margin: 0 0 12px -1px;
|
|
2342
2355
|
min-width: 0;
|
|
2343
2356
|
background: var(--dsw-alias-bg-layer-2);
|
|
2357
|
+
border-left: 2px solid var(--dsw-alias-border-l2);
|
|
2344
2358
|
}
|
|
2345
2359
|
.rstr-row-detail-actions { display: flex; gap: 6px; flex-wrap: wrap; padding-top: 4px; }
|
|
2346
2360
|
|
|
@@ -2394,21 +2408,33 @@ window.__ModuleLoader__.load({
|
|
|
2394
2408
|
|
|
2395
2409
|
/* ---- 档案源 ----------------------------------------------------------- */
|
|
2396
2410
|
|
|
2397
|
-
.rstr-sources { display: flex; flex-direction: column; gap: 0; border-top: 1px solid var(--dsw-alias-border-l2); }
|
|
2411
|
+
.rstr-sources { display: flex; flex-direction: column; gap: 0; min-width: 0; padding: 16px 28px 28px; border-top: 1px solid var(--dsw-alias-border-l2); }
|
|
2398
2412
|
.rstr-sources-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
|
|
2413
|
+
/* 展开区自己滚会把内容关进小盒子(曾经 max-height:320px 就是"显示不全"的来源)。
|
|
2414
|
+
整页只有 .rstr-page 一个滚动容器,展开区只负责把高度撑开。 */
|
|
2399
2415
|
.rstr-source-detail {
|
|
2400
2416
|
display: flex;
|
|
2401
2417
|
flex-direction: column;
|
|
2402
|
-
gap:
|
|
2418
|
+
gap: 4px;
|
|
2403
2419
|
min-width: 0;
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2420
|
+
padding: 8px 0 12px 15px;
|
|
2421
|
+
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2422
|
+
border-left: 2px solid var(--dsw-alias-border-l2);
|
|
2423
|
+
margin-left: 2px;
|
|
2424
|
+
}
|
|
2425
|
+
.rstr-source-roster {
|
|
2426
|
+
display: grid;
|
|
2427
|
+
grid-template-columns: minmax(120px, 180px) minmax(0, 1fr) auto;
|
|
2428
|
+
align-items: baseline;
|
|
2429
|
+
gap: 4px 14px;
|
|
2430
|
+
min-width: 0;
|
|
2431
|
+
font-size: 12px;
|
|
2432
|
+
padding: 4px 6px 4px 0;
|
|
2408
2433
|
border-bottom: 1px solid var(--dsw-alias-border-l1);
|
|
2409
2434
|
}
|
|
2410
|
-
.rstr-source-roster
|
|
2411
|
-
.rstr-source-roster > .rstr-muted {
|
|
2435
|
+
.rstr-source-roster:last-of-type { border-bottom: none; }
|
|
2436
|
+
.rstr-source-roster > .rstr-muted { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2437
|
+
.rstr-source-meta { margin: 2px 0 0 0; min-width: 0; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11px; color: var(--dsw-alias-label-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2412
2438
|
|
|
2413
2439
|
/* ---- 通用件 ----------------------------------------------------------- */
|
|
2414
2440
|
|
package/package.json
CHANGED