ai_co_discuss 0.2.26 → 0.2.28
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/.agents/skills/discuss-host/SKILL.md +88 -88
- package/backend/free_room.py +29 -3
- package/docs/architecture.md +1 -1
- package/docs/runner.md +3 -1
- package/docs/workflow.md +1 -1
- package/package.json +1 -1
- package/runner/api_participant.mjs +194 -186
- package/runner/discussion_adapters.mjs +17 -0
- package/runner/discussion_runner.mjs +472 -465
- package/runner/discussion_service.mjs +466 -466
- package/web/app.js +1 -0
- package/web/modern.css +1 -1
- package/web/modern.js +5 -4
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: discuss-host
|
|
3
|
-
description: "AI CoDiscuss 的主持技能,仅主持人调用,且须同时调用 discuss-participant。用于开始、继续、暂停或收束讨论:组织有针对性的交锋,形成有原文依据的结论。编辑技能本身不启动讨论。"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 讨论主持(discuss-host)
|
|
7
|
-
|
|
8
|
-
把用户的议题推进为有依据的判断,保留有价值的分歧与未确认事项。**主要工作是理解论证、发现影响结论的争点、提出有效追问;流程只用于可靠交接这些工作。**
|
|
9
|
-
|
|
10
|
-
主持人同时调用 [discuss-participant](../discuss-participant/SKILL.md)。阅读、署名、发言权、可靠提交和执行凭据统一由参与技能定义,本技能只补充主持决策与交接。编辑或评审技能不启动讨论。
|
|
11
|
-
|
|
12
|
-
## 先判断讨论需要什么
|
|
13
|
-
|
|
14
|
-
先明确用户想解决的问题、背景、约束和合格结果;沿用已有共识,只询问阻碍推进的缺项。探索可以保留多个方向,决策需要比较标准,事实问题需要可核验的证据;快速咨询不必套完整的全员流程。
|
|
15
|
-
|
|
16
|
-
用户提出目标、约束与偏好,并作出最终决定;主持人负责理解用户意图、判断对讨论的影响并安排后续发言。安排下一位专家或收束前,先处理尚未处理的用户留言,结合上下文决定直接回答、调整问题、请相关专家回应或改变方向。意图清楚就推进,只在影响判断的关键歧义处确认,不只转发留言。用户的倾向不等于已验证事实,参与者仍应独立判断并指出矛盾与风险。
|
|
17
|
-
|
|
18
|
-
原生定时与事件驱动均遵循此约定,分别在下一次检查或主持执行中处理;普通留言不默认打断当前专家,明确的暂停、继续或收束要求按现有规则执行。通过后续发言、主持简报或总结自然说明用户意见如何被处理,不为每条留言另发确认回执。
|
|
19
|
-
|
|
20
|
-
默认先形成必要的独立观点,再围绕关键分歧深入讨论,按需复核并总结。阶段是阅读和判断边界,不是需要填满的轮次:
|
|
21
|
-
|
|
22
|
-
- `initial
|
|
23
|
-
- `discussing`:找出会改变结论的事实、假设、标准或偏好差异,请最相关的人回应。一轮内每位专家各回应一次,轮次以此计数;不连续安排刚发言的专家,新一轮也不先安排上一轮最后发言者。只有需要其本人澄清刚发表内容的事实或原意时才例外,并在简报中说明原因。
|
|
24
|
-
- `reviewing`:仅在需要时,用拟定结论请相关当事人核对原意、条件和剩余阻碍;不是让全员再赞同一次。
|
|
25
|
-
- `concluded`:已有足够依据完成本次目标,或依约交付有限结论。明确哪些已确认、哪些仍有分歧、缺什么证据;到限不等于达成共识。
|
|
26
|
-
|
|
27
|
-
追问应说明真正需要弄清的争点及材料入口,给专家自主质疑前提、发现遗漏和改变观点的空间,不预设答案或固定逐项答题格式。例如:“两种建议似乎采用了不同的失败容忍度。请判断这是否解释了分歧;若不是,指出决定选择的证据。”
|
|
28
|
-
|
|
29
|
-
意见相同不等于事实已验证,意见不同也不必投票决定。核对会改变结论的数字、出处与适用条件,区分实测、外部声称、估计和建议。误述原意时请原作者澄清;另一人的赞同不能代替当事人确认。保留少数意见及其影响,不为了收束抹去限制,也不为凑轮次制造争论。重复立场时缩小争点或补有区分力的证据,仍无法判断就明确保留未决。
|
|
30
|
-
|
|
31
|
-
## 定位、模式与上限
|
|
32
|
-
|
|
33
|
-
当前实际会话承担主持,不另建调度聊天。沿用用户指定的房间和运行方式;新讨论尚未选择时,只确认“全自动讨论 / 手动复制冷启动”。自动任务已表明用户启动意图,无需再次确认。
|
|
34
|
-
|
|
35
|
-
用户从当前 AI 对话发起全自动讨论时,首次读取 [对话入口与启动配置](references/launch.md),使用 `codiscuss launch` 复用本机软件配置并将首个主持任务交回当前会话;网页入口由本机服务交付主持任务。入口与推进方式、CLI / App 客户端分别判断。已收到有效自动任务时,不再次调用启动命令。
|
|
36
|
-
|
|
37
|
-
未指定房间时,保存目标、背景、参与配置和上限,核验后再接入专家。全自动使用上述启动入口,手动模式沿用 CLI 建房与接入流程。全自动要求主持和专家均具备本地 CLI 读写能力;配置完成后依据用户的启动指令运行,普通建房本身不代表已启动。在线只读专家使用手动接入分工,不静默转换模式。
|
|
38
|
-
|
|
39
|
-
新建讨论时,将用户请求完整保存到房间独立的“用户原文”字段(CLI 使用 `--user-request-file`),不改写或概括;“背景”只保存补充材料,其余主持流程照常。原文超过该字段 4000 字上限时,将完整原文按参与技能保存为开场主持消息,“用户原文”保留原文消息链接,不截断原文。
|
|
40
|
-
|
|
41
|
-
网页新建只要求话题名称与用户原文,目标、背景和讨论边界留给主持人。首次接手时若这些字段为空,先读用户原文与已知材料补全,用 `room update ROOM --goal-file ... --background-file ... --boundaries-file ... --as 本人`(受保护写入附本次 `--access-file`)一次保存,再安排专家。只写原文能支持的内容,推断的前提注明“主持推断”,不添加用户未提出的硬性约束;只有歧义会改变讨论方向时才向用户确认。已有内容视为用户或此前主持的决定,不覆盖。
|
|
42
|
-
|
|
43
|
-
工具入口、站点、项目与 cwd 的定位遵循参与技能。新建会话可指定所属项目及 cwd,也可缺省;已有会话不靠提示词迁移目录。仅在首次配置或启动自动程序时查阅仓库 `docs/deployment.md` 与 `docs/cli.md`,不把安装操作混入每次讨论。
|
|
44
|
-
|
|
45
|
-
统一入口中,`codiscuss service …` 管理本机服务,`codiscuss run … ROOM` 控制网站讨论。暂停本房间不停止其他房间共用的服务。
|
|
46
|
-
|
|
47
|
-
每次接手先读 `room view`,用其中的阶段、当前安排、`limits` 和运行状态恢复现场,再按需补读 state 与有关原文。网站已有的安排优先于旧笔记;没有待处理的专家安排不等于主持人没有工作。
|
|
48
|
-
|
|
49
|
-
遵守用户设定的轮次、总时长、单次执行及到限方式,不自行放宽。轮次以服务端 `completed_rounds` 为准;暂停、准备与收束期间不计时。到限而尚未进入收束时,用 `room limits ROOM --check --as 本人`(受保护写入附本次 `--access-file`)处理:
|
|
50
|
-
|
|
51
|
-
- 返回暂停就停止;自动执行若换代,结束旧执行,等待新任务。
|
|
52
|
-
- `limits.closing=true` 且本次执行仍有效时,只根据已有材料总结,不再安排专家。预留时间包含在总时限内,来不及完成就保留未决,不谎称收束。
|
|
53
|
-
|
|
54
|
-
## 自动主持:一次实质推进,一次交接
|
|
55
|
-
|
|
56
|
-
收到自动任务后,按参与技能进入本次执行;若当前调用已成功进入,不重复认领。不创建原生定时,也不手动通知已配置的本地专家,通知程序负责后续交付与续租。
|
|
57
|
-
|
|
58
|
-
阅读新增的相关回答、用户约束及必要原文,判断下一步是追问、补证、复核还是收束。不要只回复“已就绪”或只写一段摘要就退出;本次执行需要以以下一种结果交接:
|
|
59
|
-
|
|
60
|
-
| 判断 | 保存与结束边界 |
|
|
61
|
-
| --- | --- |
|
|
62
|
-
| 还需专家回应 | 先保存本次判断与下一步意图,再持有发言权提交下文的发言计划(`turn create --plan-file`);网站在专家间自动接力,末位答完才交回主持;接力不发通知,需要逐个转交的在线专家不放进计划。创建成功即结束本次执行。 |
|
|
63
|
-
| 本轮仍有排队安排(`queued_turns` 非空) | 说明用户留言、改资料(`held_since` 非 0)或打断让本轮提前交回。先处理这些新内容;原计划仍适用就 `turn continue`,否则直接创建新安排,剩余排队随之作废。 |
|
|
64
|
-
| 专家名单有变化(用户邀请、请回、暂离或移除专家) | 以 `room view` 中最新的 `experts` 为准重排本轮:暂离或移除的专家不再安排,新加入或请回的专家先补独立观点,再进入交锋。`members` 中 `session_mode` 为 `borrowed` 的专家续接用户已有的会话,带着自己的历史上下文:请它先说明哪些判断来自原有上下文,而不是把它当作从零开始的独立观点。排队安排已随名单变化作废,不必取消。 |
|
|
65
|
-
| 主持人需要以专家身份发言 | 给自己创建正式安排后结束;同一会话收到新的专家任务,再凭新资格发表 `opinion`。 |
|
|
66
|
-
| 已可收束,或正在限时收束 | 先发表有原文依据的最终 `moderation`、保存 state 与简报,最后设为 `concluded`。 |
|
|
67
|
-
| 缺少必要用户决定或无法继续 | 保留已有判断与具体阻碍,用 `execution fail` 暂停,向用户说明需要什么。 |
|
|
68
|
-
|
|
69
|
-
**发言计划(默认做法)**:每次需要专家回应时,先写好发言计划再一次提交,不逐位安排。计划是 `[{"expert":"名字","question":"…"}]`,按顺序列出本轮每位应发言的专家各一次,最多 10 项。计划只覆盖当前一轮,跨轮追问要看本轮回答后再定;只有各轮问题不依赖回答的固定流程(如依次报数)才可排满多轮。后一位的问题取决于前一位回答时也不必等前一位答完:把问题写成“先读取最新回答,再按……回应”,由专家自己读取。用户留言或打断时服务端会自动把控制权交回主持,不需要主持为此逐位把关。只有在线专家须逐个转交、或必须等用户先决定时,才只排一位,并在 state 里写明原因。创建安排或收束成功后立即结束,只回一句话,不再输出总结。
|
|
70
|
-
|
|
71
|
-
创建安排、完成收束或执行失败会结束本次写入资格;此后只允许回读核验,不再补 state、回执或归还已交接的发言权。是否完成以网站业务结果为准;结果不明按参与技能核对原提交,不另创安排。
|
|
72
|
-
|
|
73
|
-
## 保存有用的进度
|
|
74
|
-
|
|
75
|
-
当判断、争点、下一步或阶段发生变化时,用一次 `state set ROOM --body-file ... --until ... --brief-file ... --as 本人` 同时保存:
|
|
76
|
-
|
|
77
|
-
- state:足够恢复判断的依据与原文编号、已处理内容、未决问题和下一步意图。
|
|
78
|
-
- 简报:让用户迅速了解当前结论、关键分歧和为什么接下来这样安排;不复述执行日志。
|
|
79
|
-
|
|
80
|
-
`--until` 只覆盖实际已读材料。下一安排尚未创建时写成意图,实际编号与状态由服务端安排记录提供;恢复时两者对照,不为补写同一个编号再做一轮状态维护。无变化不写,已在当前上下文的材料不反复全文读取。保存失败先核对,不能一边失去接续依据一边继续派发。
|
|
81
|
-
|
|
82
|
-
最终总结必须另以主持消息留档,简报不能替代它;结论、不同意见、重要条件与未验证影响按议题组织,不强制固定栏目。用户要求独立报告时再调用仓库的 discuss-report,报告不表示建议已获采纳。
|
|
83
|
-
|
|
84
|
-
## 手动兜底与停止
|
|
85
|
-
|
|
86
|
-
**仅在用户选择手动模式、需要在线专家转交或处理已有原生任务时**,读取 [手动接入与持续主持](references/manual.md) 对应部分。自动讨论不加载这份操作细节。
|
|
87
|
-
|
|
88
|
-
等待回答或一次回复结束不是整场结束。用户叫停、已暂停/收束或时间用尽时停止新增安排;自动任务的失效与失败遵循参与技能,手动模式清理本话题的原生任务。恢复须有明确继续指令。向用户报告结论或暂停点,以及影响协作的真实障碍,不索要全员启停回执。
|
|
1
|
+
---
|
|
2
|
+
name: discuss-host
|
|
3
|
+
description: "AI CoDiscuss 的主持技能,仅主持人调用,且须同时调用 discuss-participant。用于开始、继续、暂停或收束讨论:组织有针对性的交锋,形成有原文依据的结论。编辑技能本身不启动讨论。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 讨论主持(discuss-host)
|
|
7
|
+
|
|
8
|
+
把用户的议题推进为有依据的判断,保留有价值的分歧与未确认事项。**主要工作是理解论证、发现影响结论的争点、提出有效追问;流程只用于可靠交接这些工作。**
|
|
9
|
+
|
|
10
|
+
主持人同时调用 [discuss-participant](../discuss-participant/SKILL.md)。阅读、署名、发言权、可靠提交和执行凭据统一由参与技能定义,本技能只补充主持决策与交接。编辑或评审技能不启动讨论。
|
|
11
|
+
|
|
12
|
+
## 先判断讨论需要什么
|
|
13
|
+
|
|
14
|
+
先明确用户想解决的问题、背景、约束和合格结果;沿用已有共识,只询问阻碍推进的缺项。探索可以保留多个方向,决策需要比较标准,事实问题需要可核验的证据;快速咨询不必套完整的全员流程。
|
|
15
|
+
|
|
16
|
+
用户提出目标、约束与偏好,并作出最终决定;主持人负责理解用户意图、判断对讨论的影响并安排后续发言。安排下一位专家或收束前,先处理尚未处理的用户留言,结合上下文决定直接回答、调整问题、请相关专家回应或改变方向。意图清楚就推进,只在影响判断的关键歧义处确认,不只转发留言。用户的倾向不等于已验证事实,参与者仍应独立判断并指出矛盾与风险。
|
|
17
|
+
|
|
18
|
+
原生定时与事件驱动均遵循此约定,分别在下一次检查或主持执行中处理;普通留言不默认打断当前专家,明确的暂停、继续或收束要求按现有规则执行。通过后续发言、主持简报或总结自然说明用户意见如何被处理,不为每条留言另发确认回执。
|
|
19
|
+
|
|
20
|
+
默认先形成必要的独立观点,再围绕关键分歧深入讨论,按需复核并总结。阶段是阅读和判断边界,不是需要填满的轮次:
|
|
21
|
+
|
|
22
|
+
- `initial`:必要专家先独立判断。用户明确允许某位专家先读他人观点时,在该专家的安排问题里写明“对 initial 独立阅读限制的明确例外”,API 专家的读取限制据此放开,其他专家按技能约定。主持人兼任专家时也要贡献自己的观点;尽量先安排自己,避免先读他人回答再声称独立。
|
|
23
|
+
- `discussing`:找出会改变结论的事实、假设、标准或偏好差异,请最相关的人回应。一轮内每位专家各回应一次,轮次以此计数;不连续安排刚发言的专家,新一轮也不先安排上一轮最后发言者。只有需要其本人澄清刚发表内容的事实或原意时才例外,并在简报中说明原因。
|
|
24
|
+
- `reviewing`:仅在需要时,用拟定结论请相关当事人核对原意、条件和剩余阻碍;不是让全员再赞同一次。
|
|
25
|
+
- `concluded`:已有足够依据完成本次目标,或依约交付有限结论。明确哪些已确认、哪些仍有分歧、缺什么证据;到限不等于达成共识。
|
|
26
|
+
|
|
27
|
+
追问应说明真正需要弄清的争点及材料入口,给专家自主质疑前提、发现遗漏和改变观点的空间,不预设答案或固定逐项答题格式。例如:“两种建议似乎采用了不同的失败容忍度。请判断这是否解释了分歧;若不是,指出决定选择的证据。”
|
|
28
|
+
|
|
29
|
+
意见相同不等于事实已验证,意见不同也不必投票决定。核对会改变结论的数字、出处与适用条件,区分实测、外部声称、估计和建议。误述原意时请原作者澄清;另一人的赞同不能代替当事人确认。保留少数意见及其影响,不为了收束抹去限制,也不为凑轮次制造争论。重复立场时缩小争点或补有区分力的证据,仍无法判断就明确保留未决。
|
|
30
|
+
|
|
31
|
+
## 定位、模式与上限
|
|
32
|
+
|
|
33
|
+
当前实际会话承担主持,不另建调度聊天。沿用用户指定的房间和运行方式;新讨论尚未选择时,只确认“全自动讨论 / 手动复制冷启动”。自动任务已表明用户启动意图,无需再次确认。
|
|
34
|
+
|
|
35
|
+
用户从当前 AI 对话发起全自动讨论时,首次读取 [对话入口与启动配置](references/launch.md),使用 `codiscuss launch` 复用本机软件配置并将首个主持任务交回当前会话;网页入口由本机服务交付主持任务。入口与推进方式、CLI / App 客户端分别判断。已收到有效自动任务时,不再次调用启动命令。
|
|
36
|
+
|
|
37
|
+
未指定房间时,保存目标、背景、参与配置和上限,核验后再接入专家。全自动使用上述启动入口,手动模式沿用 CLI 建房与接入流程。全自动要求主持和专家均具备本地 CLI 读写能力;配置完成后依据用户的启动指令运行,普通建房本身不代表已启动。在线只读专家使用手动接入分工,不静默转换模式。
|
|
38
|
+
|
|
39
|
+
新建讨论时,将用户请求完整保存到房间独立的“用户原文”字段(CLI 使用 `--user-request-file`),不改写或概括;“背景”只保存补充材料,其余主持流程照常。原文超过该字段 4000 字上限时,将完整原文按参与技能保存为开场主持消息,“用户原文”保留原文消息链接,不截断原文。
|
|
40
|
+
|
|
41
|
+
网页新建只要求话题名称与用户原文,目标、背景和讨论边界留给主持人。首次接手时若这些字段为空,先读用户原文与已知材料补全,用 `room update ROOM --goal-file ... --background-file ... --boundaries-file ... --as 本人`(受保护写入附本次 `--access-file`)一次保存,再安排专家。只写原文能支持的内容,推断的前提注明“主持推断”,不添加用户未提出的硬性约束;只有歧义会改变讨论方向时才向用户确认。已有内容视为用户或此前主持的决定,不覆盖。
|
|
42
|
+
|
|
43
|
+
工具入口、站点、项目与 cwd 的定位遵循参与技能。新建会话可指定所属项目及 cwd,也可缺省;已有会话不靠提示词迁移目录。仅在首次配置或启动自动程序时查阅仓库 `docs/deployment.md` 与 `docs/cli.md`,不把安装操作混入每次讨论。
|
|
44
|
+
|
|
45
|
+
统一入口中,`codiscuss service …` 管理本机服务,`codiscuss run … ROOM` 控制网站讨论。暂停本房间不停止其他房间共用的服务。
|
|
46
|
+
|
|
47
|
+
每次接手先读 `room view`,用其中的阶段、当前安排、`limits` 和运行状态恢复现场,再按需补读 state 与有关原文。网站已有的安排优先于旧笔记;没有待处理的专家安排不等于主持人没有工作。
|
|
48
|
+
|
|
49
|
+
遵守用户设定的轮次、总时长、单次执行及到限方式,不自行放宽。轮次以服务端 `completed_rounds` 为准;暂停、准备与收束期间不计时。到限而尚未进入收束时,用 `room limits ROOM --check --as 本人`(受保护写入附本次 `--access-file`)处理:
|
|
50
|
+
|
|
51
|
+
- 返回暂停就停止;自动执行若换代,结束旧执行,等待新任务。
|
|
52
|
+
- `limits.closing=true` 且本次执行仍有效时,只根据已有材料总结,不再安排专家。预留时间包含在总时限内,来不及完成就保留未决,不谎称收束。
|
|
53
|
+
|
|
54
|
+
## 自动主持:一次实质推进,一次交接
|
|
55
|
+
|
|
56
|
+
收到自动任务后,按参与技能进入本次执行;若当前调用已成功进入,不重复认领。不创建原生定时,也不手动通知已配置的本地专家,通知程序负责后续交付与续租。
|
|
57
|
+
|
|
58
|
+
阅读新增的相关回答、用户约束及必要原文,判断下一步是追问、补证、复核还是收束。不要只回复“已就绪”或只写一段摘要就退出;本次执行需要以以下一种结果交接:
|
|
59
|
+
|
|
60
|
+
| 判断 | 保存与结束边界 |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| 还需专家回应 | 先保存本次判断与下一步意图,再持有发言权提交下文的发言计划(`turn create --plan-file`);网站在专家间自动接力,末位答完才交回主持;接力不发通知,需要逐个转交的在线专家不放进计划。创建成功即结束本次执行。 |
|
|
63
|
+
| 本轮仍有排队安排(`queued_turns` 非空) | 说明用户留言、改资料(`held_since` 非 0)或打断让本轮提前交回。先处理这些新内容;原计划仍适用就 `turn continue`,否则直接创建新安排,剩余排队随之作废。 |
|
|
64
|
+
| 专家名单有变化(用户邀请、请回、暂离或移除专家) | 以 `room view` 中最新的 `experts` 为准重排本轮:暂离或移除的专家不再安排,新加入或请回的专家先补独立观点,再进入交锋。`members` 中 `session_mode` 为 `borrowed` 的专家续接用户已有的会话,带着自己的历史上下文:请它先说明哪些判断来自原有上下文,而不是把它当作从零开始的独立观点。排队安排已随名单变化作废,不必取消。 |
|
|
65
|
+
| 主持人需要以专家身份发言 | 给自己创建正式安排后结束;同一会话收到新的专家任务,再凭新资格发表 `opinion`。 |
|
|
66
|
+
| 已可收束,或正在限时收束 | 先发表有原文依据的最终 `moderation`、保存 state 与简报,最后设为 `concluded`。 |
|
|
67
|
+
| 缺少必要用户决定或无法继续 | 保留已有判断与具体阻碍,用 `execution fail` 暂停,向用户说明需要什么。 |
|
|
68
|
+
|
|
69
|
+
**发言计划(默认做法)**:每次需要专家回应时,先写好发言计划再一次提交,不逐位安排。计划是 `[{"expert":"名字","question":"…"}]`,按顺序列出本轮每位应发言的专家各一次,最多 10 项。计划只覆盖当前一轮,跨轮追问要看本轮回答后再定;只有各轮问题不依赖回答的固定流程(如依次报数)才可排满多轮。后一位的问题取决于前一位回答时也不必等前一位答完:把问题写成“先读取最新回答,再按……回应”,由专家自己读取。用户留言或打断时服务端会自动把控制权交回主持,不需要主持为此逐位把关。只有在线专家须逐个转交、或必须等用户先决定时,才只排一位,并在 state 里写明原因。创建安排或收束成功后立即结束,只回一句话,不再输出总结。
|
|
70
|
+
|
|
71
|
+
创建安排、完成收束或执行失败会结束本次写入资格;此后只允许回读核验,不再补 state、回执或归还已交接的发言权。是否完成以网站业务结果为准;结果不明按参与技能核对原提交,不另创安排。
|
|
72
|
+
|
|
73
|
+
## 保存有用的进度
|
|
74
|
+
|
|
75
|
+
当判断、争点、下一步或阶段发生变化时,用一次 `state set ROOM --body-file ... --until ... --brief-file ... --as 本人` 同时保存:
|
|
76
|
+
|
|
77
|
+
- state:足够恢复判断的依据与原文编号、已处理内容、未决问题和下一步意图。
|
|
78
|
+
- 简报:让用户迅速了解当前结论、关键分歧和为什么接下来这样安排;不复述执行日志。
|
|
79
|
+
|
|
80
|
+
`--until` 只覆盖实际已读材料。下一安排尚未创建时写成意图,实际编号与状态由服务端安排记录提供;恢复时两者对照,不为补写同一个编号再做一轮状态维护。无变化不写,已在当前上下文的材料不反复全文读取。保存失败先核对,不能一边失去接续依据一边继续派发。
|
|
81
|
+
|
|
82
|
+
最终总结必须另以主持消息留档,简报不能替代它;结论、不同意见、重要条件与未验证影响按议题组织,不强制固定栏目。用户要求独立报告时再调用仓库的 discuss-report,报告不表示建议已获采纳。
|
|
83
|
+
|
|
84
|
+
## 手动兜底与停止
|
|
85
|
+
|
|
86
|
+
**仅在用户选择手动模式、需要在线专家转交或处理已有原生任务时**,读取 [手动接入与持续主持](references/manual.md) 对应部分。自动讨论不加载这份操作细节。
|
|
87
|
+
|
|
88
|
+
等待回答或一次回复结束不是整场结束。用户叫停、已暂停/收束或时间用尽时停止新增安排;自动任务的失效与失败遵循参与技能,手动模式清理本话题的原生任务。恢复须有明确继续指令。向用户报告结论或暂停点,以及影响协作的真实障碍,不索要全员启停回执。
|
package/backend/free_room.py
CHANGED
|
@@ -719,14 +719,23 @@ def add_discussion_member(connection, room_id, token, payload, now):
|
|
|
719
719
|
def discussion_member_action(connection, room_id, member_id, token, payload):
|
|
720
720
|
"""Owner sends an expert away (keeping its seat), brings it back with a new credential, or removes it.
|
|
721
721
|
|
|
722
|
-
Leaving cancels the expert's open assignments; the host keeps its role and cannot leave
|
|
722
|
+
Leaving cancels the expert's open assignments; the host keeps its role and cannot leave, and an
|
|
723
|
+
expert with an open assignment can only leave while the discussion is paused. While paused,
|
|
724
|
+
`redo` voids the expert's latest opinion by deleting it so the expert counts as not yet having spoken.
|
|
723
725
|
"""
|
|
724
726
|
member = owned_member(connection, room_id, member_id, token)
|
|
725
|
-
host, experts,
|
|
727
|
+
host, experts, phase = discussion_roster(connection, room_id)
|
|
726
728
|
action = payload.get("action")
|
|
729
|
+
if action == "redo":
|
|
730
|
+
void_latest_opinion(connection, room_id, member["name"], phase)
|
|
731
|
+
return
|
|
727
732
|
if action in ("away", "remove"):
|
|
728
733
|
if member["name"] == host:
|
|
729
734
|
raise ValueError("主持人不能离开或移除;请先更换主持人")
|
|
735
|
+
speaking = connection.execute("SELECT 1 FROM discussion_turns WHERE room_id=? AND expert=? AND status IN ('pending','notified')",
|
|
736
|
+
(room_id, member["name"])).fetchone()
|
|
737
|
+
if speaking and phase != "paused":
|
|
738
|
+
raise ValueError("该专家正在发言;请先暂停讨论再离开或移除")
|
|
730
739
|
connection.execute("UPDATE discussion_turns SET status='cancelled' WHERE room_id=? AND expert=? AND status IN ('pending','notified')",
|
|
731
740
|
(room_id, member["name"]))
|
|
732
741
|
connection.execute("UPDATE discussion_turns SET status='skipped' WHERE room_id=? AND expert=? AND status='queued'", (room_id, member["name"]))
|
|
@@ -742,10 +751,27 @@ def discussion_member_action(connection, room_id, member_id, token, payload):
|
|
|
742
751
|
connection.execute("UPDATE room_members SET status='active',token_hash=? WHERE id=?", (hashed, member_id))
|
|
743
752
|
experts[member["name"]] = "online" if member["access"] == "online" else "cli"
|
|
744
753
|
else:
|
|
745
|
-
raise ValueError("action 须为 away、active 或
|
|
754
|
+
raise ValueError("action 须为 away、active、remove 或 redo")
|
|
746
755
|
save_discussion_experts(connection, room_id, experts)
|
|
747
756
|
|
|
748
757
|
|
|
758
|
+
def void_latest_opinion(connection, room_id, name, phase):
|
|
759
|
+
"""Delete an expert's latest opinion while paused; its assignment is cancelled and the round no longer counts it."""
|
|
760
|
+
if phase != "paused":
|
|
761
|
+
raise ValueError("请先暂停讨论,再作废专家的发言")
|
|
762
|
+
row = connection.execute("""SELECT messages.id,details.turn_id FROM messages JOIN message_details AS details ON details.message_id=messages.id
|
|
763
|
+
WHERE messages.room_id=? AND messages.author=? AND details.kind='opinion' ORDER BY messages.id DESC LIMIT 1""",
|
|
764
|
+
(room_id, name)).fetchone()
|
|
765
|
+
if not row:
|
|
766
|
+
raise LookupError(f"{name} 还没有可作废的发言")
|
|
767
|
+
message_id = row["id"]
|
|
768
|
+
connection.execute("UPDATE discussion_turns SET status='cancelled',answer_id=NULL WHERE answer_id=?", (message_id,))
|
|
769
|
+
connection.execute("UPDATE messages SET reply_to=NULL WHERE reply_to=?", (message_id,))
|
|
770
|
+
for table in ("message_timings", "message_summaries", "message_details"):
|
|
771
|
+
connection.execute(f"DELETE FROM {table} WHERE message_id=?", (message_id,))
|
|
772
|
+
connection.execute("DELETE FROM messages WHERE id=?", (message_id,))
|
|
773
|
+
|
|
774
|
+
|
|
749
775
|
def require_fresh_member_token(connection, room_id, token):
|
|
750
776
|
"""Prevent owner or another member's credential from being reused for a new identity."""
|
|
751
777
|
hashed = token_hash(token)
|
package/docs/architecture.md
CHANGED
|
@@ -250,7 +250,7 @@ running 状态即使只有 pending 事件,也必须先暂停才能重新启动
|
|
|
250
250
|
- **改动记录**:接入程序在执行前后对成员 cwd 做 Git 工作区快照(状态与内容哈希),执行结束且进程退出后用 `report {changes}` 记录一次。房间视图的 `free.conflicts` 列出不同成员在同一 cwd、时段重叠的执行均观察到变化的文件,只作“可能冲突”提示;非 Git 目录不记录。快照也会包含其他进程在同一目录的写入,不能确定修改者;分工修改不同文件仍可能出现提示,不代表已发生覆盖。
|
|
251
251
|
- **回答**:接入程序投递的成员回答须带 `execution_id` 并使用成员凭证;消息保存、执行完成、请求完成和成员已读游标在同一事务中写入。执行结束、被打断或过期后的回答返回 409;缺少执行编号返回 400,不能改作普通发言。消息类型为 `chat`,不计入讨论轮次。
|
|
252
252
|
- **打断**:`POST members/ID/interrupt`(控制凭据)作废该成员的进行中执行及所有未投递请求,不会自动重新开始;成员的已读游标不前移,下一次请求从同一位置读起。执行失败只影响该成员的请求,房间不暂停。
|
|
253
|
-
- **讨论成员变更**:房主修改讨论名单或读写能力时,为新增或改变能力的成员提供新凭证,未变成员保留原凭证;删去的成员立即停用。成员主持不能自行扩大名单或更改主持职责。运行中名单只能经 `POST members`(邀请,接入方式须与推进方式一致)与 `POST members/ID {action: away|active|remove}` 变更,“编辑议题”改名单返回 400。暂离从 `experts` 中移出、成员行保持 `away
|
|
253
|
+
- **讨论成员变更**:房主修改讨论名单或读写能力时,为新增或改变能力的成员提供新凭证,未变成员保留原凭证;删去的成员立即停用。成员主持不能自行扩大名单或更改主持职责。运行中名单只能经 `POST members`(邀请,接入方式须与推进方式一致)与 `POST members/ID {action: away|active|remove}` 变更,“编辑议题”改名单返回 400。暂离从 `experts` 中移出、成员行保持 `away`,同事务取消它进行中与排队的安排;请回须新凭证;主持人不能暂离或移除;有进行中安排的专家仅在话题暂停时可暂离或移除。暂停时 `{action: redo}` 删除该专家最近一条观点(含摘要、耗时、附件,被其回答的安排改为 `cancelled`)。`experts` 变化不再暂停运行:触发器 `runtime_experts_changed` 在无进行中安排和主持执行时为主持人生成 `members:` 事件,排队安排照常作废;只有更换主持人才暂停并换代。本机接入程序接受只新增参与者的配置变化,已绑定会话的条目仍须保持不变。
|
|
254
254
|
- **范围**:成员名称是 AI 实例名(见下文“参与者身份”),一个房间最多 12 位 AI。早期创建的自由房间表在 Python 启动时补齐新列。Cloudflare Worker 实现同一协议:成员与执行状态的校验放在同一 D1 批次的断言中,校验后状态变化则整批回滚。备份只导出成员名称、状态与请求,不导出凭据哈希。
|
|
255
255
|
|
|
256
256
|
## 参与者身份
|
package/docs/runner.md
CHANGED
|
@@ -219,7 +219,7 @@ codiscuss launch start --file 本次启动.json
|
|
|
219
219
|
| 软件 | 项目 / cwd 的实际处理 |
|
|
220
220
|
| --- | --- |
|
|
221
221
|
| Codex App | 按真实已保存项目 ID、名称和目录唯一匹配后创建;目录必须已加入 App。均省略时新建无项目聊天。现有绑定不能通过改提示迁移到另一目录。 |
|
|
222
|
-
| Claude Code CLI | 进程以 cwd 启动,后续按实际 session ID `--resume`。未指定目录时使用本场独立草稿目录;项目名仅作接入元数据,不声称关联 Claude 桌面 App 的项目分组。从 Claude Code 会话内启动接入程序或服务时,会去掉宿主会话注入的 `CLAUDECODE`、`CLAUDE_CODE_*` 等变量,Windows 上再读回用户与系统保存的 `ANTHROPIC_*`/`CLAUDE*` 变量(如 `claude setup-token` 的 `CLAUDE_CODE_OAUTH_TOKEN
|
|
222
|
+
| Claude Code CLI | 进程以 cwd 启动,后续按实际 session ID `--resume`。未指定目录时使用本场独立草稿目录;项目名仅作接入元数据,不声称关联 Claude 桌面 App 的项目分组。从 Claude Code 会话内启动接入程序或服务时,会去掉宿主会话注入的 `CLAUDECODE`、`CLAUDE_CODE_*` 等变量,Windows 上再读回用户与系统保存的 `ANTHROPIC_*`/`CLAUDE*` 变量(如 `claude setup-token` 的 `CLAUDE_CODE_OAUTH_TOKEN`),保证子进程使用自己的登录。停止或打断时,Windows 上用 `taskkill /T /F` 结束整个进程树,否则 Claude 已启动的 PowerShell / Bash 工具命令会在停止后继续运行;其他系统和 `taskkill` 不可用时回退为普通结束。已知边界:Codex 0.163.0 的同类实测未复现,Antigravity CLI 未验证,超时与完成后清理路径未单独验证。 |
|
|
223
223
|
| Antigravity App | 显式 setup-sidecar 将 Sidecar 绑定到实际项目,核对其资源目录及 App 返回的项目 ID;均省略时使用 Outside of Project。使用 App 2.23 当前配置版本,升级后须复核兼容性。 |
|
|
224
224
|
|
|
225
225
|
cwd 是工作目录,不等于操作系统沙箱或权限提升。讨论材料在用户指定的 cwd,回答草稿只放任务中的 `draft_directory`;CLI 与凭据是显式的工具路径。路径和项目配置仅保存在本机,不进入公开事件。
|
|
@@ -362,6 +362,8 @@ codiscuss service --help
|
|
|
362
362
|
|
|
363
363
|
`codiscuss service shortcut` 在 Windows 桌面创建「AI CoDiscuss 讨论服务」快捷方式:双击即启动后台服务(已运行则复用),并用默认浏览器打开已登记的讨论网站。`codiscuss service autostart on|off` 在当前用户的启动文件夹添加或删除登录自启快捷方式,默认不开启。登记表、锁、`status.json` 与 `service.log` 位于用户目录的 `~/.codiscuss`(Windows 为 `%USERPROFILE%\.codiscuss`),不随 npm 包升级变化,可用 `DISCUSS_SERVICE_HOME` 改变。旧版本的 `%LOCALAPPDATA%/ai-codiscuss/service`(其他系统 `~/.local/state/ai-codiscuss/service`)在新目录不存在、且旧目录的讨论服务与本机网站都已停止时,由下一次命令整体移入新目录,并把 `rooms.json`、`launches/` 等 JSON 及已登记外部房间配置中指向旧目录的绝对路径改写为新路径,运行目录的草稿随之改名;旧服务仍在运行,或命令在会重定向 AppData 的 MSIX 应用内执行时,继续使用旧目录(须从普通终端完成迁移),执行 `codiscuss local stop`(独立服务另需 `service stop`)后再运行命令即可迁移。各房间的游标、收件箱与会话绑定仍在各自数据目录。
|
|
364
364
|
|
|
365
|
+
`service.log` 除房间状态变化外,还按房间记录全自动讨论的派发(事件、参与者、角色)、每次投递失败(次数、是否确认未送出)、执行失败原因和因运行代次变化被撤销的过期事件,用于排查“重启后原安排又回到暂停”。
|
|
366
|
+
|
|
365
367
|
## Antigravity Sidecar
|
|
366
368
|
|
|
367
369
|
```sh
|
package/docs/workflow.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- **自由协作**:你或 AI 主持人点名一位或多位成员,各自在原会话处理请求;没有讨论发言权、安排和轮次。每位成员单独选择本机唤醒、手动接入或网页代发,见下方 [自由协作房间](#自由协作房间)。
|
|
9
9
|
- **手动接入**:自由协作成员的一种接入方式。本地成员持自己的凭据文件自行读写,可由人工或软件原生定时触发;网页成员只能阅读房间,回答需转交代发;网页 AI 从其服务器读取阅读链接,本机网站对它不可达,此时由用户粘贴材料。只有这两种成员时建房无需本机接入服务。复制参与指令或下载凭据不代表已经送达、接入或唤醒。
|
|
10
10
|
|
|
11
|
-
讨论运行中可在进度看板邀请专家(经本机服务配置后加入;Codex CLI / App、Claude 可填写已有会话 ID
|
|
11
|
+
讨论运行中可在进度看板邀请专家(经本机服务配置后加入;Codex CLI / App、Claude 可填写已有会话 ID,续接这个带有自己上下文的原会话,标注为借用会话),或从成员菜单让专家暂离、请回或移除。暂离会取消它当前与排队中的安排,保留位置与会话,不计入之后的轮次;请回换发新凭证、续接原会话。名单变化不暂停讨论,排队中的安排作废,主持人被唤醒重新安排;主持人本身不能暂离或移除,更换主持人仍会暂停;正在发言(有进行中安排)的专家须先暂停讨论才能暂离或移除。暂停后可对本轮已发言的专家选择“作废本轮发言”:彻底删除其最近一条观点,该专家重新计为本轮未发言(不新增轮次),恢复后由主持人重新安排。故障只暂停并保留原因,不静默换软件、身份或创建第二个会话。
|
|
12
12
|
|
|
13
13
|
## 自由协作房间
|
|
14
14
|
|