@stofone/dsh-agent-roster 0.0.0-stage → 0.5.0
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 +139 -0
- package/LICENSE +21 -0
- package/README.md +290 -3
- package/README.zh.md +282 -0
- package/bin/cli.mjs +325 -0
- package/client.js +1950 -0
- package/cordis.patch.yml +9 -0
- package/examples/core-review/roster.yaml +82 -0
- package/examples/research/roster.yaml +42 -0
- package/icon.svg +11 -0
- package/index/registry.json +23 -0
- package/index.js +298 -0
- package/lib/bridge.js +233 -0
- package/lib/config-view.js +59 -0
- package/lib/format.js +223 -0
- package/lib/home.js +108 -0
- package/lib/http.js +122 -0
- package/lib/json.js +89 -0
- package/lib/library.js +161 -0
- package/lib/parse.js +148 -0
- package/lib/registry.js +285 -0
- package/lib/remote.js +623 -0
- package/lib/render.js +343 -0
- package/lib/serialize.js +92 -0
- package/lib/service.js +421 -0
- package/lib/teams-state.js +146 -0
- package/lib/tools.js +601 -0
- package/lib/validate.js +747 -0
- package/lib/verify.js +164 -0
- package/lib/write.js +290 -0
- package/locale/en.json +245 -0
- package/locale/zh.json +245 -0
- package/package.json +98 -4
- package/schema/roster.v1.schema.json +193 -0
package/locale/en.json
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"title": "Agent Roster",
|
|
4
|
+
"description": "Static member rosters for multi-agent teams: define, validate, edit and inspect them in one panel."
|
|
5
|
+
},
|
|
6
|
+
"settings": {
|
|
7
|
+
"nav": "Agent Roster",
|
|
8
|
+
"language": "Language",
|
|
9
|
+
"languageHint": "The panel follows the DSH language by default; pick a language to pin it.",
|
|
10
|
+
"languageAuto": "Follow DSH",
|
|
11
|
+
"languageZh": "中文",
|
|
12
|
+
"languageEn": "English",
|
|
13
|
+
"rosterDirs": "Roster directories",
|
|
14
|
+
"rosterDirsHint": "Empty means the global library at $DSH_HOME/agent-roster (~/.dsh/agent-roster), shared across workspaces. Only a relative path is resolved per workspace.",
|
|
15
|
+
"globalLibrary": "Global default",
|
|
16
|
+
"dataDir": "Data directory",
|
|
17
|
+
"stateDir": "Team state directory",
|
|
18
|
+
"stateDirHint": "Read-only: used to compare roster values with what the runtime actually created.",
|
|
19
|
+
"policies": "Known tool policies",
|
|
20
|
+
"policiesNone": "Not configured — policy ids in rosters stay declarations only.",
|
|
21
|
+
"policiesCount": "{count} declared",
|
|
22
|
+
"version": "Version",
|
|
23
|
+
"openPanel": "Open panel"
|
|
24
|
+
},
|
|
25
|
+
"panel": {
|
|
26
|
+
"title": "Agent Roster",
|
|
27
|
+
"subtitle": "{rosters} rosters · {members} members · {teams} teams",
|
|
28
|
+
"refresh": "Refresh",
|
|
29
|
+
"refreshing": "Refreshing…",
|
|
30
|
+
"tabsRosters": "Rosters",
|
|
31
|
+
"tabsTeams": "Teams",
|
|
32
|
+
"tabsDiagnostics": "Health",
|
|
33
|
+
"search": "Search",
|
|
34
|
+
"searchPlaceholder": "Filter by id, title, member or tag",
|
|
35
|
+
"create": "New roster",
|
|
36
|
+
"import": "Import",
|
|
37
|
+
"export": "Export",
|
|
38
|
+
"emptyTitle": "No rosters yet",
|
|
39
|
+
"emptyBody": "A roster is a plain YAML or JSON file under a roster directory. Create one here, or drop a file into the directory yourself.",
|
|
40
|
+
"emptyCta": "Create the first roster",
|
|
41
|
+
"noMatch": "Nothing matches that filter.",
|
|
42
|
+
"loading": "Reading rosters…",
|
|
43
|
+
"errorTitle": "Could not read the rosters",
|
|
44
|
+
"retry": "Try again",
|
|
45
|
+
"bannerOne": "1 thing needs attention",
|
|
46
|
+
"bannerMany": "{count} things need attention",
|
|
47
|
+
"bannerCta": "Open health",
|
|
48
|
+
"workspaceFallback": "No workspace is registered yet; reading the process directory instead.",
|
|
49
|
+
"tabsSources": "Sources"
|
|
50
|
+
},
|
|
51
|
+
"roster": {
|
|
52
|
+
"members": "{count} members",
|
|
53
|
+
"oneMember": "1 member",
|
|
54
|
+
"version": "v{version}",
|
|
55
|
+
"file": "File",
|
|
56
|
+
"deployed": "In {teams}",
|
|
57
|
+
"notDeployed": "Not in any team yet",
|
|
58
|
+
"drifted": "{count} drifted",
|
|
59
|
+
"edit": "Edit",
|
|
60
|
+
"duplicate": "Duplicate",
|
|
61
|
+
"delete": "Delete",
|
|
62
|
+
"copyCreate": "Copy team payload",
|
|
63
|
+
"copied": "Copied to the clipboard",
|
|
64
|
+
"copyFailed": "The clipboard is unavailable; select the text instead.",
|
|
65
|
+
"noMembers": "This roster has no members.",
|
|
66
|
+
"diagnostics": "{count} findings",
|
|
67
|
+
"showMembers": "Show members",
|
|
68
|
+
"hideMembers": "Hide members"
|
|
69
|
+
},
|
|
70
|
+
"member": {
|
|
71
|
+
"prompt": "Prompt",
|
|
72
|
+
"tools": "Tools",
|
|
73
|
+
"role": "Role",
|
|
74
|
+
"model": "Model",
|
|
75
|
+
"effort": "Effort",
|
|
76
|
+
"policy": "Tool policy",
|
|
77
|
+
"fallback": "Fallback",
|
|
78
|
+
"aliases": "Former names",
|
|
79
|
+
"skills": "Declared skills",
|
|
80
|
+
"skillsHint": "declaration only"
|
|
81
|
+
},
|
|
82
|
+
"team": {
|
|
83
|
+
"emptyTitle": "No teams yet",
|
|
84
|
+
"emptyBody": "Teams are created and scheduled by dsh-agent-teams. This panel only reads their state so you can tell whether a roster really landed.",
|
|
85
|
+
"emptyCta": "Copy a team payload from a roster",
|
|
86
|
+
"phaseStaged": "Staged",
|
|
87
|
+
"phaseRunning": "Running",
|
|
88
|
+
"halted": "Halted",
|
|
89
|
+
"escalated": "Escalated",
|
|
90
|
+
"members": "Members",
|
|
91
|
+
"tasks": "{total} tasks · {completed} done · {failed} failed · {active} active",
|
|
92
|
+
"file": "State file",
|
|
93
|
+
"managed": "From {roster}",
|
|
94
|
+
"unmanaged": "Not from a roster",
|
|
95
|
+
"faithful": "Matches the roster",
|
|
96
|
+
"drift": "Differs from the roster",
|
|
97
|
+
"promptChars": "{count} prompt characters",
|
|
98
|
+
"driftDetail": "{field}: roster {wanted}, runtime {actual}"
|
|
99
|
+
},
|
|
100
|
+
"editor": {
|
|
101
|
+
"createTitle": "New roster",
|
|
102
|
+
"editTitle": "Edit {id}",
|
|
103
|
+
"id": "Id",
|
|
104
|
+
"idHint": "Lowercase letters, digits, dot, dash or underscore. It is also the directory name.",
|
|
105
|
+
"titleField": "Title",
|
|
106
|
+
"titleHint": "Shown in the panel; free text.",
|
|
107
|
+
"version": "Version",
|
|
108
|
+
"description": "Description",
|
|
109
|
+
"tags": "Tags",
|
|
110
|
+
"tagsHint": "Comma separated.",
|
|
111
|
+
"members": "Members",
|
|
112
|
+
"addMember": "Add member",
|
|
113
|
+
"removeMember": "Remove",
|
|
114
|
+
"memberName": "Name",
|
|
115
|
+
"memberRole": "Role",
|
|
116
|
+
"memberTitle": "Title",
|
|
117
|
+
"memberModel": "Model",
|
|
118
|
+
"memberProvider": "Provider",
|
|
119
|
+
"memberEffort": "Effort",
|
|
120
|
+
"memberPolicy": "Tool policy",
|
|
121
|
+
"memberScope": "Allowed tools",
|
|
122
|
+
"memberScopeHint": "Comma separated tool names; empty means inherit.",
|
|
123
|
+
"memberPrompt": "System prompt",
|
|
124
|
+
"memberDescription": "Description",
|
|
125
|
+
"memberAliases": "Former names",
|
|
126
|
+
"listHint": "Comma separated.",
|
|
127
|
+
"memberSkills": "Declared skills",
|
|
128
|
+
"skillsHint": "Comma separated skill names. The runtime does not load them; the roster only records intent.",
|
|
129
|
+
"memberExamples": "Example requests",
|
|
130
|
+
"examplesHint": "One per line. Used as hints when delegating, never executed.",
|
|
131
|
+
"captain": "Captain",
|
|
132
|
+
"captainHint": "The captain is the session that creates a team, not a member. Record here what it should be; the profile decides the real model.",
|
|
133
|
+
"captainName": "Captain name",
|
|
134
|
+
"captainNameHint": "kebab-case. Leave empty to drop the whole captain block.",
|
|
135
|
+
"captainDescription": "Description",
|
|
136
|
+
"captainProvider": "Provider",
|
|
137
|
+
"captainModel": "Model",
|
|
138
|
+
"captainEffort": "Effort",
|
|
139
|
+
"captainPersona": "Persona prefix",
|
|
140
|
+
"captainPersonaHint": "Applied by the agent preset, not by this roster. Shown here so the intent is not lost.",
|
|
141
|
+
"memberTags": "Tags",
|
|
142
|
+
"source": "Source",
|
|
143
|
+
"form": "Form",
|
|
144
|
+
"cancel": "Cancel",
|
|
145
|
+
"save": "Save",
|
|
146
|
+
"saving": "Saving…",
|
|
147
|
+
"overwriteTitle": "Overwrite the existing roster?",
|
|
148
|
+
"overwriteBody": "{file} already exists. Saving replaces it and keeps a .bak copy next to it.",
|
|
149
|
+
"overwriteConfirm": "Overwrite",
|
|
150
|
+
"failedTitle": "The roster was not saved",
|
|
151
|
+
"emptyId": "An id is required.",
|
|
152
|
+
"emptyTitle": "A title is required.",
|
|
153
|
+
"emptyMembers": "A roster needs at least one member.",
|
|
154
|
+
"emptyMemberName": "Every member needs a name.",
|
|
155
|
+
"emptyMemberPrompt": "Every member needs a system prompt.",
|
|
156
|
+
"sourceHint": "Edit the file as-is. The host validates it before writing; nothing is written when validation fails."
|
|
157
|
+
},
|
|
158
|
+
"delete": {
|
|
159
|
+
"title": "Delete {id}?",
|
|
160
|
+
"body": "This removes {file} from the roster directory. Teams that already used it keep their members; the roster just stops describing them.",
|
|
161
|
+
"confirm": "Delete",
|
|
162
|
+
"cancel": "Cancel"
|
|
163
|
+
},
|
|
164
|
+
"importDialog": {
|
|
165
|
+
"title": "Import a roster",
|
|
166
|
+
"hint": "Paste a roster document. The host validates it and writes it into the selected directory.",
|
|
167
|
+
"placeholder": "kind: dsh-agent-roster/v1\\nroster: my-team\\nversion: 1.0.0\\n…",
|
|
168
|
+
"submit": "Import",
|
|
169
|
+
"target": "Into"
|
|
170
|
+
},
|
|
171
|
+
"import": {
|
|
172
|
+
"done": "Imported {file}",
|
|
173
|
+
"exists": "{file} already exists."
|
|
174
|
+
},
|
|
175
|
+
"diagnostics": {
|
|
176
|
+
"title": "Health",
|
|
177
|
+
"intro": "Everything the plugin can check about its own configuration, the rosters, and the teams they describe.",
|
|
178
|
+
"empty": "Nothing to report: configuration, rosters and teams are consistent.",
|
|
179
|
+
"severityError": "Error",
|
|
180
|
+
"severityWarn": "Warning",
|
|
181
|
+
"severityInfo": "Note",
|
|
182
|
+
"file": "File",
|
|
183
|
+
"location": "{file}:{line}"
|
|
184
|
+
},
|
|
185
|
+
"hint": {
|
|
186
|
+
"workspace-fallback": {
|
|
187
|
+
"title": "No workspace registered",
|
|
188
|
+
"body": "DSH has not registered a workspace for this session, so roster directories were resolved against the process directory. Open a workspace so the panel reads the right files."
|
|
189
|
+
},
|
|
190
|
+
"roster-dir-missing": {
|
|
191
|
+
"title": "Roster directory missing",
|
|
192
|
+
"body": "{dirSpec} does not exist under {rootDir}. Create the directory, or change roster directories in the plugin settings."
|
|
193
|
+
},
|
|
194
|
+
"roster-dir-empty": {
|
|
195
|
+
"title": "Roster directory is empty",
|
|
196
|
+
"body": "{rootDir} exists but holds no roster. Add a folder with a roster.yaml inside, or create one here."
|
|
197
|
+
},
|
|
198
|
+
"no-rosters": {
|
|
199
|
+
"title": "No rosters anywhere",
|
|
200
|
+
"body": "Every configured roster directory is empty. Tools will report zero rosters until one exists."
|
|
201
|
+
},
|
|
202
|
+
"tool-policies-unset": {
|
|
203
|
+
"title": "Tool policies are not verified",
|
|
204
|
+
"body": "Rosters name tool policies but the plugin does not know which ids your deployment declares. Fill known tool policies in the plugin settings to catch typos."
|
|
205
|
+
},
|
|
206
|
+
"teams-none": {
|
|
207
|
+
"title": "No teams yet",
|
|
208
|
+
"body": "The team state directory {stateDir} holds no team. Rosters can still be inspected; deployment status stays unknown."
|
|
209
|
+
},
|
|
210
|
+
"state-dir-missing": {
|
|
211
|
+
"title": "Team state directory missing",
|
|
212
|
+
"body": "{stateDir} does not exist yet, so no team can be compared with a roster. This is normal before the first team is created."
|
|
213
|
+
},
|
|
214
|
+
"duplicate-roster-id": {
|
|
215
|
+
"title": "Duplicate roster ids",
|
|
216
|
+
"body": "{count} roster id appears in more than one directory. Tools resolve the first match only; rename one of them."
|
|
217
|
+
},
|
|
218
|
+
"roster-errors": {
|
|
219
|
+
"title": "Rosters with errors",
|
|
220
|
+
"body": "{count} error findings across the library. Those rosters cannot be used as team member sources."
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"misc": {
|
|
224
|
+
"copied": "Copied",
|
|
225
|
+
"yes": "Yes",
|
|
226
|
+
"no": "No",
|
|
227
|
+
"failed": "Failed"
|
|
228
|
+
},
|
|
229
|
+
"source": {
|
|
230
|
+
"tabsSources": "Sources",
|
|
231
|
+
"pull": "Pull to this machine",
|
|
232
|
+
"pulling": "Pulling…",
|
|
233
|
+
"pulled": "Pulled {written}, unchanged {unchanged}, conflicts {conflicts}",
|
|
234
|
+
"empty": "No index source is configured.",
|
|
235
|
+
"emptyHint": "Add an https registry URL or an npm:pkg in the plugin settings.",
|
|
236
|
+
"stale": "cached (fetch failed)",
|
|
237
|
+
"fetchedAt": "Fetched {when}",
|
|
238
|
+
"registered": "{count} registered",
|
|
239
|
+
"open": "Show rosters",
|
|
240
|
+
"hide": "Hide rosters",
|
|
241
|
+
"loading": "Loading rosters…",
|
|
242
|
+
"repo": "Repository",
|
|
243
|
+
"conflictHint": "Local versions differ; nothing was overwritten."
|
|
244
|
+
}
|
|
245
|
+
}
|
package/locale/zh.json
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"title": "Agent 档案",
|
|
4
|
+
"description": "多 Agent 团队的静态成员档案:在一个面板里定义、校验、编辑与核对。"
|
|
5
|
+
},
|
|
6
|
+
"settings": {
|
|
7
|
+
"nav": "Agent 档案",
|
|
8
|
+
"language": "语言",
|
|
9
|
+
"languageHint": "面板默认跟随 DSH 的语言设置;选一个语言即可固定下来。",
|
|
10
|
+
"languageAuto": "跟随 DSH",
|
|
11
|
+
"languageZh": "中文",
|
|
12
|
+
"languageEn": "English",
|
|
13
|
+
"rosterDirs": "档案库目录",
|
|
14
|
+
"rosterDirsHint": "留空即全局库 $DSH_HOME/agent-roster(默认 ~/.dsh/agent-roster),不跟工作区走;填相对路径才按工作区解析。",
|
|
15
|
+
"globalLibrary": "全局默认",
|
|
16
|
+
"dataDir": "数据目录",
|
|
17
|
+
"stateDir": "团队状态目录",
|
|
18
|
+
"stateDirHint": "只读:用于把档案里的值与运行时真正建出来的成员对照。",
|
|
19
|
+
"policies": "已声明的工具策略",
|
|
20
|
+
"policiesNone": "未配置——档案里写的策略 id 只是声明,运行时不生效。",
|
|
21
|
+
"policiesCount": "已声明 {count} 个",
|
|
22
|
+
"version": "版本",
|
|
23
|
+
"openPanel": "打开面板"
|
|
24
|
+
},
|
|
25
|
+
"panel": {
|
|
26
|
+
"title": "Agent 档案",
|
|
27
|
+
"subtitle": "{rosters} 份档案 · {members} 名成员 · {teams} 个团队",
|
|
28
|
+
"refresh": "刷新",
|
|
29
|
+
"refreshing": "正在刷新…",
|
|
30
|
+
"tabsRosters": "档案",
|
|
31
|
+
"tabsTeams": "团队",
|
|
32
|
+
"tabsDiagnostics": "体检",
|
|
33
|
+
"search": "搜索",
|
|
34
|
+
"searchPlaceholder": "按 id、标题、成员或标签过滤",
|
|
35
|
+
"create": "新建档案",
|
|
36
|
+
"import": "导入",
|
|
37
|
+
"export": "导出",
|
|
38
|
+
"emptyTitle": "还没有档案",
|
|
39
|
+
"emptyBody": "一份档案就是档案库目录下的一个 YAML 或 JSON 文件。可以在这里新建,也可以自己把文件放进目录。",
|
|
40
|
+
"emptyCta": "创建第一份档案",
|
|
41
|
+
"noMatch": "没有匹配的档案。",
|
|
42
|
+
"loading": "正在读取档案…",
|
|
43
|
+
"errorTitle": "读取档案失败",
|
|
44
|
+
"retry": "重试",
|
|
45
|
+
"bannerOne": "有 1 项待处理",
|
|
46
|
+
"bannerMany": "有 {count} 项待处理",
|
|
47
|
+
"bannerCta": "查看体检",
|
|
48
|
+
"workspaceFallback": "还没有注册工作区,暂时按进程所在目录读取。",
|
|
49
|
+
"tabsSources": "档案源"
|
|
50
|
+
},
|
|
51
|
+
"roster": {
|
|
52
|
+
"members": "{count} 名成员",
|
|
53
|
+
"oneMember": "1 名成员",
|
|
54
|
+
"version": "v{version}",
|
|
55
|
+
"file": "文件",
|
|
56
|
+
"deployed": "已在 {teams}",
|
|
57
|
+
"notDeployed": "还没进任何团队",
|
|
58
|
+
"drifted": "{count} 处不一致",
|
|
59
|
+
"edit": "编辑",
|
|
60
|
+
"duplicate": "复制一份",
|
|
61
|
+
"delete": "删除",
|
|
62
|
+
"copyCreate": "复制建团队载荷",
|
|
63
|
+
"copied": "已复制到剪贴板",
|
|
64
|
+
"copyFailed": "剪贴板不可用,请手动选择文本复制。",
|
|
65
|
+
"noMembers": "这份档案没有成员。",
|
|
66
|
+
"diagnostics": "{count} 条发现",
|
|
67
|
+
"showMembers": "展开成员",
|
|
68
|
+
"hideMembers": "收起成员"
|
|
69
|
+
},
|
|
70
|
+
"member": {
|
|
71
|
+
"prompt": "人设",
|
|
72
|
+
"tools": "工具",
|
|
73
|
+
"role": "角色",
|
|
74
|
+
"model": "模型",
|
|
75
|
+
"effort": "思考档位",
|
|
76
|
+
"policy": "工具策略",
|
|
77
|
+
"fallback": "备用模型",
|
|
78
|
+
"aliases": "曾用名",
|
|
79
|
+
"skills": "声明技能",
|
|
80
|
+
"skillsHint": "仅声明"
|
|
81
|
+
},
|
|
82
|
+
"team": {
|
|
83
|
+
"emptyTitle": "还没有团队",
|
|
84
|
+
"emptyBody": "团队由 dsh-agent-teams 创建与调度。这里只读它的状态,用来判断档案到底有没有真正建进运行时。",
|
|
85
|
+
"emptyCta": "从档案复制建团队载荷",
|
|
86
|
+
"phaseStaged": "待批准",
|
|
87
|
+
"phaseRunning": "运行中",
|
|
88
|
+
"halted": "已停止",
|
|
89
|
+
"escalated": "已升级",
|
|
90
|
+
"members": "成员",
|
|
91
|
+
"tasks": "{total} 个任务 · 完成 {completed} · 失败 {failed} · 进行中 {active}",
|
|
92
|
+
"file": "状态文件",
|
|
93
|
+
"managed": "来自 {roster}",
|
|
94
|
+
"unmanaged": "不来自任何档案",
|
|
95
|
+
"faithful": "与档案一致",
|
|
96
|
+
"drift": "与档案不一致",
|
|
97
|
+
"promptChars": "{count} 字人设",
|
|
98
|
+
"driftDetail": "{field}:档案 {wanted},运行时 {actual}"
|
|
99
|
+
},
|
|
100
|
+
"editor": {
|
|
101
|
+
"createTitle": "新建档案",
|
|
102
|
+
"editTitle": "编辑 {id}",
|
|
103
|
+
"id": "Id",
|
|
104
|
+
"idHint": "小写字母、数字、点、短横线或下划线;它同时是目录名。",
|
|
105
|
+
"titleField": "标题",
|
|
106
|
+
"titleHint": "面板里显示的名字,可自由填写。",
|
|
107
|
+
"version": "版本",
|
|
108
|
+
"description": "描述",
|
|
109
|
+
"tags": "标签",
|
|
110
|
+
"tagsHint": "用逗号分隔。",
|
|
111
|
+
"members": "成员",
|
|
112
|
+
"addMember": "添加成员",
|
|
113
|
+
"removeMember": "移除",
|
|
114
|
+
"memberName": "名字",
|
|
115
|
+
"memberRole": "角色",
|
|
116
|
+
"memberTitle": "头衔",
|
|
117
|
+
"memberModel": "模型",
|
|
118
|
+
"memberProvider": "提供方",
|
|
119
|
+
"memberEffort": "思考档位",
|
|
120
|
+
"memberPolicy": "工具策略",
|
|
121
|
+
"memberScope": "可用工具",
|
|
122
|
+
"memberScopeHint": "用逗号分隔工具名;留空表示继承。",
|
|
123
|
+
"memberPrompt": "人设(system prompt)",
|
|
124
|
+
"memberDescription": "简介",
|
|
125
|
+
"memberAliases": "曾用名",
|
|
126
|
+
"listHint": "用逗号分隔。",
|
|
127
|
+
"memberSkills": "声明技能",
|
|
128
|
+
"skillsHint": "用逗号分隔技能名。运行时不会据此加载技能,档案只记录意图。",
|
|
129
|
+
"memberExamples": "典型请求",
|
|
130
|
+
"examplesHint": "一行一条;派活时当提示用,不会被当成指令执行。",
|
|
131
|
+
"captain": "队长",
|
|
132
|
+
"captainHint": "队长是创建团队的那个会话,不是成员。这里记下它应该是什么样;真正的模型由 profile 决定。",
|
|
133
|
+
"captainName": "队长名",
|
|
134
|
+
"captainNameHint": "kebab-case;留空即删掉整段 captain。",
|
|
135
|
+
"captainDescription": "简介",
|
|
136
|
+
"captainProvider": "提供方",
|
|
137
|
+
"captainModel": "模型",
|
|
138
|
+
"captainEffort": "思考档位",
|
|
139
|
+
"captainPersona": "人格前缀",
|
|
140
|
+
"captainPersonaHint": "由 agent preset 生效,不是这份档案。写在这里只是为了不丢意图。",
|
|
141
|
+
"memberTags": "标签",
|
|
142
|
+
"source": "源码",
|
|
143
|
+
"form": "表单",
|
|
144
|
+
"cancel": "取消",
|
|
145
|
+
"save": "保存",
|
|
146
|
+
"saving": "正在保存…",
|
|
147
|
+
"overwriteTitle": "覆盖已有档案?",
|
|
148
|
+
"overwriteBody": "{file} 已存在。保存会替换它,并在旁边保留一份 .bak 备份。",
|
|
149
|
+
"overwriteConfirm": "覆盖",
|
|
150
|
+
"failedTitle": "档案没有保存",
|
|
151
|
+
"emptyId": "必须填写 id。",
|
|
152
|
+
"emptyTitle": "必须填写标题。",
|
|
153
|
+
"emptyMembers": "至少需要一个成员。",
|
|
154
|
+
"emptyMemberName": "每个成员都要有名字。",
|
|
155
|
+
"emptyMemberPrompt": "每个成员都要有人设。",
|
|
156
|
+
"sourceHint": "直接编辑文件原文。宿主会在写入前校验;校验不通过时一个字节都不会落盘。"
|
|
157
|
+
},
|
|
158
|
+
"delete": {
|
|
159
|
+
"title": "删除 {id}?",
|
|
160
|
+
"body": "这会从档案库里删除 {file}。已经用它建过的团队不受影响,只是不再有档案描述这些成员。",
|
|
161
|
+
"confirm": "删除",
|
|
162
|
+
"cancel": "取消"
|
|
163
|
+
},
|
|
164
|
+
"importDialog": {
|
|
165
|
+
"title": "导入档案",
|
|
166
|
+
"hint": "粘贴一份档案原文。宿主会先校验,再写进选中的目录。",
|
|
167
|
+
"placeholder": "kind: dsh-agent-roster/v1\nroster: my-team\nversion: 1.0.0\n…",
|
|
168
|
+
"submit": "导入",
|
|
169
|
+
"target": "写入"
|
|
170
|
+
},
|
|
171
|
+
"import": {
|
|
172
|
+
"done": "已导入 {file}",
|
|
173
|
+
"exists": "{file} 已存在。"
|
|
174
|
+
},
|
|
175
|
+
"diagnostics": {
|
|
176
|
+
"title": "体检",
|
|
177
|
+
"intro": "插件能自查的全部内容:自己的配置、档案库,以及档案所描述的团队。",
|
|
178
|
+
"empty": "没有问题:配置、档案与团队都是一致的。",
|
|
179
|
+
"severityError": "错误",
|
|
180
|
+
"severityWarn": "警告",
|
|
181
|
+
"severityInfo": "提示",
|
|
182
|
+
"file": "文件",
|
|
183
|
+
"location": "{file}:{line}"
|
|
184
|
+
},
|
|
185
|
+
"hint": {
|
|
186
|
+
"workspace-fallback": {
|
|
187
|
+
"title": "没有注册工作区",
|
|
188
|
+
"body": "DSH 还没为这次会话注册工作区,档案库目录按进程所在目录解析。打开一个工作区后,面板才能读到正确的文件。"
|
|
189
|
+
},
|
|
190
|
+
"roster-dir-missing": {
|
|
191
|
+
"title": "档案库目录不存在",
|
|
192
|
+
"body": "{dirSpec} 在 {rootDir} 下不存在。可以建这个目录,或在插件设置里改档案库目录。"
|
|
193
|
+
},
|
|
194
|
+
"roster-dir-empty": {
|
|
195
|
+
"title": "档案库目录是空的",
|
|
196
|
+
"body": "{rootDir} 存在但没有任何档案。放一个含 roster.yaml 的子目录进去,或者在这里新建一份。"
|
|
197
|
+
},
|
|
198
|
+
"no-rosters": {
|
|
199
|
+
"title": "一份档案都没有",
|
|
200
|
+
"body": "所有配置的档案库目录都是空的。在有一份档案之前,工具会如实报告 0 份档案。"
|
|
201
|
+
},
|
|
202
|
+
"tool-policies-unset": {
|
|
203
|
+
"title": "工具策略未经交叉校验",
|
|
204
|
+
"body": "档案里写了工具策略,但插件不知道你的部署声明了哪些 id。在插件设置里填上已声明的策略,就能发现写错的 id。"
|
|
205
|
+
},
|
|
206
|
+
"teams-none": {
|
|
207
|
+
"title": "还没有团队",
|
|
208
|
+
"body": "团队状态目录 {stateDir} 里没有团队。档案仍然可读,只是“有没有真正部署”无从判断。"
|
|
209
|
+
},
|
|
210
|
+
"state-dir-missing": {
|
|
211
|
+
"title": "团队状态目录不存在",
|
|
212
|
+
"body": "{stateDir} 还不存在,因此没有团队能与档案对照。在第一个团队创建之前,这是正常现象。"
|
|
213
|
+
},
|
|
214
|
+
"duplicate-roster-id": {
|
|
215
|
+
"title": "档案 id 重复",
|
|
216
|
+
"body": "有 {count} 个档案 id 同时出现在多个目录里。工具只认第一个匹配,请把其中一个改名。"
|
|
217
|
+
},
|
|
218
|
+
"roster-errors": {
|
|
219
|
+
"title": "有档案带错误",
|
|
220
|
+
"body": "全库共 {count} 条错误。带错误的档案不能作为建团队成员的来源。"
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"misc": {
|
|
224
|
+
"copied": "已复制",
|
|
225
|
+
"yes": "是",
|
|
226
|
+
"no": "否",
|
|
227
|
+
"failed": "操作失败"
|
|
228
|
+
},
|
|
229
|
+
"source": {
|
|
230
|
+
"tabsSources": "档案源",
|
|
231
|
+
"pull": "拉取到本机",
|
|
232
|
+
"pulling": "拉取中…",
|
|
233
|
+
"pulled": "写入 {written} 份,未变 {unchanged} 份,冲突 {conflicts} 份",
|
|
234
|
+
"empty": "还没有配置公共档案源。",
|
|
235
|
+
"emptyHint": "在插件设置里填一个 https 的 registry 地址,或 npm:pkg。",
|
|
236
|
+
"stale": "缓存(拉取失败)",
|
|
237
|
+
"fetchedAt": "上次拉取 {when}",
|
|
238
|
+
"registered": "登记 {count} 份",
|
|
239
|
+
"open": "展开查看",
|
|
240
|
+
"hide": "收起",
|
|
241
|
+
"loading": "正在读取档案…",
|
|
242
|
+
"repo": "仓库",
|
|
243
|
+
"conflictHint": "本地版本与远端不同,未覆盖。"
|
|
244
|
+
}
|
|
245
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,100 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stofone/dsh-agent-roster",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "多 Agent 团队的静态成员档案定义与校验层:档案库在面板里看得见、改得动,团队成员的人设、模型与工具边界固化成可校验、可版本化的文件,并在 dsh-agent-teams 创建成员时把档案桥接给运行时。",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./index.js",
|
|
9
|
+
"./client": "./client.js",
|
|
10
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
11
|
+
"./locale/*.json": "./locale/*.json",
|
|
12
|
+
"./icon": "./icon.svg",
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"index.js",
|
|
17
|
+
"client.js",
|
|
18
|
+
"cordis.patch.yml",
|
|
19
|
+
"lib",
|
|
20
|
+
"bin",
|
|
21
|
+
"index",
|
|
22
|
+
"locale/*.json",
|
|
23
|
+
"schema",
|
|
24
|
+
"icon.svg",
|
|
25
|
+
"examples",
|
|
26
|
+
"README.md",
|
|
27
|
+
"README.zh.md",
|
|
28
|
+
"CHANGELOG.md",
|
|
29
|
+
"LICENSE"
|
|
30
|
+
],
|
|
31
|
+
"bin": {
|
|
32
|
+
"dsh-agent-roster": "bin/cli.mjs"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"dsh",
|
|
36
|
+
"dsh-plugin",
|
|
37
|
+
"deepseek-harness",
|
|
38
|
+
"agent-teams",
|
|
39
|
+
"agent",
|
|
40
|
+
"roster",
|
|
41
|
+
"persona",
|
|
42
|
+
"multi-agent"
|
|
43
|
+
],
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"author": {
|
|
46
|
+
"name": "STofone",
|
|
47
|
+
"url": "https://github.com/STofone"
|
|
48
|
+
},
|
|
49
|
+
"homepage": "https://github.com/STofone/dsh-agent-roster#readme",
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/STofone/dsh-agent-roster.git"
|
|
53
|
+
},
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/STofone/dsh-agent-roster/issues"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=22.19.0"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@deepseek-ai/schemastery": "^3.18.5",
|
|
62
|
+
"yaml": "^2.9.1"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"@deepseek-ai/dsh-tools": "*"
|
|
66
|
+
},
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"@deepseek-ai/dsh-tools": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"publishConfig": {
|
|
73
|
+
"access": "public",
|
|
74
|
+
"registry": "https://registry.npmjs.org/"
|
|
75
|
+
},
|
|
76
|
+
"scripts": {
|
|
77
|
+
"test": "node --test",
|
|
78
|
+
"smoke": "node scripts/host-smoke.mjs && node scripts/client-smoke.mjs",
|
|
79
|
+
"check:locale": "node scripts/check-locale.mjs",
|
|
80
|
+
"validate": "node bin/cli.mjs validate"
|
|
81
|
+
},
|
|
82
|
+
"dsh": {
|
|
83
|
+
"bundle": {
|
|
84
|
+
"patch": "./cordis.patch.yml"
|
|
85
|
+
},
|
|
86
|
+
"client": {
|
|
87
|
+
"platform": "web",
|
|
88
|
+
"immediately": false,
|
|
89
|
+
"inject": [
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-layout",
|
|
91
|
+
"@deepseek-ai/dsh-client-ui-sidebar",
|
|
92
|
+
"@deepseek-ai/dsh-client-ui-settings"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"meta": {
|
|
97
|
+
"title": "Agent Roster",
|
|
98
|
+
"description": "静态成员档案:定义、校验并桥接多 Agent 团队成员的人设、模型与工具边界。"
|
|
99
|
+
}
|
|
100
|
+
}
|