@stofone/dsh-agent-roster 0.7.0 → 0.8.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 +52 -3
- package/README.md +40 -3
- package/README.zh.md +40 -3
- package/bin/cli.mjs +10 -0
- package/index/registry.json +49 -5
- package/lib/format.js +4 -5
- package/lib/organization.js +331 -0
- package/lib/registry.js +83 -1
- package/lib/remote.js +1 -1
- package/lib/render.js +15 -0
- package/lib/tools.js +3 -0
- package/orgs/agent-roster-collective/api-design/roster.yaml +67 -0
- package/orgs/agent-roster-collective/content-ops/roster.yaml +55 -0
- package/orgs/agent-roster-collective/contract-review/roster.yaml +58 -0
- package/orgs/agent-roster-collective/data-quality/roster.yaml +64 -0
- package/orgs/agent-roster-collective/db-migration/roster.yaml +64 -0
- package/orgs/agent-roster-collective/docs-writer/roster.yaml +59 -0
- package/orgs/agent-roster-collective/finance-recon/roster.yaml +63 -0
- package/orgs/agent-roster-collective/frontend-ui/roster.yaml +60 -0
- package/orgs/agent-roster-collective/i18n-l10n/roster.yaml +60 -0
- package/orgs/agent-roster-collective/incident-response/roster.yaml +65 -0
- package/orgs/agent-roster-collective/literature-review/roster.yaml +61 -0
- package/orgs/agent-roster-collective/market-research/roster.yaml +60 -0
- package/orgs/agent-roster-collective/ml-eval/roster.yaml +63 -0
- package/orgs/agent-roster-collective/organization.yaml +118 -0
- package/orgs/agent-roster-collective/performance/roster.yaml +63 -0
- package/orgs/agent-roster-collective/product-discovery/roster.yaml +55 -0
- package/orgs/agent-roster-collective/qa-regression/roster.yaml +64 -0
- package/orgs/agent-roster-collective/recruiting/roster.yaml +58 -0
- package/orgs/agent-roster-collective/release-manager/roster.yaml +59 -0
- package/orgs/agent-roster-collective/security-audit/capabilities.yaml +12 -0
- package/orgs/agent-roster-collective/security-audit/roster.yaml +65 -0
- package/orgs/agent-roster-collective/sre-oncall/roster.yaml +60 -0
- package/orgs/agent-roster-collective/support-triage/roster.yaml +58 -0
- package/package.json +5 -4
- package/schema/capabilities.v1.schema.json +1 -1
- package/schema/organization.v1.schema.json +50 -0
- package/schema/registry.v1.schema.json +83 -0
- package/schema/roster.v1.schema.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,53 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.8.1] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
### Moved to the `dsh-agent-roster` organization
|
|
10
|
+
|
|
11
|
+
- **The repository now lives at `dsh-agent-roster/dsh-agent-roster`** (GitHub keeps redirects from
|
|
12
|
+
the old owner, so existing clones and links keep working). Nothing about the format, the tools or
|
|
13
|
+
the published package name changes.
|
|
14
|
+
- **The default registry source follows the move**: `lib/remote.js` asks
|
|
15
|
+
`https://raw.githubusercontent.com/dsh-agent-roster/dsh-agent-roster/main/index/registry.json`,
|
|
16
|
+
so a fresh install that has not configured `indexes` does not depend on a redirect.
|
|
17
|
+
- **Package metadata and schema `$id`s point at the new home** (`package.json` homepage /
|
|
18
|
+
repository / issues, and the four `schema/*.v1.schema.json` files), so editors and npm resolve
|
|
19
|
+
the canonical location instead of a redirect.
|
|
20
|
+
|
|
21
|
+
## [0.8.0] - 2026-11-02
|
|
22
|
+
|
|
23
|
+
### Library organization (new root file)
|
|
24
|
+
|
|
25
|
+
- **`organization.yaml`** — an optional file at the library root, beside the roster directories.
|
|
26
|
+
It declares which rosters belong to the library, their status (`active` | `archived`) and where
|
|
27
|
+
they came from. It is the only file allowed to sit at the root, and it still cannot create
|
|
28
|
+
anything: no teams, no members, no `agent_teams_add_member` arguments.
|
|
29
|
+
- **Three-way cross-check against the disk**, surfaced as diagnostics the panel already renders:
|
|
30
|
+
declared but missing → **error**, present but undeclared → **warn**, declared `archived` but
|
|
31
|
+
still in the library → **info**. Archiving is a declaration, not a deletion.
|
|
32
|
+
- **`roster_list` and `dsh-agent-roster validate` show it** (`organization=<id>`, the counts, and
|
|
33
|
+
per-file `organization` / `organizationCheck` in `--json`);
|
|
34
|
+
`schema/organization.v1.schema.json` covers the file for editor-side validation.
|
|
35
|
+
- **`orgs/agent-roster-collective/`** ships as a worked example: 21 self-authored rosters
|
|
36
|
+
(63 members) covering review, incident response, data, docs, release, research and more.
|
|
37
|
+
- **`security-audit/capabilities.yaml`** in that example shows the two-file library: a roster plus
|
|
38
|
+
its declared requirements, with `onMissing: degraded` so a deployment without the policy still
|
|
39
|
+
builds the team but reports the gap instead of pretending it passed.
|
|
40
|
+
|
|
41
|
+
### Registry schema (new file)
|
|
42
|
+
|
|
43
|
+
- **`schema/registry.v1.schema.json`** — the shipped `index/registry.json` pointed at a schema that
|
|
44
|
+
did not exist, so editors had nothing to lint against. The file now exists, mirrors
|
|
45
|
+
`lib/remote.js#validateRegistry`, and `test/registry-schema.test.js` keeps the two aligned
|
|
46
|
+
(field sets, id/repo/ref/path patterns, collection and roster limits).
|
|
47
|
+
|
|
48
|
+
### Removed
|
|
49
|
+
|
|
50
|
+
- **`INDEX_KIND`** (`dsh-agent-roster-index/v1`). Nothing ever produced that document: a registry
|
|
51
|
+
collection already carries its `rosters` list, and `registry sync` recomputes it from the
|
|
52
|
+
repository. Keeping a second manifest format would have been a second source of truth.
|
|
53
|
+
|
|
7
54
|
## [0.7.0] - 2026-11-02
|
|
8
55
|
|
|
9
56
|
### Honest verification (issue #2)
|
|
@@ -263,6 +310,8 @@
|
|
|
263
310
|
- 工具返回值含 `undefined` 键,运行时按 `value is not lossless JSON` 整次拒绝;缺失值统一写 `null`,
|
|
264
311
|
且所有返回值先过 `lib/json.js#lossless`。
|
|
265
312
|
|
|
266
|
-
[Unreleased]: https://github.com/
|
|
267
|
-
[0.
|
|
268
|
-
[0.
|
|
313
|
+
[Unreleased]: https://github.com/dsh-agent-roster/dsh-agent-roster/compare/v0.8.1...main
|
|
314
|
+
[0.8.1]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.1
|
|
315
|
+
[0.8.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.8.0
|
|
316
|
+
[0.7.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.7.0
|
|
317
|
+
[0.2.0]: https://github.com/dsh-agent-roster/dsh-agent-roster/releases/tag/v0.2.0
|
package/README.md
CHANGED
|
@@ -187,6 +187,40 @@ Behaviour: under `onMissing: refuse` (default) `roster_create` emits **no** `age
|
|
|
187
187
|
|
|
188
188
|
The sibling file has its own JSON Schema: [`schema/capabilities.v1.schema.json`](./schema/capabilities.v1.schema.json), kept aligned with `lib/capabilities.js` by `test/capabilities.test.js`.
|
|
189
189
|
|
|
190
|
+
## Library organization (`organization.yaml`)
|
|
191
|
+
|
|
192
|
+
A roster answers *who the members are*; it cannot answer **which rosters belong together, which one is production and which is retired**. When a library holds twenty archives from different sources, the directory listing stops being an index. An optional file at the **library root** declares that, and nothing else:
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
kind: dsh-agent-roster-organization/v1
|
|
196
|
+
organization: agent-roster-collective # must equal the directory name
|
|
197
|
+
title: 团队档案合集
|
|
198
|
+
maintainers: [STofone]
|
|
199
|
+
rosters:
|
|
200
|
+
- {id: api-design, title: API 设计评审组, status: active, origin: 本项目自撰}
|
|
201
|
+
- {id: legacy-team, status: archived}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Placement matters: the file sits **next to** the roster directories, not inside one. It is a table of contents for the library, so it is the only file allowed at the root — scatter a `foo.yaml` there and the scanner still warns `unexpected-file`.
|
|
205
|
+
|
|
206
|
+
The declaration is mechanically checked against disk, and the three outcomes are deliberately different severities:
|
|
207
|
+
|
|
208
|
+
| Situation | Code | Severity | Why |
|
|
209
|
+
|---|---|---|---|
|
|
210
|
+
| declared, directory missing | `organization-roster-missing` | **error** | the organization page is lying — worse than no page |
|
|
211
|
+
| directory present, not declared | `organization-roster-undeclared` | warn | someone added a roster around the index; it still loads |
|
|
212
|
+
| declared `archived`, directory still there | `organization-roster-archived` | info | archiving is a statement, not a delete |
|
|
213
|
+
|
|
214
|
+
`organization` must equal the directory name, exactly like `roster` does: position is identity, and two ids for one library would make every diagnostic ambiguous. Unknown keys are rejected — a field nobody can check is another way to look green.
|
|
215
|
+
|
|
216
|
+
This file creates nothing. It does not write `team.json`, does not create members, and never reaches `agent_teams_add_member`. Its JSON Schema is [`schema/organization.v1.schema.json`](./schema/organization.v1.schema.json), kept aligned with `lib/organization.js` by `test/organization.test.js`.
|
|
217
|
+
|
|
218
|
+
**A worked example ships in this repository:** [`orgs/agent-roster-collective/`](./orgs/agent-roster-collective/) holds 21 rosters (63 members) covering API review, incident response, data quality, database migration, localization, security audit, performance, frontend, docs, release, support triage, recruiting, market research, finance reconciliation, contract review, content ops, regression testing, model evaluation, SRE on-call, literature review and product discovery. Every roster is a three-person team with a captain, and each was written for this repository (no upstream text is copied). Validate it with:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
node bin/cli.mjs validate --dir orgs/agent-roster-collective
|
|
222
|
+
```
|
|
223
|
+
|
|
190
224
|
## Tools
|
|
191
225
|
|
|
192
226
|
| Tool | Purpose |
|
|
@@ -266,7 +300,7 @@ Rosters can be shared: keep one or more of them in a GitHub repository, register
|
|
|
266
300
|
repository's `index/registry.json`, and anyone who subscribes can see them in the panel and pull them locally.
|
|
267
301
|
|
|
268
302
|
- **Subscribing**: set `indexes` to an `https://…/registry.json` URL or `npm:pkg` (reads `registry.json` from the
|
|
269
|
-
package). Empty means the official source, `
|
|
303
|
+
package). Empty means the official source, `dsh-agent-roster/dsh-agent-roster`'s `index/registry.json`; an explicit `false`
|
|
270
304
|
is the only way to disable remote sources entirely.
|
|
271
305
|
- **How often it refreshes**: TTL **one hour** — that is the unauthenticated GitHub budget of 60 requests/hour.
|
|
272
306
|
`?refresh=1` (or the tools' `refresh`) bypasses the cache, throttled to one try per 60 seconds so the quota is not
|
|
@@ -274,6 +308,8 @@ repository's `index/registry.json`, and anyone who subscribes can see them in th
|
|
|
274
308
|
- **Pulling**: writes are idempotent and report one of `created`, `updated` (explicit overwrite), `unchanged`
|
|
275
309
|
(same content, nothing written) or `conflict` (the local copy differs and is **not** overwritten by default).
|
|
276
310
|
Conflicts are yours to resolve: merge in the editor, or pull again with `overwrite` in the request body.
|
|
311
|
+
- **The index has a schema**: [`schema/registry.v1.schema.json`](./schema/registry.v1.schema.json) mirrors the
|
|
312
|
+
runtime validator, so an editor flags a typo before CI does.
|
|
277
313
|
- **Publishing your own**: add an entry to `collections` in `index/registry.json` (`id`, `repo: github:owner/repo`,
|
|
278
314
|
`ref`, `path`, `rosters[]`) and open a PR. `.github/workflows/registry.yml` checks the index against the real files.
|
|
279
315
|
|
|
@@ -339,10 +375,11 @@ lib/ format, parse, validate, registry, bridge, verify, render, lib
|
|
|
339
375
|
config-view, json, http, write, service, teams-state, tools
|
|
340
376
|
client.js client plugin: sidebar entry, main panel (rosters/teams/health), settings section
|
|
341
377
|
locale/ panel + listing dictionaries (en/zh)
|
|
342
|
-
schema/ roster
|
|
378
|
+
schema/ roster / capabilities / organization / registry v1 schemas (editor completion; kept aligned by tests)
|
|
343
379
|
bin/cli.mjs validate/list/version for CI
|
|
344
380
|
scripts/ host-smoke.mjs, client-smoke.mjs, check-locale.mjs (dev only, not shipped)
|
|
345
381
|
examples/ two example libraries
|
|
382
|
+
orgs/ a worked example library with its own organization.yaml (21 rosters)
|
|
346
383
|
test/ unit tests
|
|
347
384
|
```
|
|
348
385
|
|
|
@@ -350,7 +387,7 @@ test/ unit tests
|
|
|
350
387
|
|
|
351
388
|
Verified on this machine:
|
|
352
389
|
|
|
353
|
-
- `npm test` —
|
|
390
|
+
- `npm test` — 239/239 passing (format, parse, validate, registry, paths, bridge, verify buckets, digests and provenance, roster diff, capability requirements and the capability gate, library organization, registry schema, lossless JSON, write plan/apply, all routes, panel snapshot and hints, dictionary consistency, tool contracts, client loader contract, library snapshot, config view, package manifest, declared fields and captain block, schema/constant alignment, remote registry and one-click install).
|
|
354
391
|
- `npm run smoke` — `apply()` registers all six tools through a real `defineTool` from a DSH bundle; `roster_list` / `roster_show` / `roster_create` / `roster_verify` / `roster_diff` execute, every output survives `lossless` checks, `path` overrides are honored, effect disposal runs cleanly. The same command then loads `client.js` against a stubbed module table and asserts the three slot registrations, style injection and effect disposal.
|
|
355
392
|
- CLI: `validate --dir examples` returns exit 0 over both example libraries.
|
|
356
393
|
- Installed into a real profile with the plugin manager (`plugin_manager install_bundle` against this directory → `link:` dependency + bundle entry); the profile re-reads the linked files on restart.
|
package/README.zh.md
CHANGED
|
@@ -183,6 +183,40 @@ notes: 建队前先确认成员会话可用。
|
|
|
183
183
|
|
|
184
184
|
兄弟文件有自己的 JSON Schema:[`schema/capabilities.v1.schema.json`](./schema/capabilities.v1.schema.json),由 `test/capabilities.test.js` 钉住与 `lib/capabilities.js` 一致。
|
|
185
185
|
|
|
186
|
+
## 档案库组织(`organization.yaml`)
|
|
187
|
+
|
|
188
|
+
档案回答的是**成员是谁**,回答不了**哪几份档案属于同一套、哪份是生产、哪份已退役**。一座库放二十份来自不同来源的档案时,目录列表就不再是索引。库**根目录**上一个可选文件只声明这件事:
|
|
189
|
+
|
|
190
|
+
```yaml
|
|
191
|
+
kind: dsh-agent-roster-organization/v1
|
|
192
|
+
organization: agent-roster-collective # 必须等于目录名
|
|
193
|
+
title: 团队档案合集
|
|
194
|
+
maintainers: [STofone]
|
|
195
|
+
rosters:
|
|
196
|
+
- {id: api-design, title: API 设计评审组, status: active, origin: 本项目自撰}
|
|
197
|
+
- {id: legacy-team, status: archived}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
位置是有讲究的:它和档案目录**并列**,不在任何一份档案里面。它是这座库的目录页,所以也是库根唯一被允许的文件——在根上散落一个 `foo.yaml` 依然会报 `unexpected-file`。
|
|
201
|
+
|
|
202
|
+
声明会和磁盘对账,三种结果刻意用不同严重度:
|
|
203
|
+
|
|
204
|
+
| 情况 | 代码 | 严重度 | 理由 |
|
|
205
|
+
|---|---|---|---|
|
|
206
|
+
| 声明了,目录不在 | `organization-roster-missing` | **error** | 组织页在撒谎,比没有组织页更糟 |
|
|
207
|
+
| 目录在,没登记 | `organization-roster-undeclared` | warn | 有人绕过索引加了档案,但它仍会被加载 |
|
|
208
|
+
| 声明 `archived`,目录还在 | `organization-roster-archived` | info | 归档是声明,不是删除 |
|
|
209
|
+
|
|
210
|
+
`organization` 必须等于目录名,和 `roster` 同一条规则:位置即身份,一座库两个 id 会让所有诊断都变得没法定位。未知键一律拒收——没人核得了的字段,只是换一种方式发绿。
|
|
211
|
+
|
|
212
|
+
这份文件什么都不创建:不写 `team.json`、不建成员,也永远不会进入 `agent_teams_add_member` 参数。它的 JSON Schema 在 [`schema/organization.v1.schema.json`](./schema/organization.v1.schema.json),由 `test/organization.test.js` 钉住与 `lib/organization.js` 一致。
|
|
213
|
+
|
|
214
|
+
**仓内带了一个可跑的示例**:[`orgs/agent-roster-collective/`](./orgs/agent-roster-collective/) 里有 21 份档案(63 名成员),覆盖接口评审、事故响应、数据质量、数据库迁移、本地化、安全审计、性能、前端、文档、发布、客服分诊、招聘、市场研究、财务对账、合同审阅、内容运营、回归测试、模型评测、SRE 值守、文献综述与产品发现。每份都是"队长 + 两名专家"的三人组,全部为本项目自撰(未复制任何上游文本)。校验方式:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
node bin/cli.mjs validate --dir orgs/agent-roster-collective
|
|
218
|
+
```
|
|
219
|
+
|
|
186
220
|
## 工具
|
|
187
221
|
|
|
188
222
|
| 工具 | 作用 |
|
|
@@ -253,12 +287,14 @@ notes: 建队前先确认成员会话可用。
|
|
|
253
287
|
别人订阅后就能在面板里看到并一键拉到自己机器上。
|
|
254
288
|
|
|
255
289
|
- **订阅方式**:设置里 `indexes` 填 `https://…/registry.json`,或 `npm:pkg`(从 npm 包的 `registry.json` 读)。
|
|
256
|
-
留空 = 只用官方源 `
|
|
290
|
+
留空 = 只用官方源 `dsh-agent-roster/dsh-agent-roster` 的 `index/registry.json`;显式写 `false` 才彻底不连远端。
|
|
257
291
|
- **多久更新一次**:TTL **一小时**——等于未认证 GitHub 的 60 次/小时配额。`?refresh=1`(或工具的 `refresh`)
|
|
258
292
|
可绕过缓存,但 60 秒内最多一次,避免把配额烧光。拉取失败时沿用上次缓存并在页面上写明「缓存(拉取失败)」。
|
|
259
293
|
- **拉取到本机**:写入是幂等的,四种结果都会报给你——
|
|
260
294
|
`created`(新写入)、`updated`(显式覆盖)、`unchanged`(内容一致,不写盘)、`conflict`(本地不一样,**默认不覆盖**)。
|
|
261
295
|
冲突要你自己决定:要么在编辑器里合并,要么再点一次「拉取到本机」并在请求里带 `overwrite`。
|
|
296
|
+
- **索引本身也有 schema**:[`schema/registry.v1.schema.json`](./schema/registry.v1.schema.json) 与运行时校验器对齐,
|
|
297
|
+
拼错字段在编辑器里就会提示,不必等 CI。
|
|
262
298
|
- **登记自己的档案**:在 `index/registry.json` 的 `collections` 里加一条(`id`、`repo: github:owner/repo`、
|
|
263
299
|
`ref`、`path`、`rosters[]`),提交 PR 即可;`.github/workflows/registry.yml` 会校验索引与仓库真实文件是否对得上。
|
|
264
300
|
|
|
@@ -322,10 +358,11 @@ lib/ format / parse / validate / registry / bridge / verify / rende
|
|
|
322
358
|
config-view / json / http / write / service / teams-state / tools
|
|
323
359
|
client.js 客户端半边:左侧栏图标 + 主面板(档案/团队/体检)+ 设置页小节
|
|
324
360
|
locale/ 面板与列表词典(en/zh)
|
|
325
|
-
schema/ roster
|
|
361
|
+
schema/ roster / capabilities / organization / registry v1 schema(编辑器补全用,与校验器由测试对齐)
|
|
326
362
|
bin/cli.mjs validate / list / version,给 CI 用
|
|
327
363
|
scripts/ host-smoke.mjs、client-smoke.mjs、check-locale.mjs(开发用,不随包发布)
|
|
328
364
|
examples/ 两座示例档案库
|
|
365
|
+
orgs/ 带 organization.yaml 的示例库(21 套档案)
|
|
329
366
|
test/ 单测
|
|
330
367
|
```
|
|
331
368
|
|
|
@@ -333,7 +370,7 @@ test/ 单测
|
|
|
333
370
|
|
|
334
371
|
本机已验证:
|
|
335
372
|
|
|
336
|
-
- `npm test` ——
|
|
373
|
+
- `npm test` —— 239/239 通过(格式、解析、校验、扫描、路径、桥接、核对四桶、摘要与溯源、档案差异、能力要求与能力闸门、档案库组织、索引 schema、无损 JSON、写入计划与执行、六条路由、快照与提示、两本词典一致、工具契约、客户端加载器契约、包清单、配置视图、样式 token 约束、声明层字段与队长段、schema 与常量对齐)。
|
|
337
374
|
- `npm run smoke` —— 用真实 DSH bundle 的 `defineTool` 注册六个工具,逐个调用:输出全部通过无损校验、`path` 覆盖生效、释放干净;同一条命令随后用桩模块表加载 `client.js`,断言三处槽位注册、样式只注入一次、effect 可回收。
|
|
338
375
|
- CLI:`validate --dir examples` 对两座示例库退出码 0。
|
|
339
376
|
- 用插件管理器真的装进了本机 profile(`plugin_manager install_bundle` 指向本仓库 → `link:` 依赖 + bundle 条目),重启后按链接读取本仓库文件。
|
package/bin/cli.mjs
CHANGED
|
@@ -147,6 +147,8 @@ async function main(argv) {
|
|
|
147
147
|
rootDir: report.rootDir,
|
|
148
148
|
missing: report.scan.missing,
|
|
149
149
|
stats: report.scan.stats,
|
|
150
|
+
organization: report.scan.organization,
|
|
151
|
+
organizationCheck: report.scan.organizationCheck,
|
|
150
152
|
rosters: report.scan.rosters.map((roster) => ({ id: roster.id, file: roster.file })),
|
|
151
153
|
diagnostics: report.scan.diagnostics,
|
|
152
154
|
})),
|
|
@@ -162,6 +164,14 @@ async function main(argv) {
|
|
|
162
164
|
process.stdout.write(`${renderRosterList(report.scan)}\n`);
|
|
163
165
|
} else {
|
|
164
166
|
const { stats } = report.scan;
|
|
167
|
+
const organization = report.scan.organization ?? null;
|
|
168
|
+
if (organization !== null) {
|
|
169
|
+
const check = report.scan.organizationCheck;
|
|
170
|
+
process.stdout.write(
|
|
171
|
+
` 组织 ${organization.id} ${organization.title}(登记 ${check.declared} · 在库 ${check.present} · ` +
|
|
172
|
+
`缺 ${check.missing.length} · 未登记 ${check.undeclared.length})\n`,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
165
175
|
process.stdout.write(
|
|
166
176
|
` 档案 ${stats.total}(通过 ${stats.ok},失败 ${stats.failed}),成员 ${stats.members},` +
|
|
167
177
|
`诊断 ${stats.errors} error / ${stats.warnings} warn / ${stats.infos} info\n`,
|
package/index/registry.json
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
"$schema": "../schema/registry.v1.schema.json",
|
|
3
3
|
"kind": "dsh-agent-roster-registry/v1",
|
|
4
4
|
"version": 1,
|
|
5
|
-
"generatedAt": "2026-
|
|
6
|
-
"generator": "
|
|
7
|
-
"source": "https://github.com/
|
|
5
|
+
"generatedAt": "2026-11-02T17:00:43.713Z",
|
|
6
|
+
"generator": "dsh-agent-roster/dsh-agent-roster (hand-maintained; verified by .github/workflows/registry.yml)",
|
|
7
|
+
"source": "https://github.com/dsh-agent-roster/dsh-agent-roster",
|
|
8
8
|
"collections": [
|
|
9
9
|
{
|
|
10
10
|
"id": "agent-roster-examples",
|
|
11
11
|
"title": "官方起步档案集",
|
|
12
12
|
"description": "评审与调研两套起步档案,用来验证格式、桥接与核对链路;也可以直接复制成自己的档案。",
|
|
13
|
-
"repo": "github:
|
|
13
|
+
"repo": "github:dsh-agent-roster/dsh-agent-roster",
|
|
14
14
|
"ref": "main",
|
|
15
15
|
"path": "examples",
|
|
16
16
|
"rosters": [
|
|
@@ -26,7 +26,51 @@
|
|
|
26
26
|
"maintainers": [
|
|
27
27
|
"STofone"
|
|
28
28
|
],
|
|
29
|
-
"homepage": "https://github.com/
|
|
29
|
+
"homepage": "https://github.com/dsh-agent-roster/dsh-agent-roster#examples"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "agent-roster-collective",
|
|
33
|
+
"title": "自撰团队档案合集(21 套 · 63 名成员)",
|
|
34
|
+
"description": "覆盖评审、事故响应、数据、文档、发布、研究等常见协作分工的 21 套档案,全部由本项目自撰(未复制任何上游文本),可直接复制改成自己的。",
|
|
35
|
+
"repo": "github:dsh-agent-roster/dsh-agent-roster",
|
|
36
|
+
"ref": "main",
|
|
37
|
+
"path": "orgs/agent-roster-collective",
|
|
38
|
+
"rosters": [
|
|
39
|
+
"api-design",
|
|
40
|
+
"content-ops",
|
|
41
|
+
"contract-review",
|
|
42
|
+
"data-quality",
|
|
43
|
+
"db-migration",
|
|
44
|
+
"docs-writer",
|
|
45
|
+
"finance-recon",
|
|
46
|
+
"frontend-ui",
|
|
47
|
+
"i18n-l10n",
|
|
48
|
+
"incident-response",
|
|
49
|
+
"literature-review",
|
|
50
|
+
"market-research",
|
|
51
|
+
"ml-eval",
|
|
52
|
+
"performance",
|
|
53
|
+
"product-discovery",
|
|
54
|
+
"qa-regression",
|
|
55
|
+
"recruiting",
|
|
56
|
+
"release-manager",
|
|
57
|
+
"security-audit",
|
|
58
|
+
"sre-oncall",
|
|
59
|
+
"support-triage"
|
|
60
|
+
],
|
|
61
|
+
"tags": [
|
|
62
|
+
"collection",
|
|
63
|
+
"examples",
|
|
64
|
+
"operations",
|
|
65
|
+
"data",
|
|
66
|
+
"docs",
|
|
67
|
+
"research"
|
|
68
|
+
],
|
|
69
|
+
"license": "MIT",
|
|
70
|
+
"maintainers": [
|
|
71
|
+
"STofone"
|
|
72
|
+
],
|
|
73
|
+
"homepage": "https://github.com/dsh-agent-roster/dsh-agent-roster/tree/main/orgs/agent-roster-collective"
|
|
30
74
|
},
|
|
31
75
|
{
|
|
32
76
|
"id": "agent-teams",
|
package/lib/format.js
CHANGED
|
@@ -10,14 +10,13 @@
|
|
|
10
10
|
/** 档案文档格式标识(出现在每份 roster.yaml 的 kind 字段)。 */
|
|
11
11
|
export const ROSTER_KIND = "dsh-agent-roster/v1";
|
|
12
12
|
|
|
13
|
-
/** 索引文档格式标识(由 scan CLI / GitHub Action 产出)。 */
|
|
14
|
-
export const INDEX_KIND = "dsh-agent-roster-index/v1";
|
|
15
|
-
|
|
16
13
|
/**
|
|
17
14
|
* 公共档案库目录(registry)的格式标识。
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
* registry
|
|
16
|
+
* 曾经另有一个 `dsh-agent-roster-index/v1`(“一个档案库扫描后的清单”),但没有任何命令
|
|
17
|
+
* 产出过它:registry 的每条 collection 本来就带 `rosters` 列表,并由 `registry sync`
|
|
18
|
+
* 按仓库实际内容重算——再定义第二种清单格式等于造第二个真源。故该常量已删除,
|
|
19
|
+
* 见 CHANGELOG 的 Removed 一节。
|
|
21
20
|
*/
|
|
22
21
|
export const REGISTRY_KIND = "dsh-agent-roster-registry/v1";
|
|
23
22
|
|