@khorsheed/dsh-room 0.1.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 +9 -0
- package/README.i18n.yaml +6 -0
- package/README.md +48 -0
- package/README.zh.md +48 -0
- package/cordis.patch.yml +6 -0
- package/lib/client.js +11481 -0
- package/lib/index.js +3231 -0
- package/lib/invariant.js +26 -0
- package/lib/journal-CuRnWk66.js +435 -0
- package/lib/tool.js +350 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +2615 -0
- package/lib/typert.remote-client.d.ts +55 -0
- package/lib/typert.remote-client.js +1711 -0
- package/lib/types/adapter.d.ts +42 -0
- package/lib/types/adapter.js +41 -0
- package/lib/types/agent-setup.d.ts +141 -0
- package/lib/types/agent-setup.js +145 -0
- package/lib/types/client/InviteAgentAction.d.ts +13 -0
- package/lib/types/client/InviteAgentAction.js +45 -0
- package/lib/types/client/InviteDialog.d.ts +90 -0
- package/lib/types/client/InviteDialog.js +216 -0
- package/lib/types/client/MemberCard.d.ts +33 -0
- package/lib/types/client/MemberCard.js +32 -0
- package/lib/types/client/MembersView.d.ts +5 -0
- package/lib/types/client/MembersView.js +168 -0
- package/lib/types/client/RoomComposer.d.ts +21 -0
- package/lib/types/client/RoomComposer.js +211 -0
- package/lib/types/client/RoomDockCapsules.d.ts +64 -0
- package/lib/types/client/RoomDockCapsules.js +277 -0
- package/lib/types/client/RoomEventView.d.ts +11 -0
- package/lib/types/client/RoomEventView.js +17 -0
- package/lib/types/client/RoomModelPicker.d.ts +18 -0
- package/lib/types/client/RoomModelPicker.js +134 -0
- package/lib/types/client/RoomPlanView.d.ts +17 -0
- package/lib/types/client/RoomPlanView.js +88 -0
- package/lib/types/client/RoomQueueStrip.d.ts +26 -0
- package/lib/types/client/RoomQueueStrip.js +28 -0
- package/lib/types/client/RoomRecoveryView.d.ts +11 -0
- package/lib/types/client/RoomRecoveryView.js +38 -0
- package/lib/types/client/RoomRelayView.d.ts +12 -0
- package/lib/types/client/RoomRelayView.js +20 -0
- package/lib/types/client/RoomRunView.d.ts +15 -0
- package/lib/types/client/RoomRunView.js +50 -0
- package/lib/types/client/RoomSpeechView.d.ts +18 -0
- package/lib/types/client/RoomSpeechView.js +62 -0
- package/lib/types/client/RoomStatsLine.d.ts +61 -0
- package/lib/types/client/RoomStatsLine.js +138 -0
- package/lib/types/client/RoomTaskLineView.d.ts +13 -0
- package/lib/types/client/RoomTaskLineView.js +21 -0
- package/lib/types/client/RoomTodoStrip.d.ts +24 -0
- package/lib/types/client/RoomTodoStrip.js +64 -0
- package/lib/types/client/format.d.ts +31 -0
- package/lib/types/client/format.js +48 -0
- package/lib/types/client/icons.d.ts +27 -0
- package/lib/types/client/icons.js +11 -0
- package/lib/types/client/index.d.ts +39 -0
- package/lib/types/client/index.js +471 -0
- package/lib/types/client/locales.d.ts +422 -0
- package/lib/types/client/locales.js +413 -0
- package/lib/types/client/member-color.d.ts +13 -0
- package/lib/types/client/member-color.js +22 -0
- package/lib/types/client/name-pool.d.ts +17 -0
- package/lib/types/client/name-pool.js +25 -0
- package/lib/types/client/nodes.d.ts +136 -0
- package/lib/types/client/nodes.js +212 -0
- package/lib/types/client/preset-visibility.d.ts +91 -0
- package/lib/types/client/preset-visibility.js +113 -0
- package/lib/types/client/request-ids.d.ts +7 -0
- package/lib/types/client/request-ids.js +21 -0
- package/lib/types/client/room-store.d.ts +137 -0
- package/lib/types/client/room-store.js +244 -0
- package/lib/types/client/slots.d.ts +319 -0
- package/lib/types/client/slots.js +1 -0
- package/lib/types/deliveries.d.ts +5 -0
- package/lib/types/deliveries.js +20 -0
- package/lib/types/dispatch.d.ts +105 -0
- package/lib/types/dispatch.js +467 -0
- package/lib/types/index.d.ts +301 -0
- package/lib/types/index.js +1200 -0
- package/lib/types/invariant.d.ts +16 -0
- package/lib/types/invariant.js +24 -0
- package/lib/types/journal.d.ts +117 -0
- package/lib/types/journal.js +434 -0
- package/lib/types/plan-service.d.ts +34 -0
- package/lib/types/plan-service.js +266 -0
- package/lib/types/plan.d.ts +168 -0
- package/lib/types/plan.js +494 -0
- package/lib/types/tool.d.ts +56 -0
- package/lib/types/tool.js +389 -0
- package/lib/types/types.d.ts +813 -0
- package/lib/types/types.js +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +131 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/** `room` namespace dictionaries. */
|
|
2
|
+
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
3
|
+
export const zh = {
|
|
4
|
+
'recovery.title': '中断的对话需要对账',
|
|
5
|
+
'recovery.help': '重启前的结果尚未确认,不会自动重试。请查看成员会话并填写核对结论;对账后,已排队的普通对话可以继续,正式目标仍遵守暂停状态。',
|
|
6
|
+
'recovery.done': '确认已完成',
|
|
7
|
+
'recovery.cancelled': '确认放弃本次执行',
|
|
8
|
+
'plan.budgetHelp': '这些限制由整个目标共享,不按成员各算一份。任务派发时就占用一次,首次执行、重试和返工均计入;普通聊天不占用这个目标的次数。',
|
|
9
|
+
'plan.create': '设定正式目标',
|
|
10
|
+
'plan.objective': '目标',
|
|
11
|
+
'plan.execute': '开始推进(不勾选则只保存草稿)',
|
|
12
|
+
'plan.start': '开始推进',
|
|
13
|
+
'plan.saveDraft': '保存草稿',
|
|
14
|
+
'plan.parallel': '目标内同时执行的任务数',
|
|
15
|
+
'plan.attempts': '整个目标的总执行次数',
|
|
16
|
+
'plan.perTask': '每项任务最多执行次数',
|
|
17
|
+
'plan.minutes': '目标推进时长上限(分钟)',
|
|
18
|
+
'plan.reason': '结论或原因',
|
|
19
|
+
'plan.references': '证据引用(每行一项)',
|
|
20
|
+
'plan.artifacts': '实际成果位置(每行一项)',
|
|
21
|
+
'plan.attempt': '尝试',
|
|
22
|
+
'plan.group': '任务组',
|
|
23
|
+
'plan.parent': '所属分组',
|
|
24
|
+
'plan.criteria': '验收标准',
|
|
25
|
+
'plan.inputs': '输入引用',
|
|
26
|
+
'plan.expectedArtifacts': '预期成果位置',
|
|
27
|
+
'plan.dependencies': '等待验收',
|
|
28
|
+
'plan.session': '打开成员会话',
|
|
29
|
+
'plan.reconcile': '对账',
|
|
30
|
+
'plan.review': '验收 / 返工',
|
|
31
|
+
'plan.retry': '重试',
|
|
32
|
+
'plan.accept': '验收通过',
|
|
33
|
+
'plan.rework': '退回返工',
|
|
34
|
+
'plan.reconcileSubmitted': '对账为待验收',
|
|
35
|
+
'plan.reconcileFailed': '对账为失败',
|
|
36
|
+
'plan.acceptedCount': '已验收 {done} / 当前计划 {total} 项',
|
|
37
|
+
'plan.revision': '计划版本',
|
|
38
|
+
'plan.humanPause': '人类暂停自动推进',
|
|
39
|
+
'plan.pause': '暂停自动推进',
|
|
40
|
+
'plan.resume': '继续推进',
|
|
41
|
+
'plan.goalControls': '目标验收与预算',
|
|
42
|
+
'plan.updateBudget': '更新预算',
|
|
43
|
+
'plan.complete': '验收目标完成',
|
|
44
|
+
'plan.cancel': '取消目标(当前轮继续结束)',
|
|
45
|
+
'plan.status.draft': '草稿',
|
|
46
|
+
'plan.status.running': '执行中',
|
|
47
|
+
'plan.status.paused': '已暂停',
|
|
48
|
+
'plan.status.completed': '目标已完成',
|
|
49
|
+
'plan.status.cancelled': '已取消',
|
|
50
|
+
'plan.status.pending': '等待派发或前置验收',
|
|
51
|
+
'plan.status.submitted': '待验收',
|
|
52
|
+
'plan.status.accepted': '已验收',
|
|
53
|
+
'plan.status.failed': '失败',
|
|
54
|
+
'plan.status.queued': '排队中',
|
|
55
|
+
'plan.status.rejected': '已退回返工',
|
|
56
|
+
'plan.status.uncertain': '结果未知,需对账',
|
|
57
|
+
'coordinator.cwdBound': '成员已绑定会话或有排队工作;请邀请新成员使用其他目录',
|
|
58
|
+
'coordinator.nativeRequired': '保留原生 DSH 成员,以便单独联系或切回协调者',
|
|
59
|
+
'coordinator.label': '协调者',
|
|
60
|
+
'coordinator.promote': '设为协调者',
|
|
61
|
+
'coordinator.busy': '请等待原协调者与候选成员空闲、队列清空后交接',
|
|
62
|
+
'coordinator.conflict': '协调者已改变,请刷新后重试',
|
|
63
|
+
'coordinator.active': '请先交接协调者,再移除此成员',
|
|
64
|
+
'coordinator.configuration': '已启动成员的模型和 effort 由成员配置面板管理',
|
|
65
|
+
'action.inviteAgent': '+ 邀请 agent',
|
|
66
|
+
'view.members': '成员',
|
|
67
|
+
'members.empty': '暂无成员',
|
|
68
|
+
'composer.placeholder': '跟协调者对话;@ 指定其他成员',
|
|
69
|
+
'composer.send': '发送',
|
|
70
|
+
'composer.stop': '停止生成',
|
|
71
|
+
'composer.error.unknownTargets': '未知成员:{names}',
|
|
72
|
+
'composer.error.generic': '发送失败,请重试',
|
|
73
|
+
'composer.model.picker': 'DSH 模型',
|
|
74
|
+
'composer.model.select': '选择模型',
|
|
75
|
+
'composer.model.loading': '正在加载模型…',
|
|
76
|
+
'composer.model.menu.model': '模型',
|
|
77
|
+
'composer.model.menu.effort': '推理等级',
|
|
78
|
+
'composer.model.effortDefault': '默认',
|
|
79
|
+
'composer.model.status.loading': '正在刷新模型列表…',
|
|
80
|
+
'composer.model.empty': '没有可用的模型',
|
|
81
|
+
'composer.model.emptyEfforts': '当前模型未提供推理等级',
|
|
82
|
+
'composer.model.failed': '切换模型失败,请重试',
|
|
83
|
+
'todo.title': '任务',
|
|
84
|
+
'todo.progress.done': '{done} 已完成',
|
|
85
|
+
'todo.progress.active': '{active} 进行中',
|
|
86
|
+
'todo.progress.pending': '{pending} 待处理',
|
|
87
|
+
'queue.count': '{n} 条排队消息',
|
|
88
|
+
'member.kind.main': '原生 DSH',
|
|
89
|
+
'action.copy': '复制',
|
|
90
|
+
'action.copied': '已复制',
|
|
91
|
+
'markdown.footnotes': '脚注',
|
|
92
|
+
'speech.stopped': '已停止 · 部分输出',
|
|
93
|
+
'speech.failed': '失败 · 部分输出',
|
|
94
|
+
'speech.jump': '查看成员会话',
|
|
95
|
+
'speech.expand': '展开全部',
|
|
96
|
+
'speech.collapse': '收起',
|
|
97
|
+
'run.working': '{member} 正在工作…',
|
|
98
|
+
'run.failed': '{member} 运行失败',
|
|
99
|
+
'run.stop': '停止',
|
|
100
|
+
'run.durationUnknown': '耗时未知',
|
|
101
|
+
'event.joined': '{member}({provider})加入了 room',
|
|
102
|
+
'event.joinedByAgent': ' · 由主 agent 邀请',
|
|
103
|
+
'event.left': '{member} 离开了 room',
|
|
104
|
+
'relay.line': '⇢ {from} → {to}:{content}',
|
|
105
|
+
'relay.confirm': '确认派发',
|
|
106
|
+
'relay.dismiss': '忽略',
|
|
107
|
+
'relay.state.confirmed': '(已确认,派发中)',
|
|
108
|
+
'relay.state.dismissed': '(已忽略)',
|
|
109
|
+
'relay.state.sent': '(已送达)',
|
|
110
|
+
'tasks.capsule': '当前进度',
|
|
111
|
+
'tasks.chat': '聊天任务',
|
|
112
|
+
'tasks.doing': '在做',
|
|
113
|
+
'tasks.filter.all': '全部',
|
|
114
|
+
'tasks.blocked': '等 {member}',
|
|
115
|
+
'tasks.status.pending': '待开始',
|
|
116
|
+
'tasks.status.in_progress': '进行中',
|
|
117
|
+
'tasks.status.done': '已完成',
|
|
118
|
+
'tasks.status.cancelled': '已取消',
|
|
119
|
+
'tasks.status.failed': '失败',
|
|
120
|
+
'tasks.close': '完成',
|
|
121
|
+
'tasks.dismiss': '关闭',
|
|
122
|
+
'tasks.add': '添加',
|
|
123
|
+
'tasks.addMember': '任务成员',
|
|
124
|
+
'tasks.addPlaceholder': '新任务…',
|
|
125
|
+
'tasks.addBlockedBy': '等待成员(可选)',
|
|
126
|
+
'tasks.addBlockedByNone': '不等谁',
|
|
127
|
+
'tasks.addTrigger': '添加任务',
|
|
128
|
+
'goal.label': '目标',
|
|
129
|
+
'goal.set': '+ 设定目标',
|
|
130
|
+
'goal.placeholder': '本房间的目标…',
|
|
131
|
+
'goal.edit': '编辑',
|
|
132
|
+
'goal.save': '保存',
|
|
133
|
+
'goal.cancel': '取消',
|
|
134
|
+
'goal.recent': '推进记录',
|
|
135
|
+
'goal.noAdvances': '暂无推进记录',
|
|
136
|
+
'advance.line': '✓ {member} 完成了「{title}」',
|
|
137
|
+
'advance.progress': '── 目标进度 {done}/{total}',
|
|
138
|
+
'time.justNow': '刚刚',
|
|
139
|
+
'time.minutesAgo': '{count} 分钟前',
|
|
140
|
+
'time.hoursAgo': '{count} 小时前',
|
|
141
|
+
'time.daysAgo': '{count} 天前',
|
|
142
|
+
'stats.counts': '{turns} 轮 · {steps} 步',
|
|
143
|
+
'stats.llm': 'LLM {duration}',
|
|
144
|
+
'stats.toolCall': '工具调用 {duration}',
|
|
145
|
+
'stats.ttftAverage': '首 token 平均 {duration}',
|
|
146
|
+
'stats.tokensPerSecond': '{throughput} tok/s',
|
|
147
|
+
'stats.cacheHit': '缓存命中 {percent}%',
|
|
148
|
+
'stats.tokens': '输入 {input} tok · 输出 {output} tok',
|
|
149
|
+
'members.notRoomTitle': '把会话变成多 agent 协作间',
|
|
150
|
+
'members.notRoom': '邀请 agent 进来即可开始协作:各自独立会话,@ 派发任务,共享目标与任务板',
|
|
151
|
+
'members.notRoomAction': '邀请 agent',
|
|
152
|
+
'members.status.idle': '空闲',
|
|
153
|
+
'members.status.running': '运行中',
|
|
154
|
+
'members.status.failed': '失败',
|
|
155
|
+
'members.trajectory': '轨迹→',
|
|
156
|
+
'members.model.default': '默认',
|
|
157
|
+
'members.instructions.empty': '未设置角色',
|
|
158
|
+
'members.instructions.expand': '展开',
|
|
159
|
+
'members.instructions.collapse': '收起',
|
|
160
|
+
'members.edit': '编辑',
|
|
161
|
+
'members.remove': '移除',
|
|
162
|
+
'members.removeConfirm': '确定移除 {member}?其运行将被中断,历史记录保留。',
|
|
163
|
+
'members.invite': '+ 邀请成员',
|
|
164
|
+
'invite.title': '邀请成员',
|
|
165
|
+
'invite.title.edit': '编辑 {member}',
|
|
166
|
+
'invite.provider': 'Provider',
|
|
167
|
+
'invite.name': '称呼(@ 寻址名)',
|
|
168
|
+
'invite.nameHint': '唯一、无空白、不含 @',
|
|
169
|
+
'invite.randomName': '随机起名',
|
|
170
|
+
'invite.preview': '预览',
|
|
171
|
+
'invite.previewName': '新成员',
|
|
172
|
+
'invite.advanced': '高级设置',
|
|
173
|
+
'invite.cwd': '工作目录(可选)',
|
|
174
|
+
'invite.cwdHint': '留空 = 继承 room 会话的工作目录(占位符所示)',
|
|
175
|
+
'invite.browse': '浏览…',
|
|
176
|
+
'invite.browseFailed': '目录选择器不可用(主机未提供 native 选择能力)',
|
|
177
|
+
'invite.cwdReset': '清除,恢复继承',
|
|
178
|
+
'invite.instructions': '角色指令',
|
|
179
|
+
'invite.instructionsHint': '会拼在给它的第一条任务消息最前面,之后可编辑;留空则不带预设,成员入列后可随时 @ 它安排任务',
|
|
180
|
+
'invite.instructionsHintEdit': '之后的每次派发都带这份指令;清空 = 不再注入任何预设',
|
|
181
|
+
'invite.instructionsPlaceholder': '你是这个 room 的后端工程师,负责 API 设计,回答保持简洁…',
|
|
182
|
+
'invite.firstTask': '首个任务(可选)',
|
|
183
|
+
'invite.firstTaskHint': '留空则成员入列待命',
|
|
184
|
+
'invite.model': '默认模型',
|
|
185
|
+
'invite.modelPlaceholder': '留空 = 跟随该 provider 的默认模型',
|
|
186
|
+
'invite.modelPlaceholderDefault': '跟随该 provider 默认:{model}',
|
|
187
|
+
'invite.modelPlaceholderEdit': '留空 = 清除覆盖,跟随设置',
|
|
188
|
+
'invite.modelMenu': '选择模型',
|
|
189
|
+
'invite.modelDefaultItem': '默认(跟随该 provider 默认)',
|
|
190
|
+
'invite.modelDefaultItemNamed': '默认(跟随该 provider 默认:{model})',
|
|
191
|
+
'invite.modelDefaultItemEdit': '默认(清除覆盖,跟随设置)',
|
|
192
|
+
'invite.modelHint': '记进本次委派,exec 与 live 都在启动时生效;入列后也可在成员会话里切换',
|
|
193
|
+
'invite.modelHintEdit': '预填当前生效模型;保存即切换该成员的会话级模型(live 成员下一轮以新模型重 spawn)并记进名册;成员有一轮在飞时切换会被拒绝并在下方显示',
|
|
194
|
+
'invite.cancel': '取消',
|
|
195
|
+
'invite.submit': '邀请入队',
|
|
196
|
+
'invite.save': '保存',
|
|
197
|
+
'invite.loginHint': '置灰的 provider 未登录——请先登录该 provider',
|
|
198
|
+
'invite.loggedOut': '(未登录)',
|
|
199
|
+
'invite.facadeMissing': 'local-agent 委派门面未挂载——CLI 成员暂不可邀请(主 agent 成员不受影响)',
|
|
200
|
+
'invite.error.duplicate': '名字已被占用',
|
|
201
|
+
'invite.error.invalid': '名字需非空、无空白、不含 @',
|
|
202
|
+
'invite.error.unavailable': 'local-agent 委派门面不可用',
|
|
203
|
+
'invite.error.unknownProvider': '未知 provider:{provider}(可用:{available})',
|
|
204
|
+
'invite.error.generic': '操作失败,请重试',
|
|
205
|
+
'invite.success.task': '已邀请 {member} 并开始工作',
|
|
206
|
+
'invite.success.idle': '{member} 已加入 room',
|
|
207
|
+
};
|
|
208
|
+
/** English dictionary, checked complete against the zh key set. */
|
|
209
|
+
export const en = {
|
|
210
|
+
'recovery.title': 'Interrupted conversations need reconciliation',
|
|
211
|
+
'recovery.help': 'The pre-restart outcome is unknown and will not be retried automatically. Inspect the member session and record your finding. Reconciliation releases queued ordinary conversations; paused goals remain paused.',
|
|
212
|
+
'recovery.done': 'Confirm completed',
|
|
213
|
+
'recovery.cancelled': 'Abandon this execution',
|
|
214
|
+
'plan.budgetHelp': 'Limits apply to the whole goal, not separately to each member. A dispatch reserves one execution, including the first run, retries and rework; ordinary chat does not consume this goal budget.',
|
|
215
|
+
'plan.create': 'Set a formal goal',
|
|
216
|
+
'plan.objective': 'Goal',
|
|
217
|
+
'plan.execute': 'Start execution (otherwise save a draft only)',
|
|
218
|
+
'plan.start': 'Start execution',
|
|
219
|
+
'plan.saveDraft': 'Save draft',
|
|
220
|
+
'plan.parallel': 'Concurrent tasks in this goal',
|
|
221
|
+
'plan.attempts': 'Total executions across this goal',
|
|
222
|
+
'plan.perTask': 'Maximum executions per task',
|
|
223
|
+
'plan.minutes': 'Active time limit (minutes)',
|
|
224
|
+
'plan.reason': 'Decision or reason',
|
|
225
|
+
'plan.references': 'Evidence references (one per line)',
|
|
226
|
+
'plan.artifacts': 'Actual artifact locations (one per line)',
|
|
227
|
+
'plan.attempt': 'Attempt',
|
|
228
|
+
'plan.group': 'Task group',
|
|
229
|
+
'plan.parent': 'Parent group',
|
|
230
|
+
'plan.criteria': 'Acceptance criteria',
|
|
231
|
+
'plan.inputs': 'Input references',
|
|
232
|
+
'plan.expectedArtifacts': 'Expected artifacts',
|
|
233
|
+
'plan.dependencies': 'Awaiting acceptance',
|
|
234
|
+
'plan.session': 'Open member session',
|
|
235
|
+
'plan.reconcile': 'Reconcile',
|
|
236
|
+
'plan.review': 'Review / rework',
|
|
237
|
+
'plan.retry': 'Retry',
|
|
238
|
+
'plan.accept': 'Accept result',
|
|
239
|
+
'plan.rework': 'Request rework',
|
|
240
|
+
'plan.reconcileSubmitted': 'Reconcile as submitted',
|
|
241
|
+
'plan.reconcileFailed': 'Reconcile as failed',
|
|
242
|
+
'plan.acceptedCount': 'Accepted {done} / current plan {total}',
|
|
243
|
+
'plan.revision': 'Plan revision',
|
|
244
|
+
'plan.humanPause': 'Human paused automatic progress',
|
|
245
|
+
'plan.pause': 'Pause automatic progress',
|
|
246
|
+
'plan.resume': 'Continue execution',
|
|
247
|
+
'plan.goalControls': 'Goal review and budget',
|
|
248
|
+
'plan.updateBudget': 'Update budget',
|
|
249
|
+
'plan.complete': 'Accept goal completion',
|
|
250
|
+
'plan.cancel': 'Cancel goal (current rounds can finish)',
|
|
251
|
+
'plan.status.draft': 'Draft',
|
|
252
|
+
'plan.status.running': 'Running',
|
|
253
|
+
'plan.status.paused': 'Paused',
|
|
254
|
+
'plan.status.completed': 'Goal completed',
|
|
255
|
+
'plan.status.cancelled': 'Cancelled',
|
|
256
|
+
'plan.status.pending': 'Awaiting dispatch or prerequisite review',
|
|
257
|
+
'plan.status.submitted': 'Awaiting review',
|
|
258
|
+
'plan.status.accepted': 'Accepted',
|
|
259
|
+
'plan.status.failed': 'Failed',
|
|
260
|
+
'plan.status.queued': 'Queued',
|
|
261
|
+
'plan.status.rejected': 'Rework requested',
|
|
262
|
+
'plan.status.uncertain': 'Unknown outcome; reconcile',
|
|
263
|
+
'coordinator.cwdBound': 'This member has a bound session or queued work; invite a new member for another directory',
|
|
264
|
+
'coordinator.nativeRequired': 'Keep the native DSH member available for direct messages and coordinator handoff',
|
|
265
|
+
'coordinator.label': 'Coordinator',
|
|
266
|
+
'coordinator.promote': 'Set as coordinator',
|
|
267
|
+
'coordinator.busy': 'Wait for both coordinators to be idle with empty queues before handoff',
|
|
268
|
+
'coordinator.conflict': 'Coordinator changed; refresh and retry',
|
|
269
|
+
'coordinator.active': 'Hand off coordination before removing this member',
|
|
270
|
+
'coordinator.configuration': 'Use member controls to change a started member model or effort',
|
|
271
|
+
'action.inviteAgent': '+ Invite agent',
|
|
272
|
+
'view.members': 'Members',
|
|
273
|
+
'members.empty': 'No members yet',
|
|
274
|
+
'composer.placeholder': 'Talk to the main agent; @ a member to dispatch',
|
|
275
|
+
'composer.send': 'Send',
|
|
276
|
+
'composer.stop': 'Stop generating',
|
|
277
|
+
'composer.error.unknownTargets': 'Unknown members: {names}',
|
|
278
|
+
'composer.error.generic': 'Could not send; please retry',
|
|
279
|
+
'composer.model.picker': 'Main agent model',
|
|
280
|
+
'composer.model.select': 'Select model',
|
|
281
|
+
'composer.model.loading': 'Loading models…',
|
|
282
|
+
'composer.model.menu.model': 'Model',
|
|
283
|
+
'composer.model.menu.effort': 'Effort',
|
|
284
|
+
'composer.model.effortDefault': 'Default',
|
|
285
|
+
'composer.model.status.loading': 'Refreshing model list…',
|
|
286
|
+
'composer.model.empty': 'No models available',
|
|
287
|
+
'composer.model.emptyEfforts': 'This model provides no reasoning effort levels',
|
|
288
|
+
'composer.model.failed': 'Could not switch the model; try again',
|
|
289
|
+
'todo.title': 'To-dos',
|
|
290
|
+
'todo.progress.done': '{done} completed',
|
|
291
|
+
'todo.progress.active': '{active} in progress',
|
|
292
|
+
'todo.progress.pending': '{pending} pending',
|
|
293
|
+
'queue.count': '{n} queued messages',
|
|
294
|
+
'member.kind.main': 'Native DSH',
|
|
295
|
+
'action.copy': 'Copy',
|
|
296
|
+
'action.copied': 'Copied',
|
|
297
|
+
'markdown.footnotes': 'Footnotes',
|
|
298
|
+
'speech.stopped': 'Stopped · partial output',
|
|
299
|
+
'speech.failed': 'Failed · partial output',
|
|
300
|
+
'speech.jump': 'Open the member session',
|
|
301
|
+
'speech.expand': 'Show all',
|
|
302
|
+
'speech.collapse': 'Show less',
|
|
303
|
+
'run.working': '{member} is working…',
|
|
304
|
+
'run.failed': "{member}'s run failed",
|
|
305
|
+
'run.stop': 'Stop',
|
|
306
|
+
'run.durationUnknown': 'Duration unknown',
|
|
307
|
+
'event.joined': '{member} ({provider}) joined the room',
|
|
308
|
+
'event.joinedByAgent': ' · invited by the main agent',
|
|
309
|
+
'event.left': '{member} left the room',
|
|
310
|
+
'relay.line': '⇢ {from} → {to}: {content}',
|
|
311
|
+
'relay.confirm': 'Confirm',
|
|
312
|
+
'relay.dismiss': 'Dismiss',
|
|
313
|
+
'relay.state.confirmed': '(confirmed, dispatching)',
|
|
314
|
+
'relay.state.dismissed': '(dismissed)',
|
|
315
|
+
'relay.state.sent': '(delivered)',
|
|
316
|
+
'tasks.capsule': 'Progress',
|
|
317
|
+
'tasks.chat': 'Chat tasks',
|
|
318
|
+
'tasks.doing': 'doing',
|
|
319
|
+
'tasks.filter.all': 'All',
|
|
320
|
+
'tasks.blocked': 'waiting on {member}',
|
|
321
|
+
'tasks.status.pending': 'pending',
|
|
322
|
+
'tasks.status.in_progress': 'in progress',
|
|
323
|
+
'tasks.status.done': 'done',
|
|
324
|
+
'tasks.status.cancelled': 'cancelled',
|
|
325
|
+
'tasks.status.failed': 'failed',
|
|
326
|
+
'tasks.close': 'Done',
|
|
327
|
+
'tasks.dismiss': 'Dismiss',
|
|
328
|
+
'tasks.add': 'Add',
|
|
329
|
+
'tasks.addMember': 'Task member',
|
|
330
|
+
'tasks.addPlaceholder': 'New task…',
|
|
331
|
+
'tasks.addBlockedBy': 'Waiting on (optional)',
|
|
332
|
+
'tasks.addBlockedByNone': 'Not waiting',
|
|
333
|
+
'tasks.addTrigger': 'Add task',
|
|
334
|
+
'goal.label': 'Goal',
|
|
335
|
+
'goal.set': '+ Set a goal',
|
|
336
|
+
'goal.placeholder': "The room's goal…",
|
|
337
|
+
'goal.edit': 'Edit',
|
|
338
|
+
'goal.save': 'Save',
|
|
339
|
+
'goal.cancel': 'Cancel',
|
|
340
|
+
'goal.recent': 'Advances',
|
|
341
|
+
'goal.noAdvances': 'No advances yet',
|
|
342
|
+
'advance.line': '✓ {member} finished "{title}"',
|
|
343
|
+
'advance.progress': '── goal {done}/{total}',
|
|
344
|
+
'time.justNow': 'just now',
|
|
345
|
+
'time.minutesAgo': '{count}m ago',
|
|
346
|
+
'time.hoursAgo': '{count}h ago',
|
|
347
|
+
'time.daysAgo': '{count}d ago',
|
|
348
|
+
'stats.counts': '{turns} turns · {steps} steps',
|
|
349
|
+
'stats.llm': 'LLM {duration}',
|
|
350
|
+
'stats.toolCall': 'Tool call {duration}',
|
|
351
|
+
'stats.ttftAverage': 'TTFT avg {duration}',
|
|
352
|
+
'stats.tokensPerSecond': '{throughput} tok/s',
|
|
353
|
+
'stats.cacheHit': 'Cache hit {percent}%',
|
|
354
|
+
'stats.tokens': 'Input {input} tok · Output {output} tok',
|
|
355
|
+
'members.notRoomTitle': 'Turn this session into a multi-agent room',
|
|
356
|
+
'members.notRoom': 'Invite an agent to start collaborating: independent sessions, @-dispatched tasks, a shared goal and task board',
|
|
357
|
+
'members.notRoomAction': 'Invite agent',
|
|
358
|
+
'members.status.idle': 'idle',
|
|
359
|
+
'members.status.running': 'running',
|
|
360
|
+
'members.status.failed': 'failed',
|
|
361
|
+
'members.trajectory': 'trace→',
|
|
362
|
+
'members.model.default': 'Default',
|
|
363
|
+
'members.instructions.empty': 'No role set',
|
|
364
|
+
'members.instructions.expand': 'More',
|
|
365
|
+
'members.instructions.collapse': 'Less',
|
|
366
|
+
'members.edit': 'Edit',
|
|
367
|
+
'members.remove': 'Remove',
|
|
368
|
+
'members.removeConfirm': 'Remove {member}? Its run will be interrupted; the history is kept.',
|
|
369
|
+
'members.invite': '+ Invite member',
|
|
370
|
+
'invite.title': 'Invite member',
|
|
371
|
+
'invite.title.edit': 'Edit {member}',
|
|
372
|
+
'invite.provider': 'Provider',
|
|
373
|
+
'invite.name': 'Name (@-addressing)',
|
|
374
|
+
'invite.nameHint': 'unique, no whitespace, no "@"',
|
|
375
|
+
'invite.randomName': 'Roll a random name',
|
|
376
|
+
'invite.preview': 'Preview',
|
|
377
|
+
'invite.previewName': 'new-member',
|
|
378
|
+
'invite.advanced': 'Advanced',
|
|
379
|
+
'invite.cwd': 'Working directory (optional)',
|
|
380
|
+
'invite.cwdHint': 'Empty: inherits the room session\'s cwd (shown as the placeholder)',
|
|
381
|
+
'invite.browse': 'Browse…',
|
|
382
|
+
'invite.browseFailed': 'The directory picker is unavailable (the host serves no native picking capability)',
|
|
383
|
+
'invite.cwdReset': 'Clear; inherit again',
|
|
384
|
+
'invite.instructions': 'Role instructions',
|
|
385
|
+
'invite.instructionsHint': 'Prepended to the front of the first task message the member receives; editable later. Empty: no preset — once the member joins, @ it any time to hand out work',
|
|
386
|
+
'invite.instructionsHintEdit': 'Every later dispatch carries these instructions; clearing them stops the injection',
|
|
387
|
+
'invite.instructionsPlaceholder': 'You are this room\'s backend engineer, own the API design, keep answers concise…',
|
|
388
|
+
'invite.firstTask': 'First task (optional)',
|
|
389
|
+
'invite.firstTaskHint': 'Empty: the member joins idle',
|
|
390
|
+
'invite.model': 'Default model',
|
|
391
|
+
'invite.modelPlaceholder': 'Empty: follow the provider\'s default model',
|
|
392
|
+
'invite.modelPlaceholderDefault': 'Follow the provider default: {model}',
|
|
393
|
+
'invite.modelPlaceholderEdit': 'Empty: clear the override, follow settings',
|
|
394
|
+
'invite.modelMenu': 'Pick a model',
|
|
395
|
+
'invite.modelDefaultItem': 'Default (follow the provider default)',
|
|
396
|
+
'invite.modelDefaultItemNamed': 'Default (follow the provider default: {model})',
|
|
397
|
+
'invite.modelDefaultItemEdit': 'Default (clear the override, follow settings)',
|
|
398
|
+
'invite.modelHint': 'Recorded with the delegation, bound at spawn for exec and live alike; switchable later in the member session',
|
|
399
|
+
'invite.modelHintEdit': 'Prefilled with the effective model; saving switches the member\'s session-level model (a live member respawns onto it next round) and records it on the roster; a switch is refused while a round is in flight (shown below)',
|
|
400
|
+
'invite.cancel': 'Cancel',
|
|
401
|
+
'invite.submit': 'Invite to the team',
|
|
402
|
+
'invite.save': 'Save',
|
|
403
|
+
'invite.loginHint': 'Greyed providers are logged out — log in to the provider first',
|
|
404
|
+
'invite.loggedOut': ' (logged out)',
|
|
405
|
+
'invite.facadeMissing': 'The local-agent delegation facade is not mounted — CLI members cannot be invited (the main-agent member is unaffected)',
|
|
406
|
+
'invite.error.duplicate': 'That name is taken',
|
|
407
|
+
'invite.error.invalid': 'Names must be non-empty, without whitespace or "@"',
|
|
408
|
+
'invite.error.unavailable': 'The local-agent delegation facade is unavailable',
|
|
409
|
+
'invite.error.unknownProvider': 'Unknown provider: {provider} (available: {available})',
|
|
410
|
+
'invite.error.generic': 'The operation failed; please retry',
|
|
411
|
+
'invite.success.task': '{member} invited and working',
|
|
412
|
+
'invite.success.idle': '{member} joined the room',
|
|
413
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed per-member colors: the one new visual vocabulary the room adds (the
|
|
3
|
+
* identity dot on member rows, speech headers, and @-candidates). Assignment
|
|
4
|
+
* is a stable name hash — the same member keeps its color across views and
|
|
5
|
+
* reloads without any roster bookkeeping.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Map a member name to its fixed palette color.
|
|
9
|
+
* @param name - the member's addressing name.
|
|
10
|
+
* @returns a hex color.
|
|
11
|
+
*/
|
|
12
|
+
export declare function memberColor(name: string): string;
|
|
13
|
+
//# sourceMappingURL=member-color.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed per-member colors: the one new visual vocabulary the room adds (the
|
|
3
|
+
* identity dot on member rows, speech headers, and @-candidates). Assignment
|
|
4
|
+
* is a stable name hash — the same member keeps its color across views and
|
|
5
|
+
* reloads without any roster bookkeeping.
|
|
6
|
+
*/
|
|
7
|
+
/** Eight hues chosen to stay legible on both light and dark surfaces. */
|
|
8
|
+
const PALETTE = [
|
|
9
|
+
'#5b8ff9', '#61ddaa', '#f6bd16', '#7262fd',
|
|
10
|
+
'#f6903d', '#008685', '#e86452', '#f08bb4',
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* Map a member name to its fixed palette color.
|
|
14
|
+
* @param name - the member's addressing name.
|
|
15
|
+
* @returns a hex color.
|
|
16
|
+
*/
|
|
17
|
+
export function memberColor(name) {
|
|
18
|
+
let hash = 0;
|
|
19
|
+
for (const char of name)
|
|
20
|
+
hash = (hash * 31 + (char.codePointAt(0) ?? 0)) >>> 0;
|
|
21
|
+
return PALETTE[hash % PALETTE.length];
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The invite dialog's name dice: a small game-flavored pool of addressing
|
|
3
|
+
* names. Rolling skips names already on the roster (a duplicate would fail
|
|
4
|
+
* the host's uniqueness check anyway) and the currently displayed name (a
|
|
5
|
+
* roll that changes nothing feels broken). The avatar color follows the new
|
|
6
|
+
* name automatically — it is a name hash (member-color.ts).
|
|
7
|
+
*/
|
|
8
|
+
/** Game-flavored addressing names, one per letter for variety. */
|
|
9
|
+
export declare const NAME_POOL: readonly ['ada', 'bill', 'cathy', 'dex', 'echo', 'faye', 'gray', 'iris', 'jude', 'kai', 'luna', 'milo', 'nova', 'odin', 'piper', 'quinn', 'ray', 'sage', 'tess', 'uma', 'vale', 'wren', 'xavi', 'yara', 'zoe'];
|
|
10
|
+
/**
|
|
11
|
+
* Roll a random name from the pool.
|
|
12
|
+
* @param taken - names already on the roster (never rolled).
|
|
13
|
+
* @param current - the currently displayed name (never re-rolled).
|
|
14
|
+
* @returns a fresh name, or undefined when the pool is exhausted.
|
|
15
|
+
*/
|
|
16
|
+
export declare function rollName(taken: readonly string[], current: string): string | undefined;
|
|
17
|
+
//# sourceMappingURL=name-pool.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The invite dialog's name dice: a small game-flavored pool of addressing
|
|
3
|
+
* names. Rolling skips names already on the roster (a duplicate would fail
|
|
4
|
+
* the host's uniqueness check anyway) and the currently displayed name (a
|
|
5
|
+
* roll that changes nothing feels broken). The avatar color follows the new
|
|
6
|
+
* name automatically — it is a name hash (member-color.ts).
|
|
7
|
+
*/
|
|
8
|
+
/** Game-flavored addressing names, one per letter for variety. */
|
|
9
|
+
export const NAME_POOL = [
|
|
10
|
+
'ada', 'bill', 'cathy', 'dex', 'echo', 'faye', 'gray', 'iris',
|
|
11
|
+
'jude', 'kai', 'luna', 'milo', 'nova', 'odin', 'piper', 'quinn',
|
|
12
|
+
'ray', 'sage', 'tess', 'uma', 'vale', 'wren', 'xavi', 'yara', 'zoe',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Roll a random name from the pool.
|
|
16
|
+
* @param taken - names already on the roster (never rolled).
|
|
17
|
+
* @param current - the currently displayed name (never re-rolled).
|
|
18
|
+
* @returns a fresh name, or undefined when the pool is exhausted.
|
|
19
|
+
*/
|
|
20
|
+
export function rollName(taken, current) {
|
|
21
|
+
const candidates = NAME_POOL.filter(name => !taken.includes(name) && name !== current);
|
|
22
|
+
if (candidates.length === 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
return candidates[Math.floor(Math.random() * candidates.length)];
|
|
25
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room chat-flow projections: the Definitions claiming the room session's
|
|
3
|
+
* `room/*` journal events into chat nodes — `room-speech` (a member's
|
|
4
|
+
* reply), `room-run` (a run's running edge, updated by its terminal edge:
|
|
5
|
+
* done/cancelled hide in place, failed stays as a dim error row), `room-event`
|
|
6
|
+
* (boundary lines: member joined/left), and `room-relay` (the member-to-
|
|
7
|
+
* member notification gate row, folding resolved edges in place). The
|
|
8
|
+
* auto-seated main agent's member-added is bookkeeping, not a boundary
|
|
9
|
+
* event, and is not claimed. `room/dispatch` is deliberately NOT claimed:
|
|
10
|
+
* the human's @-message lands as a standard `user/message` event (see
|
|
11
|
+
* RoomService.postMessage) and renders through the official user node.
|
|
12
|
+
* @module @khorsheed/dsh-room/client/nodes
|
|
13
|
+
*/
|
|
14
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
15
|
+
import type { ConversationNodeDefinition } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
16
|
+
/** Chat node data of one member speech row. */
|
|
17
|
+
export interface RoomSpeechData {
|
|
18
|
+
/** Partial output from a stopped or failed run; never a completed answer. */
|
|
19
|
+
readonly interrupted?: 'cancelled' | 'failed';
|
|
20
|
+
/** Seq of the room/speech event. */
|
|
21
|
+
readonly seq: number;
|
|
22
|
+
/** Unix epoch ms from the event. */
|
|
23
|
+
readonly time: number;
|
|
24
|
+
readonly member: string;
|
|
25
|
+
readonly text: string;
|
|
26
|
+
/** The member's child session (jump target), when recorded. */
|
|
27
|
+
readonly childSessionId?: SessionId;
|
|
28
|
+
/** Dispatch→settle milliseconds, when measured. */
|
|
29
|
+
readonly durationMs?: number;
|
|
30
|
+
}
|
|
31
|
+
/** Chat node data of one member run row. */
|
|
32
|
+
export interface RoomRunData {
|
|
33
|
+
/** Seq of the running edge's event. */
|
|
34
|
+
readonly seq: number;
|
|
35
|
+
/** Unix epoch ms from the running edge's event. */
|
|
36
|
+
readonly time: number;
|
|
37
|
+
readonly member: string;
|
|
38
|
+
readonly startedAt: number;
|
|
39
|
+
readonly state: 'running' | 'done' | 'cancelled' | 'failed';
|
|
40
|
+
/** Settled run milliseconds (terminal edges only). */
|
|
41
|
+
readonly elapsedMs?: number;
|
|
42
|
+
/** Why the run failed (failed terminal edges only). */
|
|
43
|
+
readonly error?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Chat node data of one boundary line (member join/leave). */
|
|
46
|
+
export interface RoomEventData {
|
|
47
|
+
/** Seq of the source event. */
|
|
48
|
+
readonly seq: number;
|
|
49
|
+
/** Unix epoch ms from the event. */
|
|
50
|
+
readonly time: number;
|
|
51
|
+
readonly sub: 'member-added' | 'member-removed';
|
|
52
|
+
/** The joining/leaving member. */
|
|
53
|
+
readonly member?: string;
|
|
54
|
+
/** The joining member's provider (member-added, cli members). */
|
|
55
|
+
readonly provider?: string;
|
|
56
|
+
/** Who invited the joining member (member-added). */
|
|
57
|
+
readonly invitedBy?: 'human' | 'agent';
|
|
58
|
+
}
|
|
59
|
+
/** Chat node data of one member-to-member notification relay row. */
|
|
60
|
+
export interface RoomRelayData {
|
|
61
|
+
/** Seq of the relay's latest journal event. */
|
|
62
|
+
readonly seq: number;
|
|
63
|
+
/** Unix epoch ms from the relay event. */
|
|
64
|
+
readonly time: number;
|
|
65
|
+
/** The relay id (confirm/dismiss key). */
|
|
66
|
+
readonly relayId: string;
|
|
67
|
+
readonly from: string;
|
|
68
|
+
readonly to: string;
|
|
69
|
+
readonly content: string;
|
|
70
|
+
readonly state: 'pending' | 'confirmed' | 'dismissed' | 'sent';
|
|
71
|
+
}
|
|
72
|
+
/** Chat node data of one task-advance line (the dim "✓ ada 完成了「…」" row). */
|
|
73
|
+
export interface RoomTaskLineData {
|
|
74
|
+
/** Seq of the task's LATEST journal event (add or the closing update). */
|
|
75
|
+
readonly seq: number;
|
|
76
|
+
/** Unix epoch ms of that event. */
|
|
77
|
+
readonly time: number;
|
|
78
|
+
readonly taskId: string;
|
|
79
|
+
readonly member: string;
|
|
80
|
+
readonly title: string;
|
|
81
|
+
readonly status: 'pending' | 'in_progress' | 'done' | 'cancelled' | 'failed';
|
|
82
|
+
}
|
|
83
|
+
declare module '@deepseek-ai/dsh-client-ui-chat/client' {
|
|
84
|
+
interface ChatNodeDataMap {
|
|
85
|
+
/** room: a member's reply (identity row + unframed markdown + actions). */
|
|
86
|
+
'room-speech': RoomSpeechData;
|
|
87
|
+
/** room: a member run's live row (running; failed stays dim). */
|
|
88
|
+
'room-run': RoomRunData;
|
|
89
|
+
/** room: a boundary line (join/leave). */
|
|
90
|
+
'room-event': RoomEventData;
|
|
91
|
+
/** room: a member-to-member notification relay (gate row). */
|
|
92
|
+
'room-relay': RoomRelayData;
|
|
93
|
+
/** room: a task closure's advance line (visible only once done). */
|
|
94
|
+
'room-task-line': RoomTaskLineData;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The member-speech Definition: one single-event Context per room/speech
|
|
99
|
+
* event (a CLI member's reply mirrored onto the blackboard).
|
|
100
|
+
*/
|
|
101
|
+
export declare const roomSpeechDefinition: ConversationNodeDefinition<RoomSpeechData>;
|
|
102
|
+
/**
|
|
103
|
+
* The member-run Definition: one Context per run (matched on
|
|
104
|
+
* member+startedAt), started by the running edge and updated by its terminal
|
|
105
|
+
* edge. A running run renders the live row; a failed run stays as a dim
|
|
106
|
+
* error row; done/cancelled hide the row IN PLACE — the assembler's live
|
|
107
|
+
* incremental flush forbids withdrawing a materialized node with null (the
|
|
108
|
+
* withdrawal contract is the same key with `visibility: 'hidden'`; a null
|
|
109
|
+
* there throws and freezes the session's whole chat pipeline), while the
|
|
110
|
+
* speech row or the cancel's own affordances carry the outcome.
|
|
111
|
+
*/
|
|
112
|
+
export declare const roomRunDefinition: ConversationNodeDefinition<RoomRunData>;
|
|
113
|
+
/**
|
|
114
|
+
* The boundary Definition: one single-event Context per member-added (cli
|
|
115
|
+
* members only — the auto-seated main agent is skipped) or member-removed
|
|
116
|
+
* event. `room/dispatch` stays unclaimed: the human's @-message renders
|
|
117
|
+
* through the official user node (it is also appended as `user/message`).
|
|
118
|
+
*/
|
|
119
|
+
export declare const roomEventDefinition: ConversationNodeDefinition<RoomEventData>;
|
|
120
|
+
/**
|
|
121
|
+
* The relay Definition: one Context per relay (matched on the relay id),
|
|
122
|
+
* started by the `room/relay` event (pending) and updated by each
|
|
123
|
+
* `room/relay-resolved` edge — the gate row's state folds in place.
|
|
124
|
+
*/
|
|
125
|
+
export declare const roomRelayDefinition: ConversationNodeDefinition<RoomRelayData>;
|
|
126
|
+
/**
|
|
127
|
+
* The task-advance Definition: one Context per task (matched on the task id),
|
|
128
|
+
* started by the `room/task-added` event and updated by each
|
|
129
|
+
* `room/task-updated` edge. The node stays HIDDEN while the task is open or
|
|
130
|
+
* cancelled and materializes — at the closing event's seq, so the line sits
|
|
131
|
+
* at the moment of completion — only when the task closes done: the dim
|
|
132
|
+
* advance line `✓ ada 完成了「API 定稿」── 目标进度 2/5`. (The goal progress
|
|
133
|
+
* suffix is computed by the renderer from the room store, not folded here.)
|
|
134
|
+
*/
|
|
135
|
+
export declare const roomTaskLineDefinition: ConversationNodeDefinition<RoomTaskLineData>;
|
|
136
|
+
//# sourceMappingURL=nodes.d.ts.map
|