pi-multi-viewers 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/AGENTS.md +192 -0
- package/README.md +153 -0
- package/docs/design.md +288 -0
- package/docs/examples/first-experiment/README.md +42 -0
- package/docs/examples/first-experiment/work-a/AGENTS.md +10 -0
- package/docs/examples/first-experiment/work-a/a/0001.md +65 -0
- package/docs/examples/first-experiment/work-a/a/0002.md +70 -0
- package/docs/examples/first-experiment/work-a/perspective.md +5 -0
- package/docs/examples/first-experiment/work-b/AGENTS.md +10 -0
- package/docs/examples/first-experiment/work-b/b/0001.md +100 -0
- package/docs/examples/first-experiment/work-b/perspective.md +6 -0
- package/docs/reviews/2026-09-10-e2e10-fork-source-modes-review.md +366 -0
- package/docs/reviews/2026-09-10-e2e11-forkmode-guards-review.md +229 -0
- package/docs/reviews/2026-09-10-e2e12-code-review.md +346 -0
- package/docs/reviews/2026-09-11-e2e13-code-review.md +284 -0
- package/docs/reviews/2026-09-11-e2e14-observability-review.md +216 -0
- package/docs/reviews/README.md +36 -0
- package/docs/test-methodology.md +258 -0
- package/extensions/multi-viewers-say/index.ts +156 -0
- package/fake_agent.py +120 -0
- package/human_sayer.py +144 -0
- package/human_viewer.py +215 -0
- package/meeting_core.py +255 -0
- package/meeting_engine.py +733 -0
- package/meeting_fs.py +1066 -0
- package/meeting_loop.py +606 -0
- package/package.json +41 -0
- package/prompts/multi-viewers.md +94 -0
- package/scripts/check-residue.sh +190 -0
- package/scripts/mv.sh +325 -0
- package/start_discussion.py +1485 -0
- package/templates/AGENTS.md.tpl +100 -0
- package/templates/agent.md.tpl +9 -0
- package/templates/gitignore.tpl +7 -0
- package/templates/spec-readme.md.tpl +87 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# 多视角分析协议(meeting 引擎,{N} 视角)
|
|
2
|
+
|
|
3
|
+
**你是 {AGENT_NAME}**(视角任务书见 system prompt)。
|
|
4
|
+
参与者:{PARTICIPANTS_DISPLAY}。分析主题见 `question.md`。
|
|
5
|
+
|
|
6
|
+
## 背景
|
|
7
|
+
{BACKGROUND}
|
|
8
|
+
|
|
9
|
+
## 你被唤醒时做什么
|
|
10
|
+
|
|
11
|
+
1. 本地循环会告诉你要读哪些新消息。读取它们,理解分析进展。
|
|
12
|
+
2. 必须写一条消息到本地循环指定的文件:
|
|
13
|
+
- 有话要说 → `type: message`,写你的观点/回应
|
|
14
|
+
- 无话可说 → `type: freezing`(表示你同意当前进展,没有要补充的)
|
|
15
|
+
- **必须二选一写一条,绝不跳过**
|
|
16
|
+
|
|
17
|
+
3. 轮转阶段(round-robin):当分析进入收尾轮转且轮到你时:
|
|
18
|
+
- 对结论无异议 → `type: pass`
|
|
19
|
+
(单向流:无异议回退,异议已在自由讨论阶段表达完)
|
|
20
|
+
|
|
21
|
+
**独立参与者纪律**:收到唤醒即按上述规则产出——不要等待、监控或轮询
|
|
22
|
+
其他参与者的动作(消息交换由本地循环管理,不归你管)。你的上下文里
|
|
23
|
+
可能带有发起分析的对话历史,其中的工作习惯(跑测试、看日志、等待确认)
|
|
24
|
+
不是你的流程——你的流程只有"读指定消息 → 写一条消息"。
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
## summary 的作用
|
|
28
|
+
|
|
29
|
+
`summary` 是消息的**一句话摘要**,会被显示给观察分析的人(如 `--wait`
|
|
30
|
+
进度显示)——**让人一眼看懂你这条消息说了什么**。
|
|
31
|
+
写 message 时必须填;freezing/pass 也可写(如"同意当前进展")。
|
|
32
|
+
|
|
33
|
+
## 消息格式(frontmatter 字段不能缺)
|
|
34
|
+
|
|
35
|
+
所有字段都必须存在于 frontmatter 中,**不能缺**——但**字段的值不都是你写**:
|
|
36
|
+
本地循环会补全协议字段的值(`seen_at`/`mode`/`from`/`to`),
|
|
37
|
+
你只需写内容性字段的值(`type`/`summary`/`in_reply_to`/正文)。
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
---
|
|
41
|
+
from: {AGENT_NAME} # 必填字段(值由本地循环补全)
|
|
42
|
+
in_reply_to: <回应的消息,格式 作者/序号,如 {SAMPLE_OTHER}/0001> # 有回应对象时必填
|
|
43
|
+
seen_at: <本地循环填>
|
|
44
|
+
mode: <本地循环填>
|
|
45
|
+
type: message|freezing|pass # 必填字段(值必须你写,三选一)
|
|
46
|
+
summary: <一行摘要> # 必填字段(message 必须你写,一句话概括;freezing/pass 也可写)
|
|
47
|
+
to: all # 必填字段(值由本地循环填)
|
|
48
|
+
---
|
|
49
|
+
<正文>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 规则
|
|
53
|
+
|
|
54
|
+
- **按本地循环指定的文件名写**:唤醒 prompt 会告诉你写到哪个文件(如 `{AGENT_NAME}/0003.md`)——
|
|
55
|
+
不要自己算序号,不要写别的文件名(序号由本地循环计算,防并发撞号)
|
|
56
|
+
- **frontmatter 字段不能缺**:所有字段都必须存在(值可以由本地循环补全)——
|
|
57
|
+
你只需保证 `type`(三选一)和 `summary`(message 时一句话概括)的值正确,
|
|
58
|
+
其余字段(from/seen_at/mode/to)值由本地循环写
|
|
59
|
+
- 不要执行任何 git 操作(commit/push/pull 由本地循环负责)
|
|
60
|
+
- 本地循环会处理所有流程控制(冻结、收尾),你只需按上面的方式提供内容
|
|
61
|
+
- **绝不写流程控制消息**(all-freezing / concluded 由本地循环确定性写)——
|
|
62
|
+
你只能写 message / freezing / pass 三种类型
|
|
63
|
+
|
|
64
|
+
## 上下文中的项目规则与本协议的关系
|
|
65
|
+
|
|
66
|
+
你的上下文里可能带有发起分析的主项目的规则(如 cwd 的 `AGENTS.md`——
|
|
67
|
+
fork 模式会自动发现它)。其中的**流程性条款不适用于本讨论**:例如
|
|
68
|
+
"每次改动先 commit"、"阶段性完成即 push"、"改动后跑全量测试"等,
|
|
69
|
+
在本讨论中一律由本地循环或发起方负责,你**不要**执行。
|
|
70
|
+
|
|
71
|
+
本协议(本文件)**优先于**项目规则中的流程条款;项目规则中的
|
|
72
|
+
**视角类约定**(编码风格、技术选型、命名规范等)仍是你分析时的依据。
|
|
73
|
+
|
|
74
|
+
不确定某条项目规则是否适用时:它若要求你执行 git / 测试 / 清理等
|
|
75
|
+
**流程动作**,一律不执行;它若描述**代码或设计应遵循的约束**,予以采纳。
|
|
76
|
+
|
|
77
|
+
## 来自 human 的插话
|
|
78
|
+
|
|
79
|
+
分析中可能出现来自 `human` 的消息(`from: human`)。human 是组织分析的人,
|
|
80
|
+
**不是参与者**,不参与任何流程判定(冻结/轮转/收尾与它无关)——它只是
|
|
81
|
+
向分析注入信息,其它 agent 都能看到。
|
|
82
|
+
|
|
83
|
+
human 的消息是**权威输入**,请认真对待:
|
|
84
|
+
- 它可能包含你不知道的新事实、对既有观点的纠正、或分析方向的提示
|
|
85
|
+
- 与你观点冲突时:明确回应并说明你的理由,**不要无视**
|
|
86
|
+
- 指出你的错误时:承认并修正,不要固执己见
|
|
87
|
+
- human 不替你决定立场——它提供信息,最终判断仍由你基于论据做出
|
|
88
|
+
|
|
89
|
+
看到 human 消息时按正常规则回应:有话 → message,无话 → freezing/pass。
|
|
90
|
+
|
|
91
|
+
## message 质量
|
|
92
|
+
|
|
93
|
+
- **有论据**:给出理由/事实/例子支持你的观点,不要只喊口号
|
|
94
|
+
- **回应已有观点**:如果分析中有你要回应/反驳的观点,明确指出来——
|
|
95
|
+
**必须写 `作者/序号`**(如 `回应 a/0003`),不能只说"某人"或模糊描述;
|
|
96
|
+
不要无视他人观点自说自话
|
|
97
|
+
- **不重复**:不要重复已说过的观点;要么补充新角度,要么同意(freezing)
|
|
98
|
+
- **聚焦分歧**:有分歧时聚焦分歧点,不要全面重述
|
|
99
|
+
|
|
100
|
+
{MAIN_PI_CWD_SECTION}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# 分析规格目录(--prepare 生成)
|
|
2
|
+
|
|
3
|
+
这个目录定义一次多视角分析的全部内容。编辑下面的文件,然后启动分析。
|
|
4
|
+
|
|
5
|
+
**所有文件的第一行都是说明文字,不会注入到分析环境(会被跳过)。正文从第二行开始写。**
|
|
6
|
+
|
|
7
|
+
## question.md —— 分析主题(必填)
|
|
8
|
+
|
|
9
|
+
**作用**:整个文件(跳过第一行)会变成分析环境里的 `question.md`——所有
|
|
10
|
+
agent 从这里了解主题与任务边界。
|
|
11
|
+
|
|
12
|
+
在这里写清**应该做什么**——任务类型决定产出形态,不要依赖上下文自明:
|
|
13
|
+
|
|
14
|
+
- **审阅** → 提出意见(哪些有问题、为什么)
|
|
15
|
+
- **改进建议** → 说出建议(改什么、怎么改)
|
|
16
|
+
- **修改** → 说明哪些可以修改、哪些需要修改(有改动权限的边界)
|
|
17
|
+
|
|
18
|
+
同时写明:分析对象(文件/模块/问题)、期望的产出(如"改进建议清单")、
|
|
19
|
+
是否需要达成一致。
|
|
20
|
+
|
|
21
|
+
**为什么重要**:每个 agent 的上下文里有发起分析的对话历史(默认
|
|
22
|
+
budget 模式:按预算裁剪+折叠)——其中的开发过程、未完成事项都可能被
|
|
23
|
+
agent 当成"该做的事"。question.md 的任务定义越明确,agent 越不会跑偏
|
|
24
|
+
去做上下文里的其它事情。
|
|
25
|
+
|
|
26
|
+
范例(从第二行开始写):
|
|
27
|
+
|
|
28
|
+
# 分析主题:评审 src/calculator.py 的代码质量
|
|
29
|
+
|
|
30
|
+
任务:审阅 src/calculator.py,从各自视角提出评审意见(本轮只
|
|
31
|
+
提意见,不修改代码)。指出问题、说明理由;
|
|
32
|
+
对其它视角的观点可以认同或反驳,但要用自己视角的论据。
|
|
33
|
+
最终需要对"问题清单"达成一致。
|
|
34
|
+
|
|
35
|
+
## background.md —— 边界与约定(可选)
|
|
36
|
+
|
|
37
|
+
**作用**:注入每个 agent 的协议文件(AGENTS.md 背景节)。
|
|
38
|
+
|
|
39
|
+
fork 机制已让每个 agent 携带发起分析时的对话上下文(默认 budget 模式:
|
|
40
|
+
按预算裁剪+折叠),所以**不需要**在这里复述对话内容。这里只写**显式
|
|
41
|
+
约定的边界**,例如:
|
|
42
|
+
|
|
43
|
+
- 分析只聚焦某些方面("不讨论 API 设计")
|
|
44
|
+
- 已知的硬约束("必须保持向后兼容")
|
|
45
|
+
- 用户指定的优先级("性能问题优先级最高")
|
|
46
|
+
|
|
47
|
+
没有就留空。
|
|
48
|
+
|
|
49
|
+
## models.md —— 模型配置(可选)
|
|
50
|
+
|
|
51
|
+
每行:`agent名: model[, variant]`。model 默认 default(继承本机默认),
|
|
52
|
+
variant 默认 max。只有不用默认/-max 时才需要改。
|
|
53
|
+
|
|
54
|
+
## agents/X.md —— 视角任务书(每个 agent 一个)
|
|
55
|
+
|
|
56
|
+
**作用**:定义该 agent 的**视角**——它用哪副眼镜看分析对象。
|
|
57
|
+
|
|
58
|
+
**只写视角本身**。以下内容由脚本从机制生成,**不要写进任务书**
|
|
59
|
+
(写进去会重复,且容易与实际漂移——文件名才是 agent 名的唯一来源):
|
|
60
|
+
|
|
61
|
+
- 身份与参与者("你是 X"、"参与者有 A、B、C")——脚本按文件名注入
|
|
62
|
+
- 消息格式、frontmatter 字段、写文件路径、独立参与者纪律——见协议文件
|
|
63
|
+
(AGENTS.md,脚本注入)
|
|
64
|
+
|
|
65
|
+
写好视角任务书的要点(实测有效的措辞模式):
|
|
66
|
+
|
|
67
|
+
1. **单一视角**:明确写出这个 agent 用什么 lenses 看(性能/简单化/
|
|
68
|
+
安全/成本/用户体验/……),并要求"所有观点必须从该视角出发"
|
|
69
|
+
2. **不越界**:写明"其它视角由别的参与者负责,你不要越界展开"——
|
|
70
|
+
实验证明这句能避免视角串味(不要列举具体是哪几个视角——
|
|
71
|
+
参与者会变,列举就会过期)
|
|
72
|
+
3. **交锋义务**:写明"对其它视角的观点可以认同或反驳,但要用本视角
|
|
73
|
+
的论据"——防止附和式讨论
|
|
74
|
+
|
|
75
|
+
范例(agents/性能.md 全文——身份那句由脚本加,不在正文里):
|
|
76
|
+
|
|
77
|
+
你的所有观点必须从性能角度出发:复杂度、热点、不必要的计算、扩展性。
|
|
78
|
+
如果其它视角的优化建议会显著损害性能,你应该明确反对并说明理由。
|
|
79
|
+
其它视角由别的参与者负责,你不要越界展开。
|
|
80
|
+
对其它视角的观点可以认同或反驳,但要用本视角的论据。
|
|
81
|
+
|
|
82
|
+
视角之间**互补或对立都可以**——对立视角产生的分歧正是多视角分析的价值。
|
|
83
|
+
|
|
84
|
+
## 下一步
|
|
85
|
+
|
|
86
|
+
编辑完成后启动分析:`scripts/mv.sh --start <本目录绝对路径>`
|
|
87
|
+
(或告诉主 pi "继续",由它代为执行)。
|