@ghyper9023/pi-dev-workflow 0.6.2 → 0.7.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/.github/workflows/release.yml +56 -0
- package/.pre-commit-config.yaml +75 -0
- package/.version/RELEASE-v0.7.0.md +85 -0
- package/README.md +80 -228
- package/extensions/dev-prompts.ts +351 -450
- package/extensions/git-commands.ts +62 -171
- package/extensions/grill-me-agent.ts +98 -137
- package/extensions/session-utils.ts +169 -0
- package/extensions/ui-helpers.ts +2 -780
- package/package.json +2 -2
- package/prompts/APPEND_SYSTEM.md +63 -59
- package/skills/review-html/SKILL.md +1 -1
- package/tests/test-no-subagents.mjs +146 -0
- package/.doc/AGENT-FRONTMATTER-REFERENCE.md +0 -198
- package/agents/git-agent.md +0 -44
- package/agents/grill/dev-doc-grill-agent.md +0 -42
- package/agents/grill/dev-fix-grill-agent.md +0 -44
- package/agents/grill/dev-grill-agent.md +0 -40
- package/agents/grill/dev-perf-grill-agent.md +0 -45
- package/agents/grill/dev-prd-agent.md +0 -60
- package/agents/grill/dev-refactor-grill-agent.md +0 -46
- package/agents/grill/dev-test-grill-agent.md +0 -45
- package/agents/review-agent.md +0 -53
- package/agents/workflow/docWriter-agent.md +0 -53
- package/agents/workflow/planner-agent.md +0 -131
- package/agents/workflow/reviewer-agent.md +0 -128
- package/agents/workflow/trimmer-agent.md +0 -78
- package/agents/workflow/worker-agent.md +0 -70
- package/extensions/sub-agents.ts +0 -954
- package/extensions/workflow-engine.ts +0 -2005
- package/tests/test-grill-json-fix.mjs +0 -243
- package/tests/test-loopcount-timeout-fix.mjs +0 -336
- package/tests/test-output-directory-structure.mjs +0 -177
- package/tests/test-save-answer-file-workflow.mjs +0 -187
- package/tests/test-workflow-config.mjs +0 -244
- package/tests/test-workflow-engine-bugs.mjs +0 -908
- package/tests/test-workflow-engine.mjs +0 -518
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ghyper9023/pi-dev-workflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"pi-package"
|
|
6
6
|
],
|
|
7
|
-
"description": "Developer workflow toolkit for pi: git
|
|
7
|
+
"description": "Developer workflow toolkit for pi: git commands, code review, Karpathy guidelines, themes",
|
|
8
8
|
"homepage": "https://github.com/cherish-ltt/pi-dev-workflow#readme",
|
|
9
9
|
"bugs": {
|
|
10
10
|
"url": "https://github.com/cherish-ltt/pi-dev-workflow/issues"
|
package/prompts/APPEND_SYSTEM.md
CHANGED
|
@@ -1,59 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
###
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
## Global Agent Rules
|
|
2
|
+
|
|
3
|
+
### Language
|
|
4
|
+
默认用简体中文回复;用户明确指定时再切换语言。
|
|
5
|
+
默认不使用 emoji,除非用户明确要求。
|
|
6
|
+
回答应简短精炼且足够说明情况。
|
|
7
|
+
|
|
8
|
+
### Working Style
|
|
9
|
+
像高绩效资深工程师一样工作:直接、克制、执行优先。
|
|
10
|
+
技术准确优先于迎合用户信念。专注事实和解决问题,提供直接、客观的技术信息,避免不必要的夸张、赞美或情感认同。
|
|
11
|
+
绝不给出时间预估,例如“几分钟”“大约 5 分钟”“2-3 周”“下次”等。
|
|
12
|
+
先给结论或结果,再补必要上下文。
|
|
13
|
+
能合理假设就继续,不为低风险细节反复确认。
|
|
14
|
+
不加无关功能,不做顺手重构,不给泛泛建议代替落地执行。
|
|
15
|
+
优先选择简单、可维护、可上线的方案。
|
|
16
|
+
不添加未要求的功能、不重构、不做“改进”。修复一个 bug 不需要清理周边代码。
|
|
17
|
+
不提前抽象:不为一次性操作创建 helper、utility 或抽象层,不为假想的未来需求设计。
|
|
18
|
+
|
|
19
|
+
### Coding Standards
|
|
20
|
+
写低复杂度代码,保证易读、易调试、易修改。
|
|
21
|
+
避免过度设计、重抽象、额外分层、大依赖、炫技写法和隐式行为。
|
|
22
|
+
保持 API 小而清晰,行为显式,命名明确,控制流平坦,优先早返回。
|
|
23
|
+
默认不写注释。只在“为什么这样做”不显然时写注释,例如隐藏约束、微妙不变量、特定 bug 规避。
|
|
24
|
+
注释只解释意图、边界和取舍,不复述代码字面意思。
|
|
25
|
+
不在注释里引用当前任务、修复内容或调用方。
|
|
26
|
+
不删除现有注释,除非删除其描述的代码。
|
|
27
|
+
|
|
28
|
+
### Debug Policy
|
|
29
|
+
先追根因,不做只压症状的补丁。
|
|
30
|
+
让错误显式暴露;不要靠静默兜底、伪成功、吞异常或隐藏默认值掩盖问题。
|
|
31
|
+
如果问题来自重复逻辑、双重真值、共享状态或跨模块行为,按结构性问题处理,不叠补丁。
|
|
32
|
+
如实汇报,不粉饰。
|
|
33
|
+
测试失败就说失败,带上相关输出。
|
|
34
|
+
若未运行验证步骤,明确说明,不暗示成功。
|
|
35
|
+
输出显示失败时,绝不声称“所有测试通过”。
|
|
36
|
+
不压制或简化失败检查来制造表面绿色。
|
|
37
|
+
不把未完成或损坏的工作说成已完成。
|
|
38
|
+
|
|
39
|
+
### Execution Rules
|
|
40
|
+
多步任务在调用工具前,先用 1 到 2 句说明要做什么和第一步。
|
|
41
|
+
先读相关文件和真实上下文,再修改。
|
|
42
|
+
绝不提议修改没读过的代码。必须先阅读和理解再修改。
|
|
43
|
+
改动保持最小闭环,但该删的死代码、冗余分支和重复逻辑要一起清掉。
|
|
44
|
+
有匹配的 skill 就先读 `SKILL.md` 并按它执行。
|
|
45
|
+
任务完成后默认用简洁语言总结任务;如果用户有具体要求,按用户要求输出。
|
|
46
|
+
任务完成后绝不主动 commit 或 push。但可在任务总结末尾提醒用户:是否需要帮忙提交/push等操作。
|
|
47
|
+
任何 Git 操作都使用标准规范执行。
|
|
48
|
+
git commit 操作保持分批提交,避免一次性提交过多代码或多个任务内容合并在一个内提交。
|
|
49
|
+
|
|
50
|
+
### Validation
|
|
51
|
+
改完先做最相关的验证:优先针对性测试,再类型 /lint/build,最后最小冒烟。
|
|
52
|
+
能跑就跑;不能跑就明确说明原因,不把静态阅读包装成运行时验证。
|
|
53
|
+
|
|
54
|
+
### Stop Rule
|
|
55
|
+
每完成一个关键步骤就判断一次:是否已经能基于足够证据回答用户的核心请求。
|
|
56
|
+
如果可以,就停止,不继续为了 “更完整” 而扩写或过度搜索。
|
|
57
|
+
|
|
58
|
+
### 核心理念
|
|
59
|
+
高效达成请求结果,不过度工程。无范围蔓延。只实现直接要求的内容。无假想设计,无必要抽象,默认无注释。不为不可能条件加校验。无时间预估。无 emoji。无过度认同。准确、客观、简洁。始终牢记自己的身份和职责。
|
|
60
|
+
|
|
61
|
+
**除用户明确要求执行特定操作外,默认严格遵循以上规范**
|
|
62
|
+
**除用户明确要求执行特定操作外,默认严格遵循以上规范**
|
|
63
|
+
**除用户明确要求执行特定操作外,默认严格遵循以上规范**
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* test-no-subagents.mjs — 验证子代理系统已移除,其余功能正常工作
|
|
3
|
+
*
|
|
4
|
+
* Run: node tests/test-no-subagents.mjs
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as fs from "node:fs";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
|
|
11
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const ROOT = path.resolve(__dirname, "..");
|
|
13
|
+
|
|
14
|
+
// ── Helpers ──────────────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
let pass = 0;
|
|
17
|
+
let fail = 0;
|
|
18
|
+
|
|
19
|
+
function assert(condition, msg) {
|
|
20
|
+
if (condition) {
|
|
21
|
+
pass++;
|
|
22
|
+
console.log(` ✅ ${msg}`);
|
|
23
|
+
} else {
|
|
24
|
+
fail++;
|
|
25
|
+
console.error(` ❌ ${msg}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function assertNotExists(rel, msg) {
|
|
30
|
+
assert(!fs.existsSync(path.resolve(ROOT, rel)), msg);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function assertExists(rel, msg) {
|
|
34
|
+
assert(fs.existsSync(path.resolve(ROOT, rel)), msg);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function assertIncludes(rel, substr, msg) {
|
|
38
|
+
const src = fs.readFileSync(path.resolve(ROOT, rel), "utf-8");
|
|
39
|
+
assert(src.includes(substr), msg);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function assertNotIncludes(rel, substr, msg) {
|
|
43
|
+
const src = fs.readFileSync(path.resolve(ROOT, rel), "utf-8");
|
|
44
|
+
assert(!src.includes(substr), msg);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ═══════════════════════════════════════════════════════════════
|
|
48
|
+
// 1. 子代理基础设施已删除
|
|
49
|
+
// ═══════════════════════════════════════════════════════════════
|
|
50
|
+
|
|
51
|
+
console.log("📋 子代理基础设施\n");
|
|
52
|
+
|
|
53
|
+
assertNotExists("extensions/sub-agents.ts", "extensions/sub-agents.ts 已删除");
|
|
54
|
+
assertNotExists("extensions/workflow-engine.ts", "extensions/workflow-engine.ts 已删除");
|
|
55
|
+
assertExists("extensions/session-utils.ts", "extensions/session-utils.ts 提供共享的等待/会话工具");
|
|
56
|
+
assertNotExists("agents/", "agents/ 目录已删除");
|
|
57
|
+
assertNotExists(".doc/AGENT-FRONTMATTER-REFERENCE.md", "AGENT-FRONTMATTER-REFERENCE.md 已删除");
|
|
58
|
+
|
|
59
|
+
// ═══════════════════════════════════════════════════════════════
|
|
60
|
+
// 2. dev-prompts 不再引用子代理,改为直接发送给当前代理
|
|
61
|
+
// ═══════════════════════════════════════════════════════════════
|
|
62
|
+
|
|
63
|
+
console.log("\n📋 dev-prompts.ts\n");
|
|
64
|
+
|
|
65
|
+
assertNotIncludes("extensions/dev-prompts.ts", "./sub-agents", "不再引入 sub-agents");
|
|
66
|
+
assertNotIncludes("extensions/dev-prompts.ts", "./workflow-engine", "不再引入 workflow-engine");
|
|
67
|
+
assertNotIncludes("extensions/dev-prompts.ts", "runWorkflow", "不再调用 runWorkflow");
|
|
68
|
+
assertNotIncludes("extensions/dev-prompts.ts", "discoverAgents", "不再自动发现 agent");
|
|
69
|
+
assertNotIncludes("extensions/dev-prompts.ts", "WORKFLOW_STEPS", "不再定义工作流步骤链");
|
|
70
|
+
assertIncludes("extensions/dev-prompts.ts", "event.source === \"extension\"", "过滤扩展注入消息,防止递归");
|
|
71
|
+
assertIncludes("extensions/dev-prompts.ts", "expandPromptTemplates: true", "skill 命令展开执行");
|
|
72
|
+
assertIncludes("extensions/dev-prompts.ts", "pi.sendUserMessage(finalPrompt", "组装后的提示词直接发送给当前代理");
|
|
73
|
+
assertIncludes("extensions/dev-prompts.ts", "saveAnswerFile(ctx.cwd, finalPrompt)", "保留提示词持久化");
|
|
74
|
+
assertIncludes("extensions/dev-prompts.ts", "recoverFromBackup(ctx.cwd)", "保留断点恢复");
|
|
75
|
+
|
|
76
|
+
// ═══════════════════════════════════════════════════════════════
|
|
77
|
+
// 3. Git 命令直接执行,不再委派给子代理
|
|
78
|
+
// ═══════════════════════════════════════════════════════════════
|
|
79
|
+
|
|
80
|
+
console.log("\n📋 git-commands.ts\n");
|
|
81
|
+
|
|
82
|
+
assertNotIncludes("extensions/git-commands.ts", "./sub-agents", "不再引入 sub-agents");
|
|
83
|
+
assertNotIncludes("extensions/git-commands.ts", "spawnSubagent", "不再 spawn 子进程");
|
|
84
|
+
assertIncludes("extensions/git-commands.ts", "分批提交", "空消息时交由主代理分批提交");
|
|
85
|
+
assertIncludes("extensions/git-commands.ts", "pi.exec(\"git\"", "通过 pi.exec 直接执行 git");
|
|
86
|
+
assertIncludes("extensions/git-commands.ts", "git-commit", "保留 /git-commit 命令");
|
|
87
|
+
assertIncludes("extensions/git-commands.ts", "git-push", "保留 /git-push 命令");
|
|
88
|
+
assertIncludes("extensions/git-commands.ts", "git-commit-push", "保留 /git-commit-push 命令");
|
|
89
|
+
|
|
90
|
+
// ═══════════════════════════════════════════════════════════════
|
|
91
|
+
// 4. Grill / PRD 运行在当前代理中
|
|
92
|
+
// ═══════════════════════════════════════════════════════════════
|
|
93
|
+
|
|
94
|
+
console.log("\n📋 grill-me-agent.ts\n");
|
|
95
|
+
|
|
96
|
+
assertNotIncludes("extensions/grill-me-agent.ts", "./sub-agents", "不再引入 sub-agents");
|
|
97
|
+
assertNotIncludes("extensions/grill-me-agent.ts", "spawnSubagent", "不再 spawn 子进程");
|
|
98
|
+
assertIncludes("extensions/grill-me-agent.ts", "pollFor", "轮询等待当前代理产物后读取结果");
|
|
99
|
+
assertIncludes("extensions/grill-me-agent.ts", "GRILL_ANSWERS_DIRNAME = \"answers\"", "保留 answers 子目录");
|
|
100
|
+
assertIncludes("extensions/grill-me-agent.ts", "GRILL_QUESTIONS_DIRNAME = \"questions\"", "保留 questions 子目录");
|
|
101
|
+
|
|
102
|
+
// ═══════════════════════════════════════════════════════════════
|
|
103
|
+
// 5. UI 组件保留 select/confirm/input,移除工作流面板
|
|
104
|
+
// ═══════════════════════════════════════════════════════════════
|
|
105
|
+
|
|
106
|
+
console.log("\n📋 ui-helpers.ts\n");
|
|
107
|
+
|
|
108
|
+
assertNotIncludes("extensions/ui-helpers.ts", "updateWorkflowWidget", "移除工作流 widget");
|
|
109
|
+
assertNotIncludes("extensions/ui-helpers.ts", "sendWorkflowResult", "移除工作流结果消息");
|
|
110
|
+
assertNotIncludes("extensions/ui-helpers.ts", "WorkflowStepWidgetState", "移除工作流状态类型");
|
|
111
|
+
assertIncludes("extensions/ui-helpers.ts", "export function uiSelect", "保留 uiSelect");
|
|
112
|
+
assertIncludes("extensions/ui-helpers.ts", "export function uiConfirm", "保留 uiConfirm");
|
|
113
|
+
assertIncludes("extensions/ui-helpers.ts", "export function uiInput", "保留 uiInput");
|
|
114
|
+
|
|
115
|
+
// ═══════════════════════════════════════════════════════════════
|
|
116
|
+
// 6. 审查技能与输出目录结构保持不变
|
|
117
|
+
// ═══════════════════════════════════════════════════════════════
|
|
118
|
+
|
|
119
|
+
console.log("\n📋 输出目录与技能\n");
|
|
120
|
+
|
|
121
|
+
const reviewSkill = fs.readFileSync(path.resolve(ROOT, "skills/review-html/SKILL.md"), "utf-8");
|
|
122
|
+
assertIncludes("skills/review-html/SKILL.md", ".pi-dev-output/pi-review/html/", "review-html 仍写入 pi-review/html/");
|
|
123
|
+
|
|
124
|
+
const devPrompts = fs.readFileSync(path.resolve(ROOT, "extensions/dev-prompts.ts"), "utf-8");
|
|
125
|
+
assertIncludes("extensions/dev-prompts.ts", "\"pi-review\"", "自动审查仍查找 pi-review/ 输出目录");
|
|
126
|
+
assertIncludes("extensions/session-utils.ts", "detectProjectDefaults", "项目探测(语言/测试/lint/pre-commit/CI)");
|
|
127
|
+
assertIncludes("extensions/session-utils.ts", "defaultAcceptance", "生成默认验收标准");
|
|
128
|
+
assertIncludes("extensions/dev-prompts.ts", "applyDefaults", "未填字段注入默认值");
|
|
129
|
+
assertIncludes("extensions/dev-prompts.ts", "**验收标准**", "四段式:验收标准段");
|
|
130
|
+
assertIncludes("extensions/dev-prompts.ts", "WizardQuestion", "提问结构支持字段合并");
|
|
131
|
+
assertIncludes("extensions/dev-prompts.ts", "assignAnswers", "提问支持单值/多字段填写");
|
|
132
|
+
|
|
133
|
+
// ═══════════════════════════════════════════════════════════════
|
|
134
|
+
// Summary
|
|
135
|
+
// ═══════════════════════════════════════════════════════════════
|
|
136
|
+
|
|
137
|
+
console.log(`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
138
|
+
console.log(`结果: ${pass} 通过, ${fail} 失败, 共 ${pass + fail} 个测试`);
|
|
139
|
+
console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
140
|
+
|
|
141
|
+
if (fail > 0) {
|
|
142
|
+
console.error("\n⚠️ 部分测试未通过");
|
|
143
|
+
process.exit(1);
|
|
144
|
+
} else {
|
|
145
|
+
console.log("\n✅ 所有测试通过 — 子代理已移除,其余功能正常运行");
|
|
146
|
+
}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
# Agent Frontmatter 配置参考
|
|
2
|
-
|
|
3
|
-
所有子代理的行为通过其 `.md` 文件的 YAML frontmatter 配置。
|
|
4
|
-
每个字段对应 `spawnSubagent()` 构造的 pi CLI 参数。
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 完整字段一览
|
|
9
|
-
|
|
10
|
-
```yaml
|
|
11
|
-
---
|
|
12
|
-
name: <string> # 必填 — agent 标识名
|
|
13
|
-
description: <string> # 必填 — agent 描述
|
|
14
|
-
tools: <csv> # 工具白名单(逗号分隔)
|
|
15
|
-
thinking: <string> # 推理等级
|
|
16
|
-
session: <boolean> # 是否保存 session
|
|
17
|
-
session-dir: <string> # session 存储目录(默认 .pi-dev-output/pi-subagent-sessions/)
|
|
18
|
-
no-context: <boolean> # 是否跳过 AGENTS.md/CLAUDE.md
|
|
19
|
-
no-extensions: <boolean> # 是否禁用扩展加载
|
|
20
|
-
mode: <string> # 输出模式
|
|
21
|
-
extra-args: <string> # 额外 CLI 参数(空格分隔)
|
|
22
|
-
---
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 字段详解
|
|
28
|
-
|
|
29
|
-
### `name` — Agent 标识名
|
|
30
|
-
|
|
31
|
-
- **必填** ✓
|
|
32
|
-
- **类型**: `string`
|
|
33
|
-
- **作用**: 作为 `subagent` tool 的 `agent` 参数值、日志标识、session 文件名前缀
|
|
34
|
-
- **示例**: `planner`, `git-agent`, `review-agent`
|
|
35
|
-
|
|
36
|
-
### `description` — Agent 描述
|
|
37
|
-
|
|
38
|
-
- **必填** ✓
|
|
39
|
-
- **类型**: `string`
|
|
40
|
-
- **作用**: 在工具描述中展示,帮助 LLM 理解该 agent 的用途
|
|
41
|
-
|
|
42
|
-
### `tools` — 工具白名单
|
|
43
|
-
|
|
44
|
-
- **类型**: 逗号分隔的字符串
|
|
45
|
-
- **作用**: 对应 `--tools` CLI 参数
|
|
46
|
-
- **参数范围**: pi 内置工具名(可用 `pi --help` 查看),如 `read`, `bash`, `write`, `find`, `ls`, `grep`, `edit` 等
|
|
47
|
-
- **默认值**: 不传 `--tools` 则所有内置工具可用
|
|
48
|
-
- **示例**: `tools: read, bash, write, find, ls, grep`
|
|
49
|
-
|
|
50
|
-
### `thinking` — 推理等级
|
|
51
|
-
|
|
52
|
-
- **类型**: 字符串
|
|
53
|
-
- **作用**: 对应 `--thinking` CLI 参数
|
|
54
|
-
- **参数范围**:
|
|
55
|
-
|
|
56
|
-
| 值 | 说明 | 延迟影响 | Token 影响 |
|
|
57
|
-
|----|------|---------|-----------|
|
|
58
|
-
| `off` | 关闭推理(纯执行) | 基准 | 基准 |
|
|
59
|
-
| `low` | 少量推理 | +20~40% | +30~50% |
|
|
60
|
-
| `medium` | 中等推理 | +50~100% | +50~80% |
|
|
61
|
-
| `high` | 深度推理 | +100~300% | +100~200% |
|
|
62
|
-
| `xhigh` | 极限推理 | +200~500% | +200~400% |
|
|
63
|
-
|
|
64
|
-
- **建议**:
|
|
65
|
-
- `off` — git 操作、按计划写代码、机械精简
|
|
66
|
-
- `low` — 计划制定、代码审查、设计评审、PRD 编写
|
|
67
|
-
- `medium` — 复杂架构分析、跨模块重构
|
|
68
|
-
- `high` — 安全审计、深层 Bug 追踪
|
|
69
|
-
- `xhigh` — 极其复杂的跨领域分析
|
|
70
|
-
|
|
71
|
-
### `session` — Session 持久化
|
|
72
|
-
|
|
73
|
-
- **类型**: 布尔值
|
|
74
|
-
- **作用**: 对应 `--no-session` / `--session` CLI 参数
|
|
75
|
-
- **参数范围**: `true` | `false`
|
|
76
|
-
- **`false`** (默认): 子代理运行结束后不保留交互记录,性能最优
|
|
77
|
-
- **`true`**: 保存完整交互记录,便于调试/查看子代理的思考过程
|
|
78
|
-
|
|
79
|
-
当 `session: true` 时:
|
|
80
|
-
- 自动生成 session 名: `{ISO时间戳}_{agent名称}`
|
|
81
|
-
- 默认存储路径: `.pi-dev-output/pi-subagent-sessions/`
|
|
82
|
-
- 可通过 `session-dir` 自定义路径
|
|
83
|
-
|
|
84
|
-
### `session-dir` — Session 存储目录
|
|
85
|
-
|
|
86
|
-
- **类型**: 字符串(路径)
|
|
87
|
-
- **作用**: 对应 `--session-dir` CLI 参数
|
|
88
|
-
- **仅在 `session: true` 时生效**
|
|
89
|
-
- **默认值**: `.pi-dev-output/pi-subagent-sessions/`
|
|
90
|
-
- **示例**: `session-dir: /tmp/my-sessions`
|
|
91
|
-
|
|
92
|
-
### `no-context` — 项目上下文文件
|
|
93
|
-
|
|
94
|
-
- **类型**: 布尔值
|
|
95
|
-
- **作用**: 对应 `-nc` CLI 参数
|
|
96
|
-
- **参数范围**: `true` | `false`
|
|
97
|
-
|
|
98
|
-
| 值 | 行为 | 适用场景 |
|
|
99
|
-
|----|------|---------|
|
|
100
|
-
| `true` (默认) | 跳过 AGENTS.md / CLAUDE.md | git 操作、纯执行场景 |
|
|
101
|
-
| `false` | 加载 AGENTS.md / CLAUDE.md | 需要项目上下文的 agent(架构分析、代码审查) |
|
|
102
|
-
|
|
103
|
-
### `no-extensions` — 扩展加载
|
|
104
|
-
|
|
105
|
-
- **类型**: 布尔值
|
|
106
|
-
- **作用**: 对应 `-ne` CLI 参数
|
|
107
|
-
- **参数范围**: `true` | `false`
|
|
108
|
-
|
|
109
|
-
| 值 | 行为 | 适用场景 |
|
|
110
|
-
|----|------|---------|
|
|
111
|
-
| `true` (默认) | 禁用所有扩展,启动更快 | git 操作(仅需 bash) |
|
|
112
|
-
| `false` | 加载扩展(MCP 工具、Skill 文件等) | 需要 MCP/Skill 的 agent(计划、审查、文档) |
|
|
113
|
-
|
|
114
|
-
### `mode` — 输出模式
|
|
115
|
-
|
|
116
|
-
- **类型**: 字符串
|
|
117
|
-
- **作用**: 对应 `--mode` CLI 参数
|
|
118
|
-
- **参数范围**: `json` | `text`
|
|
119
|
-
|
|
120
|
-
| 值 | 行为 | 适用场景 |
|
|
121
|
-
|----|------|---------|
|
|
122
|
-
| `json` (默认) | JSON 结构化输出,workflow-engine 可解析 | 工作流 agent(planner/worker/reviewer/trimmer/docWriter) |
|
|
123
|
-
| `text` | 自然文本输出 | LLM 直接调用的场景 |
|
|
124
|
-
|
|
125
|
-
**注意**: 工作流引擎依赖 `extractFinalOutput()` 解析 JSON 输出,工作流 agent 必须使用 `mode: json`。
|
|
126
|
-
|
|
127
|
-
### `extra-args` — 额外 CLI 参数
|
|
128
|
-
|
|
129
|
-
- **类型**: 字符串(空格分隔多个参数)
|
|
130
|
-
- **作用**: 在所有标准参数之后追加,优先级最高
|
|
131
|
-
- **用途**: 传递 pi CLI 的其他参数,如 `--verbose`, `--color always`, `--max-tokens 4096` 等
|
|
132
|
-
- **示例**: `extra-args: --verbose --max-tokens 4096`
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 原始 CLI 参数映射表
|
|
137
|
-
|
|
138
|
-
以下是对应关系:**原始硬编码参数 → 配置位置**
|
|
139
|
-
|
|
140
|
-
| 原始参数 | 含义 | 配置方式 |
|
|
141
|
-
|---------|------|---------|
|
|
142
|
-
| `-p` | 非交互模式 | **始终启用**,不可配置 |
|
|
143
|
-
| `--no-session` | 不保存会话 | frontmatter `session: false` 或 `argsOverride.session = false` |
|
|
144
|
-
| `-nc` | 禁用上下文文件 | frontmatter `no-context: true` 或 `argsOverride.noContext = true` |
|
|
145
|
-
| `-ne` | 禁用扩展发现 | frontmatter `no-extensions: true` 或 `argsOverride.noExtensions = true` |
|
|
146
|
-
| `--mode json` | JSON 结构化输出 | frontmatter `mode: json` 或 `argsOverride.mode = "json"` |
|
|
147
|
-
| `--thinking off` | 关闭深度思考 | frontmatter `thinking: off` 或 `argsOverride.thinkingLevel = "off"` |
|
|
148
|
-
| `--tools ...` | 工具白名单 | frontmatter `tools: read, bash, ...` 或 `argsOverride.tools = [...]` |
|
|
149
|
-
|
|
150
|
-
**优先级**: `argsOverride` (调用方) > frontmatter > 硬编码默认值
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Agent 配置速查表
|
|
155
|
-
|
|
156
|
-
| Agent | thinking | session | no-context | no-extensions | mode | 适用场景 |
|
|
157
|
-
|-------|----------|---------|------------|---------------|------|---------|
|
|
158
|
-
| **git-agent** | off | false | **true** ✅ | **true** ✅ | json | 纯 git 命令,最小开销 |
|
|
159
|
-
| **planner** | low | false | **false** 🔓 | **false** 🔓 | json | 需 MCP/Skill 分析代码结构 |
|
|
160
|
-
| **worker** | off | false | **false** 🔓 | **false** 🔓 | json | 按计划写代码,可调用 MCP |
|
|
161
|
-
| **reviewer** | low | false | **false** 🔓 | **false** 🔓 | json | 需 Skill 审查代码 |
|
|
162
|
-
| **trimmer** | off | false | **false** 🔓 | **false** 🔓 | json | 精简代码,可用 MCP |
|
|
163
|
-
| **docWriter** | off | false | **false** 🔓 | **false** 🔓 | json | 更新文档,可读代码库 |
|
|
164
|
-
| **review-agent** | low | false | **false** 🔓 | **false** 🔓 | json | HTML 审查报告 |
|
|
165
|
-
| **dev-*-grill-agent** | low | false | **false** 🔓 | **false** 🔓 | json | 设计评审追问 |
|
|
166
|
-
| **dev-prd-agent** | low | false | **false** 🔓 | **false** 🔓 | json | PRD 合成 |
|
|
167
|
-
|
|
168
|
-
> ✅ `true` = 禁用 / 🔓 `false` = 开启
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
## `argsOverride`(调用方覆写)参考
|
|
173
|
-
|
|
174
|
-
`spawnSubagent()` 第 7 个参数,TypeScript 接口:
|
|
175
|
-
|
|
176
|
-
```typescript
|
|
177
|
-
interface SubagentArgs {
|
|
178
|
-
thinkingLevel?: string; // "off" | "low" | "medium" | "high" | "xhigh"
|
|
179
|
-
session?: boolean; // true/false
|
|
180
|
-
sessionDir?: string; // 自定义 session 路径
|
|
181
|
-
noContext?: boolean; // true/false
|
|
182
|
-
noExtensions?: boolean; // true/false
|
|
183
|
-
mode?: string; // "json" | "text"
|
|
184
|
-
tools?: string[]; // 工具白名单数组
|
|
185
|
-
appendSystemPrompt?: string; // 额外 system prompt
|
|
186
|
-
extraArgs?: string[]; // 原始 CLI 参数
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
示例(workflow-engine 中覆写):
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
const result = await spawnSubagent(agent, task, cwd, signal, timeout, onProgress, {
|
|
194
|
-
thinkingLevel: "medium", // 临时提升推理等级
|
|
195
|
-
session: true, // 调试时保存 session
|
|
196
|
-
noExtensions: false, // 临时开启 MCP
|
|
197
|
-
});
|
|
198
|
-
```
|
package/agents/git-agent.md
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-agent
|
|
3
|
-
description: Git 操作专家,专职负责本地提交与远程推送
|
|
4
|
-
tools: bash
|
|
5
|
-
thinking: off
|
|
6
|
-
session: false
|
|
7
|
-
session-dir:
|
|
8
|
-
no-context: true
|
|
9
|
-
no-extensions: true
|
|
10
|
-
mode: json
|
|
11
|
-
extra-args:
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
你是一名专职的 Git 操作专家。你唯一的职责是执行 Git 命令。
|
|
15
|
-
你只能使用一个工具:`bash`。
|
|
16
|
-
|
|
17
|
-
## 核心限制:严禁多余输出
|
|
18
|
-
|
|
19
|
-
> **绝对死命令:** 你的最终文本输出**不得超过 2 行**(每行最多 100 个字符)。
|
|
20
|
-
> **严禁:** 输出 `git diff` 结果、文件内容、分支列表或任何冗长的状态上下文。
|
|
21
|
-
|
|
22
|
-
## 执行流水线 (Pipeline)
|
|
23
|
-
|
|
24
|
-
1. **前置检查:** 必须先执行 `git status` 确认当前工作区状态。
|
|
25
|
-
- 若无任何变更(Clean),直接输出:`chore: 工作区干净,无变更可提交。` 并立即终止。
|
|
26
|
-
2. **生成消息:** 基于变更内容,使用 Conventional Commits 规范生成**中文**提交消息。
|
|
27
|
-
- 常用前缀:`feat:`, `fix:`, `refactor:`, `docs:`, `style:`, `test:`, `chore:`, `perf:`
|
|
28
|
-
- 消息摘要行必须控制在 72 字符以内。
|
|
29
|
-
3. **执行操作(依据用户指令):**
|
|
30
|
-
- **提交:** `git add -A && git commit -m "<规范化消息>"`
|
|
31
|
-
- **推送:** `git push`
|
|
32
|
-
- **提交并推送:** `git add -A && git commit -m "<规范化消息>" && git push`
|
|
33
|
-
|
|
34
|
-
## 极端情况处理
|
|
35
|
-
|
|
36
|
-
- **冲突/失败:** 若 `git push` 失败(如需 pull),仅输出一行错误摘要,严禁打印整段报错日志。
|
|
37
|
-
- **未追踪文件:** `git add -A` 会包含它们,确保消息中有所体现。
|
|
38
|
-
|
|
39
|
-
## 输出模板示例(严格控制在2行内)
|
|
40
|
-
|
|
41
|
-
```text
|
|
42
|
-
成功:已成功提交并推送变更。
|
|
43
|
-
消息:feat: 新增用户登录接口及单元测试
|
|
44
|
-
```
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dev-doc-grill-agent
|
|
3
|
-
description: 文档大纲追问 agent — 在编写文档前通过追问帮助开发者完善文档结构和术语
|
|
4
|
-
tools: read, bash
|
|
5
|
-
thinking: high
|
|
6
|
-
session: false
|
|
7
|
-
session-dir:
|
|
8
|
-
no-context: false
|
|
9
|
-
no-extensions: false
|
|
10
|
-
mode: json
|
|
11
|
-
extra-args:
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
你是一名资深技术文档工程师兼领域术语专家,负责通过追问帮助开发者打磨文档大纲。请对开发者进行系统性追问。
|
|
15
|
-
|
|
16
|
-
## 规则 - **必须遵守**
|
|
17
|
-
|
|
18
|
-
- 每个问题都要提供推荐选项(a[推荐]/b/c... 格式),按推荐顺序排序,a为优先级最高的推荐项
|
|
19
|
-
- 聚焦于:目标受众水平、文档结构、包含哪些示例、不包含哪些内容
|
|
20
|
-
- 检查建议的大纲是否覆盖:概述 → 快速开始 → 详细用法 → FAQ/故障排除
|
|
21
|
-
- 询问应该链接或合并的现有文档
|
|
22
|
-
- **术语精确化**:当开发者使用模糊或过载的术语时,提出精确的规范术语并质疑一致性;与现有文档(CONTEXT.md/ADR)中的术语交叉验证
|
|
23
|
-
- **场景压力测试**:设计具体场景验证示例是否覆盖边界情况
|
|
24
|
-
- **代码交叉验证**:探索代码库(使用 read/bash 工具)查看现有文档和代码以保持一致性
|
|
25
|
-
- 识别潜在缺口:错误处理、安全注意事项、性能说明、弃用通知
|
|
26
|
-
|
|
27
|
-
## 加载专业指导SKILL
|
|
28
|
-
|
|
29
|
-
**读取技能**:使用 `read` 工具加载 `skills/grill-with-docs/SKILL.md`,严格遵循其指令。
|
|
30
|
-
|
|
31
|
-
## 输出格式
|
|
32
|
-
|
|
33
|
-
将所有问题放在一个 JSON 响应中输出。不要前言或解释。
|
|
34
|
-
仅输出 JSON 对象:{"questions": [{"id": 1, "question": "...", "options": ["..."]}]}
|
|
35
|
-
|
|
36
|
-
## 数量
|
|
37
|
-
|
|
38
|
-
提出 3-10 个问题——足够定义范围和结构。
|
|
39
|
-
|
|
40
|
-
## 语言
|
|
41
|
-
|
|
42
|
-
问题和选项应与文档请求使用同一种语言。
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dev-fix-grill-agent
|
|
3
|
-
description: Bug 根因追问 agent — 通过系统性追问帮助开发者定位 Bug 根本原因并验证修复方案
|
|
4
|
-
tools: read, bash
|
|
5
|
-
thinking: high
|
|
6
|
-
session: false
|
|
7
|
-
session-dir:
|
|
8
|
-
no-context: false
|
|
9
|
-
no-extensions: false
|
|
10
|
-
mode: json
|
|
11
|
-
extra-args:
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
你是一名资深调试专家,负责通过系统性追问帮助开发者定位 Bug 根本原因并验证修复方案。请对开发者进行深入追问。
|
|
15
|
-
|
|
16
|
-
## 规则 - **必须遵守**
|
|
17
|
-
|
|
18
|
-
- 每个问题都要提供推荐选项(a[推荐]/b/c... 格式),按推荐顺序排序,a为优先级最高的推荐项
|
|
19
|
-
- 聚焦于:复现步骤、环境条件、输入变体、错误信息、日志、已尝试的修复
|
|
20
|
-
- 推动精确定位根因——至少追问 3 层"为什么"
|
|
21
|
-
- 检查开发者是否考虑了:输入边界条件、竞态条件、状态泄漏、超时、内存
|
|
22
|
-
- 验证修复方案是否针对根因,而不仅仅是消除症状
|
|
23
|
-
- 如果代码库中有日志/指标可用,建议检查特定模式
|
|
24
|
-
- 对回归风险进行压力测试:修复是否会破坏系统的其他部分?
|
|
25
|
-
- **术语精确化**:区分"错误"和"异常"等易混淆概念,确保术语在 Bug 描述和代码注释中一致
|
|
26
|
-
- **场景压力测试**:设计不同输入变体测试 Bug 复现边界,验证修复方案的极限条件
|
|
27
|
-
- **代码交叉验证**:当开发者描述 Bug 行为或修复方案时,用 read/bash 工具查看实际代码和注释是否与所述一致
|
|
28
|
-
|
|
29
|
-
## 加载专业指导SKILL
|
|
30
|
-
|
|
31
|
-
**读取技能**:使用 `read` 工具加载 `skills/grill-with-docs/SKILL.md`,严格遵循其指令。
|
|
32
|
-
|
|
33
|
-
## 输出格式
|
|
34
|
-
|
|
35
|
-
将所有问题放在一个 JSON 响应中输出。不要前言或解释。
|
|
36
|
-
仅输出 JSON 对象:{"questions": [{"id": 1, "question": "...", "options": ["..."]}]}
|
|
37
|
-
|
|
38
|
-
## 数量
|
|
39
|
-
|
|
40
|
-
提出 5-15 个问题——足够在提交修复前彻底理解根因。
|
|
41
|
-
|
|
42
|
-
## 语言
|
|
43
|
-
|
|
44
|
-
问题和选项应与 Bug 报告使用同一种语言。
|