ai_co_discuss 0.2.13 → 0.2.15
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 +3 -2
- package/.agents/skills/discuss-participant/SKILL.md +1 -1
- package/README.md +13 -9
- package/backend/free_room.py +64 -0
- package/backend/identity.py +31 -31
- package/backend/runtime.py +364 -364
- package/backend/schema.sql +599 -580
- package/backend/server.py +1782 -1760
- package/docs/architecture.md +8 -4
- package/docs/cli.md +2 -0
- package/docs/runner.md +37 -4
- package/docs/workflow.md +148 -148
- package/package.json +2 -2
- package/runner/api_participant.mjs +186 -0
- package/runner/discuss.py +946 -946
- package/runner/discussion_adapters.mjs +6 -0
- package/runner/discussion_api.mjs +146 -0
- package/runner/discussion_launch.mjs +728 -664
- package/runner/discussion_runner.mjs +36 -7
- package/runner/discussion_service.mjs +395 -394
- package/runner/free_runner.mjs +6 -2
- package/web/app.js +2913 -2859
- package/web/backup.js +1 -1
- package/web/index.html +1 -1
- package/web/markdown.js +1 -1
- package/web/modern.css +1 -1
- package/web/modern.js +7362 -5077
package/docs/architecture.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 设计边界
|
|
4
4
|
|
|
5
|
-
AI CoDiscuss
|
|
5
|
+
AI CoDiscuss 分开保存讨论事实、执行单次读写和组织讨论决策。软件参与者保留自身会话、工具和账号能力;用户也可明确配置 API 参与者,由本机 runner 调用模型并提供房间工具。网站承担共享上下文与协作约束,不接收模型密钥或直接发起模型请求;软件故障不会自动改用 API。
|
|
6
6
|
|
|
7
7
|
```mermaid
|
|
8
8
|
flowchart TB
|
|
@@ -31,6 +31,8 @@ Python 与 Cloudflare 是两种部署实现,运行时选其一,不是请求
|
|
|
31
31
|
| `runner/codiscuss.mjs` | 统一 `codiscuss` 命令与原样参数 | 无子命令时启动本机服务,`service` 管理进程;网站命令转交 Python 客户端,保留 stdin、相对路径与退出码 |
|
|
32
32
|
| `runner/discussion_launch.mjs` | 本机默认软件配置、单场启动配置、对话 / 网页入口 | 校验后建房、保存私有配置、启用运行并登记接入服务;对话入口将首个主持任务交回当前会话;暂停后可凭原控制凭据和版本修正本场软件路径或切换 Codex App / CLI,保留原会话绑定,不自动重启 |
|
|
33
33
|
| `runner/discussion_models.mjs` | 本机 CLI 模型目录 | 只执行 Codex 模型列表、Claude 初始化或 agy models,返回模型与档位,不发送提示词;查询后关闭临时进程 |
|
|
34
|
+
| `runner/discussion_api.mjs` | 供应商默认值、用户 Base URL、请求协议、真实模型 ID、私有密钥引用 | 校验 URL 和密钥绑定;读取模型列表;转换 Responses / Chat Completions / Anthropic / Gemini 请求与工具历史,仅使用 Node 内置模块 |
|
|
35
|
+
| `runner/api_participant.mjs` | 一次有效执行、参与者身份及 API 配置 | 提供限定本房间和职责的工具,保存原文或主持安排;取消时中止请求,不向模型传递执行令牌、API Key 或文件工具 |
|
|
34
36
|
| `runner/discussion_setup.mjs` / `discussion_skills.mjs` / `discussion_tui.mjs` | npm 包、已有 Python / CLI、选定软件 | 持久安装统一命令,合并本机软件配置,复制完整技能并保留本地修改;`discussion_tui.mjs` 只负责安装过程的终端呈现;不创建讨论 |
|
|
35
37
|
| `runner/discussion_local.mjs` | 用户服务目录、Python 和端口配置 | 后台网站及包外 SQLite,复用讨论服务、检查就绪、仅停止拥有的进程 |
|
|
36
38
|
| `runner/discuss.py` | 命令、站点、房间、声明身份、UTF-8 文件 | 网站客户端实现;单次 HTTP 请求、稳定 JSON / 文本、退出码,帮助和预览可离线,可直接用 Python 执行 |
|
|
@@ -148,7 +150,9 @@ Python 在一个只读事务快照中查询;D1 使用同一个 batch 事务读
|
|
|
148
150
|
|
|
149
151
|
### 主题与交互边界
|
|
150
152
|
|
|
151
|
-
新建表单独立选择房间用法(头脑风暴/自由协作)与接入方式(程序唤醒/手动),共用内联角色库。接入方式以分段切换放在参与区标题旁;每次添加生成独立实例,已加入成员以 `ExpertCard.vue` 渲染为翻面卡片:正面是身份与只读配置(状态、软件、模型、强度、项目权限),背面是设置,项目只读 /
|
|
153
|
+
新建表单独立选择房间用法(头脑风暴/自由协作)与接入方式(程序唤醒/手动),共用内联角色库。接入方式以分段切换放在参与区标题旁;每次添加生成独立实例,已加入成员以 `ExpertCard.vue` 渲染为翻面卡片:正面是身份与只读配置(状态、软件、模型、强度、项目权限),背面是设置,项目只读 / 可写按专家分别设置,App 与手动会话显示“由软件设置”,API 与网页专家显示“不访问”,缺少的软件路径在背面直接填写;卡片上的皇冠指定主持人,移出按钮同步修复主持人选择,角色库为卡片下方的“添加”标签行。自由协作默认用户主持(“我来主持”),可改由一位本地 AI 主持。支持本地参与的卡片翻面设置参与能力和软件入口,纯网页角色不翻面。自动 CLI 从本机软件目录下拉选择模型,不要求手填 ID;模型与强度同层显示,恢复默认只清除当前实例覆盖。App、网页和手动会话在原软件内设置。`EffortSlider.vue` 按所选模型的实际档位显示,首档为空值的 CLI 默认,显示标签与提交值分离(Extra High 对应 xhigh);标题处的档位名随拖动实时预览、松手才提交,悬停、拖动与键盘聚焦分别有光晕反馈,减少动态效果时不做过渡;agy 的强度随模型,不另显示滑杆。目录不可用时显示原因并保留软件默认,不虚构列表。
|
|
154
|
+
|
|
155
|
+
项目权限选择仅对 CLI 入口开放;API 与网页专家不访问项目文件,界面显示“不访问”。创建卡片、接入设置、经典主题和自由房间邀请沿用同一 CLI 入口判断,API 不继承本场可写配置,执行器强制归一为只读。App 的实际文件权限在原软件中配置。
|
|
152
156
|
|
|
153
157
|
正反面占用同一网格单元,避免翻转引起布局跳动。角度由现有 Motion 弹簧驱动:质量 1、频率 2.615 Hz、阻尼比 0.96(刚度 270.032、阻尼 31.551);目标在 0° / 180° 之间切换,中途反向保留速度,无固定时长。隐藏面设为 inert 并退出辅助技术读取,转过 90° 后移交焦点;Escape 返回,减少动态效果时直接到位。滑块采用单位质量、4.5 Hz 临界阻尼弹簧,拖动由 6 Hz 手部弹簧牵引、8 Hz 端点力限制;松手依据真实位置与速度的投影选择档位,点击直接选档,方向键和 Home / End 覆盖全部档位,取消拖动恢复原选项。模型与强度仅在创建前配置,讨论进度中保持只读。
|
|
154
158
|
|
|
@@ -196,7 +200,7 @@ Python 通过进程内条件变量唤醒订阅者,不占用数据库连接,
|
|
|
196
200
|
|
|
197
201
|
`tests/test_server.py` 与 `tests/test_discuss.py` 验证临时 SQLite、真实 HTTP 和 CLI 子进程;可显式指向隔离的本地 Worker 复用行为测试。Node 测试覆盖 Markdown、界面状态和 Pages 路由。具体命令见 [贡献指南](../.github/CONTRIBUTING.md)。
|
|
198
202
|
|
|
199
|
-
|
|
203
|
+
未提供用户登录、讨论并行发言队列或跨站数据同步。自动执行保护不替代账号认证。Skill 行为、浏览器实际送达、软件原生任务启停与 API 账号的真实可用性必须通过实际环境验证;测试替身成功不能替代这些外部结果。
|
|
200
204
|
|
|
201
205
|
## 自动运行协议
|
|
202
206
|
|
|
@@ -234,7 +238,7 @@ running 状态即使只有 pending 事件,也必须先暂停才能重新启动
|
|
|
234
238
|
- **改动记录**:接入程序在执行前后对成员 cwd 做 Git 工作区快照(状态与内容哈希),执行结束且进程退出后用 `report {changes}` 记录一次。房间视图的 `free.conflicts` 列出不同成员在同一 cwd、时段重叠的执行均观察到变化的文件,只作“可能冲突”提示;非 Git 目录不记录。快照也会包含其他进程在同一目录的写入,不能确定修改者;分工修改不同文件仍可能出现提示,不代表已发生覆盖。
|
|
235
239
|
- **回答**:接入程序投递的成员回答须带 `execution_id` 并使用成员凭证;消息保存、执行完成、请求完成和成员已读游标在同一事务中写入。执行结束、被打断或过期后的回答返回 409;缺少执行编号返回 400,不能改作普通发言。消息类型为 `chat`,不计入讨论轮次。
|
|
236
240
|
- **打断**:`POST members/ID/interrupt`(控制凭据)作废该成员的进行中执行及所有未投递请求,不会自动重新开始;成员的已读游标不前移,下一次请求从同一位置读起。执行失败只影响该成员的请求,房间不暂停。
|
|
237
|
-
-
|
|
241
|
+
- **讨论成员变更**:房主修改讨论名单或读写能力时,为新增或改变能力的成员提供新凭证,未变成员保留原凭证;删去的成员立即停用。成员主持不能自行扩大名单或更改主持职责。运行中名单只能经 `POST members`(邀请,接入方式须与推进方式一致)与 `POST members/ID {action: away|active|remove}` 变更,“编辑议题”改名单返回 400。暂离从 `experts` 中移出、成员行保持 `away`,同事务取消它进行中与排队的安排;请回须新凭证;主持人不能暂离或移除。`experts` 变化不再暂停运行:触发器 `runtime_experts_changed` 在无进行中安排和主持执行时为主持人生成 `members:` 事件,排队安排照常作废;只有更换主持人才暂停并换代。本机接入程序接受只新增参与者的配置变化,已绑定会话的条目仍须保持不变。
|
|
238
242
|
- **范围**:成员名称是 AI 实例名(见下文“参与者身份”),一个房间最多 12 位 AI。早期创建的自由房间表在 Python 启动时补齐新列。Cloudflare Worker 实现同一协议:成员与执行状态的校验放在同一 D1 批次的断言中,校验后状态变化则整批回滚。备份只导出成员名称、状态与请求,不导出凭据哈希。
|
|
239
243
|
|
|
240
244
|
## 参与者身份
|
package/docs/cli.md
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
`codiscuss launch models --file FILE` 输入 `adapter` 和可选的完整 `executable`,读取对应 CLI 的模型目录与支持的档位,不发送提示词。详情与失败边界见 [本机模型目录](runner.md#本机模型目录)。
|
|
16
16
|
|
|
17
|
+
API 入口使用 `adapter: "api"`,其 Base URL、请求协议、Key 引用和模型 ID 字段见 [API 接入](runner.md#api-接入)。`codiscuss launch api-key --file FILE` 接收 `{base_url, api_key}`,将密钥保存到本机私有目录并仅返回引用;`launch models` 接收 API profile 读取服务商模型目录。API 发言的 `source` 为 `api`,普通网站 CLI 的 `message post` 仍标记为 `cli`;两者使用相同的成员或执行授权。
|
|
18
|
+
|
|
17
19
|
## 连接与发现
|
|
18
20
|
|
|
19
21
|
```sh
|
package/docs/runner.md
CHANGED
|
@@ -1,6 +1,37 @@
|
|
|
1
1
|
# 自动接入程序
|
|
2
2
|
|
|
3
|
-
`runner/` 是本仓库自带的全自动讨论接入程序,只依赖 Node.js 24 内置模块。`discussion_runner.mjs` 输入显式房间配置,增量读取 CoDiscuss 事件,在独立 SQLite 保存游标、收件箱与真实会话绑定;`discussion_adapters.mjs`
|
|
3
|
+
`runner/` 是本仓库自带的全自动讨论接入程序,只依赖 Node.js 24 内置模块。`discussion_runner.mjs` 输入显式房间配置,增量读取 CoDiscuss 事件,在独立 SQLite 保存游标、收件箱与真实会话绑定;`discussion_adapters.mjs` 分派软件和 API 入口;`discussion_sidecar.mjs` 由 Antigravity App 管理;`codex_app_client.mjs` 连接运行中 Codex 桌面应用的 app-tools 管道。网站业务保存事件,显式开启的本机桥接可把启动请求交给 Node 接入服务;讨论决策与发言由实际 AI 负责;软件入口交付原会话,API 入口使用用户明确配置的模型服务和房间工具。
|
|
4
|
+
|
|
5
|
+
## API 接入
|
|
6
|
+
|
|
7
|
+
“程序唤醒”支持 Codex(OpenAI)、Claude、Gemini、DeepSeek、Qwen、Grok 的 API 专家和主持人,也支持与已有 CLI / App 参与者混用。供应商列表固定显示,不依赖软件安装检测;API 主持人从网页启动。自由协作房间使用同一 API 适配器,但回答绑定成员执行,不使用讨论轮次。
|
|
8
|
+
|
|
9
|
+
翻开专家卡片选择 API,核对 Base URL 和请求协议,在“密钥”行填写并点击“保存”,再在“模型”行选择推荐模型或输入完整模型 ID。模型行右侧的刷新按钮(读取模型列表)只请求服务商的 `/models`,不生成回答;下拉展示完整返回列表,不按当前填入的模型名过滤,展示名与调用 ID 分开保存(例如 DeepSeek-V4.1-Flash 的 ID 为 `deepseek-flash`)。失败时仍可手输 ID。下面是 **2026-10-21** 核对的官方默认值,实际可用模型与额度由账号决定:
|
|
10
|
+
|
|
11
|
+
| 房间身份 / 供应商 | 默认 Base URL | 请求协议 | 推荐模型 ID |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| Codex / OpenAI | `https://api.openai.com/v1` | Responses | `gpt-6.1-sol`、`gpt-6-astra`、`gpt-6-luna` |
|
|
14
|
+
| Claude / Anthropic | `https://api.anthropic.com/v1` | Messages | `claude-sonnet-5-5`、`claude-opus-5-5`、`claude-haiku-5-5`、`claude-fable-5-1` |
|
|
15
|
+
| Gemini / Google | `https://generativelanguage.googleapis.com/v1beta` | generateContent | `gemini-4-argon`、`gemini-3.8-flash` |
|
|
16
|
+
| DeepSeek | `https://api.deepseek.com/v1` | Chat Completions | `deepseek-flash`、`deepseek-v4-pro` |
|
|
17
|
+
| Qwen / 百炼(北京) | `https://dashscope.aliyuncs.com/compatible-mode/v1` | Chat Completions | `qwen3.8-flash`、`qwen3.7-plus`、`qwen3.8-max` |
|
|
18
|
+
| Grok / xAI | `https://api.x.ai/v1` | Responses | `grok-4.7` |
|
|
19
|
+
|
|
20
|
+
来源:[OpenAI 模型](https://developers.openai.com/api/docs/models)、[Claude 模型](https://platform.claude.com/docs/en/models/overview)、[Gemini 模型](https://ai.google.dev/gemini-api/docs/models)、[DeepSeek API](https://api-docs.deepseek.com/zh-cn/)、[百炼模型](https://help.aliyun.com/zh/model-studio/models)、[Grok 模型](https://docs.x.ai/developers/models/grok-4.7)。百炼不同地域的 Key 与地址须匹配。
|
|
21
|
+
|
|
22
|
+
自定义地址保留完整路径前缀,填写到协议根路径,例如 [OpenRouter](https://openrouter.ai/docs/api_reference/overview) 的 `https://openrouter.ai/api/v1`,选择 Chat Completions 并填写其返回的 `provider/model` ID。程序分别追加 `/responses`、`/chat/completions`、`/messages` 或 `/models/{model}:generateContent`;不改写模型 ID 中的点号、横线或斜线,不按房间身份强制套用官方协议或思考参数。实现参考 [Cherry Studio 的供应商解析说明(固定版本)](https://github.com/CherryHQ/cherry-studio/blob/843a297fe73e9f527c8eb8291c0e1335f2279c04/docs/references/ai/provider-resolution.md) 对供应商、协议、Base URL 与 API 模型 ID 的拆分方式;协议转换独立实现,不引入其代码或 SDK。
|
|
23
|
+
|
|
24
|
+
`POST /api/local/api-key`(CLI 为 `codiscuss launch api-key --file FILE`)接收 `{base_url, api_key}`,仅向本机服务目录的 `api-keys/UUID.json` 写入,返回 `{api_key_ref}`。文件依赖本机用户目录权限保护,不作加密保险库;不要共享此目录。Base URL 改动后必须重新填写该地址对应的 Key。浏览器密码输入仅在组件内存保留至保存成功,不进入控制器快照、localStorage、启动待办、房间数据或上游错误日志。
|
|
25
|
+
|
|
26
|
+
启动配置中的 API profile 为 `{adapter:"api", base_url, api_protocol, api_key_ref, model}`;`api_protocol` 为 `responses/chat/anthropic/gemini`。启动器在私有房间配置保存 `api_home`,供服务解析密钥引用。API 不需要 executable、项目目录、会话 ID 或技能安装;API 会话编号是本机参与者绑定,不是厂商的聊天 ID。模型列表入口仍为 `launch models` / `/api/local/models`,传入此 profile,只返回模型元数据。
|
|
27
|
+
|
|
28
|
+
API 参与者不安装技能,也不靠手写的另一套规则:每次执行时,程序从包内读取与本地软件相同的 `discuss-participant`(讨论主持人另加 `discuss-host`)正文作为系统提示词,前面附一段 API 环境说明,列出 CLI 命令对应的房间工具,并说明定时任务、凭据文件、执行认领等段落不适用。技能更新后下一次执行即生效;主持人一次约多出 1 万字符输入。在线网页 AI 同样不加载技能,阅读页 `/r/房间` 末尾附有精简的在线成员守则;本地 AI 的阅读页只指引其调用技能与 `codiscuss room protocol`。
|
|
29
|
+
|
|
30
|
+
每个有效任务重新读取房间与当前安排,按需读取原文。独立观点阶段不会把他人观点或主持总结送给专家;专家仅可提交本次安排,主持人可写主持说明、整理状态、调整阶段、安排整轮或收束。API 与网页专家的项目权限固定只读,只有 CLI 专家可选择只读或写入;API 配置即使残留 `project_access="write"` 或本场设置为可写,执行器也强制归一为 `read`。API 没有本机文件、浏览器、附件解析或任意 HTTP 工具,不继承 cwd 的读写权限;此权限不限制保存讨论发言及履行主持职责。模型看不到网站令牌和 API Key;房间 HTTP 请求由程序绑定身份与执行。
|
|
31
|
+
|
|
32
|
+
执行器在后台请求模型,主循环继续续租和处理暂停。单次模型请求超时 180 秒,每个执行最多 24 次模型请求;需显式输出上限的协议使用 8192 tokens。Responses 保留加密 reasoning items,Anthropic 保留签名块,Gemini 保留 thoughtSignature,Chat Completions 保留工具历史;这些推理内容不作为公开发言。未调用保存工具、请求失败或超限时,讨论暂停并保留错误,自由房间只结束该成员的失败执行。暂停或撤销会取消本机请求,服务端继续校验执行有效性;不把迟到回答改作普通发言。每次写入前保存原提交编号和正文,网络结果不明时停止,不换号自动重试。
|
|
33
|
+
|
|
34
|
+
共享协议为兼容旧房间,仍用 `experts[name]="cli"` 表示可自行提交;实际入口由本机 `adapter` 和成员记录区分。API 原文保存 `source="api"`,沿用原身份、职责、安排关联、耗时和备份规则。测试覆盖四种请求格式、六家身份、API 主持收束、自由回答及暂停取消,使用隔离网站和模拟 API;不代表六家真实账号均已验证。
|
|
4
35
|
|
|
5
36
|
## npm 安装与本机配置
|
|
6
37
|
|
|
@@ -95,7 +126,7 @@ Codex 切换必须已有实际会话;程序从原绑定读取编号,保留
|
|
|
95
126
|
|
|
96
127
|
新建表单切到全自动时,默认选入已配置路径的本地软件,并选择其中一位主持;没有配置则需明确选择和补齐。支持的软件列表不会全部自动参会,手动与自动模式各保留本次表单中的选择。只有自动模式显示单次 AI 执行上限,默认不限,留空或 0 表示不限,按需填写 1–60 分钟。“直接结束(不总结)”保留已有记录;需要主持总结时,在允许收尾的运行状态使用“请主持人收尾”。
|
|
97
128
|
|
|
98
|
-
网页启动由显式启用的 Python 回环服务执行;Cloudflare、普通 Python 公共部署不提供本机配置或进程操作。`--local-launch` 拒绝非 `127.0.0.1` 监听,本机页面继续使用同源接口;线上页面须先完成下节的站点授权,随后由浏览器直接请求本机服务。Node
|
|
129
|
+
网页启动由显式启用的 Python 回环服务执行;Cloudflare、普通 Python 公共部署不提供本机配置或进程操作。`--local-launch` 拒绝非 `127.0.0.1` 监听,本机页面继续使用同源接口;线上页面须先完成下节的站点授权,随后由浏览器直接请求本机服务。Node 启动器生成私有配置并调用接入服务,API 模型调用仅发生在已启动房间的有效执行中。启动器会启动或复用讨论服务;网站与服务仍是独立进程。
|
|
99
130
|
|
|
100
131
|
### 线上网页连接本机
|
|
101
132
|
|
|
@@ -228,9 +259,9 @@ Windows 的 `executable` 填原生 `.exe`,不填 npm 的 `.cmd` / `.ps1` 包
|
|
|
228
259
|
|
|
229
260
|
进度看板的参与者姓名下显示本场已登记的模型与思考强度,不使用新建草稿或本机默认配置代替。由本机桥接的只读 `room-models` 返回 `adapter/model/effort`,按当前站点与房间匹配;本机页面和已授权连接的线上页面均可读取,不要求暂停或浏览器持有房间控制凭据,不返回路径、令牌或会话编号。CLI 未显式指定时显示“默认模型 / 默认强度”,agy 显示“强度随模型”,App 和手动参与提示在原软件内设置;未连接本机、未登记或旧版服务不支持时显示未获取。它展示启动配置,不能证明软件最终采用的默认值,也不提供讨论中改模型的入口。
|
|
230
261
|
|
|
231
|
-
两种新适配器都不需要 `source_thread_id` 或 `ipc_directory`。实际 ID 在输出流到达时写入本机绑定和本次执行凭据,随后由接入程序在会话启动时直接 `execution enter`(`codex_cli`、`claude` 与 `antigravity_cli`,任务内容内联进提示词,省去模型读文件和进入的往返;其余适配器仍由 AI 自行进入),AI 通过讨论 CLI 保存业务结果;Codex CLI 输出 `turn.completed` 1.5
|
|
262
|
+
两种新适配器都不需要 `source_thread_id` 或 `ipc_directory`。实际 ID 在输出流到达时写入本机绑定和本次执行凭据,随后由接入程序在会话启动时直接 `execution enter`(`codex_cli`、`claude` 与 `antigravity_cli`,任务内容内联进提示词,省去模型读文件和进入的往返;其余适配器仍由 AI 自行进入),AI 通过讨论 CLI 保存业务结果;Codex CLI 输出 `turn.completed` 1.5 秒后若进程未退出即终止,避免同会话的下一次投递等待收尾;每个 CLI 进程最长运行 2 小时(环境变量 `CODISCUSS_CLI_MAX_MS` 以毫秒覆盖),超时即终止并按“未保存本次结果”暂停房间,避免进程挂起时租约被一直续期,房间设置的单次执行时限仍优先。设置环境变量 `CODISCUSS_TRACE=1` 启动接入程序时,每次执行才在任务目录写 `event-ID.trace.jsonl`(默认不写)(时间戳加阶段:`event_seen`、`blocked_by_running_process`、`reserve_*`、`permission_check_*`、`cli_spawned`、`enter_*`、Codex 的 `thread.started` / `turn.started` / 工具命令 / `turn.completed`、`kill_after_completed`、`cli_closed`),仅用于定位各阶段耗时,不含凭据;程序不把终端回答直接代发。Codex App / CLI 可通过上述暂停后配置修正保留原绑定切换;其他适配器或项目、会话变更仍须使用独立 `data_directory` 明确重新接入。此路径不承诺 CLI 会话自动出现在桌面 App 的项目列表。
|
|
232
263
|
|
|
233
|
-
trace
|
|
264
|
+
开启 trace 后,`event_seen.event_created_at` 记录服务端事件创建时间,`t` 仍为本机记录该阶段的实际时间,两者分别用于核对事件创建后的等待和本机阶段耗时。
|
|
234
265
|
|
|
235
266
|
`codex_cli` 的 `exec resume` 需要取得该会话的写入权;已有聊天仍被 Codex App 或另一进程持有时,会报 `thread-store conflict / already has an active writer`,App 显示空闲也不代表已释放。重复重试或仅关闭窗口不能保证解除占用。需要沿用 App 原聊天时,暂停后在本场接入设置中切到 `codex`,由 `codex queue` 向原聊天交付;需要独立 CLI 时,使用未被占用的 CLI 会话或新建讨论时省略会话 ID。接入程序保留这一根因,不让后续模型列表刷新超时覆盖它,也不自动换会话或切换适配器。
|
|
236
267
|
|
|
@@ -281,6 +312,8 @@ Codex 要求 CLI 0.163.0 或更新版本,使用 permission profiles 和本地
|
|
|
281
312
|
|
|
282
313
|
`codiscuss launch room-member` 在运行中的自由房间邀请(`add`)或请回(`rejoin`)自动成员:先用房间控制凭据核对房主身份,在登记配置中写入成员的软件配置与新凭证,再通知网站;网页通过 `member_token` 提供其已保存的新凭证,结果不明时沿用同一凭证重试。网页邀请默认项目只读,显式选择可写后通过该成员的 `participants[name].project_access` 传递,不改变其他成员;重试保留最初选择。该命令也可为手动成员生成配置旁的 `manual-成员名.access.json`,回执只含文件路径;网页手动邀请和请回则直接在网站完成。常驻服务读取更新后的配置时逐个成员核对:新成员直接采用,已绑定会话的成员若项目、cwd 或接入方式变化,只阻止该成员并报告原因,不影响其他成员。
|
|
283
314
|
|
|
315
|
+
运行中的讨论同样可用 `room-member` 邀请或请回专家,但只接受由本机唤醒的成员(不接受 `access: manual`)。`participants[name].session_id` 指定已有会话时,成员标记为 `borrowed`,首次投递即续接该会话;网页仅对 Codex CLI / App 与 Claude 提供此项,agy 照旧拒绝。邀请前在本机核对会话确实存在(Codex 查 `CODEX_HOME/sessions`,Claude 查 `CLAUDE_CONFIG_DIR/projects`),填错时当场报错,不会让讨论在轮到它时暂停;Claude 会话只能在原目录续接,未指定项目时沿用原目录,项目目录不同则拒绝。Codex 会话若正被 App 持有,CLI 续接报 active writer,进度看板在暂停原因下提供“切换到 Codex App”,保存采用后可在弹窗内重启。讨论配置只新增参与者时常驻服务直接采用,讨论不暂停;已有参与者的项目、cwd 或身份变化仍须暂停后重新接入。
|
|
316
|
+
|
|
284
317
|
每次检查读取 `inbox`:成员没有进行中的执行且有待投递消息时,先持久化本地 `client_id` 再领取执行,然后用原适配器续接该成员的绑定会话;任务文件列出执行编号、待处理消息和已读起点,凭据文件只含成员凭证。进程退出而网站未收到回答、软件报错或超过单次执行时限时报告失败;只有确认未送达才退回队列重试,最多 3 次。领取后、调用前中断的投递不自动重发。主持人的任务文件带 `role: "host"` 和每条请求的 `request_purposes`(`ask` / `route` / `handoff`),说明里写明如何用 `--to` 派活与何时结束。网站上执行被打断、成员离开或被移除后,只停止该成员的进程;不同成员各自投递,可以并行。成员配置了 cwd 且位于 Git 工作区时,执行前后各做一次快照,执行结束且进程退出后报告改动的文件,供网站提示可能冲突;服务重启会丢失尚未报告的快照。只能在网页创建自由房间,不支持对话入口。
|
|
285
318
|
|
|
286
319
|
普通成员的回应建议不会出现在待投递队列。房主转换后沿用同一请求和执行路径:任务文件的 `request_messages` 指向原成员回答,`chain_id` 属于这次用户确认;重复转换不会再次投递,手动与在线目标仍不进入自动投递。
|
package/docs/workflow.md
CHANGED
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
# 讨论工作流
|
|
2
|
-
|
|
3
|
-
网站保存共享记录,主持人负责判断与安排,各 AI
|
|
4
|
-
|
|
5
|
-
## 选择推进方式
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
- **自由协作**:你或 AI
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## 自由协作房间
|
|
14
|
-
|
|
15
|
-
成员回答下的执行报告列出请求编号、耗时、终态与工作区观察文件;失败或取消的报告保留在原请求下。报告展示最近 100 次执行;“未提供自动改动检测”表示非 Git 目录或未上报,不能据此判断没有文件变化。
|
|
16
|
-
|
|
17
|
-
自由协作房间从同一角色库选择一位或多位成员,默认由用户主持,也可在创建时指定一位本地 AI 主持人。只有一位成员时,每条消息都交给它;有多位时,在输入框上方点选成员,或在正文中 `@成员`(代码和引用中的 @ 不算),被点名的成员各自处理;未点名且没有 AI 主持人时只作留言。输入 `@` 后,输入框上方弹出在场成员菜单,继续输入可筛选;用方向键与 Enter / Tab 或点击补全,Esc 关闭。选择只修改草稿,Ctrl / Cmd + Enter 仍发送消息。自动成员空闲时,服务把它名下所有未处理的消息打包成一次执行交给原会话;执行期间再发的消息排队,下一次一起投递。手动成员自行读取自己的请求,在线成员由用户转交。成员按时间顺序处理,后面的消息可以修正前面的。
|
|
18
|
-
|
|
19
|
-
运行中可在右侧成员栏邀请 AI
|
|
20
|
-
|
|
21
|
-
可以把一位本机成员设为主持人。之后没有点名的消息交给主持人分配;主持人在回答中点名成员派活,被点名的成员都结束后主持人再被唤醒一次,继续汇总或安排下一步。派出的成员全部失败时不再唤醒主持人;同一条消息引出的 AI 请求最多 8 次,用完即停,成员栏会提示,发一条新消息即重新开始。
|
|
22
|
-
|
|
23
|
-
普通成员回答中的 `@成员` 或结构化 `to` 只保存为“建议请 X 回应”,不自动唤醒;正文里的代码与引用不算建议。房主可在原回答下点击“转为请求”,网站记录一条用户确认,建立新任务链,并把请求关联到原回答。重复点击或重试返回同一条请求,已完成、失败或取消的请求也不会重新派发;目标成员离开后不能转换。自动、手动和在线成员沿用各自的接入方式。
|
|
24
|
-
|
|
25
|
-
在线 AI
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
多位成员共享同一个工作目录时不加锁,由你划分各自负责的文件。成员栏会提示“可能的改动冲突”:两位成员在重叠时段都改动了同一文件时列出文件名。提示依据执行前后的 Git 工作区对比,无法确定修改者,未出现提示也不代表没有覆盖;非 Git 目录不提供提示。
|
|
30
|
-
|
|
31
|
-
页面在每条消息上标出请求状态(待投递、处理中、已回复、已停止、失败)。本机服务离线时请求停在“待投递”,不显示为已唤醒。点「停止」会作废当前执行和尚未投递的消息,迟到的回答会被拒绝;之后重新发消息即可。一次执行失败只影响这次请求,房间继续可用。
|
|
32
|
-
|
|
33
|
-
两种房间的用户写入均须房间控制凭据,未持有凭据的浏览器只能阅读。手动成员的创建、邀请和请回直接在网站完成,并交付各自私有凭据文件;在线成员只交付阅读指令。自动成员需要本机服务;线上网站通过 `codiscuss local connect` 连接后可启动本机 AI,AI 仍在你的电脑上运行。
|
|
34
|
-
|
|
35
|
-
## 讨论上限
|
|
36
|
-
|
|
37
|
-
准备或暂停阶段可配置以下参数;活动讨论需先暂停再修改,保存参数不重置计时或历史轮次。
|
|
38
|
-
|
|
39
|
-
| 参数 | 范围与作用 |
|
|
40
|
-
| --- | --- |
|
|
41
|
-
| 轮次上限 | 0–100;0 或留空不预设;全部配置专家各完成一次观点才计一轮 |
|
|
42
|
-
| 讨论总时长 | 0–1440 分钟;0 或留空不预设;从首次进入讨论阶段或创建安排开始,只统计进行中时间:暂停(含执行失败后)、准备与收束期间不计入用时,也不消耗总时长 |
|
|
43
|
-
| 单次 AI 执行 | 默认不限,0 表示不限,或设置 1–60 分钟;仅自动模式,从实际进入执行起算,超时暂停,不自动重试 |
|
|
44
|
-
| 达到上限后 | 暂停保留现场,或交给实际主持人总结;不自动宣布达成共识 |
|
|
45
|
-
| 收束预留 | 1–60 分钟,仅选择总结时生效;须小于非零总时长,并计入总时长 |
|
|
46
|
-
|
|
47
|
-
网页新建默认 3 轮、不限时长、单次执行不限时、到限暂停;收束预留默认 5 分钟。新建表单分别显示轮次和时长上限,点击数值才展开滚轮;鼠标滚轮逐格切换,停止滚动即停住,鼠标或手指在屏幕上拖动则保留松手惯性。选择即时生效,点击外部即可收起,无需确认。时长收起时显示小时及剩余分钟,展开后分为小时、分钟两列,按 1 小时、1 分钟选择;轻点各列中间数字可直接输入,启用时长上限后范围为 1–1440 分钟,24 小时时分钟固定为 0。拖动松手后先按阻尼减速,再按预计停止位置吸附;系统“减少动画”下仍保留拖动惯性,只去掉数字的三维翻转。两项各自提供“不限”,关闭“不限”恢复此前数值,首次启用时长上限为 1 小时,互不改动;下方实时说明哪个上限先到便触发所选动作。未传参数的 CLI 建房默认轮次、总时长与单次执行不限;旧房间保留已有设置。全自动支持不限总时长:按轮次上限或手动停止结束,重启不自动添加时长上限;主动设置的单次 AI 执行超时、租约和收束预留仍有效。CLI 可额外指定未来 24 小时内的运行截止,但不能延长话题已设的截止。
|
|
48
|
-
|
|
49
|
-
“主持”及“接入”显示配置、已用/剩余时间、已完成轮次和到限状态。新专家安排及观点由服务端拒绝越界,原提交的幂等重试和用户留言保留。自动程序定期调用到限处理;手动主持每次原生检查时执行 `room limits ROOM --check --as 本人`,也可由用户点击界面中的检查按钮。仅打开页面不触发写入或启动 AI。
|
|
50
|
-
|
|
51
|
-
选择总结时,在轮次到限或进入预留时间后取消未完成安排、撤销旧自动执行并交回主持人;主持人只使用已有材料收束。提前达到轮次上限时,收束最多使用预留分钟数,且不越过总截止。总截止到达而总结未完成则暂停;页面到限提示不代表外部手动软件已停止。无总时长配置时,轮次到限后的总结仍受预留时长约束。
|
|
52
|
-
|
|
53
|
-
收束期间暂停再继续、或只修改单次执行时限,均不延长原截止;到期后需明确调整讨论预算。已收束的页面展示结束状态,不再显示活动倒计时或后来才触发的到限警告。
|
|
54
|
-
|
|
55
|
-
## 角色与参与方式
|
|
56
|
-
|
|
57
|
-
| 角色 | 责任 |
|
|
58
|
-
| --- | --- |
|
|
59
|
-
| 用户 | 提出目标、约束、决策偏好;可留言、参与或担任主持人 |
|
|
60
|
-
| 主持人 | 明确问题、接入专家、决定下一安排、维护主持简报与状态、保留分歧并收束 |
|
|
61
|
-
| 本地专家(cli) | 自主读取材料、领取自己的发言权、提交回答;管理自己创建的原生定时任务 |
|
|
62
|
-
| 在线专家(online) | 从可访问链接按需阅读,在原聊天形成回答;主持人或用户保留真实原文后代发 |
|
|
63
|
-
|
|
64
|
-
主持人可以兼任专家。自己的观点用 `opinion` 并关联自己的正式安排,主持说明和共识总结用 `moderation`;不能把个人意见直接写成共识。参与者身份为用户与 AI 实例:平台(Codex、Claude、Gemini、DeepSeek、Qwen)相当于类型,房间里的参与者是它的实例,名称为平台名或“平台名-后缀”(如 `Claude-评审`,后缀 1–16 个字母、数字、下划线或汉字)。同一平台的多个实例各有会话、模型和思考强度,名称在同房间唯一;在角色卡片库中再次选择同一平台即新增一个实例。本机默认软件配置按平台保存,实例的模型与强度只用于本场。
|
|
65
|
-
|
|
66
|
-
## 从议题到结论
|
|
67
|
-
|
|
68
|
-
1. **准备**:确定目标、背景、约束、参与者和停止边界。区别讨论截止、必要回答等待边界与各端任务运行上限。主持人建房后回读资料,再交付接入文本。网页新建只填写话题名称与用户原文,目标、背景与边界由主持人首次接手时补全,已有内容不覆盖。
|
|
69
|
-
2. **独立初始观点**:必要专家先基于相同目标与材料提出自己的见解;提交前不读他人观点和主持结论。已受到影响应如实说明。串行安排不等于技术盲评。
|
|
70
|
-
3. **深入讨论**:阅读彼此观点,围绕影响选择的争点追加论证、修正判断或提出 @ 追问。主持人在每轮内按相关程度决定先后,每位专家各回应一次;不连续安排刚发言的专家,新一轮也不先安排上一轮最后发言者,仅在需要其本人澄清刚发表内容时例外。
|
|
71
|
-
4. **必要复核**:对拟定结论核对原意、条件和未决影响。解释某人的话受到质疑时,请原作者澄清;另一人赞同不能代替原作者确认。不要求所有议题都多做一轮复核。
|
|
72
|
-
5. **收束**:将共识总结作为独立主持消息留档,保留分歧、未确认事项及下一步。更新共享状态和阶段,核验本次任务停止;达到时限不等于问题已解决。
|
|
73
|
-
|
|
74
|
-
阶段值为 `preparing`、`initial`、`discussing`、`reviewing`、`paused`、`concluded`。讨论阶段由主持人结合目标决定;配置的到限处理可以暂停,收束完成仍需主持人确认。一轮指参与专家各完成一次完整观点,同轮补充只计一次;主持说明、用户留言和回执不推进轮次。
|
|
75
|
-
|
|
76
|
-
## 发言权与正式安排
|
|
77
|
-
|
|
78
|
-
每房间一份 `floor`,包括 `holder`、`next_speaker` 和 `revision`。同一时刻只能有一个未完成安排(整轮中排队的安排不计):
|
|
79
|
-
|
|
80
|
-
```mermaid
|
|
81
|
-
stateDiagram-v2
|
|
82
|
-
[*] --> 主持人持有: 建房
|
|
83
|
-
主持人持有 --> 等待专家领取: 创建安排,自动归还
|
|
84
|
-
等待专家领取 --> 专家持有: 按当前 revision 领取
|
|
85
|
-
专家持有 --> 等待主持人领取: 保存完整回答,自动归还
|
|
86
|
-
专家持有 --> 等待专家领取: 整轮仍有排队且无用户新操作,自动接力
|
|
87
|
-
等待主持人领取 --> 主持人持有: 领取
|
|
88
|
-
主持人持有 --> 等待主持人领取: 主持发言或取消安排
|
|
89
|
-
专家持有 --> 等待主持人领取: 主动放弃并归还
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
所有 AI 消息,包括主持说明、必要回执和最终总结,都要求实际作者持有发言权;专家观点还必须关联自己的有效安排。用户本人留言豁免,且不改变发言权。@ 和回复只是内容关联,不自动通知、创建安排或授予发言权。
|
|
93
|
-
|
|
94
|
-
操作前读取 `floor`。无人持有且下一位是自己时,以刚读取的版本领取并回读;别人持有时保留草稿等待。消息、创建/取消安排和自动归还在同一事务中保存,失败不视为已交接。同一人可以连续发言,但每条重新领取;专家补充需新的正式安排。
|
|
95
|
-
|
|
96
|
-
### 整轮安排与用户介入
|
|
97
|
-
|
|
98
|
-
主持人可以一次排好本轮顺序(`turn create --plan-file`):第一项立即生效,其余为 `queued`。专家保存回答后,网站在同一事务中把发言权交给下一位排队专家;末位答完才交回主持人。接力不发通知,需要逐个转交的在线专家不放进整轮。
|
|
99
|
-
|
|
100
|
-
用户留言或修改目标、背景、边界、焦点会记为待主持人处理(`held_since
|
|
101
|
-
|
|
102
|
-
本地专家自行领取与归还;在线专家由主持人以自身操作者身份、指定原专家代操作。主持人不能代领另一位本地专家的发言权。主动归还后未完成安排仍存在,主持人需取消或处理。正常推进不超时夺取;配置的到限处理会取消未完成安排并撤销旧自动执行,再交回主持人。
|
|
103
|
-
|
|
104
|
-
## 按需读取与表达
|
|
105
|
-
|
|
106
|
-
先读房间概要和当前安排,再按问题读取背景、共享状态或指定原文。独立阶段遵守阅读边界;深入阶段补读与问题相关的他人观点。增量读取以实际读过的编号为起点,每次最多 20 条,按 `next_after` 继续,不直接跳到房间 `latest_id`。
|
|
107
|
-
|
|
108
|
-
每次回答包含简述和完整正文。简述通常一两句,说明本次主张、变化或分歧;详细论据、适用条件、数字、验证和引用放在正文,不能用摘要代替原文。代发保留真实作者和完整引用关系,主持人另写的摘要注明实际摘要作者。
|
|
109
|
-
|
|
110
|
-
观点应直接回答当前问题,以证据支持判断;有依据时坚持,也可以说明理由后修正。分歧区分事实、假设、标准和偏好,分别查证、比较或交给决策者。外部引用、估计与实测分开,未核验数字不能因多人赞同变成事实。
|
|
111
|
-
|
|
112
|
-
## 通知与持续检查
|
|
113
|
-
|
|
114
|
-
`turn create` 保存安排;自动运行中同时保存待接入事件,但不直接操作软件。`turn prompt` 只生成转交文本,`turn mark-notified` 只记录已经发生的送达。复制按钮、工具调用发起和任务创建都不证明对方已收到或已运行。本地 CLI 专家可以自行发现 `pending` 安排,无需伪造通知状态。
|
|
115
|
-
|
|
116
|
-
在线专家由主持人操作时,发送前记录实际聊天、问题和安排。发送结果不明先检查正确聊天是否出现问题/回答,不换编号或重发绕过。完整回答生成后才原文留档;引用面板中的链接需随原文保存,补充附录注明由主持人提取。
|
|
117
|
-
|
|
118
|
-
手动接入后的持续讨论可使用各软件的原生定时功能。默认参考周期为主持人 30 秒、专家 60 秒;长调研可放宽到 3–5 分钟,工具不支持时选择最接近且更长的周期并报告实际值。每次必须有有限运行上限;定时提示保存静态约定和入口,动态进度每次从网站恢复。全自动事件模式不使用此定时流程。
|
|
119
|
-
|
|
120
|
-
主持人无新回答时仍需检查是否有尚未执行的下一安排;专家无自己的安排时安静结束本次检查。无变化不产生状态消息,不为每次检查重建任务。自己的任务到期只代表自身停止参与,不代表整场讨论结束。
|
|
121
|
-
|
|
122
|
-
## 状态保存与中断恢复
|
|
123
|
-
|
|
124
|
-
- `host_brief`:面向用户的主持简报,说明已有判断、争点和下一步,最多 1600 个 Unicode 字符。
|
|
125
|
-
- `state_text`:详细共享状态,保存依据、已处理编号、下一步及其执行情况,最多 4000 字符。
|
|
126
|
-
- `state_until`:主持人实际已读材料截止编号,不证明后续安排、通知或清理已经完成。
|
|
127
|
-
|
|
128
|
-
关键判断、安排或阶段发生变化时保存并回读;纯等待不重复写。执行下一动作前记录“拟做、未执行”,成功后保存真实结果。恢复时对照服务端:动作已发生只补记录,未发生才执行。状态保存失败先核对并恢复,不继续联系新专家。
|
|
129
|
-
|
|
130
|
-
房间、消息、安排创建使用稳定 `submission_id`。请求结果不明先精确查询,再决定是否沿用原编号与原文重试;查询失败不等于未写入。浏览器送达去重独立于网站提交去重,详见 [CLI 故障处理](cli.md#写入核对与错误处理)。
|
|
131
|
-
|
|
132
|
-
## 暂停与结束
|
|
133
|
-
|
|
134
|
-
用户叫停、房间暂停/收束或达到约定上限时,先停止新增安排和联系专家,停用并核验自己创建的任务,不等待发言权。正常完成或约定限时交付时,依次取消剩余安排、发表共识总结、保存状态并设为 `concluded`;每次受约束操作都按发言权规则执行。
|
|
135
|
-
|
|
136
|
-
明确暂停或主持任务到期而仍需讨论时设为 `paused`,保留原阶段、原因和下一步。发言权或写入故障阻碍收束时同样先暂停,保留未执行事项。退出前归还本人持有的发言权,结果不明则记录;不为等待归还延长定时任务。
|
|
137
|
-
|
|
138
|
-
各专家负责停止自己的任务,主持人不能替其他端宣称停止。恢复暂停话题须用户明确继续;迟到回答先保留,恢复后判断适用性。
|
|
139
|
-
|
|
140
|
-
**运行回执非必要不生成。** 正常启动、停止、阅读、等待、无变化轮询和已提交回答不再发 `receipt`。仅用户要求、影响协作的异常或交接确需补充确认时留档;仍需发言权。没有回执不能推断任务已停或仍运行,`latest_receipts` 也不是服务端验证的运行状态。
|
|
141
|
-
|
|
142
|
-
具体执行约束以仓库 [参与技能](../.agents/skills/discuss-participant/SKILL.md) 和 [主持技能](../.agents/skills/discuss-host/SKILL.md) 为准,站点字段与限制通过 `room protocol` 获取。
|
|
143
|
-
|
|
144
|
-
## 备份与讨论报告
|
|
145
|
-
|
|
146
|
-
用户可从网页“备份当前讨论”下载服务器已保存的完整房间快照与原文。备份不改变讨论阶段,也不代替任务停止核验。
|
|
147
|
-
|
|
148
|
-
需要将讨论整理为独立成果时,使用 [讨论归档技能](../.agents/skills/discuss-report/SKILL.md),明确来源范围和本地输出目录。报告按主题解释建议如何形成,保留异议、修订与原文链接;讨论建议和用户已采纳的决定分别记录。网页备份负责保存数据,报告负责综合分析,两者均不自动执行后续建议。
|
|
1
|
+
# 讨论工作流
|
|
2
|
+
|
|
3
|
+
网站保存共享记录,主持人负责判断与安排,各 AI 在自己的软件或用户配置的 API 中形成意见。软件参与者由 Skill 定义协作规则、CLI 执行单次读写;API 参与者由本机程序提供房间工具,保留相同的阶段、独立观点、原文、身份与执行边界。程序唤醒可混用两种入口,API 专家和主持人仅使用房间上下文。
|
|
4
|
+
|
|
5
|
+
## 选择推进方式
|
|
6
|
+
|
|
7
|
+
- **讨论(全自动)**:主持人与专家都由本机服务唤醒(CLI / App / API)。本机软件与权限配置完成后明确启动,可按轮次、总时长上限或手动停止结束。主持创建正式安排即结束本步;专家自行认领、回答,程序再续接原主持。自动任务不另建原生定时。项目及 cwd 可选,分别属于本机接入配置。手动接入和网页 AI 会打断自动推进,网页不再为讨论提供这两种方式;CLI 与技能中的手动讨论协议保留兼容。
|
|
8
|
+
- **自由协作**:你或 AI 主持人点名一位或多位成员,各自在原会话处理请求;没有讨论发言权、安排和轮次。每位成员单独选择本机唤醒、手动接入或网页代发,见下方 [自由协作房间](#自由协作房间)。
|
|
9
|
+
- **手动接入**:自由协作成员的一种接入方式。本地成员持自己的凭据文件自行读写,可由人工或软件原生定时触发;网页成员只能阅读房间,回答需转交代发;网页 AI 从其服务器读取阅读链接,本机网站对它不可达,此时由用户粘贴材料。只有这两种成员时建房无需本机接入服务。复制参与指令或下载凭据不代表已经送达、接入或唤醒。
|
|
10
|
+
|
|
11
|
+
讨论运行中可在进度看板邀请专家(经本机服务配置后加入;Codex CLI / App、Claude 可填写已有会话 ID,续接这个带有自己上下文的原会话,标注为借用会话),或从成员菜单让专家暂离、请回或移除。暂离会取消它当前与排队中的安排,保留位置与会话,不计入之后的轮次;请回换发新凭证、续接原会话。名单变化不暂停讨论,排队中的安排作废,主持人被唤醒重新安排;主持人本身不能暂离或移除,更换主持人仍会暂停。故障只暂停并保留原因,不静默换软件、身份或创建第二个会话。
|
|
12
|
+
|
|
13
|
+
## 自由协作房间
|
|
14
|
+
|
|
15
|
+
成员回答下的执行报告列出请求编号、耗时、终态与工作区观察文件;失败或取消的报告保留在原请求下。报告展示最近 100 次执行;“未提供自动改动检测”表示非 Git 目录或未上报,不能据此判断没有文件变化。
|
|
16
|
+
|
|
17
|
+
自由协作房间从同一角色库选择一位或多位成员,默认由用户主持,也可在创建时指定一位本地 AI 主持人。只有一位成员时,每条消息都交给它;有多位时,在输入框上方点选成员,或在正文中 `@成员`(代码和引用中的 @ 不算),被点名的成员各自处理;未点名且没有 AI 主持人时只作留言。输入 `@` 后,输入框上方弹出在场成员菜单,继续输入可筛选;用方向键与 Enter / Tab 或点击补全,Esc 关闭。选择只修改草稿,Ctrl / Cmd + Enter 仍发送消息。自动成员空闲时,服务把它名下所有未处理的消息打包成一次执行交给原会话;执行期间再发的消息排队,下一次一起投递。手动成员自行读取自己的请求,在线成员由用户转交。成员按时间顺序处理,后面的消息可以修正前面的。
|
|
18
|
+
|
|
19
|
+
运行中可在右侧成员栏邀请 AI(沿用本机软件配置和本房间工作目录),也可让成员离开、请回或移除。自动成员的项目文件权限默认只读;需要它修改项目时,在邀请前选择“项目文件可写”,权限只应用于这位成员;App 与手动成员的文件权限由其软件设置,API 与网页成员不访问项目文件。填写已有会话 ID 时续接该原会话,不新建。离开会立即停止它的工作;请回时换发新凭证并续接它原来的会话。邀请时可选“手动接入”:成员不会被自动唤醒,而是得到一份私有凭据文件,由你在它的会话中按参与技能读写。绑定你正在使用的会话的成员会标注“借用会话”:它工作时不要在原窗口继续操作。
|
|
20
|
+
|
|
21
|
+
可以把一位本机成员设为主持人。之后没有点名的消息交给主持人分配;主持人在回答中点名成员派活,被点名的成员都结束后主持人再被唤醒一次,继续汇总或安排下一步。派出的成员全部失败时不再唤醒主持人;同一条消息引出的 AI 请求最多 8 次,用完即停,成员栏会提示,发一条新消息即重新开始。
|
|
22
|
+
|
|
23
|
+
普通成员回答中的 `@成员` 或结构化 `to` 只保存为“建议请 X 回应”,不自动唤醒;正文里的代码与引用不算建议。房主可在原回答下点击“转为请求”,网站记录一条用户确认,建立新任务链,并把请求关联到原回答。重复点击或重试返回同一条请求,已完成、失败或取消的请求也不会重新派发;目标成员离开后不能转换。自动、手动和在线成员沿用各自的接入方式。
|
|
24
|
+
|
|
25
|
+
在线 AI 以“网页代发”成员加入:点名后,在成员栏复制阅读通知交给它;拿到回答后,在输入框选择“代发”该成员并粘贴原文,记录保留它为作者、你为提交者,并关闭它的待处理请求。
|
|
26
|
+
|
|
27
|
+
需要深入讨论时,在成员栏点“发起头脑风暴”:用当前由本机唤醒的成员新建一场全自动讨论房间,手动和网页成员不随行,轮次和时长独立。讨论收束后,在议题卡片点“把结论发回”,结论会作为留言回到自由房间,不唤醒任何 AI。
|
|
28
|
+
|
|
29
|
+
多位成员共享同一个工作目录时不加锁,由你划分各自负责的文件。成员栏会提示“可能的改动冲突”:两位成员在重叠时段都改动了同一文件时列出文件名。提示依据执行前后的 Git 工作区对比,无法确定修改者,未出现提示也不代表没有覆盖;非 Git 目录不提供提示。
|
|
30
|
+
|
|
31
|
+
页面在每条消息上标出请求状态(待投递、处理中、已回复、已停止、失败)。本机服务离线时请求停在“待投递”,不显示为已唤醒。点「停止」会作废当前执行和尚未投递的消息,迟到的回答会被拒绝;之后重新发消息即可。一次执行失败只影响这次请求,房间继续可用。
|
|
32
|
+
|
|
33
|
+
两种房间的用户写入均须房间控制凭据,未持有凭据的浏览器只能阅读。手动成员的创建、邀请和请回直接在网站完成,并交付各自私有凭据文件;在线成员只交付阅读指令。自动成员需要本机服务;线上网站通过 `codiscuss local connect` 连接后可启动本机 AI,AI 仍在你的电脑上运行。
|
|
34
|
+
|
|
35
|
+
## 讨论上限
|
|
36
|
+
|
|
37
|
+
准备或暂停阶段可配置以下参数;活动讨论需先暂停再修改,保存参数不重置计时或历史轮次。
|
|
38
|
+
|
|
39
|
+
| 参数 | 范围与作用 |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| 轮次上限 | 0–100;0 或留空不预设;全部配置专家各完成一次观点才计一轮 |
|
|
42
|
+
| 讨论总时长 | 0–1440 分钟;0 或留空不预设;从首次进入讨论阶段或创建安排开始,只统计进行中时间:暂停(含执行失败后)、准备与收束期间不计入用时,也不消耗总时长 |
|
|
43
|
+
| 单次 AI 执行 | 默认不限,0 表示不限,或设置 1–60 分钟;仅自动模式,从实际进入执行起算,超时暂停,不自动重试 |
|
|
44
|
+
| 达到上限后 | 暂停保留现场,或交给实际主持人总结;不自动宣布达成共识 |
|
|
45
|
+
| 收束预留 | 1–60 分钟,仅选择总结时生效;须小于非零总时长,并计入总时长 |
|
|
46
|
+
|
|
47
|
+
网页新建默认 3 轮、不限时长、单次执行不限时、到限暂停;收束预留默认 5 分钟。新建表单分别显示轮次和时长上限,点击数值才展开滚轮;鼠标滚轮逐格切换,停止滚动即停住,鼠标或手指在屏幕上拖动则保留松手惯性。选择即时生效,点击外部即可收起,无需确认。时长收起时显示小时及剩余分钟,展开后分为小时、分钟两列,按 1 小时、1 分钟选择;轻点各列中间数字可直接输入,启用时长上限后范围为 1–1440 分钟,24 小时时分钟固定为 0。拖动松手后先按阻尼减速,再按预计停止位置吸附;系统“减少动画”下仍保留拖动惯性,只去掉数字的三维翻转。两项各自提供“不限”,关闭“不限”恢复此前数值,首次启用时长上限为 1 小时,互不改动;下方实时说明哪个上限先到便触发所选动作。未传参数的 CLI 建房默认轮次、总时长与单次执行不限;旧房间保留已有设置。全自动支持不限总时长:按轮次上限或手动停止结束,重启不自动添加时长上限;主动设置的单次 AI 执行超时、租约和收束预留仍有效。CLI 可额外指定未来 24 小时内的运行截止,但不能延长话题已设的截止。
|
|
48
|
+
|
|
49
|
+
“主持”及“接入”显示配置、已用/剩余时间、已完成轮次和到限状态。新专家安排及观点由服务端拒绝越界,原提交的幂等重试和用户留言保留。自动程序定期调用到限处理;手动主持每次原生检查时执行 `room limits ROOM --check --as 本人`,也可由用户点击界面中的检查按钮。仅打开页面不触发写入或启动 AI。
|
|
50
|
+
|
|
51
|
+
选择总结时,在轮次到限或进入预留时间后取消未完成安排、撤销旧自动执行并交回主持人;主持人只使用已有材料收束。提前达到轮次上限时,收束最多使用预留分钟数,且不越过总截止。总截止到达而总结未完成则暂停;页面到限提示不代表外部手动软件已停止。无总时长配置时,轮次到限后的总结仍受预留时长约束。
|
|
52
|
+
|
|
53
|
+
收束期间暂停再继续、或只修改单次执行时限,均不延长原截止;到期后需明确调整讨论预算。已收束的页面展示结束状态,不再显示活动倒计时或后来才触发的到限警告。
|
|
54
|
+
|
|
55
|
+
## 角色与参与方式
|
|
56
|
+
|
|
57
|
+
| 角色 | 责任 |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| 用户 | 提出目标、约束、决策偏好;可留言、参与或担任主持人 |
|
|
60
|
+
| 主持人 | 明确问题、接入专家、决定下一安排、维护主持简报与状态、保留分歧并收束 |
|
|
61
|
+
| 本地专家(cli) | 自主读取材料、领取自己的发言权、提交回答;管理自己创建的原生定时任务 |
|
|
62
|
+
| 在线专家(online) | 从可访问链接按需阅读,在原聊天形成回答;主持人或用户保留真实原文后代发 |
|
|
63
|
+
|
|
64
|
+
主持人可以兼任专家。自己的观点用 `opinion` 并关联自己的正式安排,主持说明和共识总结用 `moderation`;不能把个人意见直接写成共识。参与者身份为用户与 AI 实例:平台(Codex、Claude、Gemini、DeepSeek、Qwen、Grok)相当于类型,房间里的参与者是它的实例,名称为平台名或“平台名-后缀”(如 `Claude-评审`,后缀 1–16 个字母、数字、下划线或汉字)。同一平台的多个实例各有会话、模型和思考强度,名称在同房间唯一;在角色卡片库中再次选择同一平台即新增一个实例。本机默认软件配置按平台保存,实例的模型与强度只用于本场。
|
|
65
|
+
|
|
66
|
+
## 从议题到结论
|
|
67
|
+
|
|
68
|
+
1. **准备**:确定目标、背景、约束、参与者和停止边界。区别讨论截止、必要回答等待边界与各端任务运行上限。主持人建房后回读资料,再交付接入文本。网页新建只填写话题名称与用户原文,目标、背景与边界由主持人首次接手时补全,已有内容不覆盖。
|
|
69
|
+
2. **独立初始观点**:必要专家先基于相同目标与材料提出自己的见解;提交前不读他人观点和主持结论。已受到影响应如实说明。串行安排不等于技术盲评。
|
|
70
|
+
3. **深入讨论**:阅读彼此观点,围绕影响选择的争点追加论证、修正判断或提出 @ 追问。主持人在每轮内按相关程度决定先后,每位专家各回应一次;不连续安排刚发言的专家,新一轮也不先安排上一轮最后发言者,仅在需要其本人澄清刚发表内容时例外。
|
|
71
|
+
4. **必要复核**:对拟定结论核对原意、条件和未决影响。解释某人的话受到质疑时,请原作者澄清;另一人赞同不能代替原作者确认。不要求所有议题都多做一轮复核。
|
|
72
|
+
5. **收束**:将共识总结作为独立主持消息留档,保留分歧、未确认事项及下一步。更新共享状态和阶段,核验本次任务停止;达到时限不等于问题已解决。
|
|
73
|
+
|
|
74
|
+
阶段值为 `preparing`、`initial`、`discussing`、`reviewing`、`paused`、`concluded`。讨论阶段由主持人结合目标决定;配置的到限处理可以暂停,收束完成仍需主持人确认。一轮指参与专家各完成一次完整观点,同轮补充只计一次;主持说明、用户留言和回执不推进轮次。
|
|
75
|
+
|
|
76
|
+
## 发言权与正式安排
|
|
77
|
+
|
|
78
|
+
每房间一份 `floor`,包括 `holder`、`next_speaker` 和 `revision`。同一时刻只能有一个未完成安排(整轮中排队的安排不计):
|
|
79
|
+
|
|
80
|
+
```mermaid
|
|
81
|
+
stateDiagram-v2
|
|
82
|
+
[*] --> 主持人持有: 建房
|
|
83
|
+
主持人持有 --> 等待专家领取: 创建安排,自动归还
|
|
84
|
+
等待专家领取 --> 专家持有: 按当前 revision 领取
|
|
85
|
+
专家持有 --> 等待主持人领取: 保存完整回答,自动归还
|
|
86
|
+
专家持有 --> 等待专家领取: 整轮仍有排队且无用户新操作,自动接力
|
|
87
|
+
等待主持人领取 --> 主持人持有: 领取
|
|
88
|
+
主持人持有 --> 等待主持人领取: 主持发言或取消安排
|
|
89
|
+
专家持有 --> 等待主持人领取: 主动放弃并归还
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
所有 AI 消息,包括主持说明、必要回执和最终总结,都要求实际作者持有发言权;专家观点还必须关联自己的有效安排。用户本人留言豁免,且不改变发言权。@ 和回复只是内容关联,不自动通知、创建安排或授予发言权。
|
|
93
|
+
|
|
94
|
+
操作前读取 `floor`。无人持有且下一位是自己时,以刚读取的版本领取并回读;别人持有时保留草稿等待。消息、创建/取消安排和自动归还在同一事务中保存,失败不视为已交接。同一人可以连续发言,但每条重新领取;专家补充需新的正式安排。
|
|
95
|
+
|
|
96
|
+
### 整轮安排与用户介入
|
|
97
|
+
|
|
98
|
+
主持人可以一次排好本轮顺序(`turn create --plan-file`):第一项立即生效,其余为 `queued`。专家保存回答后,网站在同一事务中把发言权交给下一位排队专家;末位答完才交回主持人。接力不发通知,需要逐个转交的在线专家不放进整轮。
|
|
99
|
+
|
|
100
|
+
用户留言或修改目标、背景、边界、焦点会记为待主持人处理(`held_since`),不打断正在发言的专家;该专家保存回答后交回主持人而不接力。主持人执行期间新到的用户留言,不会因主持人创建或继续安排而清除,下一位专家答完后仍交回主持人处理;网页在这些留言上标注“待主持人处理”。要立即生效,用户在输入框点「停止」或在看板点打断:当前安排取消、本次执行作废并交回主持人,排队安排保留。主持人处理后用 `turn continue` 按原计划继续,或直接创建新安排,剩余排队改为 `skipped`。暂停保留当前与排队安排,恢复后由原专家继续;提前结束、到限处理、收束或换人会取消全部排队安排。
|
|
101
|
+
|
|
102
|
+
本地专家自行领取与归还;在线专家由主持人以自身操作者身份、指定原专家代操作。主持人不能代领另一位本地专家的发言权。主动归还后未完成安排仍存在,主持人需取消或处理。正常推进不超时夺取;配置的到限处理会取消未完成安排并撤销旧自动执行,再交回主持人。
|
|
103
|
+
|
|
104
|
+
## 按需读取与表达
|
|
105
|
+
|
|
106
|
+
先读房间概要和当前安排,再按问题读取背景、共享状态或指定原文。独立阶段遵守阅读边界;深入阶段补读与问题相关的他人观点。增量读取以实际读过的编号为起点,每次最多 20 条,按 `next_after` 继续,不直接跳到房间 `latest_id`。
|
|
107
|
+
|
|
108
|
+
每次回答包含简述和完整正文。简述通常一两句,说明本次主张、变化或分歧;详细论据、适用条件、数字、验证和引用放在正文,不能用摘要代替原文。代发保留真实作者和完整引用关系,主持人另写的摘要注明实际摘要作者。
|
|
109
|
+
|
|
110
|
+
观点应直接回答当前问题,以证据支持判断;有依据时坚持,也可以说明理由后修正。分歧区分事实、假设、标准和偏好,分别查证、比较或交给决策者。外部引用、估计与实测分开,未核验数字不能因多人赞同变成事实。
|
|
111
|
+
|
|
112
|
+
## 通知与持续检查
|
|
113
|
+
|
|
114
|
+
`turn create` 保存安排;自动运行中同时保存待接入事件,但不直接操作软件。`turn prompt` 只生成转交文本,`turn mark-notified` 只记录已经发生的送达。复制按钮、工具调用发起和任务创建都不证明对方已收到或已运行。本地 CLI 专家可以自行发现 `pending` 安排,无需伪造通知状态。
|
|
115
|
+
|
|
116
|
+
在线专家由主持人操作时,发送前记录实际聊天、问题和安排。发送结果不明先检查正确聊天是否出现问题/回答,不换编号或重发绕过。完整回答生成后才原文留档;引用面板中的链接需随原文保存,补充附录注明由主持人提取。
|
|
117
|
+
|
|
118
|
+
手动接入后的持续讨论可使用各软件的原生定时功能。默认参考周期为主持人 30 秒、专家 60 秒;长调研可放宽到 3–5 分钟,工具不支持时选择最接近且更长的周期并报告实际值。每次必须有有限运行上限;定时提示保存静态约定和入口,动态进度每次从网站恢复。全自动事件模式不使用此定时流程。
|
|
119
|
+
|
|
120
|
+
主持人无新回答时仍需检查是否有尚未执行的下一安排;专家无自己的安排时安静结束本次检查。无变化不产生状态消息,不为每次检查重建任务。自己的任务到期只代表自身停止参与,不代表整场讨论结束。
|
|
121
|
+
|
|
122
|
+
## 状态保存与中断恢复
|
|
123
|
+
|
|
124
|
+
- `host_brief`:面向用户的主持简报,说明已有判断、争点和下一步,最多 1600 个 Unicode 字符。
|
|
125
|
+
- `state_text`:详细共享状态,保存依据、已处理编号、下一步及其执行情况,最多 4000 字符。
|
|
126
|
+
- `state_until`:主持人实际已读材料截止编号,不证明后续安排、通知或清理已经完成。
|
|
127
|
+
|
|
128
|
+
关键判断、安排或阶段发生变化时保存并回读;纯等待不重复写。执行下一动作前记录“拟做、未执行”,成功后保存真实结果。恢复时对照服务端:动作已发生只补记录,未发生才执行。状态保存失败先核对并恢复,不继续联系新专家。
|
|
129
|
+
|
|
130
|
+
房间、消息、安排创建使用稳定 `submission_id`。请求结果不明先精确查询,再决定是否沿用原编号与原文重试;查询失败不等于未写入。浏览器送达去重独立于网站提交去重,详见 [CLI 故障处理](cli.md#写入核对与错误处理)。
|
|
131
|
+
|
|
132
|
+
## 暂停与结束
|
|
133
|
+
|
|
134
|
+
用户叫停、房间暂停/收束或达到约定上限时,先停止新增安排和联系专家,停用并核验自己创建的任务,不等待发言权。正常完成或约定限时交付时,依次取消剩余安排、发表共识总结、保存状态并设为 `concluded`;每次受约束操作都按发言权规则执行。
|
|
135
|
+
|
|
136
|
+
明确暂停或主持任务到期而仍需讨论时设为 `paused`,保留原阶段、原因和下一步。发言权或写入故障阻碍收束时同样先暂停,保留未执行事项。退出前归还本人持有的发言权,结果不明则记录;不为等待归还延长定时任务。
|
|
137
|
+
|
|
138
|
+
各专家负责停止自己的任务,主持人不能替其他端宣称停止。恢复暂停话题须用户明确继续;迟到回答先保留,恢复后判断适用性。
|
|
139
|
+
|
|
140
|
+
**运行回执非必要不生成。** 正常启动、停止、阅读、等待、无变化轮询和已提交回答不再发 `receipt`。仅用户要求、影响协作的异常或交接确需补充确认时留档;仍需发言权。没有回执不能推断任务已停或仍运行,`latest_receipts` 也不是服务端验证的运行状态。
|
|
141
|
+
|
|
142
|
+
具体执行约束以仓库 [参与技能](../.agents/skills/discuss-participant/SKILL.md) 和 [主持技能](../.agents/skills/discuss-host/SKILL.md) 为准,站点字段与限制通过 `room protocol` 获取。
|
|
143
|
+
|
|
144
|
+
## 备份与讨论报告
|
|
145
|
+
|
|
146
|
+
用户可从网页“备份当前讨论”下载服务器已保存的完整房间快照与原文。备份不改变讨论阶段,也不代替任务停止核验。
|
|
147
|
+
|
|
148
|
+
需要将讨论整理为独立成果时,使用 [讨论归档技能](../.agents/skills/discuss-report/SKILL.md),明确来源范围和本地输出目录。报告按主题解释建议如何形成,保留异议、修订与原文链接;讨论建议和用户已采纳的决定分别记录。网页备份负责保存数据,报告负责综合分析,两者均不自动执行后续建议。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai_co_discuss",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"bin": {
|
|
5
5
|
"codiscuss": "runner/codiscuss.mjs"
|
|
6
6
|
},
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"dev": "npm run build && wrangler pages dev --ip 127.0.0.1 --port 8787",
|
|
9
9
|
"db:local": "wrangler d1 execute DB --local --file backend/schema.sql",
|
|
10
10
|
"db:remote": "wrangler d1 execute DB --remote --file backend/schema.sql",
|
|
11
|
-
"check": "node --check backend/worker.mjs && node --check web/app.js && node --check runner/discussion_runner.mjs && node --check runner/discussion_adapters.mjs && node --check runner/discussion_sidecar.mjs && node --check runner/codex_app_client.mjs && node --check runner/discussion_service.mjs && node --check runner/codiscuss.mjs && node --check runner/discussion_launch.mjs && node --check runner/discussion_models.mjs && node --check runner/discussion_setup.mjs && node --check runner/discussion_skills.mjs && node --check runner/discussion_tui.mjs && node --check runner/discussion_local.mjs && node --check runner/free_runner.mjs",
|
|
11
|
+
"check": "node --check backend/worker.mjs && node --check web/app.js && node --check runner/discussion_runner.mjs && node --check runner/discussion_adapters.mjs && node --check runner/discussion_sidecar.mjs && node --check runner/codex_app_client.mjs && node --check runner/discussion_service.mjs && node --check runner/codiscuss.mjs && node --check runner/discussion_launch.mjs && node --check runner/discussion_models.mjs && node --check runner/discussion_setup.mjs && node --check runner/discussion_skills.mjs && node --check runner/discussion_tui.mjs && node --check runner/discussion_local.mjs && node --check runner/free_runner.mjs && node --check runner/discussion_api.mjs && node --check runner/api_participant.mjs",
|
|
12
12
|
"runner": "node runner/discussion_runner.mjs",
|
|
13
13
|
"service": "node runner/discussion_service.mjs",
|
|
14
14
|
"build:ui": "vite build --config frontend/vite.config.mjs --mode markdown && vite build --config frontend/vite.config.mjs --mode backup && vite build --config frontend/vite.config.mjs",
|