Prefer AgentSpec.InstructionsFile when building AGENTS.md so rd_* leader steps no longer fall back to business-tone leader.md. Co-authored-by: Cursor <cursoragent@cursor.com>
216 lines
7.7 KiB
Go
216 lines
7.7 KiB
Go
package squad
|
|
|
|
const rdevDHFAccept = "模板写满;结论先行;追溯表必填;缺项标「待确认」;不编造数据/签字/附件"
|
|
|
|
func rdevSquadAgents(taskKey string) []AgentSpec {
|
|
meta, _ := LookupRDevTask(taskKey)
|
|
agents := []AgentSpec{
|
|
{
|
|
Role: "organizer",
|
|
Name: "材料整理专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"材料事实抽取", "适用性与缺口识别", "字段回填"},
|
|
ForbiddenActions: []string{"严禁编造试验数据", "严禁伪造签字"},
|
|
},
|
|
}
|
|
switch meta.Kind {
|
|
case RDevKindReviewMinutes:
|
|
agents = append(agents,
|
|
AgentSpec{
|
|
Role: "writer",
|
|
Name: "文档撰写专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"按评审记录模板成文", "问题-决议-行动项闭环"},
|
|
},
|
|
rdevLeaderAgent(),
|
|
)
|
|
case RDevKindUploadIndex:
|
|
agents = append(agents,
|
|
AgentSpec{
|
|
Role: "engineer",
|
|
Name: "技术专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"附件索引完整性", "缺失影响分析"},
|
|
},
|
|
AgentSpec{
|
|
Role: "writer",
|
|
Name: "文档撰写专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"按附件清单模板成文", "标明待上传项"},
|
|
},
|
|
rdevLeaderAgent(),
|
|
)
|
|
default:
|
|
agents = append(agents,
|
|
AgentSpec{
|
|
Role: "engineer",
|
|
Name: "技术专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"技术内容与追溯", "设计控制论证"},
|
|
},
|
|
)
|
|
if RDevNeedsRegulatory(taskKey) {
|
|
agents = append(agents, AgentSpec{
|
|
Role: "regulatory",
|
|
Name: "法规专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"法规/标准适用性", "软件与风险管理合规要点"},
|
|
})
|
|
}
|
|
agents = append(agents,
|
|
AgentSpec{
|
|
Role: "writer",
|
|
Name: "文档撰写专员",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
Responsibilities: []string{"按 RD 模板成文", "结论先行与待确认清单"},
|
|
},
|
|
rdevLeaderAgent(),
|
|
)
|
|
}
|
|
return agents
|
|
}
|
|
|
|
func rdevLeaderAgent() AgentSpec {
|
|
return AgentSpec{
|
|
Role: "leader",
|
|
Name: "研发设计控制负责人",
|
|
Model: "claude-3-7-sonnet",
|
|
Tools: []string{"read", "write", "edit"},
|
|
BashPermission: "deny",
|
|
InstructionsFile: "configs/agents/rdev_leader.md",
|
|
Responsibilities: []string{"DHF 完整性终审", "不适用理由审核", "禁止编造检查"},
|
|
ForbiddenActions: []string{"严禁代签", "严禁伪造附件内容"},
|
|
}
|
|
}
|
|
|
|
func rdevWorkflowSteps(taskKey string) []StepSpec {
|
|
meta, ok := LookupRDevTask(taskKey)
|
|
kind := RDevKindDocument
|
|
title := taskKey
|
|
if ok {
|
|
kind = meta.Kind
|
|
title = meta.Title
|
|
}
|
|
|
|
switch kind {
|
|
case RDevKindReviewMinutes:
|
|
return []StepSpec{
|
|
{
|
|
ID: "step_01_organize", Role: "organizer", Title: "整理评审输入与议题",
|
|
SubWorkspace: "tasks/01_organize", Mode: "execute",
|
|
Accept: []string{"汇总上游批准文档要点", "列出待评审议题与缺口", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_02_draft", Role: "writer", Title: "撰写评审记录",
|
|
SubWorkspace: "tasks/02_draft", Mode: "execute",
|
|
Needs: []string{"tasks/01_organize/output.md"},
|
|
Accept: []string{"按模板写满评审记录", "问题-决议-行动项可追溯", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_03_review", Role: "leader", Title: "研发设计控制终审",
|
|
SubWorkspace: "tasks/03_review", Mode: "execute",
|
|
Needs: []string{"tasks/02_draft/output.md"},
|
|
Accept: []string{"完整性与粒度达标", "无编造签字/数据", rdevDHFAccept},
|
|
},
|
|
}
|
|
case RDevKindUploadIndex:
|
|
return []StepSpec{
|
|
{
|
|
ID: "step_01_organize", Role: "organizer", Title: "整理附件材料线索",
|
|
SubWorkspace: "tasks/01_organize", Mode: "execute",
|
|
Accept: []string{"列出已知附件与缺失项", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_02_engineer", Role: "engineer", Title: "完善附件索引与影响分析",
|
|
SubWorkspace: "tasks/02_engineer", Mode: "execute",
|
|
Needs: []string{"tasks/01_organize/output.md"},
|
|
Accept: []string{"索引表完整", "缺失影响已说明", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_03_draft", Role: "writer", Title: "撰写附件清单",
|
|
SubWorkspace: "tasks/03_draft", Mode: "execute",
|
|
Needs: []string{"tasks/02_engineer/output.md"},
|
|
Accept: []string{"按 upload_index 模板成文", "禁止伪造附件正文", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_04_review", Role: "leader", Title: "研发设计控制终审",
|
|
SubWorkspace: "tasks/04_review", Mode: "execute",
|
|
Needs: []string{"tasks/03_draft/output.md"},
|
|
Accept: []string{"索引与待上传结论一致", rdevDHFAccept},
|
|
},
|
|
}
|
|
default:
|
|
return rdevDocumentSteps(taskKey, title)
|
|
}
|
|
}
|
|
|
|
func rdevDocumentSteps(taskKey, title string) []StepSpec {
|
|
steps := []StepSpec{
|
|
{
|
|
ID: "step_01_organize", Role: "organizer", Title: "抽取材料事实并回填",
|
|
SubWorkspace: "tasks/01_organize", Mode: "execute",
|
|
Accept: []string{"facts/gaps/implications 入黑板", "适用性字段回填", rdevDHFAccept},
|
|
},
|
|
{
|
|
ID: "step_02_engineer", Role: "engineer", Title: "技术内容与追溯编制",
|
|
SubWorkspace: "tasks/02_engineer", Mode: "execute",
|
|
Needs: []string{"tasks/01_organize/output.md"},
|
|
Accept: []string{"技术论证完整", "追溯表可填则填", rdevDHFAccept},
|
|
},
|
|
}
|
|
draftNeeds := "tasks/02_engineer/output.md"
|
|
if RDevNeedsRegulatory(taskKey) {
|
|
steps = append(steps, StepSpec{
|
|
ID: "step_03_regulatory", Role: "regulatory", Title: "法规与风险合规要点",
|
|
SubWorkspace: "tasks/03_regulatory", Mode: "execute",
|
|
Needs: []string{"tasks/02_engineer/output.md"},
|
|
Accept: []string{"法规适用性明确", "风险类引用可追溯", rdevDHFAccept},
|
|
})
|
|
draftNeeds = "tasks/03_regulatory/output.md"
|
|
steps = append(steps,
|
|
StepSpec{
|
|
ID: "step_04_draft", Role: "writer", Title: "撰写《" + title + "》",
|
|
SubWorkspace: "tasks/04_draft", Mode: "execute",
|
|
Needs: []string{draftNeeds},
|
|
Accept: []string{"严格按 rd_ 模板成文", "结论先行", rdevDHFAccept},
|
|
},
|
|
StepSpec{
|
|
ID: "step_05_review", Role: "leader", Title: "研发设计控制终审",
|
|
SubWorkspace: "tasks/05_review", Mode: "execute",
|
|
Needs: []string{"tasks/04_draft/output.md"},
|
|
Accept: []string{"DHF 粒度达标", "无编造", rdevDHFAccept},
|
|
},
|
|
)
|
|
return steps
|
|
}
|
|
steps = append(steps,
|
|
StepSpec{
|
|
ID: "step_03_draft", Role: "writer", Title: "撰写《" + title + "》",
|
|
SubWorkspace: "tasks/03_draft", Mode: "execute",
|
|
Needs: []string{draftNeeds},
|
|
Accept: []string{"严格按 rd_ 模板成文", "结论先行", rdevDHFAccept},
|
|
},
|
|
StepSpec{
|
|
ID: "step_04_review", Role: "leader", Title: "研发设计控制终审",
|
|
SubWorkspace: "tasks/04_review", Mode: "execute",
|
|
Needs: []string{"tasks/03_draft/output.md"},
|
|
Accept: []string{"DHF 粒度达标", "无编造", rdevDHFAccept},
|
|
},
|
|
)
|
|
return steps
|
|
}
|