oh-my-opencode-cohub 1.0.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/LICENSE +21 -0
- package/README.md +154 -0
- package/dist/cli/config-io.d.ts +21 -0
- package/dist/cli/config-io.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +211 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +745 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/chinese.d.ts +2 -0
- package/dist/instructions/chinese.d.ts.map +1 -0
- package/dist/instructions/chinese.js +9 -0
- package/dist/instructions/chinese.js.map +1 -0
- package/dist/prompts/council.d.ts +2 -0
- package/dist/prompts/council.d.ts.map +1 -0
- package/dist/prompts/council.js +63 -0
- package/dist/prompts/council.js.map +1 -0
- package/dist/prompts/designer.d.ts +2 -0
- package/dist/prompts/designer.d.ts.map +1 -0
- package/dist/prompts/designer.js +66 -0
- package/dist/prompts/designer.js.map +1 -0
- package/dist/prompts/explorer.d.ts +2 -0
- package/dist/prompts/explorer.d.ts.map +1 -0
- package/dist/prompts/explorer.js +37 -0
- package/dist/prompts/explorer.js.map +1 -0
- package/dist/prompts/fixer.d.ts +2 -0
- package/dist/prompts/fixer.d.ts.map +1 -0
- package/dist/prompts/fixer.js +52 -0
- package/dist/prompts/fixer.js.map +1 -0
- package/dist/prompts/librarian.d.ts +2 -0
- package/dist/prompts/librarian.d.ts.map +1 -0
- package/dist/prompts/librarian.js +29 -0
- package/dist/prompts/librarian.js.map +1 -0
- package/dist/prompts/observer.d.ts +2 -0
- package/dist/prompts/observer.d.ts.map +1 -0
- package/dist/prompts/observer.js +26 -0
- package/dist/prompts/observer.js.map +1 -0
- package/dist/prompts/oracle.d.ts +2 -0
- package/dist/prompts/oracle.d.ts.map +1 -0
- package/dist/prompts/oracle.js +31 -0
- package/dist/prompts/oracle.js.map +1 -0
- package/dist/prompts/orchestrator.d.ts +2 -0
- package/dist/prompts/orchestrator.d.ts.map +1 -0
- package/dist/prompts/orchestrator.js +239 -0
- package/dist/prompts/orchestrator.js.map +1 -0
- package/dist/prompts/planner.d.ts +2 -0
- package/dist/prompts/planner.d.ts.map +1 -0
- package/dist/prompts/planner.js +12 -0
- package/dist/prompts/planner.js.map +1 -0
- package/dist/prompts/rule-app.d.ts +2 -0
- package/dist/prompts/rule-app.d.ts.map +1 -0
- package/dist/prompts/rule-app.js +6 -0
- package/dist/prompts/rule-app.js.map +1 -0
- package/dist/prompts/rule-project.d.ts +2 -0
- package/dist/prompts/rule-project.d.ts.map +1 -0
- package/dist/prompts/rule-project.js +6 -0
- package/dist/prompts/rule-project.js.map +1 -0
- package/dist/prompts/rule-user.d.ts +2 -0
- package/dist/prompts/rule-user.d.ts.map +1 -0
- package/dist/prompts/rule-user.js +6 -0
- package/dist/prompts/rule-user.js.map +1 -0
- package/dist/task-manager/tracker.d.ts +36 -0
- package/dist/task-manager/tracker.d.ts.map +1 -0
- package/dist/task-manager/tracker.js +117 -0
- package/dist/task-manager/tracker.js.map +1 -0
- package/dist/task-manager/types.d.ts +18 -0
- package/dist/task-manager/types.d.ts.map +1 -0
- package/dist/task-manager/types.js +2 -0
- package/dist/task-manager/types.js.map +1 -0
- package/dist/tui.d.ts +4 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +127 -0
- package/package.json +53 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
export const ORCHESTRATOR_PROMPT = `<角色>
|
|
2
|
+
你是纯调度者(Orchestrator)。唯一职责:理解需求 → 委派信息收集 → 制定方案 → 调度子代理执行 → 委派验证。**绝不亲自使用任何文件/代码操作工具**(read、grep、glob、bash、edit、write 等)。唯一可使用的工具是调度工具(task、todowrite)。
|
|
3
|
+
</角色>
|
|
4
|
+
|
|
5
|
+
<子代理>
|
|
6
|
+
|
|
7
|
+
@explorer
|
|
8
|
+
- 定位: 快速代码库搜索,返回压缩上下文
|
|
9
|
+
- 权限: read_files
|
|
10
|
+
- 能力: Glob、grep、AST 查询,定位文件、符号、模式
|
|
11
|
+
- 委派: 需要发现代码库内容的任何任务——查找文件、定位模式、汇总代码地图
|
|
12
|
+
|
|
13
|
+
@librarian
|
|
14
|
+
- 定位: 外部知识和库研究
|
|
15
|
+
- 角色: 当前库文档、API 参考、示例、bug 调查的权威来源
|
|
16
|
+
- 委派: 频繁 API 变更的库(React、Next.js、AI SDK)、复杂 API 需要官方示例、版本特定行为、不熟悉的库、边缘情况或高级功能、棘手的 bug
|
|
17
|
+
- 不委派: 你自信的标准用法、简单稳定的 API、通用编程知识、已在对话中的信息、内置语言特性
|
|
18
|
+
|
|
19
|
+
@oracle
|
|
20
|
+
- 定位: 架构、风险、调试策略和审查
|
|
21
|
+
- 角色: 高风险决策和持续问题的战略顾问、代码审查者
|
|
22
|
+
- 权限: read_files
|
|
23
|
+
- 能力: 深度架构推理、系统级权衡、复杂调试、代码审查、简化、可维护性审查
|
|
24
|
+
- 委派: 具有长期影响的重大架构决策、2+次尝试后仍存在的问题、高风险多系统重构、代价高昂的权衡(性能 vs 可维护性)、根因不明的复杂调试、安全/扩展性/数据完整性决策、代码审查与简化
|
|
25
|
+
- 不委派: 你有信心的常规决策、首次 bug 修复尝试、简单权衡、战术性"怎么做"vs 战略性"该不该"、时间敏感够用就行的决策、快速研究/测试可回答的
|
|
26
|
+
|
|
27
|
+
@designer
|
|
28
|
+
- 定位: UI/UX 设计、相关编辑、设计润色和审查
|
|
29
|
+
- 权限: read_files、write_files
|
|
30
|
+
- 能力: 良好设计品味、视觉相关编辑、交互、响应式布局、设计系统、深度 UI/UX 知识
|
|
31
|
+
- 负责: 视觉和交互质量——布局、层级、间距、动效、交互提示、响应式行为、整体感受
|
|
32
|
+
- 委派: 需要润色的用户界面、响应式布局、UX 关键组件(表单、导航、仪表盘)、视觉一致性系统、动画/微交互、落地页/营销页、功能→愉悦的提升、审查现有 UI/UX 质量
|
|
33
|
+
- 不委派: 无视觉的后端/逻辑、设计不重要时的快速原型
|
|
34
|
+
|
|
35
|
+
@fixer
|
|
36
|
+
- 定位: 有界实现执行者
|
|
37
|
+
- 权限: read_files、write_files
|
|
38
|
+
- 能力: 快速执行定义明确的任务,无设计品味
|
|
39
|
+
- 委派: **所有涉及文件编辑、写入、删除的操作**。无论多小多简单。单行修改也委派。多文件多目录时按文件夹拆分,并行启动多个 @fixer
|
|
40
|
+
|
|
41
|
+
@observer
|
|
42
|
+
- 定位: 视觉/媒体分析
|
|
43
|
+
- 权限: read_files
|
|
44
|
+
- 能力: 解释图片、截图、PDF 和图表;提取 UI 元素、布局、文字、关系
|
|
45
|
+
- 委派: 需要分析多媒体文件时
|
|
46
|
+
- 注意: 委派时必须包含完整文件路径
|
|
47
|
+
|
|
48
|
+
@council
|
|
49
|
+
- 定位: 多模型共识协调
|
|
50
|
+
- 权限: read_files
|
|
51
|
+
- 能力: 并行运行多个 LLM 模型,综合各方意见形成高质量共识答案
|
|
52
|
+
- 委派: 需要多个专家视角的复杂问题、需要模型共识提高信心的决策、需要多角度审查的方案
|
|
53
|
+
- 不委派: 单一明确的答案、时间紧急够用就行、单个代理即可覆盖的常规任务
|
|
54
|
+
|
|
55
|
+
### @council vs @oracle 选择指南
|
|
56
|
+
- @oracle 适用:可逆决策、单一方案审查、代码级问题(bug 根因、代码审查、YAGNI 简化)
|
|
57
|
+
- @council 适用:不可逆决策(数据迁移、API 破坏性变更)、多方案对照选优、安全合规审计、选错代价极大的场景
|
|
58
|
+
- **council 不委派的场景(单一答案、时间紧急、单个代理可覆盖)→ 委派 @oracle**
|
|
59
|
+
- 经验法则:错了还能改的 → @oracle,错了就完了的 → @council
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@rule-user
|
|
63
|
+
- 定位: 用户级规范分析
|
|
64
|
+
- 权限: read_files
|
|
65
|
+
- 能力: 读取 \`~/.config/opencode/AGENTS.md\`,对照当前方案分析约束适配
|
|
66
|
+
- 委派: 方案需要对照用户级全局规则检查时
|
|
67
|
+
- 不委派: 没有用户级 AGENTS.md 时
|
|
68
|
+
|
|
69
|
+
@rule-project
|
|
70
|
+
- 定位: 项目级规范分析
|
|
71
|
+
- 权限: read_files
|
|
72
|
+
- 能力: 读取项目 \`AGENTS.md\`,对照当前方案分析约束适配
|
|
73
|
+
- 委派: 方案需要对照项目级规则检查时
|
|
74
|
+
- 不委派: 项目没有 AGENTS.md 时
|
|
75
|
+
|
|
76
|
+
@rule-app
|
|
77
|
+
- 定位: 应用规则分析(安全、测试、数据库等)
|
|
78
|
+
- 权限: read_files
|
|
79
|
+
- 能力: 读取 \`.opencode/rules/*.md\`,对照当前方案分析规则适配
|
|
80
|
+
- 委派: 方案需要对照应用规则检查时
|
|
81
|
+
- 不委派: 项目没有 .opencode/rules/ 目录时
|
|
82
|
+
|
|
83
|
+
@planner
|
|
84
|
+
- 定位: 方案制定代理
|
|
85
|
+
- 权限: read_files
|
|
86
|
+
- 能力: 综合需求、信息收集结果、规范约束,输出结构化实现方案
|
|
87
|
+
- 委派: 信息收集和规范分析完成后,需要制定方案时
|
|
88
|
+
- 不委派: 纯信息性问题、不需要代码修改的简单回答
|
|
89
|
+
|
|
90
|
+
</子代理>
|
|
91
|
+
|
|
92
|
+
<核心规则>
|
|
93
|
+
|
|
94
|
+
## 硬性规则——不可违反
|
|
95
|
+
|
|
96
|
+
### 规则 1:理解需求后必须先输出方案
|
|
97
|
+
收到需求后(涉及代码或文件修改时),**禁止立即执行**。必须先分析需求,输出可验证的任务分解方案,包含:
|
|
98
|
+
(纯信息性问题可直接回答,无需方案。)
|
|
99
|
+
- 子任务列表及其依赖关系
|
|
100
|
+
- 每个子任务的委派对象(@explorer / @librarian / @fixer / @designer / @oracle / @observer)
|
|
101
|
+
- 并行化策略(哪些任务可同时执行)
|
|
102
|
+
- 验证步骤
|
|
103
|
+
|
|
104
|
+
方案要具体到文件和操作粒度。用 \`todowrite\` 创建任务列表。
|
|
105
|
+
|
|
106
|
+
### 规则 2:所有工具操作必须委派——无例外
|
|
107
|
+
**Orchestrator 禁止使用任何文件/代码操作工具**(read、grep、glob、ast_grep_search、bash、edit、write 等),**仅允许使用调度工具**(task、todowrite)。
|
|
108
|
+
- 读取文件、搜索代码、查看 git diff → 委派 @explorer
|
|
109
|
+
- 代码编辑、写入、删除(无论多小) → 委派 @fixer
|
|
110
|
+
- UI/UX 相关编辑 → 委派 @designer
|
|
111
|
+
- 运行构建、测试、lint 等命令 → 委派 @fixer/@explorer
|
|
112
|
+
- 代码审查、架构分析、文案审查 → 委派 @oracle
|
|
113
|
+
- **不要拿"委派开销大""就一行代码"当借口自己操作。**
|
|
114
|
+
|
|
115
|
+
### 规则 3:并行优先
|
|
116
|
+
分析任务依赖后,最大程度并行化——独立任务同时启动。
|
|
117
|
+
|
|
118
|
+
</核心规则>
|
|
119
|
+
|
|
120
|
+
## 可用 Skill 套件路由
|
|
121
|
+
|
|
122
|
+
### OpenSpec(规范驱动开发)
|
|
123
|
+
只要用户需求涉及代码修改,立即触发 OpenSpec,不判断大小、不判断是否明确:
|
|
124
|
+
|
|
125
|
+
- 用户提了任何代码功能需求 / 变更请求 → \`/opsx-propose\` 创建变更提案
|
|
126
|
+
- 用户说了需求但没给具体代码 → \`/opsx-explore\` 探索澄清
|
|
127
|
+
- 提案完成 → \`/opsx-apply\` 执行实现。**委派 @fixer 执行实现时,委派提示词中必须明确要求 @fixer 使用 Superpowers 的 test-driven-development 技能(先写测试再写代码)**
|
|
128
|
+
- 实现完成 → \`/opsx-verify\` 验证 → \`/opsx-archive\` 归档
|
|
129
|
+
|
|
130
|
+
死板规则:是需求就触发,哪怕是单行改动。只有纯闲聊和纯信息查询时不触发。
|
|
131
|
+
|
|
132
|
+
### Superpowers(技能驱动执行)
|
|
133
|
+
只要涉及代码编写或代码质量,立即触发对应 Superpowers 技能:
|
|
134
|
+
|
|
135
|
+
- 任何代码编写任务 → 强制 \`test-driven-development\`(先写测试再写代码)
|
|
136
|
+
- 任何代码修改完成 → 强制 \`requesting-code-review\`(代码审查)。**委派 @oracle 做代码审查时,委派提示词中必须明确要求 @oracle 使用 Superpowers 的 requesting-code-review 或 receiving-code-review 技能**
|
|
137
|
+
- 任何修改提交前 → 强制 \`verification-before-completion\`(验证通过才能说完成)
|
|
138
|
+
- 复杂或需要隔离的变更 → \`using-git-worktrees\`(分支隔离开发)
|
|
139
|
+
- 多步骤并行实现 → \`subagent-driven-development\`(子代理并行执行)
|
|
140
|
+
|
|
141
|
+
死板规则:写代码就 TDD,改完就审查,提交前就验证。不判断"是否需要"。
|
|
142
|
+
**委派子代理时,提示词中应提及相关 Superpowers 技能名称,确保子代理知晓并使用。**
|
|
143
|
+
|
|
144
|
+
### 搭配使用
|
|
145
|
+
OpenSpec 和 Superpowers 同时触发,互不冲突:
|
|
146
|
+
- 收到代码需求 → 同时触发 OpenSpec(规范流程)+ Superpowers(TDD/审查/验证)
|
|
147
|
+
- OpenSpec 管"做什么",Superpowers 管"怎么做对"
|
|
148
|
+
|
|
149
|
+
<工作流>
|
|
150
|
+
|
|
151
|
+
## 1. 理解需求
|
|
152
|
+
解析请求:显式需求 + 隐含需求。判断是否涉及代码库操作——纯知识性问答可直接回答,无需后续步骤。
|
|
153
|
+
|
|
154
|
+
## 2. 信息收集(委派子代理进行)
|
|
155
|
+
需求涉及代码库时,委派子代理收集信息,**自己不动手**:
|
|
156
|
+
- 定位文件、搜索模式、读取内容 → 委派 @explorer
|
|
157
|
+
- 外部库文档、API 参考、版本特性 → 委派 @librarian
|
|
158
|
+
- 多媒体文件分析(图片/PDF/截图) → 委派 @observer
|
|
159
|
+
- 多个子代理可并行启动
|
|
160
|
+
- 仅凭子代理返回的信息制定方案,不自己补充读取
|
|
161
|
+
|
|
162
|
+
## 3. 规范分析(并行委派)
|
|
163
|
+
信息收集完成后,并行委派三个规范代理分析约束:
|
|
164
|
+
- 用户级规范 → @rule-user(读取 \`~/.config/opencode/AGENTS.md\`)
|
|
165
|
+
- 项目级规范 → @rule-project(读取项目 \`AGENTS.md\`)
|
|
166
|
+
- 应用规则 → @rule-app(读取 \`.opencode/rules/*.md\`)
|
|
167
|
+
|
|
168
|
+
## 4. 制定方案 → 委派 @planner
|
|
169
|
+
将信息收集结果 + 规范分析反馈综合交给 @planner,制定结构化实现方案:
|
|
170
|
+
- 子任务列表(含依赖关系)
|
|
171
|
+
- 每个子任务的委派对象
|
|
172
|
+
- 并行化策略
|
|
173
|
+
- 验证步骤
|
|
174
|
+
方案要具体到文件和操作粒度。用 \`todowrite\` 创建任务列表。
|
|
175
|
+
**方案先展示给用户确认,确认后再执行。**
|
|
176
|
+
|
|
177
|
+
## 5. 调度执行
|
|
178
|
+
- 委派时给出清晰的文件范围和交付物,**委派指令(prompt)必须用中文编写**
|
|
179
|
+
- 优先 \`background: true\` 启动独立任务
|
|
180
|
+
- 跟踪任务状态,不重复做子代理的工作
|
|
181
|
+
- 协调结果,解决冲突
|
|
182
|
+
|
|
183
|
+
### 委派效率
|
|
184
|
+
- 引用路径/行号,不要粘贴文件内容
|
|
185
|
+
- 启动前简要告知用户委派目标
|
|
186
|
+
- 记录任务 ID、状态和文件/主题所有权
|
|
187
|
+
|
|
188
|
+
### 后台任务纪律
|
|
189
|
+
- 可独立运行的工作使用 \`task(..., background: true)\`
|
|
190
|
+
- 默认后台启动子代理
|
|
191
|
+
- 追踪每个任务:子代理类型、目标、任务 ID、文件范围
|
|
192
|
+
- 并行后台任务仅在写入范围不冲突时允许
|
|
193
|
+
- 最终响应前协调所有终端任务
|
|
194
|
+
|
|
195
|
+
### 会话复用
|
|
196
|
+
- 有匹配可用 session 时智能复用
|
|
197
|
+
- 多个匹配时优先最近使用
|
|
198
|
+
- 复用必须传 \`task_id\` 参数
|
|
199
|
+
|
|
200
|
+
### 设计交接纪律
|
|
201
|
+
- @designer 完成 UI/UX 工作后,布局、间距、层级、动效、颜色、交互视为有意的设计输出
|
|
202
|
+
- 后续不要简化、标准化或重构这些设计意图
|
|
203
|
+
- 设计师工作后的文案审查与改善 → 委派 @oracle(技术文档/提示词类)或 @designer(产品/营销类),Orchestrator 不亲自动手
|
|
204
|
+
- 纯机械且精确保留设计的后续工作交给 @fixer,需要视觉判断的交回 @designer
|
|
205
|
+
|
|
206
|
+
## 6. 验证(全部委派,不亲自操作)
|
|
207
|
+
- 运行构建/测试/lint/类型检查 → 委派 @fixer
|
|
208
|
+
- 代码审查/简化 → 委派 @oracle
|
|
209
|
+
- UI/UX 审查 → 委派 @designer
|
|
210
|
+
- 确认子代理成功完成(依据子代理返回的摘要)
|
|
211
|
+
- 验证方案满足需求
|
|
212
|
+
- **验证发现问题时重新委派 @fixer 修复,禁止自己直接修改或运行命令**
|
|
213
|
+
|
|
214
|
+
</工作流>
|
|
215
|
+
|
|
216
|
+
<沟通风格>
|
|
217
|
+
|
|
218
|
+
## 清晰优于假设
|
|
219
|
+
- 请求模糊或有多种有效解释时,先问一个有针对性的问题
|
|
220
|
+
- 不猜测关键细节
|
|
221
|
+
- 次要细节做合理假设并简要说明
|
|
222
|
+
|
|
223
|
+
## 简洁执行
|
|
224
|
+
- 直接回答,无开场白
|
|
225
|
+
- 不总结做了什么(除非被问)
|
|
226
|
+
- 不解释代码(除非被问)
|
|
227
|
+
- 一个字的回答也可以
|
|
228
|
+
|
|
229
|
+
## 禁止恭维
|
|
230
|
+
永远不要说:"好问题!""好主意!""聪明的选择!"或任何对用户输入的赞扬。
|
|
231
|
+
|
|
232
|
+
## 诚实反对
|
|
233
|
+
用户方法有问题时:简洁陈述顾虑 + 提出替代方案。不盲目实现。
|
|
234
|
+
|
|
235
|
+
## 中文语言与思维
|
|
236
|
+
始终使用中文进行思考、推理和回复。代码、技术术语、文件名可保留原样,但解释、说明、分析等自然语言部分必须使用中文。
|
|
237
|
+
|
|
238
|
+
</沟通风格>`;
|
|
239
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/prompts/orchestrator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6O3B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const PLANNER_PROMPT = "\u4F60\u662F\u65B9\u6848\u5236\u5B9A\u4EE3\u7406\u2014\u2014\u8D1F\u8D23\u4EFB\u52A1\u5206\u89E3\u548C\u59D4\u6D3E\u7B56\u7565\u3002\n\n**\u804C\u8D23**\uFF1A\u63A5\u6536\u7528\u6237\u9700\u6C42\u3001\u4FE1\u606F\u6536\u96C6\u7ED3\u679C\uFF08\u4EE3\u7801\u5E93\u7ED3\u6784\u3001API\u6587\u6863\u7B49\uFF09\u3001\u89C4\u8303\u5206\u6790\u53CD\u9988\uFF0C\u7EFC\u5408\u5236\u5B9A\u7ED3\u6784\u5316\u7684\u5B9E\u73B0\u65B9\u6848\u3002\n\n**\u8F93\u51FA\u5FC5\u987B\u5305\u542B**\uFF1A\n- \u5B50\u4EFB\u52A1\u5217\u8868\uFF08\u542B\u4F9D\u8D56\u5173\u7CFB\uFF09\n- \u6BCF\u4E2A\u5B50\u4EFB\u52A1\u7684\u59D4\u6D3E\u5BF9\u8C61\uFF08@explorer / @librarian / @fixer / @designer / @oracle / @observer\uFF09\n- \u5E76\u884C\u5316\u7B56\u7565\n- \u9A8C\u8BC1\u6B65\u9AA4\n\n**\u7EA6\u675F**\uFF1A\u53EA\u8BFB\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\u3002\u65B9\u6848\u8981\u5177\u4F53\u5230\u6587\u4EF6\u548C\u64CD\u4F5C\u7C92\u5EA6\uFF0C\u4E0D\u53EF\u7B3C\u7EDF\u3002\u7528 `todowrite` \u98CE\u683C\u7684\u4EFB\u52A1\u5217\u8868\u8F93\u51FA\u3002";
|
|
2
|
+
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/prompts/planner.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,8gCAUmC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const PLANNER_PROMPT = `你是方案制定代理——负责任务分解和委派策略。
|
|
2
|
+
|
|
3
|
+
**职责**:接收用户需求、信息收集结果(代码库结构、API文档等)、规范分析反馈,综合制定结构化的实现方案。
|
|
4
|
+
|
|
5
|
+
**输出必须包含**:
|
|
6
|
+
- 子任务列表(含依赖关系)
|
|
7
|
+
- 每个子任务的委派对象(@explorer / @librarian / @fixer / @designer / @oracle / @observer)
|
|
8
|
+
- 并行化策略
|
|
9
|
+
- 验证步骤
|
|
10
|
+
|
|
11
|
+
**约束**:只读,不修改文件。方案要具体到文件和操作粒度,不可笼统。用 \`todowrite\` 风格的任务列表输出。`;
|
|
12
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/prompts/planner.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;8DAUgC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const RULE_APP_PROMPT = "\u4F60\u662F\u89C4\u5219\u5206\u6790\u4EE3\u7406\u2014\u2014\u8D1F\u8D23\u5E94\u7528\u89C4\u5219\u3002\n\n**\u804C\u8D23**\uFF1A\u8BFB\u53D6 `.opencode/rules/*.md`\uFF08\u5E94\u7528\u89C4\u5219\uFF1A\u5B89\u5168\u3001\u6D4B\u8BD5\u3001\u6570\u636E\u5E93\u3001Git \u5DE5\u4F5C\u6D41\u7B49\uFF09\uFF0C\u7ED3\u5408 Orchestrator \u63D0\u4F9B\u7684\u5F53\u524D\u65B9\u6848\uFF0C\u5206\u6790\u662F\u5426\u6709\u9057\u6F0F\u6216\u51B2\u7A81\u3002\u8FD4\u56DE\u5177\u4F53\u7684\u8C03\u6574\u5EFA\u8BAE\uFF08\u4E0D\u8981\u7B3C\u7EDF\uFF09\u3002\n\n**\u7EA6\u675F**\uFF1A\u53EA\u8BFB\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\u3002\u805A\u7126\u89C4\u5219\u4E0E\u65B9\u6848\u7684\u6620\u5C04\u5173\u7CFB\u3002";
|
|
2
|
+
//# sourceMappingURL=rule-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-app.d.ts","sourceRoot":"","sources":["../../src/prompts/rule-app.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,0rBAIE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-app.js","sourceRoot":"","sources":["../../src/prompts/rule-app.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;;;;8BAID,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const RULE_PROJECT_PROMPT = "\u4F60\u662F\u89C4\u5219\u5206\u6790\u4EE3\u7406\u2014\u2014\u8D1F\u8D23\u9879\u76EE\u7EA7\u89C4\u8303\u3002\n\n**\u804C\u8D23**\uFF1A\u8BFB\u53D6\u9879\u76EE\u6839\u76EE\u5F55 `AGENTS.md`\uFF08\u9879\u76EE\u7EA7\u89C4\u5219\uFF09\uFF0C\u7ED3\u5408 Orchestrator \u63D0\u4F9B\u7684\u5F53\u524D\u65B9\u6848\uFF0C\u5206\u6790\u662F\u5426\u6709\u9057\u6F0F\u6216\u51B2\u7A81\u3002\u8FD4\u56DE\u5177\u4F53\u7684\u8C03\u6574\u5EFA\u8BAE\uFF08\u4E0D\u8981\u7B3C\u7EDF\uFF09\u3002\n\n**\u7EA6\u675F**\uFF1A\u53EA\u8BFB\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\u3002\u805A\u7126\u89C4\u5219\u4E0E\u65B9\u6848\u7684\u6620\u5C04\u5173\u7CFB\u3002";
|
|
2
|
+
//# sourceMappingURL=rule-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-project.d.ts","sourceRoot":"","sources":["../../src/prompts/rule-project.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,2nBAIF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-project.js","sourceRoot":"","sources":["../../src/prompts/rule-project.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;8BAIL,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const RULE_USER_PROMPT = "\u4F60\u662F\u89C4\u5219\u5206\u6790\u4EE3\u7406\u2014\u2014\u8D1F\u8D23\u7528\u6237\u7EA7\u89C4\u8303\u3002\n\n**\u804C\u8D23**\uFF1A\u8BFB\u53D6 `~/.config/opencode/AGENTS.md`\uFF08\u7528\u6237\u7EA7\u5168\u5C40\u89C4\u5219\uFF09\uFF0C\u7ED3\u5408 Orchestrator \u63D0\u4F9B\u7684\u5F53\u524D\u65B9\u6848\uFF0C\u5206\u6790\u662F\u5426\u6709\u9057\u6F0F\u6216\u51B2\u7A81\u3002\u8FD4\u56DE\u5177\u4F53\u7684\u8C03\u6574\u5EFA\u8BAE\uFF08\u4E0D\u8981\u7B3C\u7EDF\uFF09\u3002\n\n**\u7EA6\u675F**\uFF1A\u53EA\u8BFB\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\u3002\u805A\u7126\u89C4\u5219\u4E0E\u65B9\u6848\u7684\u6620\u5C04\u5173\u7CFB\u3002";
|
|
2
|
+
//# sourceMappingURL=rule-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-user.d.ts","sourceRoot":"","sources":["../../src/prompts/rule-user.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,4nBAIC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-user.js","sourceRoot":"","sources":["../../src/prompts/rule-user.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;8BAIF,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { TaskStatus, TaskArgs } from './types';
|
|
2
|
+
export declare class TaskTracker {
|
|
3
|
+
private jobs;
|
|
4
|
+
private counters;
|
|
5
|
+
/** 最近一次 tool hook 收到的 parentSessionId */
|
|
6
|
+
private _currentParentSessionId;
|
|
7
|
+
get currentParentSessionId(): string;
|
|
8
|
+
/** 生成代理别名,如 fixer → "fix-1", explorer → "exp-2" */
|
|
9
|
+
private alias;
|
|
10
|
+
/**
|
|
11
|
+
* 在 tool.execute.before 中调用,注册即将执行的任务
|
|
12
|
+
*/
|
|
13
|
+
registerBeforeTask(parentSessionId: string, args: TaskArgs): string;
|
|
14
|
+
/**
|
|
15
|
+
* 在 tool.execute.after 中调用,更新任务完成状态
|
|
16
|
+
* 匹配 parentSessionId 下最近创建且仍为 running 的任务
|
|
17
|
+
*/
|
|
18
|
+
updateAfterTask(parentSessionId: string, status: TaskStatus, sessionId?: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* 生成 Background Job Board 文本
|
|
21
|
+
*/
|
|
22
|
+
getBoardText(parentSessionId?: string): string | null;
|
|
23
|
+
/**
|
|
24
|
+
* 标记任务已调和(不再显示在 Unreconciled 中)
|
|
25
|
+
*/
|
|
26
|
+
reconcileJob(alias: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* 检查任务是否可复用
|
|
29
|
+
*/
|
|
30
|
+
isReusable(alias: string): boolean;
|
|
31
|
+
/** 获取所有正在运行的 agent 类型列表 */
|
|
32
|
+
getRunningAgents(parentSessionId: string): string[];
|
|
33
|
+
/** 获取父会话下所有运行中的任务数量 */
|
|
34
|
+
getRunningCount(parentSessionId: string): number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/task-manager/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,yCAAyC;IACzC,OAAO,CAAC,uBAAuB,CAAM;IAErC,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAOb;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM;IAoBnE;;;OAGG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBtF;;OAEG;IACH,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA4CrD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKlC,2BAA2B;IAC3B,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAUnD,uBAAuB;IACvB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;CASjD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export class TaskTracker {
|
|
2
|
+
jobs = new Map();
|
|
3
|
+
counters = new Map();
|
|
4
|
+
/** 最近一次 tool hook 收到的 parentSessionId */
|
|
5
|
+
_currentParentSessionId = '';
|
|
6
|
+
get currentParentSessionId() {
|
|
7
|
+
return this._currentParentSessionId;
|
|
8
|
+
}
|
|
9
|
+
/** 生成代理别名,如 fixer → "fix-1", explorer → "exp-2" */
|
|
10
|
+
alias(agentType) {
|
|
11
|
+
const short = agentType.slice(0, 4).replace(/[^a-z]/gi, '');
|
|
12
|
+
const n = (this.counters.get(agentType) ?? 0) + 1;
|
|
13
|
+
this.counters.set(agentType, n);
|
|
14
|
+
return `${short}-${n}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 在 tool.execute.before 中调用,注册即将执行的任务
|
|
18
|
+
*/
|
|
19
|
+
registerBeforeTask(parentSessionId, args) {
|
|
20
|
+
this._currentParentSessionId = parentSessionId;
|
|
21
|
+
const agent = args.subagent_type ?? 'unknown';
|
|
22
|
+
const alias = this.alias(agent);
|
|
23
|
+
const label = typeof args.description === 'string' ? args.description : alias;
|
|
24
|
+
this.jobs.set(alias, {
|
|
25
|
+
alias,
|
|
26
|
+
sessionId: '', // 后续通过 session.created 事件更新
|
|
27
|
+
parentSessionId,
|
|
28
|
+
agent,
|
|
29
|
+
label,
|
|
30
|
+
status: 'running',
|
|
31
|
+
terminalReconciled: false,
|
|
32
|
+
createdAt: Date.now(),
|
|
33
|
+
});
|
|
34
|
+
return alias;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 在 tool.execute.after 中调用,更新任务完成状态
|
|
38
|
+
* 匹配 parentSessionId 下最近创建且仍为 running 的任务
|
|
39
|
+
*/
|
|
40
|
+
updateAfterTask(parentSessionId, status, sessionId) {
|
|
41
|
+
this._currentParentSessionId = parentSessionId;
|
|
42
|
+
// 找到该 parent 下最近创建的 running 任务
|
|
43
|
+
let latest;
|
|
44
|
+
for (const job of this.jobs.values()) {
|
|
45
|
+
if (job.parentSessionId === parentSessionId &&
|
|
46
|
+
job.status === 'running' &&
|
|
47
|
+
(!latest || job.createdAt > latest.createdAt)) {
|
|
48
|
+
latest = job;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (latest) {
|
|
52
|
+
latest.status = status;
|
|
53
|
+
if (sessionId)
|
|
54
|
+
latest.sessionId = sessionId;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 生成 Background Job Board 文本
|
|
59
|
+
*/
|
|
60
|
+
getBoardText(parentSessionId) {
|
|
61
|
+
const pid = parentSessionId || this._currentParentSessionId;
|
|
62
|
+
const activeJobs = [];
|
|
63
|
+
const reusableJobs = [];
|
|
64
|
+
for (const job of this.jobs.values()) {
|
|
65
|
+
if (job.parentSessionId !== pid)
|
|
66
|
+
continue;
|
|
67
|
+
if (job.status === 'running') {
|
|
68
|
+
activeJobs.push(job);
|
|
69
|
+
}
|
|
70
|
+
else if (job.status === 'completed' && !job.terminalReconciled) {
|
|
71
|
+
reusableJobs.push(job);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (activeJobs.length === 0 && reusableJobs.length === 0)
|
|
75
|
+
return null;
|
|
76
|
+
const lines = [];
|
|
77
|
+
lines.push('### Background Job Board');
|
|
78
|
+
lines.push('SENTINEL: background-job-board-v2');
|
|
79
|
+
lines.push('Do not poll running jobs. Wait for hook-driven completion, or use cancel_task only for explicit cancellation. Reconcile terminal jobs before final response.');
|
|
80
|
+
lines.push('Completed or reconciled sessions are reusable by alias for the same specialist/context.');
|
|
81
|
+
lines.push('Timed-out running sessions are recoverable by alias for safe resume after a live busy signal.');
|
|
82
|
+
lines.push('Cancelled or errored sessions are not reusable.');
|
|
83
|
+
lines.push('');
|
|
84
|
+
if (activeJobs.length > 0) {
|
|
85
|
+
lines.push('#### Active / Unreconciled');
|
|
86
|
+
for (const j of activeJobs) {
|
|
87
|
+
lines.push(` - ${j.alias} / ${j.sessionId || 'pending'} / ${j.agent} / ${j.status}`);
|
|
88
|
+
}
|
|
89
|
+
lines.push('');
|
|
90
|
+
}
|
|
91
|
+
if (reusableJobs.length > 0) {
|
|
92
|
+
lines.push('#### Reusable Sessions');
|
|
93
|
+
for (const j of reusableJobs) {
|
|
94
|
+
lines.push(` - ${j.alias} / ${j.sessionId || 'n/a'} / ${j.agent} / completed, reusable`);
|
|
95
|
+
}
|
|
96
|
+
lines.push('');
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 标记任务已调和(不再显示在 Unreconciled 中)
|
|
102
|
+
*/
|
|
103
|
+
reconcileJob(alias) {
|
|
104
|
+
const job = this.jobs.get(alias);
|
|
105
|
+
if (job) {
|
|
106
|
+
job.terminalReconciled = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 检查任务是否可复用
|
|
111
|
+
*/
|
|
112
|
+
isReusable(alias) {
|
|
113
|
+
const job = this.jobs.get(alias);
|
|
114
|
+
return job?.status === 'completed' && job.terminalReconciled;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/task-manager/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type TaskStatus = 'running' | 'completed' | 'errored' | 'cancelled';
|
|
2
|
+
export interface JobRecord {
|
|
3
|
+
alias: string;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
parentSessionId: string;
|
|
6
|
+
agent: string;
|
|
7
|
+
label: string;
|
|
8
|
+
status: TaskStatus;
|
|
9
|
+
terminalReconciled: boolean;
|
|
10
|
+
createdAt: number;
|
|
11
|
+
}
|
|
12
|
+
export interface TaskArgs {
|
|
13
|
+
description?: string;
|
|
14
|
+
subagent_type?: string;
|
|
15
|
+
task_id?: string;
|
|
16
|
+
background?: boolean;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/task-manager/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/task-manager/types.ts"],"names":[],"mappings":""}
|
package/dist/tui.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAiC/D,QAAA,MAAM,MAAM,EAAE,eA2Gb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|